小小儁爺
2026-01-14 b92b0c97bbe23e9c45e29eb53a2baf9885578908
1.甘特图初步研究
已修改2个文件
已添加27个文件
110821 ■■■■■ 文件已修改
src/components/dhtmlxGantt/Gantt-Useful-Info.html 282 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/dhtmlxGantt/README.md 151 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/dhtmlxGantt/bower.json 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/dhtmlxGantt/codebase/dhtmlxgantt.css 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/dhtmlxGantt/codebase/dhtmlxgantt.d.ts 4764 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/dhtmlxGantt/codebase/dhtmlxgantt.js 30964 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/dhtmlxGantt/codebase/dhtmlxgantt.js.map 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/dhtmlxGantt/codebase/skins/dhtmlxgantt_broadway.css 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/dhtmlxGantt/codebase/skins/dhtmlxgantt_contrast_black.css 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/dhtmlxGantt/codebase/skins/dhtmlxgantt_contrast_white.css 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/dhtmlxGantt/codebase/skins/dhtmlxgantt_material.css 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/dhtmlxGantt/codebase/skins/dhtmlxgantt_meadow.css 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/dhtmlxGantt/codebase/skins/dhtmlxgantt_skyblue.css 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/dhtmlxGantt/codebase/skins/dhtmlxgantt_terrace.css 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/dhtmlxGantt/codebase/sources/dhtmlxgantt.css 2027 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/dhtmlxGantt/codebase/sources/dhtmlxgantt.js 54865 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/dhtmlxGantt/codebase/sources/skins/dhtmlxgantt_broadway.css 2136 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/dhtmlxGantt/codebase/sources/skins/dhtmlxgantt_contrast_black.css 2094 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/dhtmlxGantt/codebase/sources/skins/dhtmlxgantt_contrast_white.css 2104 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/dhtmlxGantt/codebase/sources/skins/dhtmlxgantt_material.css 2454 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/dhtmlxGantt/codebase/sources/skins/dhtmlxgantt_meadow.css 2036 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/dhtmlxGantt/codebase/sources/skins/dhtmlxgantt_skyblue.css 2016 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/dhtmlxGantt/codebase/sources/skins/dhtmlxgantt_terrace.css 2027 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/dhtmlxGantt/license.txt 339 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/dhtmlxGantt/package.json 58 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/dhtmlxGantt/whatsnew.md 843 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/permission.js 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/router/index.js 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/gantt/index.vue 1624 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/dhtmlxGantt/Gantt-Useful-Info.html
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,282 @@
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <link rel="preconnect" href="https://fonts.gstatic.com">
    <link href="https://fonts.googleapis.com/css2?family=Roboto:wght@300;400;500;700&display=swap" rel="stylesheet">
    <title>Getting Started with DHTMLX Gantt</title>
    <style>
        :root {
            --dark-color: #5F5F5F;
            --blue-color: #2095F3;
            --light-gray: #F7F7F7;
            --light-color: #828282;
        }
        h1,h2,h3,h4,h5,h6,p,ul,button {
            padding: 0;
            margin: 0;
        }
        body {
            margin: 0;
            padding: 0;
            font-family: 'Roboto', sans-serif;
        }
        code {
            display: block;
        }
        .container {
            max-width: 1280px;
            margin: 0 auto;
            box-sizing: border-box;
            padding: 20px 25px;
            display: flex;
        }
        .col {
            box-sizing: border-box;
            max-width: 545px;
        }
        .col:last-of-type {
            max-width: 100%;
        }
        .title {
            color: var(--dark-color);
            font-size: 16px;
            line-height: 19px;
            font-weight: 500;
        }
        .title--link {
            color: var(--blue-color);
            text-decoration: underline;
        }
        .page-title {
            font-size: 18px;
            line-height: 21px;
        }
        .blue-line {
            position: relative;
        }
        .blue-line:after {
            position: absolute;
            content: '';
            background-color: var(--blue-color);
            height: 4px;
            width: 105px;
            left: 0;
            bottom: -13px;
        }
        .logo {
            display: inline-block;
        }
        .link {
            font-size: 16px;
            line-height: 24px;
            color: var(--blue-color);
            text-decoration: underline;
            font-weight: 300;
        }
        .text-block {
            font-weight: 300;
            font-size: 16px;
            line-height: 24px;
            color: var(--dark-color);
        }
        .code {
            background-color: var(--light-gray);
            color: var(--dark-color);
            font-size: 16px;
            line-height: 24px;
            padding: 5px;
            border: 1px solid #e0e0e0;
            box-sizing: border-box;
        }
        .code a {
            color: var(--dark-color);
        }
        .picture-block {
            text-align: center;
            height: 253px;
            background:url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAnYAAAD9CAYAAAAxvDrLAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAMRZSURBVHja7P0HfFzHee+NO8XXTnyT2PnfN/7fuMi6yWvnOo6T2IntxF0iRapYVhcpFokiRUqkqMYikmIRKfbeey8AAaL3Duxie++76L33xS468Htnzu6Ci+UusNhFWQDz4+f5nPqcM2fO8swXU5750peYmJiYmJiYpkXfvF3/tcfOdD/+nQudP3Lte+xMx9PfPdf5yvfOdS7+znnr8z+9hC//+Ai+9vh5+/OPn7E//9iF7ifI/l/T/a5rsJxkYmJiYmJiYppi/VSBL//Dhc6/o+uPn7f+gMKbyx47a/9JIPsfu0LAkAAghb3HrrQ9zkCPiYmJiYmJiWkS9Y+nW7793bO2J4fB7Aa+TveP2EfMBX2+9n/nfPev3fd//0LXt+j+753u+oX7/m9d7vk+y3UmJiYmJiYmpgkShbHHLrVztWq0KdXVvOrZxDqe/T/cZfgf7vsfu9D1Mq2ho/tpM623/bSZl9XiMTExMTExMTEFIA6+3GrcAm1ipbV87vtpU6sLGEecf6H7idH2f/d8+ze4WrzzHb9ggMfExMTExMTE5Id+fBtfm6omVgp/49n/7TOt/zK8jwEeExMTExMTE5Nv/Z8ztn+hTaTBNLH6akod7346qtYd7rzBJj3fBZVMTExMTExMTExO0XAl4x3FOhFNrJ77v3fOtpADuPPt3xgPVLI3yMTExMTExDTn9fj5nh+EUhNrMP35mJiYmJiYmJjmrP7hVPtPQ7GJ1Z/+fJ77XbDJ+t0xMTExMTExzTl5jlYN1SbWQEKmPHbB/u+seZaJiYmJiYlp1mu0Ua+h2sQaGGzaFjK4Y2JiYmJiYprVUEfnag0mUPB0NbEGBpsM7piYmJiYmJhmqSjUzeQm1sBgk8EdExMTExMT0yzU7GhiDQA2T3f8gr19JiYmJiYmplkhGnh4djWxjh82/+FC74/YL4GJicmrdu3a9afvvffed1avfu+Fd95d+z5Zblq9eu2O1avf/ZzYHrLO2Sqyztkq1753PWzt8P531ry3e/W7jn1r1qwj645j77otuXWnrXnPcc67776/Z/W7ruPvP1yuddq77w9vr13rsb72A7L8gFtfO2L9/T3vrVu/27Xusvff/4Cz9es/fHiMbK/l9n80cn2tY+na//77bttrHddYv/7j3dy+D+g5jqXLPvjgE87o+voPP979wQeexx324ccbdjvOfejzwUefDK9/9NHDbW6dnveRY91hG92WxD7ZOLz+gdu+Tz5xHhu2zdy+h7bZYRs3c8c3bNi0e/jYxs0PjzvP2ehmju0tzm3ncvMWt/1ebLPjvM1k+dC2DS83Dm+72ZZtzmMjt7klsS1bto9cd55H10fYNrrcxi23bXNue9i2bTuHl9ucy88+27Wb297uZts8bPtI2759FzEvy527Rtp2p5H1nZztHnHctU2X7rZr1+e7d+6iS9c2We76YsT2Lm57z2663Dm87Thn1+4vHm7v/mJ4+/M9e3fT9d2793HmWueWX+wb3u/VvjjALb+gS3ruF451l9HtvXsPksWBEfuHjezft+8QMcf6joOnj71/6F70hoOXr9H92w6eP/3+obvR64m9f+Ru9IbDV6/tO3Bkz5b950+vO3wvau3h8PtrjkXfevdY7J6jR8/8008v1fyv0GxiHT9sPnal7XFWgjExMQ1r5cqVf0sg4zABrapFi5bg+T++iIVPP4t585/Ck/OewhNPzMMTT85zLN2N7HvStf/J+dzySbKk9oTH/uGl2zkjzn1y3gi/J53bT85zP2++F9+R/g579B70OvPmPbpveOk6Pu/h/nkj1p96eMy1Pnytp7hzuXOefHh8ntvyof9Tbtsjl651b+fMG2MfZ/O973vS/RhZzp+/wPv5dP9893MXkHMfPeby55bcOa5tx77RbPiaox53s6f83V44cvmU+z66vXD43KfI+lPObW7p3De8PWwOv6dGMe74Auf2Ard1T+OOPT3y+AI/7SkPX9c6sQVk3dOeGraFbvu8n8vZQl/7n3H4LXz6oS3wZ/kMFhKj69ySs6ed208P73c/5toesX/YnyyffsbrOQu92dMex5922NPPPIc/PP8CXn75VSxZsgxr131gX7/jaPaCM8rNM3VWCtd+Fxyy0oyJielLH27YMP/DjzY0vvLKa3jxxZewe/du3Lp1G2KxGHq9AWazBQWWAhQUOMxisQyve5rFdZ6lwOc5wzbGOe73sRBTqVSj3ne0dLlfT65QjHk/b8cc93BsazSakc87yjXGyi/XNca+9qPPyy09rmk0Grl93PEx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') center center no-repeat;
            background-size: contain;
        }
        .technology {
            display: flex;
            justify-content: space-between;
        }
        .technology-col {
            display: flex;
            flex-direction: column;
        }
        .technology-link {
            display: block;
            position: relative;
            font-size: 16px;
            line-height: 24px;
            text-decoration: underline;
            color: var(--blue-color);
            padding-left: 10px;
            font-weight: 300;
        }
        .technology-link:before {
            position: absolute;
            content: '';
            background-color: var(--blue-color);
            width: 5px;
            height: 5px;
            border-radius: 50%;
            left: 0;
            top: 50%;
            transform: translateY(-50%);
        }
        .copyright {
            text-align: right;
            font-size: 14px;
            font-weight: 300;
            line-height: 24px;
            color: var(--light-color);
        }
        .copyright span:first-of-type {
            margin-right: 10px;
        }
        .m-b-25 {
            margin-bottom: 25px;
        }
        .m-b-15 {
            margin-bottom: 15px;
        }
        .m-b-10 {
            margin-bottom: 10px;
        }
        .m-b-5 {
            margin-bottom: 5px;
        }
        .m-t-10 {
            margin-top: 10px;
        }
        .m-t-5 {
            margin-top: 5px;
        }
        .m-r-50 {
            margin-right: 50px;
        }
        @media screen and (max-width: 1000px) {
            .container {
                flex-direction: column;
            }
            .col {
                width: 100%;
                max-width: unset;
            }
            .picture-block img {
                width: 100%;
            }
            .technology {
                flex-direction: column;
            }
            .technology-col {
                text-align: auto;
            }
        }
        @media screen and (min-width: 600px) {
            .technology {
                flex-direction: row;
            }
        }
    </style>
</head>
<body>
    <main class="page">
        <div class="container">
            <div class="col m-r-50">
                <a href="https://dhtmlx.com/?utm_source=trial_html&utm_medium=referral&utm_campaign=gantt" target="_blank" class="logo m-b-10">
                    <svg width="48" height="48" viewBox="0 0 48 48" fill="none" xmlns="http://www.w3.org/2000/svg">
                        <path fill-rule="evenodd" clip-rule="evenodd" d="M42.06 30.6L38.1 23.16L34.14 30.6H28.2L34.8 19.74L28.2 9.60001H34.14L38.1 15.72L42.06 9.60001H48L40.74 19.74L48 30.6H42.06ZM0 33.6V32.4H48V33.6H0ZM27.6 30.6L32.4 23.16V16.8L27.6 9.60001V17.04H21V9.60001H15.6V11.88C16.56 12.66 17.4 13.62 18 14.82C18.78 16.32 19.2 18.06 19.2 20.1C19.2 22.08 18.78 23.82 17.94 25.38C17.28 26.52 16.5 27.48 15.6 28.26V30.6H21V21.78H27.6V30.6ZM18.6 20.1C18.6 22.08 18.18 23.82 17.34 25.38C16.5 26.94 15.42 28.14 14.1 28.92C13.02 29.64 11.82 30.06 10.56 30.3C9.3 30.48 7.92 30.6 6.48 30.6H0V9.60001H6.48C7.92 9.60001 9.3 9.72001 10.62 9.90001C11.88 10.08 13.08 10.56 14.22 11.28C15.6 12.18 16.68 13.38 17.46 14.88C18.18 16.32 18.6 18.12 18.6 20.1ZM10.56 14.28C11.52 14.82 12.24 15.6 12.72 16.56C13.2 17.52 13.44 18.72 13.5 20.04C13.5 21.48 13.26 22.62 12.84 23.58C12.36 24.54 11.7 25.32 10.86 25.86C10.14 26.34 9.35996 26.58 8.57996 26.64C7.73996 26.7 6.77996 26.7 5.57996 26.7H5.45996V13.56H5.57996C6.65996 13.56 7.55996 13.56 8.33996 13.62C9.11996 13.68 9.83996 13.86 10.56 14.28ZM2.4 35.4V36H1.2V37.8H2.4V38.4H0.6V35.4H2.4ZM2.4 37.8V36H3V37.8H2.4ZM11.4 36.6H10.2V35.4H9.6V38.4H10.2V37.2H11.4V38.4H12V35.4H11.4V36.6ZM21 35.4V36H19.8V38.4H19.2V36H18V35.4H21ZM28.2 36H27.6V35.4H27V38.4H27.6V36.6H28.2V37.2H28.8V36.6H29.4V38.4H30V35.4H29.4V36H28.8V36.6H28.2V36ZM36 35.4H36.6V37.8H38.4V38.4H36V35.4ZM45.6 36H45V35.4H44.4V36H45V36.6H45.6V37.2H45V37.8H44.4V38.4H45V37.8H45.6V37.2L46.2 37.2V37.8H46.8V38.4H47.4V37.8H46.8V37.2H46.2L46.2 36.6H46.8V36H47.4V35.4H46.8V36H46.2V36.6H45.6V36Z" fill="#2095F3"/>
                    </svg>
                </a>
                <h1 class="page-title title blue-line m-b-25">Getting Started with DHTMLX Gantt</h1>
                <p class="text-block m-b-15">
                    Any web-based project management application can be complemented with a full-fledged Gantt chart built with DHTMLX Gantt. We’ve put together links to useful materials devoted to initializing, configuring, customizing, and using DHTMLX Gantt with popular technologies. Thus, you will be able to make the most of DHTMLX in the shortest possible time.
                </p>
                <h2 class="title m-b-10">Samples</h2>
                <p class="text-block m-b-10">
                    This package contains more than 100 code samples, which demonstrate different configurations of DHTMLX Gantt. In order to explore them, you can run a built-in app (you'll need Node.js for this):
                    <code class="code m-b-10 m-t-10">
                        npm install <br>
                        npm run start
                    </code>
                    And open <span class="code"><a href="http://localhost:9200" target="_blank">http://localhost:9200</a></span> in your browser.
                </p>
                <p class="text-block m-b-10">
                    Or you can find individual HTML <span class="code">samples</span> in the samples folder of the package.
                </p>
                <a class="title title--link m-b-10" target="_blank" href="https://docs.dhtmlx.com/gantt/api__refs__gantt.html?utm_source=trial_html&utm_medium=referral&utm_campaign=gantt">
                    API Reference
                </a>
                <p class="text-block m-b-10">
                    Examine methods, events, properties, and templates
                </p>
                <a class="title title--link m-b-10" target="_blank" href="https://docs.dhtmlx.com/gantt/desktop__guides.html?utm_source=trial_html&utm_medium=referral&utm_campaign=gantt">
                    Guides
                </a>
                <p class="text-block m-b-10">
                    Learn how to configure each and every Gantt element
                </p>
                <a class="title title--link m-b-10" target="_blank" href="https://docs.dhtmlx.com/gantt/desktop__video_guides.html?utm_source=trial_html&utm_medium=referral&utm_campaign=gantt">
                    Video Guides
                </a>
                <p class="text-block m-b-10">
                    Watch a series of video guides about Gantt configuration and integration
                </p>
            </div>
            <div class="col">
                <div class="picture-block m-b-15"></div>
                    <div class="technology m-b-10">
                        <div class="technology-col">
                            <h2 class="title m-b-5 ">Client-Side Integrations</h2>
                            <a href="https://docs.dhtmlx.com/gantt/desktop__initializing_gantt_chart.html?utm_source=trial_html&utm_medium=referral&utm_campaign=gantt" target="_blank" class="technology-link">JavaScript/HTML5</a>
                            <a href="https://dhtmlx.com/blog/create-react-gantt-chart-component-dhtmlxgantt/?utm_source=trial_html&utm_medium=referral&utm_campaign=gantt" target="_blank" class="technology-link">React</a>
                            <a href="https://dhtmlx.com/blog/dhtmlx-gantt-chart-usage-angularjs-2-framework/?utm_source=trial_html&utm_medium=referral&utm_campaign=gantt" target="_blank" class="technology-link">Angular</a>
                            <a href="https://dhtmlx.com/blog/use-dhtmlxgantt-vue-js-framework-demo/" class="technology-link" target="_blank">Vue.js</a>
                        </div>
                        <div class="technology-col">
                            <h2 class="title m-b-5">Server-Side Integrations</h2>
                            <a href="https://docs.dhtmlx.com/gantt/desktop__howtostart_dotnet_core.html?utm_source=trial_html&utm_medium=referral&utm_campaign=gantt" class="technology-link" target="_blank">ASP.Net Core</a>
                            <a href="https://docs.dhtmlx.com/gantt/desktop__howtostart_dotnet.html?utm_source=trial_html&utm_medium=referral&utm_campaign=gantt" class="technology-link" target="_blank">ASP.Net MVC</a>
                            <a href="https://docs.dhtmlx.com/gantt/desktop__howtostart_nodejs.html?utm_source=trial_html&utm_medium=referral&utm_campaign=gantt" class="technology-link" target="_blank">Node.js</a>
                            <a href="https://docs.dhtmlx.com/gantt/desktop__howtostart_php_laravel.html?utm_source=trial_html&utm_medium=referral&utm_campaign=gantt" class="technology-link" target="_blank">PHP Laravel</a>
                            <a href="https://docs.dhtmlx.com/gantt/desktop__howtostart_php.html?utm_source=trial_html&utm_medium=referral&utm_campaign=gantt" class="technology-link" target="_blank">PHP Slim 3</a>
                            <a href="https://docs.dhtmlx.com/gantt/desktop__howtostart_php_slim4.html?utm_source=trial_html&utm_medium=referral&utm_campaign=gantt" class="technology-link" target="_blank">PHP Slim 4</a>
                            <a href="https://docs.dhtmlx.com/gantt/desktop__howtostart_ruby.html?utm_source=trial_html&utm_medium=referral&utm_campaign=gantt" class="technology-link" target="_blank">Ruby on Rails</a>
                        </div>
                        <div class="technology-col">
                            <h2 class="title m-b-5">Integration with Salesforce</h2>
                            <p class="text-block"><span class="subtitle">Lightning Aura Framework:</span>
                                <a href="https://files.dhtmlx.com/30d/1ceb430172c26291dc773c038da796bc/dhtmlxGantt-for-Salesforce2.pdf" class="technology-link m-t-5" target="_blank">Short Guide</a>
                                <a href="https://files.dhtmlx.com/30d/006613a641ae5a8293ee4082b5aa0056/dhtmlxGantt_for_Salesforce_how_to_start_CRUD.pdf" class="technology-link m-b-5" target="_blank">How to Start CRUD</a>
                            </p>
                            <p class="text-block">
                                <span class="subtitle">Lightning Web Components:</span>
                                <a href="https://www.youtube.com/watch?v=cCvULTQxPfg" class="technology-link m-t-5" target="_blank">Video Guide</a>
                                <a href="https://github.com/DHTMLX/salesforce-gantt-demo" class="technology-link" target="_blank">GitHub</a>
                            </p>
                        </div>
                    </div>
                    <a class="title title--link m-b-10" target="_blank" href="https://docs.dhtmlx.com/gantt/faq.html?utm_source=trial_html&utm_medium=referral&utm_campaign=gantt" target="_blank">
                        FAQ
                    </a>
                    <p class="text-block m-b-10">
                        Find answers to frequently asked technical questions
                    </p>
                    <p class="text-block m-b-10">
                        If you decide to switch to a commercial version of DHTMLX with regular updates and timely customer support, learn more on our <a href="https://dhtmlx.com/docs/products/licenses.shtml?utm_source=trial_html&utm_medium=referral&utm_campaign=gantt" class="link" target="_blank">licensing and pricing page.</a>
                    </p>
                    <p class="text-block m-b-10">
                        If you don’t find the necessary information following the links below, please contact our technical support team via email: <a href="mailto:evaluation.support@dhtmlx.com" class="link">evaluation.support@dhtmlx.com</a>
                    </p>
                    <p class="copyright"><span>© XB Software Ltd.</span><span>All rights reserved</span></p>
                </div>
            </div>
        </main>
    </body>
    </html>
src/components/dhtmlxGantt/README.md
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,151 @@
# dhtmlxGantt #
[![dhtmlx.com](https://img.shields.io/badge/made%20by-DHTMLX-blue)](https://dhtmlx.com/)
[![npm: v.8.0.6](https://img.shields.io/badge/npm-v.8.0.6-blue.svg)](https://www.npmjs.com/package/dhtmlx-gantt)
[![License: GPL v2](https://img.shields.io/badge/license-GPL%20v2-blue.svg)](https://www.gnu.org/licenses/old-licenses/gpl-2.0.html)
[Getting started](#getting-started) | [Features](#features) | [License](#license) | [Useful links](#links) | [Follow us](#followus)
[DHTMLX Gantt](https://dhtmlx.com/docs/products/dhtmlxGantt) is an open source JavaScript Gantt chart library that helps you illustrate and manage a project schedule in a nice-looking diagram.
<a href="https://dhtmlx.com/docs/products/dhtmlxGantt/">
        <img src="https://github.com/plazarev/media/blob/master/opensource-gantt-javascript.png">
</a>
It can show the dependencies between tasks as lines and allows you to set up different relationships between tasks (finish-to-start, start-to-start, finish-to-finish, start-to-finish). The Standard edition also inludes intuituve drag-n-drop interface and smart rendering which considerably boost performance while working with a large amount of tasks.
DHTMLX Gantt provides a flexible API and a large number of event handlers, which gives you the freedom to customize it for your needs. Moreover, the library comes with a comprehensive documentation and step-by-step video tutorials thus simplifying learning.
<a name="getting-started"></a>
## Getting started ##
Add files:
~~~html
<script src="dhtmlxgantt.js" ></script>
<link rel="stylesheet" href="dhtmlxgantt.css" type="text/css">
~~~
Add markup:
~~~html
<div id="gantt_here" style='width:100%; height:100vh;'></div>
~~~
And initialize:
~~~js
gantt.config.date_format = "%Y-%m-%d %H:%i";
gantt.init("gantt_here");
gantt.parse({
  data: [
    {id: 1, text: "Project #1", start_date: null, duration: null, parent:0, progress: 0, open: true},
    {id: 2, text: "Task #1", start_date: "2019-08-01 00:00", duration:5, parent:1, progress: 1},
    {id: 3, text: "Task #2", start_date: "2019-08-06 00:00", duration:2, parent:1, progress: 0.5},
    {id: 4, text: "Task #3", start_date: null, duration: null, parent:1, progress: 0.8, open: true},
    {id: 5, text: "Task #3.1", start_date: "2019-08-09 00:00", duration:2, parent:4, progress: 0.2},
    {id: 6, text: "Task #3.2", start_date: "2019-08-11 00:00", duration:1, parent:4, progress: 0}
  ],
  links:[
    {id:1, source:2, target:3, type:"0"},
    {id:2, source:3, target:4, type:"0"},
    {id:3, source:5, target:6, type:"0"}
  ]
});
~~~
==> [Check the live demo](https://snippet.dhtmlx.com/a69d7378a)
### Complete guides ###
- [Vue.js](https://dhtmlx.com/blog/use-dhtmlxgantt-vue-js-framework-demo/)
- [Angular](https://dhtmlx.com/blog/dhtmlx-gantt-chart-usage-angularjs-2-framework/)
- [React](https://dhtmlx.com/blog/create-react-gantt-chart-component-dhtmlxgantt/)
- [Node](https://docs.dhtmlx.com/gantt/desktop__howtostart_nodejs.html)
- ASP.NET
  - [ASP.NET MVC 5](https://docs.dhtmlx.com/gantt/desktop__howtostart_dotnet.html)
  - [ASP.NET Core](https://docs.dhtmlx.com/gantt/desktop__howtostart_dotnet_core.html)
- PHP
  - [Laravel](https://docs.dhtmlx.com/gantt/desktop__howtostart_php_laravel.html)
  - [Slim framework](https://docs.dhtmlx.com/gantt/desktop__howtostart_php_laravel.html)
- [Ruby on Rails](https://docs.dhtmlx.com/gantt/desktop__howtostart_ruby.html)
- [Python](https://docs.dhtmlx.com/gantt/desktop__howtostart_python.html)
- [Meteor](https://dhtmlx.com/blog/using-dhtmlx-gantt-chart-meteorjs-framework/)
#### All tutorials ####
[https://docs.dhtmlx.com/gantt/desktop__howtostart_guides.html](https://docs.dhtmlx.com/gantt/desktop__howtostart_guides.html)
#### Video guides ####
[https://www.youtube.com/user/dhtmlx/videos](https://www.youtube.com/user/dhtmlx/videos)
<a name="features"></a>
## Features of the Standard Edition ##
- 4 types of tasks linking: finish-to-start, start-to-start, finish-to-finish, start-to-finish
- dragging and dropping multiple tasks horizontally
- multi-task selection
<img src="https://github.com/plazarev/media/blob/master/drag-and-drop.gif" alt= "multitask-drag-n-drop" height="350">
- backward planning
- tasks filtering
- smart rendering
- inline editing
<img src="https://github.com/plazarev/media/blob/master/inline-editing.gif" alt= "inline-editing" height="350">
- managing editability/readonly modes of individual tasks
- tooltips
- undo/redo functionality
- configurable columns in the grid
- customizable time scale and task edit form
- progress percent coloring for tasks
- 7 different skins
![gantt-material](https://github.com/plazarev/media/blob/master/gantt-chart-material.png)
- online export to PDF, PNG, Excel, iCal, and MS Project
- cross-browser compatibility
- 32 locales
- keyboard navigation
- accessibility
Resource management, critical path calculation, auto scheduling, and other enhanced features are available with the PRO edition. You can see the full list of features and compare the two DHTMLX Gantt editions [in the documentation](https://docs.dhtmlx.com/gantt/desktop__editions_comparison.html).
<a name="license"></a>
## License ##
dhtmlxGantt v.8.0.6 Standard
This version of dhtmlxGantt is distributed under GPL 2.0 license and can be legally used in GPL projects.
To use dhtmlxGantt in non-GPL projects (and get Pro version of the product), please obtain Individual, Commercial, Enterprise or Ultimate license on our site https://dhtmlx.com/docs/products/dhtmlxGantt/#licensing or contact us at info@dhtmlx.com
(c) XB Software
<a name="links"></a>
## Useful links
- [DHTMLX Gantt product page](https://dhtmlx.com/docs/products/dhtmlxGantt/)
- [Official documentation](https://docs.dhtmlx.com/gantt/)
- [Online samples](https://docs.dhtmlx.com/gantt/samples/)
- [Video tutorials](https://www.youtube.com/watch?v=cCvULTQxPfg&list=PLKS_XdyIGP4MEW6yvvQUZT8vJKHVOq2S0)
- [Export services](https://dhtmlx.com/docs/products/dhtmlxGantt/export.shtml)
- [List of available integrations](https://dhtmlx.com/docs/products/integrations/)
- [Support forum](https://forum.dhtmlx.com/c/gantt)
<a name="followus"></a>
## Follow us ##
Star our GitHub repo :star:
Check our [roadmap](https://trello.com/b/fhOySHPj/gantt-roadmap) for future updates :wrench:
Read us on [Medium](https://medium.com/@dhtmlx) :newspaper:
Follow us on [Twitter](https://twitter.com/dhtmlx) :bird:
Like our page on [Facebook](https://www.facebook.com/dhtmlx/) :thumbsup:
src/components/dhtmlxGantt/bower.json
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,22 @@
{
  "name": "gantt",
  "version": "8.0.6",
  "homepage": "https://dhtmlx.com/docs/products/dhtmlxGantt/",
  "description": "An open source JavaScript Gantt chart that helps you illustrate a project schedule in a nice-looking chart.",
  "main": [
    "codebase/dhtmlxgantt.js",
    "codebase/dhtmlxgantt.css"
  ],
  "keywords": [
    "gantt",
    "chart",
    "gantt chart",
    "calendar",
    "scheduler",
    "dhtmlx",
    "dhtmlxgantt",
    "timeline",
    "browser"
  ],
  "license": "GPL-2.0"
}
src/components/dhtmlxGantt/codebase/dhtmlxgantt.css
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1 @@
.gridHoverStyle,.gridSelection,.timelineSelection{background-color:#fff3a1}.gantt_grid_scale .gantt_grid_head_cell{color:#a6a6a6;border-top:none!important;border-right:none!important}.gantt_grid_data .gantt_cell{border-right:none;color:#454545}.gantt_task_link .gantt_link_arrow_right{border-width:6px;margin-top:-3px}.gantt_task_link .gantt_link_arrow_left{border-width:6px;margin-left:-6px;margin-top:-3px}.gantt_task_link .gantt_link_arrow_down,.gantt_task_link .gantt_link_arrow_up{border-width:6px}.gantt_task_line .gantt_task_progress_drag{bottom:-4px;height:10px;margin-left:-8px;width:16px}.chartHeaderBg{background-color:#fff}.gantt_task .gantt_task_scale .gantt_scale_cell{color:#a6a6a6;border-right:1px solid #ebebeb}.gantt_row.gantt_project,.gantt_row.odd.gantt_project{background-color:#edffef}.gantt_task_row.gantt_project,.gantt_task_row.odd.gantt_project{background-color:#f5fff6}.gantt_task_line.gantt_project{background-color:#65c16f;border:1px solid #3c9445}.gantt_task_line.gantt_project .gantt_task_progress{background-color:#46ad51}.buttonBg{background:#fff}.gantt_cal_light .gantt_btn_set{margin:5px 10px}.gantt_btn_set.gantt_cancel_btn_set{background:#fff;color:#454545;border:1px solid #cecece}.gantt_btn_set.gantt_save_btn_set{background:#3db9d3;text-shadow:0 -1px 0 #248a9f;color:#fff}.gantt_btn_set.gantt_delete_btn_set{text-shadow:0 -1px 0 #6f6f6f;background:#ec8e00;text-shadow:0 -1px 0 #a60;color:#fff}.gantt_cal_light_wide{padding-left:0!important;padding-right:0!important}.gantt_cal_light_wide .gantt_cal_larea{border-left:none!important;border-right:none!important}.gantt_popup_button.gantt_ok_button{background:#3db9d3;text-shadow:0 -1px 0 #248a9f;color:#fff;font-weight:700;border-width:0}.gantt_popup_button.gantt_cancel_button{font-weight:700;color:#454544}.gantt_popup_title{background-color:#fff}.gantt_popup_shadow{box-shadow:3px 3px 3px rgba(0,0,0,.07)}.gantt_qi_big_icon.icon_edit{color:#454545;background:#fff}.gantt_qi_big_icon.icon_delete{text-shadow:0 -1px 0 #a60;background:#ec8e00;color:#fff;border-width:0}.gantt_tooltip{box-shadow:3px 3px 3px rgba(0,0,0,.07);border-left:1px solid rgba(0,0,0,.07);border-top:1px solid rgba(0,0,0,.07);font-size:8pt;color:#454545}.gantt_container,.gantt_tooltip{background-color:#fff;font-family:Arial}.gantt_container{font-size:13px;border:1px solid #cecece;position:relative;white-space:nowrap;overflow-x:hidden;overflow-y:hidden}.gantt_touch_active{overscroll-behavior:none}.gantt_task_scroll{overflow-x:scroll}.gantt_grid,.gantt_task{position:relative;overflow-x:hidden;overflow-y:hidden;display:inline-block;vertical-align:top}.gantt_grid_scale,.gantt_task_scale{color:#6b6b6b;font-size:12px;border-bottom:1px solid #cecece;box-sizing:border-box}.gantt_grid_scale,.gantt_task_scale,.gantt_task_vscroll{background-color:#fff}.gantt_scale_line{box-sizing:border-box;-moz-box-sizing:border-box;border-top:1px solid #cecece}.gantt_scale_line:first-child{border-top:none}.gantt_grid_head_cell{display:inline-block;vertical-align:top;border-right:1px solid #cecece;text-align:center;position:relative;cursor:default;height:100%;box-sizing:border-box;-moz-box-sizing:border-box;line-height:33px;-moz-user-select:-moz-none;-webkit-user-select:none;user-select:none;overflow:hidden}.gantt_scale_line{clear:both}.gantt_grid_data{width:100%;overflow:hidden;position:relative}.gantt_row{position:relative;-webkit-user-select:none;-moz-user-select:none;-moz-user-select:-moz-none}.gantt_add,.gantt_grid_head_add{width:100%;height:100%;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoV2luZG93cykiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6NTQ3MjMyMENDNkI0MTFFMjk4MTI5QTg3MDhFNDVDQTkiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6NTQ3MjMyMERDNkI0MTFFMjk4MTI5QTg3MDhFNDVDQTkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo1NDcyMzIwQUM2QjQxMUUyOTgxMjlBODcwOEU0NUNBOSIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDo1NDcyMzIwQkM2QjQxMUUyOTgxMjlBODcwOEU0NUNBOSIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PshZT8UAAABbSURBVHjaYrTdeZmBEsCER+4wEP+H4sPkGGCDg020ARR7gb4GIAcYDKMDdPnDyAbYkGG5DVW9cIQMvUdBBAuUY4vDz8iAcZinA2zgCHqAYQMseAywJcYFAAEGAM+UFGuohFczAAAAAElFTkSuQmCC);background-position:50%;background-repeat:no-repeat;cursor:pointer;position:relative;-moz-opacity:.3;opacity:.3}.gantt_grid_head_cell.gantt_grid_head_add{-moz-opacity:.6;opacity:.6;top:0}.gantt_grid_head_cell.gantt_grid_head_add:hover{-moz-opacity:1;opacity:1}.gantt_grid_data .gantt_row.odd:hover,.gantt_grid_data .gantt_row:hover{background-color:#fff3a1}.gantt_grid_data .gantt_row.odd:hover .gantt_add,.gantt_grid_data .gantt_row:hover .gantt_add{-moz-opacity:1;opacity:1}.gantt_row,.gantt_task_row{border-bottom:1px solid #ebebeb;background-color:#fff}.gantt_row.odd,.gantt_task_row.odd{background-color:#fff}.gantt_cell,.gantt_grid_head_cell,.gantt_row,.gantt_scale_cell,.gantt_task_cell,.gantt_task_row{box-sizing:border-box;-moz-box-sizing:border-box}.gantt_grid_head_cell,.gantt_scale_cell{line-height:inherit}.gantt_grid_scale .gantt_grid_column_resize_wrap{cursor:col-resize;position:absolute;width:13px;margin-left:-7px}.gantt_grid_column_resize_wrap .gantt_grid_column_resize{background-color:#cecece;height:100%;width:1px;margin:0 auto}.gantt_task_grid_row_resize_wrap{cursor:row-resize;position:absolute;height:13px;margin-top:-7px;left:0;width:100%}.gantt_task_grid_row_resize_wrap .gantt_task_grid_row_resize{background-color:#ebebeb;top:6px;height:1px;width:100%;margin:0 auto;position:relative}.gantt_drag_marker{pointer-events:none}.gantt_drag_marker.gantt_grid_resize_area,.gantt_drag_marker.gantt_row_grid_resize_area{background-color:hsla(0,0%,91%,.5);height:100%;width:100%;box-sizing:border-box}.gantt_drag_marker.gantt_grid_resize_area{border-left:1px solid #cecece;border-right:1px solid #cecece}.gantt_drag_marker.gantt_row_grid_resize_area{border-top:1px solid #cecece;border-bottom:1px solid #cecece;pointer-events:none}.gantt_row{display:flex}.gantt_row>div{flex-shrink:0;flex-grow:0}.gantt_cell{vertical-align:top;border-right:1px solid #ebebeb;padding-left:6px;padding-right:6px;height:100%;overflow:hidden;white-space:nowrap;font-size:13px}.gantt_cell_tree{display:flex;flex-wrap:nowrap}.gantt_grid_data .gantt_last_cell,.gantt_grid_scale .gantt_last_cell,.gantt_task .gantt_task_scale .gantt_scale_cell.gantt_last_cell,.gantt_task_bg .gantt_last_cell{border-right-width:0}.gantt_task .gantt_task_scale .gantt_scale_cell.gantt_last_cell{border-right-width:1px}.gantt_task_bg{overflow:hidden}.gantt_scale_cell{display:inline-block;white-space:nowrap;overflow:hidden;border-right:1px solid #cecece;text-align:center;height:100%}.gantt_task_cell{display:inline-block;height:100%;border-right:1px solid #ebebeb}.gantt_layout_cell.gantt_ver_scroll{width:0;background-color:transparent;height:1px;overflow-x:hidden;overflow-y:scroll;position:absolute;right:0;z-index:1}.gantt_ver_scroll>div{width:1px;height:1px}.gantt_hor_scroll{height:0;background-color:transparent;width:100%;clear:both;overflow-x:scroll;overflow-y:hidden}.gantt_layout_cell .gantt_hor_scroll{position:absolute}.gantt_hor_scroll>div{width:5000px;height:1px}.gantt_tree_icon,.gantt_tree_indent{flex-grow:0;flex-shrink:0}.gantt_tree_indent{width:15px;height:100%}.gantt_tree_content,.gantt_tree_icon{vertical-align:top}.gantt_tree_icon{width:28px;height:100%;background-repeat:no-repeat;background-position:50%}.gantt_tree_content{height:100%;white-space:nowrap;min-width:0}.gantt_tree_icon.gantt_open{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAYAAABWzo5XAAAArklEQVQ4T2NkoBJgpJI5DEPAoFOnTv0/c+YMQR+bmJgwmJmZwX2E4bVp06b9j4yMZODg4MBp2I8fPxiWL1/OkJWVNUAGcXJyMnz//h3uQrJdRLFBIAPQAchlJLsIFuCMjIwM////B5sJMoRkg2CuIdtrQcHBDOxsbHBfCQgIMHz48AHO//nrF8O6tWsJR7+7uzsDIxMTznT0/98/hp07d+I3iGopm2DewKFg8OV+AJWkfRMrTobLAAAAAElFTkSuQmCC);width:18px;cursor:pointer}.gantt_tree_icon.gantt_close{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAYAAABWzo5XAAAAkUlEQVQ4T2NkoBJgpJI5DEPAoFOnTv0/c+YMQR+bmJgwmJmZwX2E4bVp06b9j4yMZODg4MBp2I8fPxiWL1/OkJWVNeIN4uTkxAin79+/M5AcRtgCHGQIyQbhijaiDQoKDmZgZ2PDGf0/f/1iWLd2LeHod3d3Z2BkYsJp0P9//xh27tyJ3yCqpWyCeQOHgsGX+wEZpW4T5LCxKwAAAABJRU5ErkJggg==);width:18px;cursor:pointer}.gantt_tree_icon.gantt_blank{width:18px}.gantt_tree_icon.gantt_folder_open{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAYAAABWzo5XAAAAs0lEQVQ4T62T0Q2EIBBEpQlzuaaMsQoqooqLsSljbMLLmMxmUXBR4U+Qt7Mzi2sqLVeJ00SgEMKWAnvvzYLyAyHfT5sU2fXDJSwCAXK8MI0/UTkva7IIFJsg3NSwnKdFoKtAWOQ1CN7CEqeTotE5L7QyJhmBcklZM4ZgTiAr3iOU3kD93ppO5SkMjB1EeXdBWoSkRql3YeIRe+cGvktS056JR9wsmeBUkujCfNXWCPC8GugPqn5ii/hV+FoAAAAASUVORK5CYII=)}.gantt_tree_icon.gantt_folder_closed{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAYAAABWzo5XAAAAfElEQVQ4T2NkoBJgpJI5DCgGTZ8+/T82gzMzMwlaCFcAM0RKQgyrI/0Dg/EahmIQyBB0DRvXr4W78tmLV1gtAbmYoEEgnciG4QpTogzCFyEwSyg2CBS2oCAZNQh3cA+hMAJ5AlcKxuVBlOgnNgVjMwyUrQjmamKLGaoZBAAOTFyLnFFW4wAAAABJRU5ErkJggg==)}.gantt_tree_icon.gantt_file{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAYAAABWzo5XAAAAeElEQVQ4T2NkoBJgRDZn+vTp/wmZm5mZiaIHph7DICkJMUJmMfgHBmMYhtUgbAo3rl+L4lp0NUQbBPI2umuRDaPIIFAYwAyjv0HoMQALM5JdhG4QLMxGDcKdyIdoGIE89OzFK4KZF5Rl8EY/QROQFGA1iBQD0NUCAJVjcxO0naAQAAAAAElFTkSuQmCC)}.gantt_grid_head_cell .gantt_sort{position:absolute;right:5px;top:8px;width:7px;height:13px;background-repeat:no-repeat;background-position:50%}.gantt_grid_head_cell .gantt_sort.gantt_asc{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAcAAAANCAYAAABlyXS1AAAARUlEQVR4nGNgQAKGxib/GbABkIS7b8B/DAUwCRiGK0CXwFBAb1DfP/U/LszwHwi2X7qFgUEArBtdAVwCBmAKMCSQFSDzAWXXaOHsXeqkAAAAAElFTkSuQmCC)}.gantt_grid_head_cell .gantt_sort.gantt_desc{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAcAAAANCAYAAABlyXS1AAAARUlEQVR42mNgQAL1/VP/M2ADIIntF2/9x1AAlrh0C47hCmA60DFYwX88gIFGwNDY5D8uDFbg7hvwHx2jmIBTAlkB0e4BAEjlaNtBWJPnAAAAAElFTkSuQmCC)}.gantt_inserted,.gantt_updated{font-weight:700}.gantt_deleted{text-decoration:line-through}.gantt_invalid{background-color:#ffe0e0}.gantt_error{color:red}.gantt_status{right:1px;padding:5px 10px;background:hsla(0,0%,61%,.1);position:absolute;top:1px;transition:opacity .2s;opacity:0}.gantt_status.gantt_status_visible{opacity:1}#gantt_ajax_dots span{transition:opacity .2s;background-repeat:no-repeat;opacity:0}#gantt_ajax_dots span.gantt_dot_visible{opacity:1}.gantt_column_drag_marker{border:1px solid #cecece;opacity:.8;pointer-events:none}.gantt_grid_head_cell_dragged{border:1px solid #cecece;opacity:.3}.gantt_grid_target_marker{position:absolute;top:0;width:2px;height:100%;background-color:#ffa011;transform:translateX(-1px)}.gantt_grid_target_marker:after,.gantt_grid_target_marker:before{display:block;content:"";position:absolute;left:-5px;width:0;height:0;border:6px solid transparent}.gantt_grid_target_marker:before{border-top-color:#ffa011}.gantt_grid_target_marker:after{bottom:0;border-bottom-color:#ffa011}.gantt_message_area{position:fixed;right:5px;width:250px;z-index:1000}.gantt-info{min-width:120px;padding:4px 4px 4px 20px;font-family:Arial;z-index:10000;margin:5px;margin-bottom:10px;transition:all .5s ease}.gantt-info.hidden{height:0;padding:0;border-width:0;margin:0;overflow:hidden}.gantt_modal_box{overflow:hidden;display:inline-block;min-width:250px;width:250px;text-align:center;position:fixed;z-index:20000;box-shadow:3px 3px 3px rgba(0,0,0,.07);font-family:Arial;border-radius:6px;border:1px solid #cecece;background:#fff}.gantt_popup_title{border-top-left-radius:6px;border-top-right-radius:6px;border-width:0}.gantt_button,.gantt_popup_button{border:1px solid #cecece;height:30px;line-height:30px;display:inline-block;margin:0 5px;border-radius:4px;background:#fff}.gantt-info,.gantt_button,.gantt_popup_button{user-select:none;-webkit-user-select:none;-moz-user-select:-moz-none;cursor:pointer}.gantt_popup_text{overflow:hidden}.gantt_popup_controls{border-radius:6px;padding:10px}.gantt_popup_button{min-width:100px}div.dhx_modal_cover{background-color:#000;cursor:default;filter:progid:DXImageTransform.Microsoft.Alpha(opacity=20);opacity:.2;position:fixed;z-index:19999;left:0;top:0;width:100%;height:100%;border:none;zoom:1}.gantt-info img,.gantt_modal_box img{float:left;margin-right:20px}.gantt-alert-error,.gantt-confirm-error{border:1px solid red}.gantt_button input,.gantt_popup_button div{border-radius:4px;font-size:14px;box-sizing:content-box;padding:0;margin:0;vertical-align:top}.gantt_popup_title{border-bottom:1px solid #cecece;height:40px;line-height:40px;font-size:20px}.gantt_popup_text{margin:15px 15px 5px;font-size:14px;color:#000;min-height:30px;border-radius:6px}.gantt-error,.gantt-info{font-size:14px;color:#000;box-shadow:3px 3px 3px rgba(0,0,0,.07);padding:0;background-color:#fff;border-radius:3px;border:1px solid #fff}.gantt-info div{padding:5px 10px;background-color:#fff;border-radius:3px;border:1px solid #cecece}.gantt-error{background-color:#d81b1b;border:1px solid #ff3c3c}.gantt-error div{background-color:#d81b1b;border:1px solid #940000;color:#fff}.gantt-warning{background-color:#ff9000;border:1px solid #ffa633}.gantt-warning div{background-color:#ff9000;border:1px solid #b36500;color:#fff}.gantt_data_area div,.gantt_grid div{-ms-touch-action:none;-webkit-tap-highlight-color:rgba(0,0,0,0)}.gantt_data_area{position:relative;overflow-x:hidden;overflow-y:hidden;-moz-user-select:-moz-none;-webkit-user-select:none;user-select:none}.gantt_links_area{position:absolute;left:0;top:0}.gantt_side_content,.gantt_task_content,.gantt_task_progress{line-height:inherit;overflow:hidden;height:100%}.gantt_task_content{font-size:12px;color:#fff;width:100%;top:0;cursor:pointer;position:absolute;white-space:nowrap;text-align:center}.gantt_task_progress{text-align:center;z-index:0;background:#299cb4}.gantt_task_progress_wrapper{border-radius:inherit;position:relative;width:100%;height:100%;overflow:hidden}.gantt_task_line{border-radius:2px;position:absolute;box-sizing:border-box;background-color:#3db9d3;border:1px solid #2898b0;-webkit-user-select:none;-moz-user-select:none;-moz-user-select:-moz-none}.gantt_task_line.gantt_drag_move div{cursor:move}.gantt_touch_move,.gantt_touch_progress .gantt_touch_resize{transform:scale(1.02,1.1);transform-origin:50%}.gantt_touch_progress .gantt_task_progress_drag,.gantt_touch_resize .gantt_task_drag{transform:scaleY(1.3);transform-origin:50%}.gantt_side_content{position:absolute;white-space:nowrap;color:#6e6e6e;top:0;font-size:11px}.gantt_side_content.gantt_left{right:100%;padding-right:20px}.gantt_side_content.gantt_right{left:100%;padding-left:20px}.gantt_side_content.gantt_link_crossing{bottom:8.75px;top:auto}.gantt_link_arrow,.gantt_task_link .gantt_line_wrapper{position:absolute;cursor:pointer}.gantt_line_wrapper div{background-color:#ffa011}.gantt_task_link:hover .gantt_line_wrapper div{box-shadow:0 0 5px 0 #ffa011}.gantt_task_link div.gantt_link_arrow{background-color:transparent;border-style:solid;width:0;height:0}.gantt_link_control{position:absolute;width:20px;top:0}.gantt_link_control div{display:none;cursor:pointer;box-sizing:border-box;position:relative;top:50%;margin-top:-7.5px;vertical-align:middle;border:1px solid #929292;border-radius:6.5px;height:13px;width:13px;background-color:#f0f0f0}.gantt_link_control.task_right div.gantt_link_point{margin-left:7px}.gantt_link_control div:hover{background-color:#fff}.gantt_link_control.task_left{left:-20px}.gantt_link_control.task_right{right:-20px}.gantt_link_target .gantt_link_control div,.gantt_task_line.gantt_drag_move .gantt_link_control div,.gantt_task_line.gantt_drag_move .gantt_task_drag,.gantt_task_line.gantt_drag_move .gantt_task_progress_drag,.gantt_task_line.gantt_drag_progress .gantt_link_control div,.gantt_task_line.gantt_drag_progress .gantt_task_drag,.gantt_task_line.gantt_drag_progress .gantt_task_progress_drag,.gantt_task_line.gantt_drag_resize .gantt_link_control div,.gantt_task_line.gantt_drag_resize .gantt_task_drag,.gantt_task_line.gantt_drag_resize .gantt_task_progress_drag,.gantt_task_line.gantt_selected .gantt_link_control div,.gantt_task_line.gantt_selected .gantt_task_drag,.gantt_task_line.gantt_selected .gantt_task_progress_drag,.gantt_task_line:hover .gantt_link_control div,.gantt_task_line:hover .gantt_task_drag,.gantt_task_line:hover .gantt_task_progress_drag{display:block}.gantt_link_source,.gantt_link_target{box-shadow:0 0 3px #3db9d3}.gantt_link_target.link_finish_allow,.gantt_link_target.link_start_allow{box-shadow:0 0 3px #ffbf5e}.gantt_link_target.link_finish_deny,.gantt_link_target.link_start_deny{box-shadow:0 0 3px #e87e7b}.link_finish_allow .gantt_link_control.task_end_date div,.link_start_allow .gantt_link_control.task_start_date div{background-color:#ffbf5e;border-color:#ffa011}.link_finish_deny .gantt_link_control.task_end_date div,.link_start_deny .gantt_link_control.task_start_date div{background-color:#e87e7b;border-color:#dd3e3a}.gantt_link_arrow_right{border-width:4px 0 4px 6px;border-top-color:transparent!important;border-right-color:transparent!important;border-bottom-color:transparent!important;border-left-color:#ffa011}.gantt_link_arrow_left{border-width:4px 6px 4px 0;margin-top:-1px;border-top-color:transparent!important;border-right-color:#ffa011;border-bottom-color:transparent!important;border-left-color:transparent!important}.gantt_link_arrow_up{border-width:0 4px 6px;border-color:transparent transparent #ffa011;border-top-color:transparent!important;border-right-color:transparent!important;border-bottom-color:#ffa011;border-left-color:transparent!important}.gantt_link_arrow_down{border-width:4px 6px 0 4px;border-top-color:#ffa011;border-right-color:transparent!important;border-bottom-color:transparent!important;border-left-color:transparent!important}.gantt_task_drag,.gantt_task_progress_drag{cursor:ew-resize;display:none;position:absolute}.gantt_task_drag.task_right{cursor:e-resize}.gantt_task_drag.task_left{cursor:w-resize}.gantt_task_drag{height:100%;width:8px;z-index:1;top:-1px}.gantt_task_drag.task_left{left:-7px}.gantt_task_drag.task_right{right:-7px}.gantt_task_progress_drag{height:8px;width:8px;bottom:-4px;margin-left:-4px;background-position:bottom;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAALCAYAAAB24g05AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoV2luZG93cykiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6MkY3Rjk0RUVDMkYzMTFFMkI1OThEQTA3ODU0OTkzMEEiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6MkY3Rjk0RUZDMkYzMTFFMkI1OThEQTA3ODU0OTkzMEEiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDoyRjdGOTRFQ0MyRjMxMUUyQjU5OERBMDc4NTQ5OTMwQSIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDoyRjdGOTRFREMyRjMxMUUyQjU5OERBMDc4NTQ5OTMwQSIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PobPBzIAAADkSURBVHjaYpk2bRoDDsAExL1QdjEQ/8OmiAWHZk4gXqymqhQM4ty6fU8OSMUA8XdiDBAB4k0a6iqWRga6EKcwMQXduHlnL5DpB8Rv0J2JDFSA+JiOtgZcMwiA2CAxkBxUDVYDLEAKgIpV9XQ0MZwFEgPJAZnHoWpRDAgC4n2W5saiQKfjClQGkBxQDciL+6B6wAbkA/EqJwdrTkUFOQZCAKQGpBbIXA3SCzJggo+XK7OEuBgDsQCkFqgHrBfsBT5eHgZSAUwP2IBfv36TbABMDygdtK1Zv6UESLORaAbIhG6AAAMAKN8wE24DXWcAAAAASUVORK5CYII=);background-repeat:no-repeat;z-index:1}.gantt_task_progress_drag:hover{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAALCAYAAAB24g05AAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAs0lEQVQoz6WMPW7CQBgFJxZaiZ60qcgdwjVMmzu8gpwhDULabXyBdHAGuzRHivQiQZovigS2+Jtu95t5T03TMITtCtjEc5VSOgx5k5F4CnxJWgKUUl5sv6eUvk/daiCeAe1fDCCpBtq4jQ/YngO9pMWpGH99OOcDtt8ifmWEuO3D/R+wXQOdpGcuIGkGdNFQ2RawlTTlSsLd2RY55+O95JyPFQ/y8MAE+CylfADpxvYHWP8CXj+JR4wdKHYAAAAASUVORK5CYII=)}.gantt_link_tooltip{box-shadow:3px 3px 3px #888;background-color:#fff;border-left:1px dotted #cecece;border-top:1px dotted #cecece;font-family:Tahoma;font-size:8pt;color:#444;padding:6px;line-height:20px}.gantt_link_direction{height:0;border:0 none #ffa011;border-bottom-style:dashed;border-bottom-width:2px;transform-origin:0 0;-ms-transform-origin:0 0;-webkit-transform-origin:0 0;z-index:2;margin-left:1px;position:absolute}.gantt_grid_data .gantt_row.gantt_selected,.gantt_grid_data .gantt_row.odd.gantt_selected,.gantt_task_row.gantt_selected{background-color:#fff3a1}.gantt_task_row.gantt_selected .gantt_task_cell{border-right-color:#ffec6e}.gantt_task_line.gantt_selected{box-shadow:0 0 5px #299cb4}.gantt_task_line.gantt_project.gantt_selected{box-shadow:0 0 5px #46ad51}.gantt_task_line.gantt_milestone{visibility:hidden;background-color:#d33daf;border:0 solid #61164f;box-sizing:content-box;-moz-box-sizing:content-box}.gantt_task_line.gantt_milestone div{visibility:visible}.gantt_task_line.gantt_milestone .gantt_task_content{background:inherit;border:inherit;border-width:1px;border-radius:inherit;box-sizing:border-box;-moz-box-sizing:border-box;transform:rotate(45deg)}.gantt_task_line.gantt_task_inline_color{border-color:#999}.gantt_task_line.gantt_task_inline_color .gantt_task_progress{background-color:#363636;opacity:.2}.gantt_task_line.gantt_task_inline_color.gantt_project.gantt_selected,.gantt_task_line.gantt_task_inline_color.gantt_selected{box-shadow:0 0 5px #999}.gantt_task_link.gantt_link_inline_color:hover .gantt_line_wrapper div{box-shadow:0 0 5px 0 #999}.gantt_critical_task{background-color:#e63030;border-color:#9d3a3a}.gantt_critical_task .gantt_task_progress{background-color:rgba(0,0,0,.4)}.gantt_critical_link .gantt_line_wrapper>div{background-color:#e63030}.gantt_critical_link .gantt_link_arrow{border-color:#e63030}.gantt_btn_set:focus,.gantt_cell:focus,.gantt_grid_head_cell:focus,.gantt_popup_button:focus,.gantt_qi_big_icon:focus,.gantt_row:focus{box-shadow:inset 0 0 1px 1px #4d90fe}.gantt_split_parent,.gantt_split_subproject{opacity:.1;pointer-events:none}.gantt_rollup_child .gantt_link_control,.gantt_rollup_child:hover .gantt_link_control{display:none}.gantt_unselectable,.gantt_unselectable div{-webkit-user-select:none;-moz-user-select:none;-moz-user-select:-moz-none}.gantt_cal_light{-webkit-tap-highlight-color:transparent;background:#fff;border-radius:6px;font-family:Arial;font-size:13px;border:1px solid #cecece;color:#6b6b6b;font-size:12px;position:absolute;z-index:10001;width:550px;height:250px;box-shadow:3px 3px 3px rgba(0,0,0,.07)}.gantt_cal_light_wide{width:650px}.gantt_cal_light select{font-family:Arial;border:1px solid #cecece;font-size:13px;padding:2px;margin:0}.gantt_cal_ltitle{padding:7px 10px;overflow:hidden;-webkit-border-top-left-radius:6px;-webkit-border-bottom-left-radius:0;-webkit-border-top-right-radius:6px;-webkit-border-bottom-right-radius:0;-moz-border-radius-topleft:6px;-moz-border-radius-bottomleft:0;-moz-border-radius-topright:6px;-moz-border-radius-bottomright:0;border-top-left-radius:6px;border-bottom-left-radius:0;border-top-right-radius:6px;border-bottom-right-radius:0}.gantt_cal_ltitle,.gantt_cal_ltitle span{white-space:nowrap}.gantt_cal_lsection{color:#727272;font-weight:700;padding:12px 0 5px 10px}.gantt_cal_lsection .gantt_fullday{float:right;margin-right:5px;font-size:12px;font-weight:400;line-height:20px;vertical-align:top;cursor:pointer}.gantt_cal_lsection{font-size:13px}.gantt_cal_ltext{padding:2px 10px;overflow:hidden}.gantt_cal_ltext textarea{overflow-y:auto;overflow-x:hidden;font-family:Arial;font-size:13px;box-sizing:border-box;border:1px solid #cecece;height:100%;width:100%;outline:none!important;resize:none}.gantt_section_constraint [data-constraint-time-select]{margin-left:20px}.gantt_time{font-weight:700}.gantt_cal_light .gantt_title{padding-left:10px}.gantt_cal_larea{border:1px solid #cecece;border-left:none;border-right:none;background-color:#fff;overflow:hidden;height:1px}.gantt_btn_set{margin:10px 7px 5px 10px;padding:5px 15px 5px 10px;float:left;border-radius:4px;border:0 solid #cecece;height:32px;font-weight:700;background:#fff;box-sizing:border-box;cursor:pointer}.gantt_hidden{display:none}.gantt_btn_set div{float:left;font-size:13px;height:22px;line-height:22px;background-repeat:no-repeat;vertical-align:middle}.gantt_save_btn{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoV2luZG93cykiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6MTk1OUU5RDFDMzA0MTFFMkExMUZBQTdDNDAzOUE5RjMiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6MTk1OUU5RDJDMzA0MTFFMkExMUZBQTdDNDAzOUE5RjMiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDoxOTU5RTlDRkMzMDQxMUUyQTExRkFBN0M0MDM5QTlGMyIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDoxOTU5RTlEMEMzMDQxMUUyQTExRkFBN0M0MDM5QTlGMyIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PjDroXYAAAEXSURBVHjaYvz//z8DJYCRUgPIAUxAbAnEHiAHMIBcQCwGaRYXF3e6evXqoffv39/dv38/CymaGSUkJBzv3LlzCsj///fv3wdAihkkIQnEvkAshU8zLy+v7a1bt06ANP/79+87kDIAy505cybq06dPr3p7ezuwGQLTfOPGjWP/ESAZLg8kPKBO+g01RBJNszWyZqC6uSgWgIg/f/4shxnS2dnZBjMEqNkSFGBImi8CKTYMA4BYCGjIczRDHC5dunQQSfN7IKWI4UUkjjdMMdCwnw8ePLjwHxV4Yw1gZA5Q47z/2EELzhhCE+ABGvIQWSeQvwcU38QaAML2wHj+C/X3MyAlijeB4ZBoBOIPQGxJKIVSnBsBAgwABddBclWfcZUAAAAASUVORK5CYII=);margin-top:2px;width:21px}.gantt_cancel_btn{margin-top:2px;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoV2luZG93cykiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6MDkzMDA3MzlDMzA0MTFFMjg2QTVFMzFEQzgwRkJERDYiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6MDkzMDA3M0FDMzA0MTFFMjg2QTVFMzFEQzgwRkJERDYiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDowOTMwMDczN0MzMDQxMUUyODZBNUUzMURDODBGQkRENiIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDowOTMwMDczOEMzMDQxMUUyODZBNUUzMURDODBGQkRENiIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PmYuYOUAAAEdSURBVHjaYvz//z8DJYAFXWDlypU8QKoIiD2A2AwqfAqIdwBxX3h4+Bdk9YzILgBqtgdS84FYEYeF94E4EWjIQZgAE5LmQCB1AKoZZKMPEAtAMYh9GSp3AKjWD8UFQAEhIPshEIOc3wHENUBb/qJ57SyQMoJyPwKxElDNO1gYFEE17wMKVmIJlzNQzeegrjaA6qmBecEbSvfh0GwMxGeBhoPoemQ9MAO0kEIbl2YTqPAFKK2IbMB3AjabYIkRZmQD7kNpMyI0G0PpO8gGbIUFJj7NQDk2INWIrIcJKfBAKcwJqvkcDs0TgFgXGo19KCkRmpDWQdWDEk0NUoCBoq0FqhkE/IEWbKJKUmZEz43QzFSKIzN1481M5ACAAAMAlfl/lCwRpagAAAAASUVORK5CYII=);width:20px}.gantt_delete_btn{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoV2luZG93cykiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6MjFENzI3NUNDMzA0MTFFMjhBNjJGQTc3MUIyQzYzNEYiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6MjFENzI3NURDMzA0MTFFMjhBNjJGQTc3MUIyQzYzNEYiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDoyMUQ3Mjc1QUMzMDQxMUUyOEE2MkZBNzcxQjJDNjM0RiIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDoyMUQ3Mjc1QkMzMDQxMUUyOEE2MkZBNzcxQjJDNjM0RiIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PmUD0gAAAABvSURBVHjaYvz//z8DIyMjAxYQicReji4J0ofKQNP8HwmgGQbXB8IsWGwDSSwDuioKjY9uBthVjFAXYHUGAQA2kYmBUoAUBpGk0LAwgBvwH+YX4mkwptgLowYMRgOITUyYKRFIN/wnDjQgJySAAAMApryKzL8wjfUAAAAASUVORK5CYII=);margin-top:2px;width:20px}.gantt_cal_cover{width:100%;height:100%;position:fixed;z-index:10000;top:0;left:0;background-color:#000;opacity:.1;filter:progid:DXImageTransform.Microsoft.Alpha(opacity=10)}.gantt_custom_button{padding:0 3px;font-family:Arial;font-size:13px;font-weight:400;margin-right:10px;margin-top:-5px;cursor:pointer;float:right;height:21px;width:90px;border:1px solid #cecece;text-align:center;border-radius:4px}.gantt_custom_button div{cursor:pointer;float:none;height:21px;line-height:21px;vertical-align:middle}.gantt_custom_button div:first-child{display:none}.gantt_cal_light_wide{width:580px;padding:2px 4px}.gantt_cal_light_wide .gantt_cal_larea{box-sizing:border-box;border:1px solid #cecece}.gantt_cal_light_wide .gantt_cal_lsection{border:0;float:left;text-align:right;width:80px;height:20px;padding:5px 10px 0 0}.gantt_cal_light_wide .gantt_wrap_section{position:relative;padding:10px 0;overflow:hidden;border-bottom:1px solid #ebebeb}.gantt_cal_light_wide .gantt_section_time{overflow:hidden;padding-top:2px!important;padding-right:0;height:20px!important}.gantt_cal_light_wide .gantt_cal_ltext{padding-right:0}.gantt_cal_light_wide .gantt_cal_larea{padding:0 10px;width:100%}.gantt_cal_light_wide .gantt_section_time{background:transparent}.gantt_cal_light_wide .gantt_cal_checkbox label{padding-left:0}.gantt_cal_light_wide .gantt_cal_lsection .gantt_fullday{float:none;margin-right:0;font-weight:700;cursor:pointer}.gantt_cal_light_wide .gantt_custom_button{position:absolute;top:0;right:0;margin-top:2px}.gantt_cal_light_wide .gantt_repeat_right{margin-right:55px}.gantt_cal_light_wide.gantt_cal_light_full{width:738px}.gantt_cal_wide_checkbox input{margin-top:8px;margin-left:14px}.gantt_cal_light input{font-size:13px}.gantt_section_time{background-color:#fff;white-space:nowrap;padding:2px 10px 5px;padding-top:2px!important}.gantt_section_time .gantt_time_selects{float:left;height:25px}.gantt_section_time .gantt_time_selects select{height:23px;padding:2px;border:1px solid #cecece}.gantt_duration{width:100px;height:23px;float:left;white-space:nowrap;margin-left:20px;line-height:23px}.gantt_duration .gantt_duration_dec,.gantt_duration .gantt_duration_inc,.gantt_duration .gantt_duration_value{box-sizing:border-box;text-align:center;vertical-align:top;height:100%;border:1px solid #cecece}.gantt_duration .gantt_duration_value{width:40px;padding:3px 4px;border-left-width:0;border-right-width:0}.gantt_duration .gantt_duration_value.gantt_duration_value_formatted{width:70px}.gantt_duration .gantt_duration_dec,.gantt_duration .gantt_duration_inc{width:20px;padding:1px;padding-bottom:1px;background:#fff}.gantt_duration .gantt_duration_dec{-moz-border-top-left-radius:4px;-moz-border-bottom-left-radius:4px;-webkit-border-top-left-radius:4px;-webkit-border-bottom-left-radius:4px;border-top-left-radius:4px;border-bottom-left-radius:4px}.gantt_duration .gantt_duration_inc{margin-right:4px;-moz-border-top-right-radius:4px;-moz-border-bottom-right-radius:4px;-webkit-border-top-right-radius:4px;-webkit-border-bottom-right-radius:4px;border-top-right-radius:4px;border-bottom-right-radius:4px}.gantt_resources{max-height:150px;height:auto;overflow-y:auto}.gantt_resource_row{display:block;padding:10px 0;border-bottom:1px solid #ebebeb;cursor:pointer}.gantt_resource_row input[type=checkbox]:not(:checked),.gantt_resource_row input[type=checkbox]:not(:checked)~div{opacity:.5}.gantt_resource_toggle{vertical-align:middle}.gantt_resources_filter .gantt_resources_filter_input{padding:1px 2px;box-sizing:border-box}.gantt_resources_filter .switch_unsetted{vertical-align:middle}.gantt_resource_cell{display:inline-block}.gantt_resource_cell.gantt_resource_cell_checkbox{width:24px;max-width:24px;min-width:24px;vertical-align:middle}.gantt_resource_cell.gantt_resource_cell_label{width:40%;max-width:40%;vertical-align:middle}.gantt_resource_cell.gantt_resource_cell_value{width:30%;max-width:30%;vertical-align:middle}.gantt_resource_cell.gantt_resource_cell_value input,.gantt_resource_cell.gantt_resource_cell_value select{width:80%;vertical-align:middle;padding:1px 2px;box-sizing:border-box}.gantt_resource_cell.gantt_resource_cell_unit{width:10%;max-width:10%;vertical-align:middle}.gantt_resource_early_value{opacity:.8;font-size:.9em}.gantt_cal_quick_info{border:1px solid #cecece;border-radius:6px;position:absolute;z-index:300;box-shadow:3px 3px 3px rgba(0,0,0,.07);background-color:#fff;width:300px;transition:left .5s ease,right .5s;-moz-transition:left .5s ease,right .5s;-webkit-transition:left .5s ease,right .5s;-o-transition:left .5s ease,right .5s}.gantt_no_animate{transition:none;-moz-transition:none;-webkit-transition:none;-o-transition:none}.gantt_cal_quick_info.gantt_qi_left .gantt_qi_big_icon{float:right}.gantt_cal_qi_title{-webkit-border-top-left-radius:6px;-webkit-border-bottom-left-radius:0;-webkit-border-top-right-radius:6px;-webkit-border-bottom-right-radius:0;-moz-border-radius-topleft:6px;-moz-border-radius-bottomleft:0;-moz-border-radius-topright:6px;-moz-border-radius-bottomright:0;border-top-left-radius:6px;border-bottom-left-radius:0;border-top-right-radius:6px;border-bottom-right-radius:0;padding:5px 0 8px 12px;color:#454545;background-color:#fff;border-bottom:1px solid #cecece}.gantt_cal_qi_tdate{font-size:14px;font-weight:700}.gantt_cal_qi_tcontent{font-size:13px}.gantt_cal_qi_content{padding:16px 8px;font-size:13px;color:#454545;overflow:hidden}.gantt_cal_qi_controls{-webkit-border-top-left-radius:0;-webkit-border-bottom-left-radius:6px;-webkit-border-top-right-radius:0;-webkit-border-bottom-right-radius:6px;-moz-border-radius-topleft:0;-moz-border-radius-bottomleft:6px;-moz-border-radius-topright:0;-moz-border-radius-bottomright:6px;border-top-left-radius:0;border-bottom-left-radius:6px;border-top-right-radius:0;border-bottom-right-radius:6px;padding-left:7px}.gantt_cal_qi_controls .gantt_menu_icon{margin-top:6px;background-repeat:no-repeat}.gantt_cal_qi_controls .gantt_menu_icon.icon_edit{width:20px;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAAB3RJTUUH3QYFCjI5ZQj5bAAAAFNJREFUOMvt0zEOACAIA0DkwTymH8bJTRTKZGJXyaWEKPKTCQAH4Ls37cItcDUzsxHNDLZNhCq7Gt1wh9ErV7EjyGAhyGLphlnsClWuS32rn0czAV+vNGrM/LBtAAAAAElFTkSuQmCC)}.gantt_cal_qi_controls .gantt_menu_icon.icon_delete{width:20px;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoV2luZG93cykiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6MjFENzI3NUNDMzA0MTFFMjhBNjJGQTc3MUIyQzYzNEYiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6MjFENzI3NURDMzA0MTFFMjhBNjJGQTc3MUIyQzYzNEYiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDoyMUQ3Mjc1QUMzMDQxMUUyOEE2MkZBNzcxQjJDNjM0RiIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDoyMUQ3Mjc1QkMzMDQxMUUyOEE2MkZBNzcxQjJDNjM0RiIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PmUD0gAAAABvSURBVHjaYvz//z8DIyMjAxYQicReji4J0ofKQNP8HwmgGQbXB8IsWGwDSSwDuioKjY9uBthVjFAXYHUGAQA2kYmBUoAUBpGk0LAwgBvwH+YX4mkwptgLowYMRgOITUyYKRFIN/wnDjQgJySAAAMApryKzL8wjfUAAAAASUVORK5CYII=)}.gantt_qi_big_icon{font-size:13px;border-radius:4px;font-weight:700;background:#fff;margin:5px 9px 8px 0;min-width:60px;line-height:32px;vertical-align:middle;padding:0 10px 0 5px;cursor:pointer;border:1px solid #cecece}.gantt_cal_qi_controls div{float:left;height:32px;text-align:center;line-height:32px}.gantt_cal_quick_info.gantt_qi_hidden{display:none}.gantt_tooltip{padding:10px;position:absolute;z-index:50;white-space:nowrap}.gantt_resource_marker{position:absolute;text-align:center;font-size:14px;color:#fff}.gantt_resource_marker_ok{background:rgba(78,208,134,.75)}.gantt_resource_marker_overtime{background:hsla(0,100%,76%,.69)}.gantt_histogram_label{width:100%;height:100%;position:absolute;z-index:1;font-weight:700;font-size:13px}.gantt_histogram_fill{background-color:rgba(41,157,180,.2);width:100%;position:absolute;bottom:0}.gantt_histogram_hor_bar{height:1px;margin-top:-1px}.gantt_histogram_hor_bar,.gantt_histogram_vert_bar{position:absolute;background:#299db4;margin-left:-1px}.gantt_histogram_vert_bar{width:1px}.gantt_histogram_cell{position:absolute;text-align:center;font-size:13px;color:#000}.gantt_marker{height:100%;width:2px;top:0;position:absolute;text-align:center;background-color:rgba(255,0,0,.4);box-sizing:border-box}.gantt_marker .gantt_marker_content{padding:5px;background:inherit;color:#fff;position:absolute;font-size:12px;line-height:12px;opacity:.8}.gantt_marker_area{position:absolute;top:0;left:0}.gantt_grid_editor_placeholder{position:absolute}.gantt_grid_editor_placeholder>div,.gantt_grid_editor_placeholder input,.gantt_grid_editor_placeholder select{width:100%;height:100%;box-sizing:border-box}.gantt_row_placeholder div{opacity:.5}.gantt_row_placeholder .gantt_add,.gantt_row_placeholder .gantt_file{display:none}.gantt_drag_marker.gantt_grid_dnd_marker{background-color:transparent;transition:all .1s ease}.gantt_grid_dnd_marker_line{height:4px;width:100%;background-color:#3498db}.gantt_grid_dnd_marker_line:before{background:#fff;width:12px;height:12px;box-sizing:border-box;border:3px solid #3498db;border-radius:6px;content:"";line-height:1px;display:block;position:absolute;margin-left:-11px;margin-top:-4px;pointer-events:none}.gantt_grid_dnd_marker_folder{height:100%;width:100%;position:absolute;pointer-events:none;box-sizing:border-box;box-shadow:inset 0 0 0 2px #3f98db;background:transparent}.gantt_overlay_area{display:none}.gantt_overlay,.gantt_overlay_area{position:absolute;height:inherit;width:inherit;top:0;left:0}.gantt_click_drag_rect{position:absolute;left:0;top:0;outline:1px solid #3f98db;background-color:rgba(52,152,219,.3)}.gantt_timeline_move_available,.gantt_timeline_move_available *{cursor:move}.gantt_rtl .gantt_grid{text-align:right}.gantt_rtl .gantt_cell,.gantt_rtl .gantt_row{flex-direction:row-reverse}.gantt_layout_content{width:100%;overflow:auto;box-sizing:border-box}.gantt_layout_cell{position:relative;box-sizing:border-box}.gantt_layout_cell>.gantt_layout_header{background:#33aae8;color:#fff;font-size:17px;padding:5px 10px;box-sizing:border-box}.gantt_layout_header.collapsed_x{background:#a9a9a9}.gantt_layout_header.collapsed_x .gantt_header_arrow:before{content:"\21E7"}.gantt_layout_header.collapsed_y{background:#a9a9a9}.gantt_layout_header.collapsed_y .gantt_header_arrow:before{content:"\21E9"}.gantt_layout_header{cursor:pointer}.gantt_layout_header .gantt_header_arrow{float:right;text-align:right}.gantt_layout_header .gantt_header_arrow:before{content:"\21E6"}.gantt_layout_header.vertical .gantt_header_arrow:before{content:"\21E7"}.gantt_layout_outer_scroll_vertical .gantt_layout_content{overflow-y:hidden}.gantt_layout_outer_scroll_horizontal .gantt_layout_content{overflow-x:hidden}.gantt_layout_x>.gantt_layout_cell{display:inline-block;vertical-align:top}.gantt_layout_x{white-space:nowrap}.gantt_resizing{opacity:.7;background:#f2f2f2}.gantt_layout_cell_border_right.gantt_resizer{overflow:visible;border-right:0}.gantt_resizer{cursor:e-resize;position:relative}.gantt_resizer_y{cursor:n-resize}.gantt_resizer_stick{background:#33aae8;z-index:9999;position:absolute;top:0;width:100%}.gantt_resizer_x .gantt_resizer_x{position:absolute;width:20px;height:100%;margin-left:-10px;top:0;left:0;z-index:1}.gantt_resizer_y .gantt_resizer_y{position:absolute;height:20px;width:100%;top:-10px;left:0;z-index:1}.gantt_resizer_error{background:#cd5c5c!important}.gantt_layout_cell_border_left{border-left:1px solid #cecece}.gantt_layout_cell_border_right{border-right:1px solid #cecece}.gantt_layout_cell_border_top{border-top:1px solid #cecece}.gantt_layout_cell_border_bottom{border-bottom:1px solid #cecece}.gantt_layout_cell_border_transparent{border-color:transparent}.gantt_window{position:absolute;top:50%;left:50%;z-index:999999999;background:#fff}.gantt_window_content{position:relative}.gantt_window_content_header{background:#39c;color:#fff;height:33px;padding:10px 10px 0;border-bottom:2px solid #fff;position:relative}.gantt_window_content_header_text{padding-left:10%}.gantt_window_content_header_buttons{position:absolute;top:10px;right:10px}.gantt_window_content_header_buttons:hover{color:#000;cursor:pointer}.gantt_window_content_resizer{position:absolute;width:15px;height:15px;bottom:0;line-height:15px;right:-1px;text-align:center;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA8AAAAPCAMAAAAMCGV4AAAABlBMVEUAAAAAAAClZ7nPAAAAAXRSTlMAQObYZgAAABZJREFUeAFjIAUwUshlpJDLSIhLGAAACQ4AFk79JaMAAAAASUVORK5CYII=);cursor:nw-resize;z-index:999}.gantt_window_content_frame{position:absolute;top:0;left:0;width:100%;height:100%;background:rgba(0,0,0,.1);z-index:9999}.gantt_window_drag{cursor:pointer!important}.gantt_window_resizing{overflow:visible}.gantt_window_resizing_body{overflow:hidden!important}.gantt_window_modal{background:rgba(0,0,0,.1);z-index:9999;top:0;left:0;width:100%;height:100%;position:fixed}.gantt_cal_light,.gantt_cal_quick_info,.gantt_container,.gantt_message_area,.gantt_modal_box,.gantt_tooltip{text-rendering:optimizeLegibility;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.gantt_noselect{-moz-user-select:-moz-none;-webkit-user-select:none;-ms-user-select:none;user-select:none}.gantt_noselect .gantt_grid_data .gantt_row.odd:hover,.gantt_noselect .gantt_grid_data .gantt_row:hover{background-color:unset}.gantt_drag_marker{position:absolute;top:-1000px;left:-1000px;font-family:Arial;font-size:13px;z-index:1;white-space:nowrap}.gantt_drag_marker .gantt_tree_icon.gantt_blank,.gantt_drag_marker .gantt_tree_icon.gantt_close,.gantt_drag_marker .gantt_tree_icon.gantt_open,.gantt_drag_marker .gantt_tree_indent{display:none}.gantt_empty_state_wrapper{position:relative}.gantt_empty_state{height:100%;max-width:500px;box-sizing:border-box;white-space:pre-line;overflow-wrap:break-word;display:flex;flex-direction:column;justify-content:flex-start;margin:0 auto}.gantt_empty_state_image{background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAWYAAADjCAYAAAC2LL7JAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAOxAAADsQBlSsOGwAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAACAASURBVHic7L15vGVFfS2+vrX3OXfqvj1BQzMLIoNEQdQXhSg4ECeCE63SAooEYhxinjGTL0mb/HjPl2cSE2MUVMQBIQ1PQEQRiTjE5BlxRhNnZGqg6bnvcM7Zu9bvj6rau/Z0hnvPvef27bP6c/vsoXbt2kOtvepb3/oWMMQQQwwxxBBDDDHEEEMMMcQQQwwxxBBDDDHEEEMMMcQQQwwxxBBDDDHEEEMMMcQQQwwxxBBDDLG4kEEXYIilgTdeyzUtwZEBcQSAgyA4iMDBANZDsFKISQITIMYhWJ07fALAFICWAPu0YFaIGQqmBGgS2CPADDS2CvAAFB6MBQ/pKTxw9Rtk76Jf7BBDLHEMifkAwuu38OB6CydphRMAPEEEJ4B4HICjCKwcSKGIfQLcT8GDAvyExI8I/FcY4Z4PXiSPDqRMQwwxYAyJeZni0k/yiCDE6SROB/EUAqcJcOigy9Uj7gdwtwi+CY1/r6/BN973ImkMulBDDLHQGBLzMsGl1/MkIc4U4AwAZwI4ZsBFWgjMgPh/BL4UKNz6wVfLPYMu0BBDLASGxLyf4ne3cEUrxnMEeAGFLwBx1KDLtPiQn4vgFgGuvfLV8r1Bl2aIIfqFITHvR9j0SU6OKfyWEpxP4rkiGBl0mZYKSHxPBB8NA3zsnzbKvkGXZ4gh5oMhMS9xbL6L4QOP4MVCvBaC3wQxOugyLXHsFOADrQDv/+hG2TbowgwxxFwwJOYlisv+LzcwwiYQvwPgyEGXZ3+DAFMg/m5ngPfcsFFmBl2eIYboBUNiXmK47Ho+hVq/Q0TOIxAMujz7O4R4gNR/fvhPg+s2bxY96PIMMUQ3GBLzEsFvb+GzqfmHAjx30GVZjiDl20GAt1+5Uf590GUZYohOGBLzgHHp9TxJBFeAfOGgy7LcIQApvC6cUH/wgZfIzkGXZ4ghqjAk5gHhkut4WCD4cwKvFUANujwHEkhsVQpvv+pVcvOgyzLEEGUYEvNig5RLr8clIrgCMqBh0EM4fEZivOWqC+SxQRdkiCF8DIl5EfE71/GYGPxHCM4edFmGsCC2CeRNV71Gbht0UYYYwmFIzIuEy67n+RT8I8mJQZdliCyM7VmubjQe+dNPXHTo1KDLsxA4fwvrK2McVAuwOooxIsAKpRACWEUg0DpeJUEQgqhRxwX3QpFglyiQwG60sLs2ip1KsPvRCLtu2CjxAC5pWWNIzAuMy65kDWtwBck3DrosQ7QHiZ9Cy+s+fIF8f9Bl6Ra/u4UrWhGORg1HMdbHQLAexCEiWEfKOhGsA3AIFjB6IIF9AmwDcB/IByDqV1C4T2vcjxC/+sjLcR9EuFDnX44YEvMC4g1buFbI6wH8+qDLMkTXaCjK/7jqVbhqqZDJRVumD69j7AQAjwf10YA6CuTRAI6CYO2gy9cRxBSAHwrkHo34HkFwjx7DD68+bxiLuwpDYl4gXHIdD1OKNwM4cdBlGaJ3CHmbVupNH9koOxbrnJd9ghtQx4lacCKIkwCeBPP+rFqsMiwiYgL3APw6RH2t3sK/fWDT0IXRYUjMC4DLrudxWniz4ECM+LaMIPKQIi6/8lXy1X5me9ZdDI/fjhO0jp+sKE+mqCcJeTJQmBnmgAEFGsCPBHInND77oVfh7qXSYhkEhsTcZ7z+Oh6pFL+4HwalH6IcGuA/qF3qiqsul1avB7/lHzgyfTBOVgGeTOonE/JkgZwMcBiMqh2IrRC5TQS3/vRH+PqXN0s06CItJobE3Ee87iaurrV4O4ETBl2WIfoLAb6j0bzsIxtHf1aV5qzNDI87EScqFT8VCE4HeKp9F2qLWNTlB+IRgNeGWn3ig6+RewddnMXAkJj7hLf8A0dmDuWNBM8cdFmGWBiYiHX84w+/KvwkAFz6f3kEo/ipgJwO4emgPBmC8UGXcxlDC+Qr0PpjP/uv4LblrKKHxNwnXPrPrSsANXSJOwBAyHcBHibA+kGX5YCFyL0Q/d7dDK6/YaM0B12cfmNIzH3ApTfwLJA3Yng/hxhisfEQIO+LDsbHrzlbZgddmH5hSCTzxOtu4uow4lcIHL6oJ2b3HdbEAdu5vawhvVRfWeZVndgqkP/vw+djy3Lw5ljmT2vhcekN8XtAuXjRTtiBkEtJuAcSH2I/QgnZdiTr5U7QkG8BrXd+eGP9W4MuyXyw3J/SguJ1N/L4gPqrIMIFP1kbcs2QcWW64eQdywsVkWI94m1L0suboGMKrpqYUFe870XSGHRh5oJl/XQWGpfcEH1MIAsf4L6CbBNCLuwvkjDnopqHQntxMIdaKKXEqvKJbPYVJ1je5AxAfsw4evPVr65/b9Al6RXL/cksGN5wfeMUCcJ/WdCTVJCpLiXklIypMwq65BkPGXf/RMmj9Oypovz9yk9jtxyQBN0SUf/nQ6/AP+xPtudl/UQWEpfeyL8medGCnaCElMsVMu2mDDFLdl8ur6HNef9EjkBT1eyZL5QhHxFV2NdWQS9vcoaAd8401O9e+1rZM+iydIPl/TQWCBd+nBP1Uf1dLFQoxa5IWdtVS74eGadE3C0xD4l6aSJXPTsQs1m3ywlBuzQqk8eBSM4Efx7Wgouuepn8fNBl6YTl/SQWCJfcEG0C5D0LknkVKVNntyT8rKVAxnZZk/BJN0PQetgZuF9BpaaJrH1ZoNy6T8xuWSkmu2x686PsWnvyX3YgdmqoC67ZKN8ddFHaYZk/hYXBG26MrgHknL5n3JGUHeHCErJvwiCgHUEz3e7lqe0xfl7dlGGIRUQlMabblSVbP70xXYghZFVO0GpIzg5T1Pr1V2+s/eugC1KFZf8E+o2zNjM87on6HiyEGSNHiqWkrClIyNcqYrplnapircXfn+SXP8+QiJc2fJLMmyF8hRwEGdOFSJDsT8jZdQIq4ZCcMS1Ql3z4fPnaoAtShmV/9/uNS7fwdC36M33PuAMpa2dDplPDWUIGCebIWDtSJj1SdmfwOwv18D1YopBEHTsbsfuxRCtivC18ElbKvCwSmPVkX2pnzpPzAUjMgGAWUK+6+pVy96CLksfCD4xYZmCg/1vfxziTmU9kQspi1zRFxBiWCW28fkgQMQSEdoRMTVqThqaWnQ0dPjKr63ubDJsaqklIXOo+t5+j6oqWRWMg2xegCNQU9EggejxAvH48bB48qloBQAQKoBhblwiUgIbCA3uPdKKoSUAU7IunwQI580Ag5xGB/sjrbuJ517xsaYUTXfZ3vt+45MbW3wBqY18z9dRyqmytKkZqvkiUsibI2NiMtU6InDpGrLXcuy8eu3cKY00amdV2cMlSN2UU3lCZ+1vL5L/ctiWONgQpIggAHjkhs8dNqOl6qLSoIFXBSkGJIkQgQYC8aaOtcl7+xGxA3isMzlvMacQ64QC58/3DJTdGN0Lk6X3LsGDC0LZ3z66RYojYkDJ1bH8tKVNDMwa1lh2zuvaDnXrlDBlkXZ3bsc8SYqaMs0G+ad3ncxU8Blm9b6Dobli1CFBTok+cVPsOH1cNUYrK2plFBRBHzsojZ6WgkkEXrtMQkJLBKQcA7jrqB+r1mzfLknBXGpoyeoXgKFmgqqutrdjVRWqKkEzNF8a8obUWY7YwKpk6lvumOPKfe/RKTZ22VbtAZpTgIJCMg/CVGlCmbNNOrzmeKzGzl1yzeKcUZO/fAKuqVITEAJBraQmaMdUPdnFyR0PPnLI62CsKlMD2FYOGcAkacgbEGL5SOzaN+eKAoeIsznrgFH05gA8MuiDAUDH3hM13Mbxve/wz9uu++aP1ch4T1NrzvoiTjj6tY6OUdQRqs37/dDz6w92c9I93uZacqqQci0zOYv8rGZyWJikxWfTrba0YX1Mg7MxYnnzn6SKgVK2aAmQJO2d+IHHYqMz82hq1V0RBBQEhyilnQBRV4NzrnKq25Fw2AGUJquauPh9tv2olyUUioXrlR14p35ljsfqGpXfHlzAu/PjDE7WJg3/YtwwzikcXfY6dXVnHWVJmDMaxkDG2z+ra3Tu5RtO50ZncgPyYlGpGWZR4zckAtHLVmyHiSkLOq+oeULhEVhJ0urvEvKGTnQuOIvl4J3VkSRYHjygj/09cEew5eqWaUaKMO50oiAqhVEBjZnaeGpa8HZQsbWKuKI90EXGvEwj5ydFr5UWbzx7stFVDU0YPGBs9JGxhYdr+ab8URWsCJI1d2fomO/MFY2gdC6kZa8r3d3GVTsaUZGNkFBcH0AloCQCAVchWmDGniD1Tp+cTli9k6eK8yubnJR7hSlqkDEkrGHL2zR0LceuMG06ugK5okhm5Sb/QBARG/f54b7xyXV03V9RVZL3mKBJBaw2RAKIUCUKEiHXqseE+Psq/QWoJkTP9B2ahxIgbt8cnafbiYcLj793BywD807zLOQ8sobu99PGGLVzLQPfP59ENnfbVMulc3wwhW+8L0pgvdBwL4xhkjF/s4cRPp7Ay9WcGkLMxs+R8PRRw7tdWIGS7WUpI15Fx1dvY6/YylF1K1eXRW8hxY3ZYu9s3X4JudyF584ojGaZHEuk2sUOwbfL1o5x90mrZrZQ1ZaiQEigoCQAVUpRTzWLtywIR4ZL20KiKGeI6MpNoeuVhUDvnj9koUs//+EZ5cF7lnAeGirkHSDRVYzDaxxz9UX30SNnale3oPmNjjo1K0maZOpJfTQcTBVLOj/IDFteGXELIpWaKMoIGitv6ZWfOq+OqbfTPIWmnoFXTIpI+rmRktMzTDt3xC2FXvX4I95ytchc6YrYmMFEUETw6I6NT49HUeE0i0RpKaREGpCKEWpRWpFLW9ixIRxOKvRVV9qXFhnd+IhM9j/bDJOlLRQDQlqcT5W96OjufihgNguitAP6oL0WfA4bE3CMW0rpo63uy7AaKUGtSE9SxkDG1jmXbbFxraKUyduWqodcFl7wFgE/ITs1p08HHvJnC97rwibANIZcHhp9jOe15k/tU8MhI0xRRPCbxbEm29eMtKZKyeMvIPWN3G6lhAhcxNqG4RfDwVDRyzApESpGaGkJCVAyRAAxCiE5Vs9hOQXM9nmoesClDJI0PYm6z9sokEKjkes2rKHStCw2m10Hdbafgyy6+afaqj71sdCCR6IbE3APUyok4bvXTxqxspx+SFwqAUcywwoCgMR0aSaSNqua2RjCS5kPXxCXz7nJlJg3vPPNGGSE7+7GvKNOLKyfjTKu5hATIQrpiQTIHlCfzNmeOEM9MkahkL31eaTPdmFw9c5lzPgSda/GI2FOaN0OsuStNaV3fRIg4zjTbH5vlyNGj0ZRWFBUEJAlBQAkEoiMopUjbGmBMiFhzhv+gBjxqn4jNghmuaIjWEbGYAATGsqxsayZ5j+juXW/+2aKUxhsB/MECXE5HDIm5B8Qz0FLro+D06x4M4SbDrmHiW9B++Gl690yFhMZUrMKMcoKtmk4p2KHXpZ4FvRSsCr5Jwpn2kCNkyaljd1yOjItEnCfhbuzPnYk4k565nczVVUfUVSQt3rbAmjlcCBPJXW/XBF1iWymYL8zzZ7IOqwIl4W0B7LBsk+dUhFDHEYwJLBQJFJWuCXREWNUMiewNUKCLTieSktmAFLMqvBtWd7h4IBTAuvyppDMzSL//5vVkwT+7q8tRL7rsVr77qnPlsT5cSk8YEnMPiGvQ0k/BTJ0NNJT5BWhd40yHX2Rc5HSEOI5kNqoHiVbyKynoBSWqMGXM9xIyJgnA2V5ZRqQVpgq/mqSd7O43b8coO3/Vznzaig+Tu4aCCcMnUUl+Soe159PBEblkTSUu8473vUSee8ScDDLyA1PRtrioRZT5KFNTrJIEAEQRpdGYVmFY05QYijVopaF0CAk0NLVAhM6coVSQPgPbITgoxex7fGY+4GboIkQpiGiKElAHAqWglPk8iQQgBaKU/WJ5niYxujFp1Jqt1isBfLCvF9UFhsTcA8ZqkNlmf3vSihrJDr2mFrF0YGPRJOoZ0Ii0bbNlkChV5r0zcosV6JCgTCX7/S3K7ssrXk8lp5XLTyPZtGWKuV2ZO+wulN9HzkUuq47p3VIUVbR/DgEQ2GWrVk2sKWavrRfzRsYcRWPLJk1rihpJPBVqAEJGkTN4mHgq3n1tRLEEpOgwoG7FooKQlFiUDmi8NRRoh2zHOoKIiECYXPgScJczH36VxPoQpQgtoCiAARCA0BqU0OwTDfNS0nqamI9lOoK084MQyPkgr8Qizxc4JOYe0GpggtJ1teoKxWmfbN3V1pRhXOUYa9cJGIvWNgy+U2XM5WfoPCXnsvP0CoFnmvDMFqb1iyK5It2PvNpxv1JMn10oXe2OsP0kjuBy+5grN5AStVO+OZJOorMl6jiXnwAIxDwDbe9TxrzRjXrOK2enjI1a1nZZrJvl49aNYOOpBwUnHzYuK0fDzHGOhNaE8TqlQFGKSchQe+1m3VePdrslI0lv5ODhvUetmNy2rxV9677G1PcfbM4ICBWE1HEEYQixVhkvoCILrbHOOOLiW3Hyx4D+DSzrAkNi7gE6bEyIDvpGzAQtD1j7MlykOIo1JhuVDNvZA0KLBhhLkRHy5EtAhMVYy3MofkLKvkq2xKQkS37i/QFZheyrY8lty5zPK2MZoeevpaqu5S813zxxZcjzYPKh8Ena/TqCdoe0IWiFavXclpzdx9VBw7WkXOxt4+eu8dwnTMofPO+IoKbcB8MSbc6GNBqKBGZEoKTEDPi2VzdPYOmXbwC8XH7KtAkzGgpWjowEx64bGTnhkMbUjd/ds0trQgU1gjFAAYUUaEAC84mU0qtrX46odQ4WmZh7G0x+gIORmljcE/pKz9oCXQUHwLKa3VYZt9nHij8AyRtMV+ndpnS7n8wsSqIWzYZUofmpnD023eTS+eSB9pWobdlLkMlPsufM5Cv5xNl09K4TuWTu/J4JQCDW37iYT2XZXQuIZtm0lUzslKNXhwkpp1MhODOHT+6WyHUsYPLxh/sA0NqrtdZCTbGtNMkUJinH4v3R/8vfnkxnKPGkw0Ymznjc6ARj7UbGwo0FsHZ3WM+m8nrTDiJn93bA/DFUzL1AZCX7GFiCtqFIL9P013biaNPbmLyC9CZitZnkzRRJbh3m+Gtr3nAqGQCEiemCYuWiG16dM1sUmvq+DTqvjhOB5hMbUUnCnRROXhFXoeRDklXFuYQZ8cns8Y40fQXt50ekw7i9gmVfo7x69kjVEpD46awp42VPPkSFlpSReUtM/ubDmGYsYiU7tbXLuu3+pdrnmyvPQGLO+R/KwjtukyTpiDOOW7Hiaz+f3iexkBTAOG6DihTRAANYp+Yey4HjNn2Ok9e+SPbM/WJ6w5CYewAD2SC6f51/ZfxgtuvExGl2aiFBMc1XEXFd9CBQEh/DwXVYMGvO6GhvTkwXLhvJbvejwpWZLfImiwIh59KU3YT8trzSble5yvYlxIVy04N/XELSlqB8MnZ252SbZAha7H3L3OOEnCU5TuwHOb03eXL2D7YfX63TdNQ4cUO+AecpXHhlsOVz62b0YvlAC9NJNgASLkPVe5rjawEgSnHliASrR0XtbugYoimaRKAhUPQGNabmjO4vU0Zb0akAvjr3i+kNQ2LuBTEPg+qfYs4KvLQSJXyQ1FdTV+heLm/ota3pVlD5ZOAtez3KHef3KyNlR6R+z7xHuoWOPe/4YgefZI/Pnzu/3Ml1rlu4mpgnYd/u6zdbMiTtyNdLVEbQ7mBL0IXGlesktS6XleSc8cZIy2nfA1qilfG6QkZdo+S4pEg6uS66D4glZ7NO6y5X/oFYKhOSuUaVWTH3zHjCmfs4WoPsmo2pdEAoDRpSNm6Eou1sLn5m3SGmOgVDYl6aEMFhVbpmLiABaBvtwFZI0waz9UhrO4WbHZpNO6sfsxyRIefSk2Quorr87Ui5jFB9Ui5N025f7rzwjmlTcbKBdSqvJAuf3/KX7zfbnfL1FbVP0pn0OYJ2JhgXs4LpvWFGccN84OzzFnrkTMuahf5aT+4ZMYisDdlPW7GNxsIqCTkbk4W42LAi1n4NuCZR5pvYt7d+fkhfeXOv3ChF07AhtDYjA2JqBFpTApJaA0Fg3b61MXGAJQOb2kEf1f+rqcaQmHsABYv6cAAblzkpQGcv/3b1p615vJKUc0TZSSUXCNku5Am5SzIuBMyfi3Lzi+p/vxJuZXniDKPndvkE7Tdv/Dws4Qpy6jnJyxxTUM6ZD0NODYMg49Rf2VfXSfk8abwAIICHWpQyKRBAsCFcBBq3HxazqEWgyLSJiSQYuQYQmA/R/Cw0csx8ju4VQ2LuEudvYZ2IHt+e3XpDWUbmnUqNG0nLltqIKa2F0IkES/MwZug5Vca5knKedMvMFu0IOZ8eHYhYCom7Q4Z3WeBP8cz0mYBLiQnDU9F5goakeZapZ8/23Imck/P7BFN6PW3UclJW5nYxk6W7hGTdKX0AQGwVtJ9Dao++c1oH79wW1ypKh/etD5tPH+vv3HlFUnWkTKQBjgjGsdEvSlGDxueHGoqKiTTRBJT0VJMFOLgPl9E1hsTcJSbqOAFAiH4PMPFVTp4wBEhH/cGSIlDt9uObNLos5nxIuVIllyjgNoRcOXtJCXHPCQUitYspKyVEWUrS/gF5gnYEnBzkyp2xj3RFzoVt/kcESEi+iE7Pun07yhBb9oujCezTIpPJtL4pz+6K259tp9ZS9tB+1IDaUBOuUb2rByOQVWFjMiVW8gBBQtPMbgiSMexEtPRFggjYm4LmorrKDom5S5DNU9KXoH/IjFAWGBOwILU1GwoWSFpLM+9TxxL1x3wRKMEhKwIZrakScvXTd1DJ3m/vcZrnx9DTLY1HZ0wI1ew5nDJGkaSrCBreYiafEvXsElibaGezBrLPIWk2+XBfBxQfMStXCoWWTJ+D2f7NWai/2xXXdmnB9YcGzcnsnOvYF7fvCpwqsbjd14L8ziNxva7AN6xS0caVEgftMikrNbVHzlml7D0bWvFE11FqSZjmem0y14naJQQY3UyqzbI4s2gPiblLiMiZ8x7WnAM1bQ+9hvac6s1yGkFMe8t0aZPXo6Jyou1mgy5IefVYgM3POTjceMqkmhzptSotPTw2E+OaH+2L//e3dsaN2IlBn6j92spqghakZNmLeu6GnMWzOYsAJVzQ3ZvI3HLy9bHfoNRsQggeiCjv24XwK9MM3DF/uzMONx+kWn6uUx1Ovldn5w3TAK7YrmsNAo0Y8t4dunbzXoRvWxu0njHa2xzk9Nz8xLsuE8pUTIwQIhmYAphps9wHU2kXPwNeWNouzgsI3tVLSeeHITF3gctu5Xgzjp9qO3/7BiYkmI4eMwNmzeecpscZLmiLc8Y0JJpENMpB6Lr1Ow4gcYttSPnO1x9dO/GgkfkaE5YMDhoL8Aenrwp+/bAReeltD0fNiDa2hU2QhMsEMh187RR0opLh3dfUhFFFzibnMhMGkOkQXAD3CJG0726KwEd3I9yyF2E+Rtfnpxg8fwLxGWPQv2iJfHuW6uuzbPuF/sI0gxjAk0dEnzoK/em9CL7bYMYOcW8L8rZH4voZ46J/b3XQOrrWfd2SCnNiGttDiHT0ko1voKEkTIMyibAXrwwCrc2bF0ctA0Ni7gqNKDpTBPUSo+684FdXwKzkwpNnWqygEU9JU9zZlAvvtHspS1wQ3InFNLvF/mbMD3Z583MOCpcTKfs4c8OoetOvTQbv/d6uODEdEGmEOCAl6eRBOYJGStD+PveTuWP+ffcIvOBt4R1rTSDGI8y+FCbYBrwMcsd38Wra/CUXVu2ShzHyq6jaPHHFDl2bEOK+VneN/583KT9vMgSAyQBs6Orjvj5N9ctmXL/5iGC2m7wBeN84DRMR39uXDryC9UU1Zg1mjoR438RuIMB096nnj2GsjC4gIi+ngAvx58QxUdwn/ja4wPn2OO+tSqtpGUH76gEZZZyJ8ZDzMw6UYOMpq5b1+/GaJ6wwQz7E/rlZlZJfSQfVuHXPhl7dEerlo/zt3rJ7Bhlfce/Ywjky1oEc8s+9inHo2ZRTXnpSvb05YXtE6ZaU89gTQxodCPCFK1TUW67mjU+yNS0QJvXDKJxinYJX33qtp0q2zuHy54yhYu6ASz47e6yO9dMWJncijRrmL+d/88tzFO4l5ooyUoYA61cEslg25dvundZRNy3ZSmpoxxlpvmceOqrWjabXdOyqmuRd09ytoMuWSMnZmxXEH1qdmjeqTBte2ygZ5WG3V9qc03QCOwlBW3KeK4hLVkl0+zSDuXDvsXXRzx4TfceUDh6Mes9gZQBeMMkOfh55VJ2mrJ64bapivTsQfKi3Ms4PQ2LugCgONrnZ1vqdN0s41pxJwUTHMqHxhbCey2ZkoImUZWFszRmTRSnHOaaxHJHa16TQ/BYIavP0gOgFv/vlR6NdDZ1VlUDut0N58rtL7sHtLz609oxDgyRl3anZsrjLfjbiLdAjVe9EQkuuLj/ftIFMJtn9jpxRQs6Q3LpLX359nZA+Zu+BE9gQgi+akPiWKfT8Jf679aq5IQTPngjiix6KRzofkcWrV6popZI51y2/BeC8SL3BsbaZqZy1ip4FqSd3OU38ZK5lnAuGxNwGr7t19nhqnos++y47iGStwIAydjPxYmNAZXyYM6yRyjxryegQ0Mi+iZnOPmesUO4cXtN5sSBCiHPDc9sA5Nk2XyTfHFPIM11MgvcoX9a6dIoZw74/qIQ5Be1iXdDud+ld/mXDq33lnNlmyVml2xNvDHcON/2R0Pya0WwC1Zt9FDAEJokJzP+omOWnj6n4lindMzHv0ZANAPfMsVssmM97JsLUPcmfaNXeYecmJ3Q+zImLnHjL3Z1Kvjf3gvaOITG3AbX6ffsIF4SYDa24mJCmMpq+cjd7ttg01lPDrbuXrJhfIhtyp4FTohm7sh8lDj4pY7GJOTuBa2af2yyFbd1nL5WH7X7D0R1V3t9+e1f8rm/ujDKC2a24e+XIGSWBiYBys0ZmGUlLJi+oE3tz8pFWctsRbAAAIABJREFUPd8DAJgF8Nc7gtpzxhmfOWZcd0SE/9EQ9Vfbdb33HIE3P6Lrp9VFfzPnddEtPrgzrs3ESt60RloAsC2ifHwPwlv36fDvDwkaTx4psX+3U9hmpDgFQts7S4Gi0EXDdi++sKyqlEGAph4Jvz+X65srhsRcgYs/E70C4FOxACYMB9NadWIXpq67P3jrSEWWiMDv5O76m+ErUV+Nir8NKdEsIi8XPgRlHwr/N5+wI+b5CL2BHokHndueqOdUhXZNzs6WnEpqj5yZHlrWsdjzAyI+sScMb5+R4PYZCU6oQ1+6EtGaEHzHNo7MzvEW7Y4pX55p7z7XCR/bo0ORgA1N+fQ+HbrOwvfs1LWPbQhmqxmfSV2wvbiZjnS37JSyXYa9yV2bMjTx9U/8pkzN5xp7xZCYS3DJZ2ePjbR+28JzU75zD95y2XZ427upScyQXsGE4auxfO//ovpjONZDquoLZDx3xdyG2bs/PLFppK6wperZXktHcnadgBXknDyD5FFL8pzSJ989mz4ci3xqSpL6/uMm1Du2GzO7P/H7cXXRW1tU0wsmR0yH38GB8BfNVGVfs7sYe+PHDarP7GX40pWS89rI2/nz+/y64/7E+0VuuT0Ckdu6SthHDIk5hws+yzVxHP1vEdaxgGoZQOqamodm0ji2cwICkELoBMCV0Nua7wxM1J4zFSBLugkpc978NWdYE3Ny7sIADiC1p+eP7ZC3f8PmM9FxJrhRan/O5JiL8GaSlvQJZCzdjoi9fe7YxNPR/orO7iu5eBEhyXzJ8E97VFjmtuaT8uWrpXXJJKIHtcKrHojHOnlprAuE60JwrRJOkbKtBXksZp5FMxhXwn8+TM0eFAjfu5O1T5UQso8rd+va8ydUPFFmvsjcAls7rK+c6SW3Q4I0YeOopxPMsDsbs4j86uhvhV/rnLK/GBKzh0tu2bYyYuvvqXAkFpiUgcSEbJYBwIuP4WYoozGaUUBoaxZj9mX0Xi/73qU91WlKb5Qh3I//YmZMGItryhBl1WNeHZeV0aFXRV/ROfW97c3Mc56oCR4/WStjvFThZswO/ovSpXLOEordlm01JCYN/7rd16vkAyri28SyuCcS3jVbMl1JDseFIES4IQDGlLBVMjDk5BHoF0wE0VnjiA/JhPc0Sac05d9nRH1pSod3zTDQueKsVsDawPgaH9tFeNDtEeUjuxi+ZS2SYeF+h2/qlZEOtRaQFEnHA5jk/jLYZecfBR9YzBF/DkNitrjsVh40y/hvhTwei0DKBraTD4BYFznz2glIZXr5Rawrlms/Q5LWmT0SVb0Y/kASR3y5aaEKJozF7PRzcGaVMhOGeGk8lE6AWgb3iaqIi/Dszz3c9NOdcciouu0312dVXEKWrnwes1rTRk/kXBje6Z+I2Y+AM2ck1g7JPrdOly/CD+7tLirE3+9ibQcFd88w2JMj5aNrot+0RrWePY62PscTSvi8CcTPm1DxL5pU79/J2r96NuiHIsoVj7F+ch36o3t0W7XssGWvrr18MogOzxF5NgBTZhsFyipnN/RaKFSJHcp1CLYF8dWPnVe7q5sy9htDYgZw8edmj5uNo/8DcMMiMTIAQHu2ZMLMXpz+09CFbS6dYeW2Zc0pTQLZUWwoU2Re+kUkaBcXJClDCRnn4zR32aGeHmN6TovnDpCaG8utA8kHK5n0tCT2RXKPc9v8jNM5+PLKWbKmJv8456XhztjjY/llBPw86u6gByPIu0u8M547LvFfHKwavQ7OP7Yu+m8OkcaWPQjfuyOuO0a/dZ8Ob+0hn5qAOzXk8Jzhzgph+7/5VJs6A1tHaC3Npv+Pnl2Z0FBtbybvi2v1K3ooZl9xwBPzhbfOnqtj9d8FHMEC+StXwYkwt2KUF1NhJW4/zfgD295tH8SICZFAzIFWdUlyUp/80rRIFKsIZlqL13r713MPreebvAX04TtxyGiQyWUmsmrW6cl2/UG25dGOnKuVs9tS4nmZZOGbNLxy+CyU5JV+pMTFGa64f8eFwF+uIt+3D9gW9/61fe2kar15rbTmc/s3TiI6qhbwHY/GI80ea9gZYxL/8UGquT5Ir7BMKaf7kAn7mXzXhIl3hpeuPA/wsWCk/vsfP2fxZsXO44Al5ovu5DqZab6dkGfbTYtKyu6MmT4feIaJpM+HGftz0pLOFNezKec7klxefudJpiksXqVP39rtDXLrvogbVoQLLp2PnFj4c5Thh7tbGirpIoJt6RbfA1F0M14kg0gcOfsDRhw522eXDChxG7UlZ/eQ3UQ0/tUTSAaVuC+qKFB5FgT3MS3Ae8QeeT19BPzkmG6+f68Kb52SsNsX/exxid+8Fi2pbEp0j18fQ/yOdap5xWPd+UvXBfiTdar5ohUlfYl+ZSnam51goe3ZpLUemSfCJI8KYuYuifRbrz5XFnUIdh4HHDGfdRfDo/Y1z+Vs8zKIrMQgCNnC7/xz6+aP3rJdB1ITQ+aFordka7yzQzqbqO91kTNxFFSY6ykBcOV3d8ebz1y3bN+RD/5kKvbvjRvcU0CmNcEsOWfkahvl7GzLQNaEURh16K8jfT55n+42KFOUE0L8yeq49YNmoH7Z6twReHgIvutgaUiS3/y/neetlNb3ZqE+u093fKdaBJ42rqLSD2XOmAFbRiZmDKQBjcRWC6uevRZqwVpHcG9Avu2al43dO6cL7COWdfSwPC6+pXXGUXubnwTl7aJlZcbNcRB/9P7y2/xllGxHyT6gSLwl2yo7/HJmjr/71s7o1p9P9RhgZv/AlT+dim68fzqGIBs1rqpG5DooCzOI+8vup8JklNx/VZ0m86HM7PeWOyFHaVsjkW5IGQDeuFqaIyV5zBdvWiPNsS5iYxDAl/exsyjI15GyelW27Nc58xerlvyPa84d/WmPl7QgWLZqyMeFn22cIpA3knySfaMHppJ9JM1aABAze1RivhRJh+cC1gPOVex8Tt7l2B791BOjjVou/GZJIAZwwW1bW5tOmtQXnLQyOH5NXcZLPMk6XWU3mxYD+yKNH+5u8ZpfzkSfe3BG+4NGqs0DKN47pveYmS+i9xycBQNITRni7XPP3o3wKLMWSH4111lbWlD/1fYzJb7VUF2R8nF10c9foXJdhv2pMutC8JUrEX1iNzp6ZHy7QbWxdE9WKaflE9NXKna6H7ED/5LwuuLZmCVnyuD7PvaykW/N8bL6jmVNzJs+33ya0ngtiNPsC70kCNnBr2TOrJGaLFAYmu2G/2toO1VDfjAJgMScgWIlLlPLHZQZAVz7X3vja3+8N84obHH5IbdNsucqKMo078TTIn9+oKQ8bUizE8qeujtv5iG0abHnt/vknPe2cBnb7Ojus7M3F0waflmQpqEU703+I9EGswR2aWCaQByL+tdZ6Wro9PMn2o4RmTdeMCHRJ3azIzF/Y0YH73pUjUwE4LgAKxT4kpWI1gZijcelj8X5K2fiMSPr05zxYxbwix9/yciN/bzG+WLZEfPmzZvVz576zl8PhBcyxsl285IiZIc07GfasZ6MBvSErim8cQey1j6itGfaKWTxjaYGfvKq5rC/rvLKGwVySLnSS+NWHblI7vhUsXjHeGSVkFBexTLJ25SvePXIJc3AdzLJ1OjMTS6HXx4f9oE5b5o0X0e8+WOyaQQwpK6QVc1utJ/pbUyX/b8yQvfWZwhsfExUOnov7DpI0bPGEGduUhkDzgPHj4jeEAq3tpk1BQCmNOS2qaw9ek0Q8NyViABYtVyw4SU3TZDEzU+6bdKgNIakCT4WxvX39u/q+oNlQ8yXXXl3bfbIU5/3C+rXKPCopaiQ80jd4bLrvqilc4gX9wrSmzGbsK1pSQ6AJT0XThLIkqHbIJkd1Yos2S6ZXylNLx4pl+STIWW3LXcDSrfb31w0vHQ5V7/9OuregMyUUenuAvFXNPYzE6T6yJs1vI+qM2Ekz84f3ZcnU/dx8lUzcqrZlaMLkmxC0OqcrIARAY5LZjTpMyN7OKEu8daoCxtyDhQNSRxLsuVL5vyz7nKwSjk1ZXgq2c4QFGt599Xnyd55X1Cfsd8T8/lbOFYfa754RtRGxHr9oMvTC+jUMQBq8we7Tet0P2kFlfebyQcorz95ZczcstvnkwmQkkAy0k2KdTRZ905Cn/yRkop3TObjkOTjE3mFSsuQsn+OkutOkCdsS3xepNVEhMIvQ1Vuntmi5PwpOeeYl/6qZJpEhTz97P3jWLJtHnhcDfr0OvSdsxLsilOqX+v5C2e+HX2WOAcH2as4OADPGlfRv80yeLDVJoRo7v4k2sN7XzRtFFnaemW9D+lNkA0CMeTL1/5W7Zv9uqZ+Yr8l5ktu2bayqVa9UlT0MlBWJupxfwKZDL4jKG4WbvOyabHSzk2OnaQpXKTp2ACEkri/itdedqIuTV+ukCvVsrfBU/QFMhPvz99XUMq+Qm+jkgUeIZcoaLvcbgSXzpCed15/UEmyP5+5X5YckWY+aJJlLqbpHRGnqjl3DW5dwQbG99NI9l4mDSPrWZzpEWbXhK0EeP/BurEmAJ85q9R/34ZRt2+1yudiTtFuUMdcsCbIvsbvXh/MPmlU4vtbVC9/IB5vf3TBfJGYNQT0B5ZkVTPSOQ8JRiMj4Yf6eU39xH5HzJfcsm1lK1z1ipbmK0QwkTiT74fwS+7LFH/iC8JTziDd4NK0OW6P9HnAKYMCscIjuHyl9/Yro/4yZFlG2gXCzuXt/Ul+mztXnpT9/crb7l2H6sGnV3lOxdqzACX5lhF0GRJizMe+sHAmDboBJEny5NdxeEY1+x2ICZl7x+bLUPZMUZK2HQjEpvXCvLljr+txFmTIuN8VbHcuFkdkLXKdzC/V5TCFJszUUvCmlyLtNgDuVzG+7epzBjuIpB32G2I+fwvHxsZbG1vCVwCYsHEf9ktCTlBW0awiTe3NdiIGM+EEs4q1cKyj5pJ8rWZ29mdHlG7eOyBLhPnfKrXs4m8oTxFDMj66CSnn868i5eS+pNurg+Z3YudU3Sovv8zoPcAQdFK385DUvcqN8NMeAft/ChCKUeqJkrZE7IrqC76MvcD+KvGDpdllAWKY/gX3giB3bJe1QQO4bJsaPa2O+KuN7Dx/22MryAsvWX+r2rZcx98fP8rRZ47p6D9mOg8+8ZFX8kYZa/u+m/in4tuXrbdGa7qxpLww8ljyxExSLv584wVE8/Uk19mtgy1U30AUZ8QGip7wZX+5fFzFzMVaBiypJQotsyOXVlIi9ZKVLufWVZkCl3z6bkk5e/5iZ2JJ+SqRKkD/PrmPRZagWZ6nK1POhJGoY5u1U8DpOgomCsftKVnb722SV/6Z2HkgC52A3Vx7NbZGkK1Rsf7PaMoDLagj6tBd3uA54RdR1o68M6bctq+zC12tYFIpmjXS+hR4y4DrWBClv3H9a9Y9OLeSLw6WNDFfdEvztAtva/wOoI4zW/rdBTFYGGux7YliMtkmCGXbXgKtEzd5O5eyINZwo1FINwQbjlDLKneb5aptJQRepZZVmVdHgVTL0rQn5VJCLlPMVV1FxkTvqUmPpK3aLQQmquKiEjIFUOQF2/GnRMwA4W5Vs5TklV9uty2HlUK8ehzcqQVTBGag+atIyWNx56O/MoNgUw0l0Zj7g181qe5tdh51vCoQvmk1misCcKUSrgyET6insZHzphaB7TSHkFCkKLplMwegAiFEM/rSwlxZ/7Akifl1N3F1XG++mcCzzWSly0YiZ5B3YMjuRMakYdK7Tp8kUENZJXYRELPfsa6IuFgGf//TDhlRF584GeTzyIfkLBJ7SZ5Kitsy6xUkWZq2DUoaF+VpzC09ZFQVc/TvT/Ldyyvd/H7vXKUde7n0+e1V20pRtEsrAK9bQboPyYowbnxmWgd/vauzP/NdUwg3TaJV+Mj3Cf8y3R3v/NoI4pdOqpzZmRBxHQPZ8qUzgSOJk4+s6xwEaN77s698oz9XsnBYcsR88W2tZ0VsvkUgq7BMCTmDZHbl9F1z5rCkX8+JPgKgzjGBHyi/oimeJE3+K2kLS5Zk837LAI5bVZeLTlyx5N6ZRUFiyvCUr0+qmd/2qjmxLPkHuY5D5BQ5bLqyj1UZibfBqXV2Fcv1+w0G/z4jwTPcQJP52k087NOQT+3uLkD+qaOqPE5LiY1elAmDa3VMYvMTF8vINosYxz/++h+dNz3vC1lgLJlK9obbubYRN98aI36maXEeAJzs2ZKTuFiZ8PgmKL62v34wfZcDgEwFTcYQeio7TVNMn6CdKksU46LPsLOEwGwLJDFLMJ2XMaOCXaMm/6yYcHEmH//XnYuEm+cv89czT5pzH1ODPrIGfX+rsxnhfTs58vQxmQ7SC+r1pKX4yC7W8rOjVOE3xhmXnde9/5LZZ01/uXpi6k/quE7inj5cxoJjSUSXu+CzU6c32fwghM9AdpTOAfMnmT9xJmVv5JJkj3HI2JcBjw18z+UiurVjLpCdcb9E3gZddY+87YlrX+L9ItlDuvlIdnpWXWJbDBnpUvD8rEn1N9sxkpy28I72/ve1GR1ct6e7eMwA8IEdrG/XxXO3O8bUHaENfm3rj6TH6sZ93Z5/kBisYibl4tvjV8c6vhCEkmXWudcJQvclB5g2wARUBBUE3nx/VBARmLDuudrpXKiYs1R3Y6MsrfxFM4bBkviOLz5ci8GZHzKdeSW2Zj9dmQ2ZufzchsScgdxBKDcndFNb7Gv12WkV/OOeoLavhy69G/fq2jF1Fb9qUuYyujuDnzap/vxRjnacqcbDl6cZfvv+eOL310njJSvztmaD0oEvVASUaZAGQlOfAFCoWs2H53gJi4qBEfNlt3J8+vPNt8eCZ0K5rpcDC5n5rX1zhJimbFK/ARtVjm5sn+3dcM3bEpj8PGXtVciCD6ynutuRdwkvv/ee3dEtv5qJ/SHT4ogs77Ps96tlfJq9Y1wZRKXmmMxgmT5IeNt3mlhcCQA69eKwt9XZ+LfORswQanIMSoi2zTK6OKZqX/Jb8Ywq0IJg826RbzXQtVL18Z7tenRrS6m3HiSNuX6W75pi+BfbODozBz+PPRryrm0cfSzW8rrVqpnZWRHEiGKcMdKocqSN3shWHTNzvIxFxUCI+aJbZ46aCVp/AWADDgRjcgXKzL5+vxLgRJdpSwhdWAUtCYEI0sEIyoYBlbwNzldlyJ6wUKDcvg4mjfunYn5nR1MnqlKAJIhSvhmf8V9O14vhQQVQcZHk+2VWIVJydjc6TrcBpiVMf93dgyrVbJ0Zs6P+7AHuOOed4aOMuP19Vei0z+apQGxtze9rdu0eXf9RQ4LfXyuNk0al64kTdsSUK3dy5Oa9rM2nd0IB+G8jEhc4OPehFCXphD90keXsxGG0jYc9M/vFxA+LTswX3DF7PCP+FaEnF/vcSw/5wSX5jh7k1v1pTixcyMgydCDVee2rSJ+q7qw5pBgHw6r0vK+yIBk1KH7afpFyUjTDXgJLzqlVCcWIcY6IUVSzfp4VKllB7HBwmw+9cwMJsVfm6//2iADApSs0/3JPiRtgDsfUoS+ZRPObsxLcmhvs8Z0Gg9dt5fhZ4xK9cIW0njEuUdms2QRwT4PBv+xDeNM+XZsuUcnnT6rmySPUV+1CfWu7gEUWL16hWuUfhHynJDv+qTBY0FjT/cKiEvPFtzeeGEXcTMg4DkDTRR6FoGKuFU1PvEGScCCmR9BYNE0ns6nlySi2Qs2mv+SZNXLKOaNU3bpTs5ZHKkSXibzkhUgqqOO8eq44J7LHJYITqDz3vODI2T4EM92fpB852xIpvKRmftT0V6dpkY4RKpgkknzch8cel3VgEzs0XIHKmVbSJoYLAZs0I7q8Lc8cAU8fof5Wo32g/DevRuNZ4yo6ZyVaX5tB6Eedgy3yl6YZfmma4YgSHl+DXhuA6xQ4TcGjMdV9LartbQaxHFET/YfrpGHea+IvH+NoVVoAGFfg766Vhr/N7wB0CyoJTiS0oatovbjdWC2ze7S+CsCSHvUHLCIxX3hb86mx5p+KSB1DUjYQV0NtXEJRdkAfRMR08iWh5Vz72VTKfNvayzOdwSRJUnn+9LegdEvSdMyn03HttrllyS0vBCmXnS9Ru45JPdXsj/bLMGxqxmirosv25dNU7qxe7QW/Nxm3Xr8tCNoN/LunIcGzxhHd24LaF+u2zN/QlHsycTa6q9LbY8jWWOSwEPqHzc5q+ZLVqnFwKL1bQqx3Rhqj2awHMrYewI96zm+RsSjEfNEXW2cyxtsFDDEk5QSZ1r0lCebISdI/Oy1OGirU2jnNiFMAbW9tJcG2qe1zJYKC0pXcPrG7M1+G5DdJ3W8TRhkSrwpPoVd1yFVtczskZ2cuPV/V8RVpCjvmhmNr1OdNsPXpKaml26DPnkDrml0ciSG4Zjfrd04z3BZBRQt042c0ZeMD8cSaAPTNGC+fVM2zxiX60A498oMmA8Co602rg2a797ow5x9cyE8pBC8SAeMgOHpBLqzPWHBi3vT55tN0S7+d6H22guUOTRsNHxpa07RrtQap01iFmiDNfk2CWpvjympuZYVug27Sdqmae1Ld+W1lankx0I5888tVx7bdZxaUSDY2dKcytCuv/9sNbNrLJ+PWnTMSrg3ASyfZfM4EolAUjwjAv9qBUU3ggS4Gn8wXs5qy1bM9v3CFtP74IJlVAJ45rqKvz+jwk7tQv3CVNGulg5r8i8/2CGpbV4SmvogmIBrUGtSEBOrXFuzC+ogFJcuLb288Mdb6jyAIZKiUC/BH3roPf6qYneXCdDAbxUyY5pl3QOG20jbjgKxfs/8C+y+7Sjf7v6WoalF2odTb7asyhSwqOdtblpCkU71Mlwt+ye66meRR3hnL7K8b1VeZxusEltzvPKrRqkD0DYdyemVA+pMLvHiFtMYC4Z9v41izx+wPDsCnjUn0byU26W5w9rhqvWu9zPhfgzPGVHTGGObUSZcMJBHa2bI1IMoONCGVUse9+padF+/dd/9Nt2160s65nGMxsGDEvOlzPKLF2f8hIjUMSbkS3hgTN3tkWg81xc3y67lhZacwMd1/ltVtxchTdsI43kbnYlfFD2Xqrd1TrFJ87UwAiaK0v4LEC62rie36hRxvJssJJ7qbbu3JeY6s4NTKNARcXOfSdN3+zeEyVyntviIQUckkV4+vU8dzyPN9G4Kp4+rQ355lcPlDnOj1+HtbOiCCni4n6WFRSJxtKabv1fr32wanoh33Y37t51DC2ktXrXn8Cy74fPNzrbB20w3Pl929lnuhsSDEfP5dXIFG650CNYYhKVciMRaLQESB0JDUmAw7j5SVzonrQmJM69zs9YLjszhgsLfCAt2O/FtRE9kXVbXbXdHSwgQCnLo6VIePhVLzvTYWE86vGcgRoPvmMb3f/uwxGnCuFXsaGt/d0dTbZizFdfGMykzVi4H8KNuP7EJ9Lg6+Nfs61uZY7l+2oO7Yp2svWFE+sq8MHae5EkXX+ed3Akq6HQKMQPjSkbj5wtfe3vxiA7VP3/AC2TG3q+g/+k7M529hUJuZ/ROIbOh33ssO2kosN/sqbBO38Gddp/z1DNrJ1JIas8CV/+pnrKu//Vs7m/fPljlYZ09+zvqR4D1PXFk/cixYZCZeGMQEPvWLqegdd+9szjR7cCbo5kPbFt0c7PRxdtu9LVFfmEJXEd/y+L2HOf7MMUR3zcy9D+kjuzhyzgq0+mLcTj6Wtp749UibwBumrhlPKAIjAF8ygtnnb/r8zOeUGr3xE78pU/0oynzQd0P/yGTrIig5OW2CD//m9sfiOoztjEhdgLLVscdYI11TYW+cecyKUD579sGjR47nyDaXzTnrR4JPnb56ZLmQMmDU/4XHTYRbzjp4pPOQDnj3ZHC34Ma9UusUw6JWQfwPtKi27NH1bRUDRZQAazpYKu5tQv2si4EmDtkIiwZi3f1N29BN+9d9fdMidYq8VOvZD17w+emXX3Z359lUFhJ9VcybPj/1NCr9EjmAh1n3AkpaHd0yxesUdAHx3TahG2Ngup0X0w7bI46eCOW2Zx80+uKvPjZ7/0yx2isB3nPKZH35UHIWzzpkJHjl4ybCLT+bWtiRZvk40d0ckumFEFy4io2dWuTOKdbKcjipjvjKw4Op7zQQ/Mc0w29PM/zPJioHq4wo4TkT0jp1lPFvjKtWQ0M2PhivKIuV8fi6xG8/SGZPqHc/1DtzLQI6s5dSdp4/1/kXeBHp7J849zl3bDHDCYG8dmp74wWbPjd74/H/MXLn5s1z8KOeJ/qmmC/8AtdDwreYMA52BtHhX9s/Y+dT3rJQkv2AUFGgzDbYNNqkSq0VeZVcoZpzNjeks7zm/iT9S2xz9q+svZzP0zv/UROh3Pasg0aPHA+R7LPpTl1dl+WklMtw3tHjqmjnzN/T5J7lfrP3y+QoTO2nvYmfjF3Ws5ULhIcE4P88CDNXHoKpE+vZaB41EH+2Xs2MK+EZYxL9/jo1+2frVdtAQIeH0H+xXmbOm1TNtSG4oQ79lnVq1k+zOgD/6CA186kj1L6njUl/Pl50tnOhUGXrGgNzr2nqXLJc/bcOSi7/2TOa777gjtnj+1K+HtAfxUxK/IXZN0PUcKh1L3BMJ9ll5zKXviNiWVNc08ve5HLbcmphdnybszWXmRrboucDEhw1Ecptv7F27CVf3zFz30za779hpD0p370nir+2o6mn9CK9T2Wdf257+pOkEwCPXxGqlxw2GqwMy3sqDx8Luhc+7a6yr5+vlKDzc+adOirxxw/H1K17UXv/To7uiCGvX6Nmn5BTs5MdTBNlrhnnT0rzS/uk9t0ZHb5oMmi+ZQ1m14QVIqJ9+b3F7PGmx8aZMPKmQCTR5ry61vH8BI4VyP/c9IXmV0dma9dcfZ7s7b3MvaMvxPza2xvnapGTwYrWSBf+jfpAnB1Dx6JhOyW0FkKDcSw6jgRxLDpqidaR6CgSHbdE65boOBLqSJIolYo+ExvvgcQ+4v3M4vrMAAAgAElEQVQKu+RX9xxynEJ/X35H+/f7qIlQPnvm2rGXfH37zH2zMQFBUNE6nIrJy3+0t/G5bY0upg3tE4ik0yghZs10OwV01hi33XYwvbOu5KqnrR553qGjhaZ9Nzbmwl2oupWiaKIKuvXMzooD7fbkotxvdcEEwHmT0nzehLS+MMXab03akXde9is79GWMBwUTMATAu9er6X2xyBFuQtW5fHL9oicmHJippWA/NqS5X0TaUU5tbp8w0/nXDeyMVc+eHW08+TV3tD5x3TnhV3vuz+kR8ybmi/6Fh8etmVfn7TW0ZEw3k0BmZ0mLeL4F2Q9hfOGMNwbtC5SYj5PaDwg0hBqAJqgphZF/HjOXrTti7uUud/naHTEeqNPW1pVxQxYgAEZV8URHjYfy2TPWWXKu7mq6/Id7G597dDZOAhstFlixDPsOl+0AsWM25qavb5/9l+euHztldS3zNRsPFU5bV1PJ++4uOyF88/PzXS3uSloTJdalttvL4BN1ulw+EQW9NJKo6IkAfPmklA6HHg/AEETVsO1JVV641QG4OpgHoXkNk0qXOZFkYIkSUIn0ZmNuj1XC+M2bbo+erUf4T9edLY/N8Uo6Yp7ETImas78NhRAAM2QM0B8BRersU+yyo2JZI45NS4EE4th+4GPoOAZ0bIZjx2ZdxxqMCTKG1nFKti66GZDe06ROlt3jCoLO1s+u8bYnTtbe9sTJrnqwE3L+tx2lNspv7o7i2x6ZjSXPKwsNZ67w//NVps+NQEHmNmLif92zu3ntmQdlIqUdPxmqL7/40LFOp7/wjkdmb/rp3vYTjxLIROSrujFl4lkkcz8JQDlS8p63iNUHys+9+EIIgKsPC/btrmjTPK7e3+avU8PZEiDxhfcJVlzfCALtohoAIAjSDqPNXdwcCiSnoDn7nk13tD507Tm1r88pjw6YDzHLaz6371kShCcBYkjZ3iAhQG3NF3StFvv2xzmCXiQT4lIEGZuPmAbA2H7OYpDaEDRjUNt1apPeiGZkmdTlh2qTRZ5cHNwIwHb7iPJRgnPAUeOh3PbMdWNX/nKqMKDga4810jlpBQvgzFmCsvvSRj2XHgvgS4805h+A3T9X8mjtglOLdDvKbo73PuS9NJKAUGK8Fxy5KWXPIrksJauwc6d74nifOux6RrVqFuUGkZASCCVQlCDUSoVEGFBE2TRB6fG9lULGAP3WTXc0T63Vah+55myZ7XxU95grMcv5W344oZTaxEinKtkE3BGnlLWO7V3UicrQjGWoli0SGzMA3TKGtzgSrbVQR8LI2pd1JIyaxubcaomOW+a+atoYwExjHidmC8B3pzNuHigh7SqJbAyuqfSpaJ/OAYePBfK0tfUCs0xrmrG0jkOcZ+oCqmbxTApwvap5S0HZcu5mNGONmMaPed6o+ohmmhH+X1lBkRBx1w/O/0jn34tBdwHlDPbK2ZDtNYo4TyX7QdGAmeuPtg9HbLxtBSgaFa77clHPipr6uIu+yPd+/PnSt4le50LMAgDhxNHna3IV3RgHrUE7HF0zFluxqXVkScSRdO5+MF7Aare0QR2bt0kD1C3jKxVr0ToSUENHTbMcRaLjyBAzI+i4JS5gBmkD5Zs1JB1ERBp+UgAww9IpJE0rtJ0jvjxKAsETzE/2OgdoAm/97s7mnkjzvA2jmffv5BWhSsqZqOYebSudkHMby1guHCMnGz3V6Q/JTtIi2X/iyprqn/NfqT0CaXxuBYhGI2b25iQmi5wdKHHPc1/nrFoGYM0XqZJ227JlGjycyiVoTRnZcs2SEQKhhEpLYL0xAlCUMm9WYCvFPNRyHgQP02y+61W373vvP79gxff6kWevxCwAcP6WrQchVM8hY8OyZuwMGJupjwSgjiNhHMv42oOiMzcEG556cHD44ROyZkVNxkJV7Zx+IEHrNLynW9ZaG5uy1mjFEeIoQqsVSxS1ELVaaLVaaEUt/PaXR8KpyH0KaWNsWGNatv5ZgyKzNkpX6ZIZS6zNTpCqE+W2m7wentW48kd7AOTMnJlfwfnHTGBNURBDE/jTH+7mHY81as8/pGh6feH6kfBJa2rBI02mQtkrX19BU6CYYDOibsSIGpGOU7c4APbZZKqw3w/opb38CSsKdvZHZ2Je/3M7wMRmfNrBI+o3Sjw4koxoWzcJt7oHQBgfZhrRI4KfPTajj1k3KtAULyyemfsRALT9SCfPSmx2kgzKEKW8r615L9Im/tIg4zxS27Itp30ZZyLdemy6NSvhqDZeLEJn3lBCQikm71XvHX8doEeDIPjDC+6c/einnjd653xzm5MpI1gx8VLoOBRqkhRoTa1jgaZRyHEsWsdyzimHr3vlccFp60Zl1XwLuhyhrSAj02UtZr5OLUYsxoEgIBBB0DLDTaBo4qgqpELOVEtm+MI3Q1dqXU9zFZLkLAk/3tnEj3c3k41SMcnqczaMFYhZE3jnPbtx80MzogRQJeassUDw9ydNyuX37MHe2JJzogD7SM6WdO01SxiKGlcII6X0vhabM1EcA+aD54hSMtMtpkoUAC44Zjy88LgVhbq0dTrmn317VwMEGBOAxu/92upagZjNhzVpmrsgVlk7s5vlRlvFHOCWHz4WP+cJawLlXOmMDchJeUCpxG1NoKgUWLiPyews5hih8jrH+txa6RJ+gKs2aTxSNvblu+/f+xAkjJWoZACPkkCLUoQoWN1i0velxyQHMyf3Ja/9YvOwTz6v9on5qPJeiFkA4GWffvhgCJ5lOqoo0BqxIWXoqKlAIhwZ1ZeetvqEc44Mn7QAWmeIKnhE7N7CbBg6y9BemnbHd9zXLr0HTeCdP9iFmx7q3D9y2mQNn37Kanzo/hn82+4W9kQ6VedW6szrjXKkbO3JCe8rAkrU2hpGZ6Jaa28zbmmtszZnTy3XROHElUHwumNXhK84ajxsVyT6bnI9w124uckiAioFxMSPts3qD/+/rdFv//qGUBI/Z8meyytY/jH5yhkQSFCilKWwsODI3yZVRnC+65xS/OWOxs6b/3PnfQxqZKAoKiCDgFolnzVQFBTSYVcLdwHxC159RxxeD34Uc/R37lkxj9THzwUkEK1J0+wW6BiMI2EUgbolb3zGoSefdUR4ylwKNEQPaEeI+X2Z9dxOXzW1O64TYaO4XxN45/d34aYHZ1J1DWBfq7rj5YjRAO86fkXl/kVAzf7NC7tbujDQohLM/eZvajIBqzJfFSUAQ1z/vW3Rz7ZN601PWR+efOiESjypM/Zmsf/Mdl9tGtLzTFvwvDGUWx8Eqs/q3OdIYMdMa/ruB/Ztvf3Hux9iUIuDIKRSNUIpmisRKoC+h4l4LYkFLP1zL/jCbONTv4lr53J8t8QsAHDW+++aYIgzjCuBCeIOxkIdQccRwBZefNrR6559+JCUFx15gqza10b1UnyFLQlhp7ztFLf5TTtgvAwTMvBI+f7plPht8nt2t9DURL2rEGz7J76xrWlc6PxnUkkIRr4nI9Dzph6PsE0noDNthLj7gSl9932/bIIxJmtJI930D8fGHn1i7f7/HKtxFkFIFdZ0ENS0KIEEda2sKxkkpAqEEoQmKoAKPZtssMBU5qH0nZDUtc++S7OximKIVkFIhDWqMKQKQkIEKggoKqAKAhPLPFDprC39czDqhBe+5s7Z7dc9b/T2Xg/sSTGvP/YpZ4BSJ2MYu3JLtCahNRi3ZMUhRzRefmx42mLHOD+g4Q/BLuxDd/vKVDLQnemiQjFrAn/63Z24+QGrlP0IaCLY2yI+ft80Lj2m50kv9gvsbGh+8Ed7WjqOPfMJwBK/M+PRZfeTdtg34cZpZVQ0YVQztUBZU7WZ45jQCntaGogJKhCakNh8a/foOIpi3VI1pSXWOgipEYZUBBShlVKEUlQS0AhyIagIBSgoq9QXCaXT/Cm48EoSBBQRiAooyvxCBRQVkqKgVEAqIUXB+DUHaX9qsPBqOQu+5oI79j38qXNWfLeXo3qzMYucLSRJbfyRNQHdgo6bohnhuUeEh68dGXb0LTqs2jWVNvvWOY+NUnNFt/biKhLPHONUtjnVn35nB26+fyZrF/aLJsB7f7IXh44EeMmGzIC5/R7bZmNe8KVHZ7dNl0zW1K3rbOFISU1BBKACCrVYNwpQOcup88BxmQSEKKpwJFa1OJYw1CoIqcKQEta0hMooTalpUSFVGBAqMKdSAa0bnVkeJJxit+YV5cqjQvPxkMAofVHGVi4BVKDMgBNFiLXVpKMEF009CiS8/DW37vmz686d7HoId9fE/IobHz1OEYczjs2laeMep+NYEBO6Gcvp69RRcyr6EP1DR4LNmikyOyk5f+Y25gy47db84RHvu763C9/c3kitkwmR2zxt3pEG/uD7u3DDg3Wcc8go1jlPDvEOKm/Vzv3eVG5jMY0Rr4zMEM10f64/1a00I+I7O1rxx3+yN9rd1CS9qEhONbcrm6+M3YoWpNGVYJQjYsswAY2tWYtp3sfGDTyw51PuoQkkDCkBqIIaVVDTKgwJFVKpkAqGkEVC2/QPjGIOajTmZwEGTcxAauKQwJRLzIcDUFCBIqAgEhAQQ9Q06URbUl50tezACRmpXQbwfxWUUwW6Jub62MhTrccydBwLSWhEJnZD3ALZwuErZV2vRd7W2o2btv97r4ctC9AM2jCtUPtLTejYDL2ObYwMHZl4GXErRhxFiFsRtrWejkYUpNHkko61ZACUWVLWJkfYkU82ncD65NnC5P2Z8+nEcgKQ+Dd7rkrpQBQRfOnhGYyoEPWgZsg5P4LPkZUt1ze2N/GNHc1Mnkk53LXliboTeSc32f6XIVJvmzMfJPvT7aCZKuqRvc2G+SYl18Iki/yEqo6AM4Oo8ufOl9Flx2J53XldXJTkQdCY+bUAShn1LIkV1U75rc1EsoAh1gAaQahVGFJqNa2CukYQ0qjmuoaElMAqZhE6NSpWlQ8cgTOnpAQtlpihxJZbGU8TFWSGQ0kgTFl5Mcb6F3DCa+6YfdZ15+Ar3STumphjJU8RgmJdf6hNiEpoTdCEqFxRk44BW/J4pLkLf//gZ3o9bHnA3cvMPGU0Pq/u1wUvijUYaSAyv4+2ngAd1VMRpgwpixQJTJSbd0eyAzZy/sduf6KAlWT3SSLA0rzgkbm3vqo2hnpQSxV1QsQ5W4gfYCe3LXH3c1woQOKQ7ZttEjWJ7DrK1rMk3Y6UASAARKmAOo5FqGHsuy6dZLL11XNRLaM9cko9uVe+inbmKv9LlHyghMmXU5GIzaATUWI78gIdBBKLKCgJtJJQq0BpUcqo5iA0xByGxufXKebkfRiMYi72A9prDLzyiCBwNnCRVFG7tEoGpJSzEJFXXnYrv3nVuTLdKW1XxPzy2x46SikczJiAsvNeIBYQpI7FRDvTrMn8XYyGmCP8JrZn7zWC1dvpeVUkJOhn4swZvrmjjPik6pfIkieyxNc1OcOUxbYIMgQNP98cOVbeHL8c7p7kypYjZad+BWI+ooJMGkIjia/hn6pMLbdjBvsRSsqRQJANEi1Ig4LBKGdFZKI4Oo8DN/rPEpYKQi1BRAkUEQRaAqUlCLUEIRGElKCmjUmgpqFs558KLLErSLAETBkOyVRSHhmbLYkvdmJTLoQZHYhatuCKvWPT5wC4uVPKroh5JJg4yXSIasRaC+JYCBOQyAXcifWBG/NiyaGgvnLLVdvQOa0Tc/DJ3rc1A1kCAzyi987RkZyz2zMEnbku76DcN6bsnhQI2Ve0JaSckjhBCoSxAIppPvTImXbS8xLbsp9vFUrTuA+qW3UfNm+/EiDSaQvI3RvlPUZRgCiowKri0KnjkBLUjDqGGDussopZAiBYYsTsCQn7BTIrOUKm3ZYt9CBJ2YLqnPO33P+FGzYe2XZ6rq6ImVRPkIzuMi+KaBI6MvGD4/lHPRxijsgQHoo21zIiTpadinbbTIKkEzAhR3tg3lyQIW3Pr9knOdh9fgE7kXOeeHMEnR7SXjGTrNhfoZDdPUj20UtL0M2QAeSOtyTuJsktaVFU9f3RzvBY/DAgNSm5yF9061YpJ3Mm/P/tfXmwLcdZ3+/7umfOvffdt+k97RLyIslosS3b8oJsCR7FloAJkChVuIBymYKq2MGBIoSwVEUBEgJxwpJKVSBATFwxEHlDyMgWpizbYTMyQlib4UmyNutJz3rr3c9Mf/mjl+npM3OWe89d3rvzezVvZnp6unvmnvnNN7/++mt/H1zd3oomwBISG4IygDbEyhBpAyEhZYcsE7MBMYitxezczFxxvG1SRhvSGM0UTbIdrORajh1AyhYz+sDhNwHDtebRxCxCdO/S1WIK52pi7BBwKQko/fMoMB0xby+kIkdPuImcUZFmTLju9PVYzWlZiMooV4D+YrDcQlNSfRvRNgEQA8xd0nx9Pm/MtRIT0GD2wWISizl5gQyScrQtviIDCEfnlXCTMzaQe0LibYgt7LQtCbNX10z23jqCDi8tgSVW31wQiI2VJVgEDLsoCNw+KdgOQ79muyZFYmem2dyplMYFtxHsQDD96oydBmLcio0S8+33LV4swB4bKNdUBoTrArEBuGxQ9w47CG2E22RRI0kfZTXXyvUWsCXpYBlzD8jn7DFHzCPJGQBWj6Ombacvh9hipvDfENJLyS5aN5KgP9ZAygL4ASJUs5bJzQBqqhdVUock+03NbG9bvPbXW2+vsJVXqhnEIiInPyRZwozs/h+Tnz3aejOQkPUFFnL7LIBfbz8EGPMlsfMIOcJV77j71MEPfseBk20ZRhKzKuhSgz4iMwJGCqq+oUpEYbc6bBf8k1/zLa6zcG2wSUSmjRZvm9Wc+jXHpBGR8wCpoiq35qkB1HXTQErNFvJAmyDxJTbck4b9AdJrsJIR7bu1cZcI3wknDO8nKLF1W7N0EYyZ5kZ5mKRd9TLq7Yr+SCGwUoOk40OGElt3OS6FFAmYBMouVlMmm04EKLaj6YjdUGarMe8Ui3l8bHdk/3aIgGSGbwTwubY8I4mZBZfa7x1rDdgHioWEYD/fANi5ws+xP9x5ipR0JpAo6nkarOagDUfF1CSNqtxAVLGXhkdMzj5P6LhKSL2NoJvaPs49qaVFdYVrHjwmIjB+Mrza+cb99qXy444ljNiqTkk/bcswa7nGyXEbq3aGkZ8iIETWbWVBi7WC2VrN1l52FrRdg9iFeraxjEHkyuJ6mR2mAH4FNkLMpZKLxQ0oAtlnjAhSSEmllFbSILtMs9kd1oGUrBr14SFWc0K8/rwjl+/D9193GK/Y30POXDtWQ5SmiMHUMF32sAQCYA4CPOJn2WYhj8BqKTi6UOD/Pr2Eh073BwkZGCDVyo2tXlaI0QyqlxMTsV/FpNxIzlIvf8BajuqPt2sfqhL+H7w9AoGx7xBIeF6tPQUbRRgCJoiwiIlnkybXuO75njauHHZwtMUMvb+UNWfzMGD69ltVnL1MIiiNjWLVYfsRdMVUH3bHhxE36vskgv9y28vw7tdcvAUN99hcV/jXH8xx+5VzeN+jZ/Dbjy9UB2rkiYqU7XY1t3JMmHDWsk8LsoJUq9T6bcJIa9mXl7wkCBKkI19hKk35EJ/+YkRgZRgbIYmc7uyv0nZhitjpGWwqhfM7TAtEdNGw4yMVcqFyb/VqjtfxlA7pL6rDtqGJCJK0ug+uT4z3bdK7brhoi0l5a0AA/vV1+3DrhT33c5bq2p13Q00nDz9193uP/Ztr7nQYJOWY8E1iGTdhxN+k2VrGkHJNQ4bUBG96noc9892y0UWk7L3z09IavWukxWwM7bG/QfFWhP0IdhMBiEj4LBpVVhOunr0MH73+Z9dz6jkPP88fROzIdqnP+VeWpV2KEkVRoOj3UfQLFEUf//Yrl2GpD+8WA6AiChsjw3fQUZCgAMC7rwX/3yTuRTxk+9/cfMUW35GtAwH4wVfO43MvrFSKQZsrnTUuracCYOOaAKEDk8Ls2iNIua2PPOa/liVY5t75KXWdM8HlpfE5dA+ouAfW/2zsO8j/jHxNftv2Awyo2h2mg8Xlhb0AGqf1Ge2VQTxTkpsHjA1gWOzDbufUgptfq+0HMQoznOHa2cvWc+o5j7bJWEtHzEVRoCwdKRcF+qpvl34fM5yhID/1avW1Wu27jjtPzEBwWfOoBmeEz96wv7/HuGrfaFlhuRCsmfH/9K3ycNzpOIWAOTkTZkZMW/2aA7lzhojan34AxtYrHCkL3ACHQUu5Tqj+pKq8ZtaM8o9jLfvtWufniL+BnalEquc2embDLNquc5DsJKbw8YxBlV90h+lhVlonpR5JzCJ2mlDfQU4S/NgdB9hvv50RJqQDgOpBTV3T2rTmsC/wGuWcble5nl8s8Gt/cxKfenoJp/0UUdEgkYrfq7TGqHGh3mh/9Tgwe2G9jXDWacyzY3D34Z7Ct18+i/e8ai/2ZYPXM6cj1z53+WEdk53bN7Eft3FuGAJYiYOcvek9laQ67l+UcJOuJiAie1YcYyRam7is6O8k6cvA5oaLRFXVIz7dtc6pyd77Oow5DBqz7z+CPafmHtNhWuipdgtk9Mg/hve88J/EIgwYggiRCEGMZezuD7fT4B/kdO2O1Tw0Ene3tufwidN9fO/dz+HEiqkI17uJRf1jlKTFL4YwpD+QdVS//6xPSDgmUKqRVDu+ulLidx9fwH3HVvDBWy/EoV7Dy6bJEq1ukCNbExQiUNUcm81t2ofEdaPFhBkEguGNDdVG1jIqC725jX5bgCjOr6Xm+hvXuZ4Hj4sBrwz7XFfbzivDndc935uA1aVite3YGBYzxOpjridXjN02Tsj26RN8zgKAPPDvgYVnALM20XnnE8RUxpXddh8gxsZlltK4tQ/7GYX/PPteoOxVJABED7Xbd/7BElulTaE+B7YJyHsAXj7Q5p+490t46aT1Zhg2vFpqlnNSjydwbz2HPABMUSeh9IUC+PCGY9twX17o4xf+7hR+5Y0XDBz7tTemIcSltikA+kZmxUhjllpabA0PkKfFNQcbTPdxJAyp542HX7e2B6gsbN95WVvcc83uOSYCyLiXJLkXpBtEQzt6JN05iT29E63hP0cSMwGGmATCkNKQ1ZT9XFpcaVOTYuUl0JvfB+QHJj71fAEZ93CIhG0yBlSWdl0Udrso7NLvhwVnZoE1CecDqLbjfd+558nNd+7B7kvcEejJkwHkg/ryl06s4cGTM0BvtvqynpSck21x+zV5I1jHkWWcGN+hnHEgwCefXcKZmw4MSBrfdsVYIcQnnk1+IsSkHParTsZGqSU+L0WTz3FNR451Zh9Tw03D5BcANrgRCcADQYM6bBhr7z/y8saOP2Aci1lxYQS5f9DE9SHYyQ79pw+LrLPzr8Mmw4/gQ0PoTWBQ0gg69OCf88lTa/GnMwY0bG+VN8oaqMoPR9Asb4TTI6uwpe0BKUknzS8FeGqhwKsP5sPv1zZAEEsWtuHSKGFI/V4hOp7cHO8kx07iEBIrOVqFQpwDM6pn2DprwMsbtigRsgPPG8m+w7pBwAvDjo+2mE1Z2A4/qSaRAIDgiE6V402HnYfoeW3tCERCzqABYgOAvTknRDAmOfvkkA5UoUb9j8rnlUCydS1ZEkJOmHjkr08aOwB3BsaQMEKe2mmDVy1AGiPFpgtsh59YvcxOcxHxsy3d2l6+e9+q5tRWV4d1Q5heHHZ8tMVMMIPO5ul2m9DVYWdABiWBmnXsEL11m/D6S2axN2ecXfP2WBs5AyEwUTCZE+u59sYAwls/eDqg0pKRknTSxjZJI8py1bzGVfObq0isGwkpt/pTo7KWkcbuGFq4v+nx3y19ln15cRojtr07TA8M8+yw42PEYw5KJgBUk4ZaK1qMc1mvood32HGI5IdqqLZDRNZV9Dmg6c85qwk//qZDuOP/HR9hOaMi/qHWs8/nGhKsPd8uClVITdbwVVbHh4FI8FOvbe7LeONHnvUV1MuKiPKF5XKhKPq2Rv+2EAx29klCqqkcYZJ0h8UVE42qTs6J8ldlm8FrrvT92pGKlim4ygmJGCMgtoNNGP6b148XG6i9WnWYCgrRTw47PpqYic6A+BCRgdhOP7t2822Rd0jfoQ7oH3jmOM4WOyNW9HUH9iLjyvIwrsPPDyyB2ChmYeSfnx27KFCWfuRfH0VRYKHsYdmEJwqAf6iTfYcgETAAL1vUorrBdcrZY6stt+z7btyPpcLgP3/+JSwXEs6pOv98yNHBdADVPlW7ANDzEzHXZv+ISDqVVzxZoyqrCfszxr97wyEcuay5k+/0apmQsgzUc3JFTNE3bKMrVpU6GS80wAwj5WCISr0en4aElJMXxGBUueEgJH0+SadfPJgkdAKGDkDX4Rc6B/1Akw5TAaGUC3tPD8syhlcGnYqUR/cTdOaROJ3KrafS6CnjXZ99EEVRbHczLC6/AlDRLfcuSxJte1dEMXa6rtrSB4rCLkszQOnlgujpr+mUCcMQAjFW5IlqKmKKliF9ZD9800F8z6v24d6nFvDcQlFxBcVrqqfFiP3q3eY+Hc1NQQMbDWW0HwIARcDlezTedskM5lu05TKQYAPpRfwZWbrivw4IkOpvJzCx/j0JKTd19qV/v1o5sbUcNzhuQHRzBG6WaANynXs23KcdhoBa4CIXzDeq0e2nlXXYAEjkiTtvoKF+wqPDfpKcNj7wBgwMDPzgIb/tUzvscASmiSSNFr35+GKBpb7BXAupHZ5VeMfX7t+CRm8enl3oD/jfS0qmPjHuFI3uV91KRp1EQ7pEw7ITUhYMLkl5NV05am4TLQ8etZ8f9jm1BSrXGDuOx8CAnNOFgKLRPT7Vb3eYDoyRR0flGS1llOXpMAzbfWLaKbKN+5nuMHn5xINA7xCw5/wNwLMhNJGzPxCRc78UfOix0/iBVx/cnnZuAe7+8iKAhIxr6/hLJF7bY75bLLZ8wxRMNVL3Xw/RtrdsKRnqTYgGgyQSRjrhQIxU706zWrvYeWXATS/lSiUfOqRYvfsAACAASURBVB/Bgnb9gH6Itns7dJgGtNDDI/OMysDgUyWzkAv2QmTHdMZBUNY9yGQz8NLfQv7ivaA3/Bxw/Y9sd2t2JiJjqtZh59L88Z/69DF848vmccXezY2RvB147OQafvOhMy4sMVrkH0SWbUWqIaxF+OgXpxRFHYOxRYwqT5o+MOS6jZQn4MUBfRmoiDsOOub7hsISa89OV2YXxIg7jXlKeO73vnFuqA8zMI7G3MMxWqmGKQBBhnTvYIj3iZy4iY/9D4wUCyfFV78A9M9A/vJHgac+BuBnplv+eQNHNAOublXn2/NnC9zy/sfx6996Gd5+zV4MiblyzqBvBHc9sYj/eP8JLMVuf+mvN7KCvTdZ1dkYBSpypFqRoQyScsu2kcgT1dfT1NknDe2zDam3N0lK2mpfI1IFM/J9Q1Zfrvsy+7dBZzFPFyz0hXHyjSTmY/25Fw/z6UKMzRuG0btRQYYgcMGMJmkg3fTTwMoJTGIJjAVTAk/eCahZ0BXfBrTOQ7vLEUkaw8j52TN9fM+HnsLBWYVXHOxV/Xrx8OqQhupcoOF42iFY7V+cK2iiwfNjDJDOJNdqO/uePltgsV82/+wG5Aq3Ej/Cyk1066UCR2GEJLZiExHHRC+OlAcs5cR6HkrKadO90RT9DcMRpzOTVIHHCEJsB/4ZYpscjQJ0ncR2JCAojorUYb0QGJ6deWCcrCOJ+b4jVNz+yRNfFZFLagGMjO+IiIMaTYDZS+wybXz1fuDit4Fu/S1g/6uAL35q+nWcLxiTnAHg5HKJL6wsJUGHqE7IjemI0v12naAJhCtmNLKmcKDRaupIZYY4TSIjUaLF35t0OyHedukiIuRYRolIuersG0HKw+7LgAXtn1OpP8MUpZMPZOQDFxmAuTq3w4YgBg/9n7fQmXHyjjUUSlB+hZgvFhdkSkpD5N6mVl92csZOwNd8B+iaH8DmPc3nGSYgZ5szGoQSE5P3WY71UIkIWqrsKWuIH9UPRJ4irkzE5yVa+MTXGe1Iw7GYjON0P/VU3BbfEe5PGUtPniIpA/UOP5/UpC8DzifZPrOANf6rZxhCbF1HiJWArcVM7PMTaKc83+cwdK7/bOy842Qygq8Q6CYBQ4Rh7F9ORNgt5D/wth+9NIxjh5HYCDkHdx1XRtwplsZsSAlakvywJO23A0nHbaztJ4jJuu3XmKanZBznice8eS8yIhETV9VmJUf72ARSbkEYqG2J2ME9q6SslOGjFRmAtH2WISyGGOyeaWuB2XTrotF1/m0Qxz5468wT42Yei5ipv/IsZvYIuR+ndVRH9QYmSPVr63BOYig5I7KGfXZxyVRZkzFrxtazICJvDBC9zTPw7V0j6XBqHNC/8RqGXV8DCafnNQ7qcG+YmHRFbChMaTgvIdbNI+U4Y/zGaro5Bgg6MlnrOH6OYYJV7b6AAfY6dLj6DusEQ+6bJP9YxPzgvR99+jXf/o4+iclDUPygMwvge5c7nNtoJWeXHqxkhM/5AWmjJWrcSIIOMXRiq3iwI7Gm+27oOtNrjtIbrOpAmj6h5iqX7rtLigeEtJDyeN4XoxCE+TDLSp2gXRv9hLAslTwTa83E9lkWcm1lmw5U6w6TQ3Dia4/seXCSU8Yi5qP/7b3Fjf/ke5+iElc7P5swFY2P47pTNah3XfcynFrbGUOy33LZhchVNZJOolmy7fRFduYSU5YQY2DKwsbKKEuYokBZ9GGKEmXRxwdOZFgtKkszhJGSyHMx8mCcyNsp7sADomD47mDcQUc+KU2nep60Iy/pAFShQw2okUvCL7X6J0VMwslmIxn7tSe1qMECJ96FfN7Tw37ym5is41OjLwMZ+LLYjH4RN7O3HYsthqyaYUhEUfCVc9NNOYWDIHYmdREQiZvIZEc+3+cCTFl+5g6a7M02dhxEtWKeEM2vtGGzWQA/VojsECjZIRpzgt94/dXb3YRWjJolO54huygK9F0Ao36/j0/mCguoBywaCGjUsB4bKTkjIucB7wmEY5RaxG0EXTu3LpMMSB01TmywKofxWdNlt92KJks6tWSDvMLuXRcPkyYxcd4acaMmdwxYyusxSENEzoaARYB9Jqu/nxv5Vw0kIWEbTx0kBBZ7TWzTSQmctkzgKqpeh4kgoJMv0Z6xfJdjjE3MSwtnnpy7YL8QA0GHggHFWnOHHQsimoycE2liYPi2LXSA5OraMyJpIu4QTM9NWDm2khFtj0Ook6DRYk6INawFqM0FX9YaabxInFrJ/vxUT47TN1slILaeFpBIZ0boH6p7Z9jFa8physjOYl4XjMin7vsGmviTfWxi/offfe+zN/7I76wZg54Y46QpYy29MCoqfaI6TBM1azRK27TAfrVPfwqdcc0xl6NzIi24kaARlRvr0DFxh59SA1HHGPVzG0nmMkiiSI7VyFNCe0wt36DGXLe6UyvZbayblOMLr31SwEDAsVeNq4fcKEDjImMI2VALxgCkBMHjJHzdGJD3aTbdcz0pSOjFV3/mfQ9+eB3njk3MR++5p7zh3WtHifT1YES+y4LOYt441kOwm0rKMQJBR52CcSefbcwgwQ0j6La4y7HOmhK1zxNvjH35STlJci0htZjDqDz/crH9BD5UJ4Vhz0m5kawxFeliI4itYv/cOs8MbzFXz3XUZ8SV5bzFLT7nwcrcc8cdd6zrLz3RXDu0vPSw7Nl/nZ+RleA0Kq81d5gKUsuYiEKa36at/jqJyRkYz3qOThkg6MjybCRpYJCoQzvcxriXP/SXmRB2re1Srf2mEYDFhZajRN5ARbxuu/binCYpNwUNC9oyBu4NMQxEib/BpLQhygzAAiYhygyJ22anN8P1JAGgzo95MjA98ge3zv39ek+fiJgf/cT/+vvr/ul7C0PIxPXiGj/D7jn8Qn1i+Rg+d+qhLa9XTNRhF3cCGoEprUxkytJ6YpQlTGHsbCb9Akt4NU4XM63eGIFnUot6Ghb2sI5B1I+F/OE8n6WBVQnQpMHEtbSBulsP1qGJXVkJOcYYkDGaLWsxJaw7Gay8DISXkVB1bvDUkOplNHUredRsIsTVjICOrHNllm1ADBFmNv75Fa0MnGeGEESxXSOymAXApLFwdjWY+0V/5p6NFDERMX/pd3559Zrv/BdPEHAtXFQ5GxcF57TF/Ftf+QR+8egfbH3FUYdQpTlK9elcuv0SVggsXFphgKV3AWsvr5dRI4IhdU4DXv+NybbmuREdr50zuI5JWrMCgQcJuImDR1jMF2TzmOOe3Wm67CFEDFQvNetqQTJArGmUueS86O24uaQsAGphOSPdRwTMWMtQFES5ECsDO57PPb8Q+LjMkLBPXpp0b5fBbt4ObaCy+MzHjtCpjZQx8bTBa2eOPdLbd9G11cy68dJh40i1gGg/tkjVcQAvbz83LSZkoemQc0xqTfKGlyUErR2EQeaoDSppanskewy0YQg7m7iN6Xktl9U48g/1n3cIeC8Ig0sQWcjhvCkScq3gGKnLit1n67soAJDR2oIf+Vcvxz63xJnUZ8UO9jaqC+ie73FABi+9KPf/+UbLmXhO8if++889SkRLxP5ty+5t271Rp4bGz3eqH5t5bPg5Q8snoElKWA8E1SiyoKR4eQYRQdXz1AgvWvtBNqlfdu2c2iIjloZzfHFRHWLs0tSm2nlCUo2a82029euNj08L0cQUUaJdcdx7Wr9GEGEfnf0KMRm2/suGmAyBDUEZhDFi9usX/lkWEVLKkNuPepK6ZchSkrnnviNHNjyibWKL+ehf3dO/euHMw5TnbzJEImxHBpnqh9P51UwFXhZosJ4JQPYEQKsAeggWZZKt1WoO+WIPiA2+V70FHVnInlRrwYhiyy419uJfT7QdyHnELyueiUXQQOxpE5r2m25Dg1zh66jlMYAwJHRYbvBJGHp6o85c/ViEvNc5yQX5mecMKTtbiVIirESUtja/0gLFIkRCWouQFiElxFx5rSst0s1gMgbMIx++df8/TKOkiYkZAE48+tcPHH7NLW8kO/rJj8ru/nCbhVi3JbLPnyqBuT8DFr+xIfM6/hTTnp3EEzRQ8VTN+yJa174GqJHDa/tx2kCl1WFy/xoON+8P1CUJKVtNWeKRdn6OP0iYE3PTEZNyuLwqLSbVOTr7/F5eOkWUG2I2EBG27nJCpIx9dkmg2PmXSGwhB+068T3pkEAgK2s8/4lplTexlAEAn/+FHzperi49V9eWOw1qckSE1NCZVifkeHFSxJ4/A/hsUka96IH0rcCAzADHcZEVW5ML/Kd/Ij8MlBctaffGqONNeZraawSpVAETyR6I2lcK7OiqQWt6UxC+Sl0Dwt+VZPCC7MaV+fNfBAOs7Lmk7Jx/pFjABnA+zX5cAmlI883rlmELadxz19vo7Kg/4bhYFzEDwMnHH/1LI9ZUdvJc90ZdD9pIs0aobscTsj/Ga8D8H7YX2kTUW4kmzXUYSbcStTQTalNdY+dpqCNpR4hjYk17qV1PGadJYxPWuwQCTpcA9wPwtmxIgw1F6nzdDumvPjzPS6eElRFWhlgZERekSEQEyhBYRJG7C1JJ7uxeOf7PhG5pW4zgsTtvmf9iy69uXViXlAEAn7/jBx7/pt/6ixeI+NIdM0P2+QAC7IALqQim0WKGzTP7GFD8CbD4zclneKRHx+Ug2t9KSFpxpAdH12oVsQb9Of6Jpe1veemQJBJ9rT3JSYK6ZkxApdKSwMQ3FJY8wxcOhTu+uUhqCLPUOxkjsqD38MJzV+rnHoHOjGJtiJQQKWGdGeLMkM4MaRbSyhCzsFJCpAXMQkoLO5uNmAXMLZp2ByFanFs88/Fpl7tuYgaAhae+9Pk9V73yOyF2iqlpNaqDBzkPJnGxilGtBQi+MHOftdvL31SdmpJzSMNoBtnMv6QvW+J21Ym4KUC+vQxqbnsr+TYc8y+AtpMkXrsdI/UXBFW6cq3tG8aY5BfVRzFhCgBi2Uunn35F9uTnFVNJzIaYjXIWM7EypJQh0oag3OhdZVy3vYs4515b5GcyQTckuwVS9u/+wLdesjjtcjdEzH/5X99z9LZf+vAJglxkOo15Y2jwRqg/8FRPD3IGAAVgz32AehFY+C4Ac1VZccEpgbQ9alsue0j9upvIjiZ/XzT2RweVJykwJmJJM3Nle8dEGHWyVdgky3LAWKaosc6yJykP0bGHr8ieeYyVNpJpYaUEzGIUiVI2CDMrEsMGWmdilAjB2GtREP9pMKL6DgCE+W8/MiUvjBQbImYsLsrx+z/3mYtf/9Z/1m6CdBiORLYI+/EazlJD1SsQW4OegGceAfQTwPJtwMotCH/egQ9tCVXtTCRE7ZJqL6cxMOCVEcqRhjQgYu20IIvgMkYC9iXT1txM8fpxU8NI5unU05fzlx+aVf0FpbQBK+PWQooNkbWUFbmRf6QMRIRECSsOljKU24LYQPnu5nReVwmITvGBuT/ZrOI3RswAHn3/f3j2wDW/9yTn+c6NSD8C33boZjy38tLWV+w7jTxZCMJABTGWecUIpHQB9Uuxs56UBqa063DcxdaweU6hKO7FicVLcWLxciytHcBafxZ909v6a5wQM5zVY2UMwwgu7HFmswxQSmp+jqqGJBrEIcTxm7KJMDcTBCbTV1IsZ1hZmMep5y/QJ56bodVlYi2sMwNWonRuSOdG6cxAKVG5NqQzA6WFs8ymay1EVl+GsoHxrasdR7q1+1t0fswB9ltL3X3nDbS2WXWsh5gH/kBH7/7ff37td//gywqDtYwxM4V2bSluO3Ajbjtw45bXm84+Em/HM5qks5o0LUVR1I777bgMkTLqZpeBdrS1b2uxsg11DoX5iY8/+NHTzz6+j1VWQudGqcxwpksoLayUAQFkiU1sYOPJwEPfQ570GaR8hyMJiMFKCexgEEMqE1JaSGlDSgl0bkhpI8yiVG4EylrJSglBGWOlfCtreGsZgLjhMUKQuGHrUJLOXzB/9kO3zD69mVVsxGIOXVDH/+Ke05e84W0PLJdyNmM654h5u+GD+MRE6GMt+zCfzAwRCWuPeLssy5DfGANmjkhZGpemcjpUWOoXy6efOboPOispy0rW2nCelQwtlCkDpQ2xFhAJA7CW5xTQMIiEXdlEJGAlTErAbPeVNkplAqWEtDasWEhby5iUEtY2XbESyrSBtl4apFig2FrLmitvDDfvX2hC1/lnIfIPH7plbsOxMEZhw1KGx5d+8xcfPPNLP3l0X6YunFaZuxFxpDVPrDE5A3VLW2uNsizDuZ6cPSHHlveoeQE7DOLMYnEcrA0rt+i8VCovoVhIZYYVG7AGuw5CmhYxx1CV1cxMlkSJrPxAShQrgSIrS2hLyC7dEJEwkxDnhkiElDZw8/0xuWBFxnXcuxUR27kCS5tAzALpOvcheGlx4YWpu8Y1YVxibuyKibZlbW2hzIDfBvB102rcbkPTjCQpKQODlnWadxQpd9by+Dh6+tTjKssLznolZ8pQnhekcsNZZkhZyxSkhNlZs9MmZu99wey2GcTOOidlXwTWYhbltGKllIC0UJYZpZSQ7hloFqWsZU/MohQHn2Urk/Cg77JHpy9DICs9U374Q//4mtWtqG9Si3mAkOPti+fUB9aM3JEzXTGV1p3niIk43U7z+TURQSnVWFZMyKmEYZxV1KRnt2G3E/ZqaRb+5KnTj0DrfaS5JN0rlc5KyuzsH0ppA+10ZUfIsh6NWQ3rPPRkGeUhLcKAYm0sYSshRUKkhbQNUOQlDGEtUFqYyQYnsjq0ne9PaRFhQNsOPwNrLYufEMBX13lcFVmuPvrBN+09uVUVTkLM3mqWlsUQ0bUi8mMA7px2Q3cDUq3Z73tJw1vNxhgopappppLF52+zluM6msh3txOyx6eeOfG5rzz6wF6V9wqV5SXnvVLpvKQst9pynhsrIShrbRIJ8QYt5qaOQFISkoPOrMVKHAylyVrISlnLmUigvTWtRGlL2tBalCNnMOwUWUCYhIW8ZRxry7vcWhZCiUL/4e+/aeaZrax3oxqzIAkRQ0SP98vy1zTzv9pw63YB2uQLoE7QKTmnckZKyr6TMCZmf16TjNGRcR1fOrH4xf/54btfYN0rlcpLlfcK6NxQ3iuV0gZZJirrlV7rZQDYKClHINZVWZHGDADK75MlWCJPyMpGiSMlIICFbdAiYYEiUeTn8ysBYUFJ1vg2QBCYudKciVmC/rwLIQKjOb/rD26deWKr616PlNFoLbulBGA084+vlsh6Cu+eZmN3A5okDe+dkZKuzxN3EHrPDU/IPm+bpdwR8iAeO7H8wK88+OInOM8v5HymIJ0Z6vUKlc+WpHNDWhvVmynJeUVAUfCQmHZMiTDCz1uxpMNfTHk9my1BC2cGDDBrZxWTiGuT8rGW2VvBVsJgsB0bRiyiOKl790oYBEgf+PiH3zrz+DbVP3Y+jtYMS+p+yQDk6XJssbhhb0/98pzCoWk3/HxDSpBtVm6bPDHMJa4j5vGwVMiZTz99+k9/9Xd//wRrXVI+U3KeGZXNFirPSqVnLCHn2pDuGT8oQ1m/4sp1bYpgrWvlkdewGe4lYN3clE9XNj9pFrAW5YiZHHnH59Q6+wCAq76L3S1hSMGU/fGdt8wc3a4WTELMMTkr1MnZE/PA+heeWXrmdax//voD6nWHc7pyVmG/Ipqam975hEnIedIlLr/zyLAwIsVygbPHl9eef/jk2qN3PXn64aN/etellGUlZ7mhfKZUvbxQWWbAudG9uVL1ZkooJTrLS2hLxuzd1zYpCltN1gCCtKGoSidP4NoSr1LayhZe7vBWMjCSlO3+LiVmIytMq3fdecvh57azGZMSc0rOChUxa1SkHC/60E23XnLF13/71wuoB1MSABgxVMU9aogF0wEi9l5F8aHsvYsDRpX+3pkqrz8PgEDIDu9Oym695+evpkhREFAOlqcjV6UMqcxwlpektFF5XrLKhPK8VPlsoXRureUsE1bWFY28puutUaByb1snYrIdgKujrj9H5MwszFyRbULKpG16NYjE5UskjN0a4pOITpq18mMfO3JwQzNcT6UtE+RLydnHNfPk7Ak6Q52sNQB9wQ1fd+jKb/3uI6zUrDEAxDTXbcqOpBNIfE8kIecyJdjqhSci1Eq0Zpe8DFs65IjYkSkJtDJ2kIa2MSSy3Cjf0ef15Dw3Ss+WpEiU7tk4E873t+b3u0mkRrqlY5FYlKrqDqTNAFFWneNIWXl2D5ZyoivvVkuZ+dl9y/N3v/8I7YiYAJMQs1/HxNxEzikp+2N84Gtv2v/yt7/zCOcz81KWBAnW3lQu5rxG8sISd+9MFTM4Iu+Gl1t8i5uO7wp4Aos9KZwXAwOsckO5Nkr3SuLcUJ4Z1tpwb6ZUWWZI9wxr27FGbN3VGKoizWl3/CUkySmJhvoqiQKc1c4ZsJJbCNke24RRizsdIsJa/fUN98z+1R130I4hovUSs1+81qzQTNBxOgPguUuunL32+370rfm+g5cC2D2W2xQgZQOhBoJukjd8lt1KxIOgeHgzkYTRc6xEaRuBjd1oOaVzQ1lmVJ4ZynKjtB9Rlxuv0xJV1vLmW5sJmTrSHdCgUVnYHJ3TKl3YQnYfKUOWxWT3fuSts09td0tSTPLAtoVpTy3ntqXy6shzvvGHfvbV819z7WsAoLKcO4yDZoKupCGTejmVLbLRboMjH+YqAH4YQq21YbZEa93heoZ0ZlSWGcpmjFJawFo4yw1gvSWIWDzJ0WYTWwP5pvDWMQAwGjwsWsLY7Ur5QuTZPXv23vuB19LUZx+ZBtZDzEBFsk2ac0zS3LCE8655x3uuuPjmI7cI69kNXsfuRBNBA5AG/b6bYQYgFROQsyUZdkhzlhlFKoygU5mPXZxb+YK0UG5JmbyEEWvLW0xuMQl7cGJRt3pcpMd3E0TWSpg//8OvO/jQRjtqNxOTWlJtkkZqPbcRMidlYP/XXNu7/l/+/Jt7Bw6/cv2XsTsgbV8W6eisto7VDhWchUsu4A+U9RFWmTZ+cAYpLUprS9aelDVbUt5KazlBSsAeAxpxk2Th8+5C6YIgX6b9e++78wZa2O62jMJ6idlvN5Fz02CUpry1Ml/7M7/+soPX3vQmVnp+8svYXRAzgnibhtF2ZG2RuKPVBmd4eUJrUaSFnE8wZQkpJ9HXtsXybKuzxToGdqmFDABECxrqs3e+efbJ7W7KuFjPw9pEzvF2TMzpdnpOrcz5q1+nX//j/+nVMxccfu3QX1gHi0nIdhfHPAhQDZ1kPmobWyuYtRuYAQYFomZRXrPlylIGttHybIgw2IbdSsgk3DemfEgf2PuFzZwGajOwXitqHHIGohH+SZ6hdd/w7p+Yv/y273kd9fZfS9Ty3dZhEJ2Hy9jgyN8XAOoj49yw5p1KymNgV7q+OYiIIVKP9E+cvf+P3n7Z0na3Zz3YyIPcZPU2WcWjCLm1DTf+9K/uu/zmb35dNrPnaj9zT4cOG0Ozy1kV99hpz1olgePrFuputUJ3OISIniiW+5/fCaP3NoKNWlhtJNtEwk11jVX/G37yN2YPv+Vtr1Kze29gpfZM2MYOHeposHSbXM0C+cZW8i62RHcqRGBIcHTNlA98/NYDWxbMfjMxrU/fYaS7bkJOcfU/+hF1/Xvf8zLKD1wrGV2+3nI6dADqvr4eTWRcHetIeWdBCi7xKK2u/N2dRy7a8Z4Wk2DaxNZW3nr9pVvx5l//4z0XX3f9K1nlrwCriyYov8MuwkSSQ+fve05AmE5LaR47tXbqsfuOvHxHxLaYNjbT4twya/ZbPnlsbnY2u4qYrjJMlxIo26q6O5yf6KzjnQURMUzmKUL56EfecujZ7W7PZuO8kwLuEOG/+avFC7UUlxNllxiSC2FMvt3tOpcgDEPgPopyTRT3WaQvitcE6AMA96VfiohSMEak788jptwU9jfFObEY6omYniK7FqGZzsumwyQwxpwk6KNl78zf/9HN56aHxXpw3hHzAETou/721H61yhcaosMsctCwOkhidsMwcDEiq0SyysQrpeFVYlklY1YNqxUqZVWzXlntm9XewbmVmQKrz5zA6n1HqNiMxtwhwg9/6uTetf0z+5jK/SjlAIEuAcmBzaivw7kJIjoDKZ/ozeLxD77m/OjMmxTnPzG34J2ffnLmdH54H+flPJPeU5RmHsLzRGYeIvMg2jFWNgnEsKxSRKwlq1UyZpWUWS1Ks0qlWmVVrqq1fHUhX1ud33vByrniVP/2+2VuZu3MZQXM5aSyy4Fd8dLsEIGJThrwM2rFfPnO2/Ye3+72bDd2LTGPwg/fL9kzxYlZrbOcVlTOai0nVjkTZX3inIoiV7qaIkuM6SHq5TemZCIwkbLWZ1mUlNntspBCKZhCRCB6TYn0mUyxRlJQlq2qZVNoMsWqWev3Dh5ePVcIdioQobd/4ewhWiuvBKkrFeGwUPc7Pe9AKA3kGBl+WoqVZ+5624Vnt7tJOwndD77DjsY3fPrJmQP5wcuJ5AoofRFE9m53mzqsC0IKL5m+HBOdPf8sP3LsCzff3B992u5ER8wdzim880mZeemlkxcp6l0IU1zEwGGRbnLfHQeBYcKJkvQLJa0cm5k9eGxXffltEB0xdzi3cccdfPvtP3ZgZZkuYoMLQHIABgdoB/UR7AoQnTWC42Tw1TzHcRydP3HnP6dyu5t1rqIj5g7nJW5/WPLVsy8eVDS73xg5CMIhERzkzsd9QzCQPoHOgHEKQi9JsXKqxysn77zlyuXtbtv5hI6YO+wq3P7pF+dXD8/t4VU9T2UxT2zmSyPzxDxPxuwBaNc/EyJioOksjDnLoDMF0Rmsrp7t9eXM+Tb0eadi1/8IO3QIEKHv/zvMnV5enGddzKvC7BFWvVJohsXMMPOMGOoZNjMk5+hAGYNSiFcUzLLALIPzBcLKUpnNLdJSsbS4sLh477dcvLSTp13aDeiIuUOHdeD2hyVfOHtiZqbsz5hsX08U96Rc7DH34GK3VQAAAIhJREFU2PSLTGnSZEiVRJlSpS4NFIEyAWkypSKts8ZJdUdAIH0SiCheI4EAao0UxBTS18qsmb70Res1DdMvYfqc5avLZbmaLa2snOkfXt6swUMdOnTo0KFDhw4dOnTo0KFDhw4dOnTo0KFDhw4dOnTo0KFDhw4dOnTo0KFDhw4dOnTo0OHcxv8HnRxVygJP8F8AAAAASUVORK5CYII=");background-repeat:no-repeat;width:100%;max-width:500px;max-height:500px;margin-left:auto;margin-right:auto;display:block;min-height:0;height:200px;background-size:contain;background-position-x:center;background-position-y:bottom;margin-top:40px}.gantt_empty_state_text{text-align:center}.gantt_empty_state_text_link{color:#03a9f4;background-position:100% 0;background:none;opacity:1;height:unset;cursor:pointer}.gantt_drag_marker,.gantt_drag_marker .gantt_row.odd{background-color:#fff}.gantt_drag_marker .gantt_row{border-left:1px solid #d2d2d2;border-top:1px solid #d2d2d2}.gantt_drag_marker .gantt_cell{border-color:#d2d2d2}.gantt_row.gantt_over,.gantt_task_row.gantt_over{background-color:#0070fe}.gantt_row.gantt_transparent .gantt_cell{opacity:.7}.gantt_task_row.gantt_transparent{background-color:#f8fdfd}.gantt_popup_button.gantt_delete_button{background:#3db9d3;text-shadow:0 -1px 0 #248a9f;color:#fff;font-weight:700;border-width:0}.gantt_container_resize_watcher{background:transparent;width:100%;height:100%;position:absolute;top:0;left:0;z-index:-1;pointer-events:none;border:0;box-sizing:border-box;opacity:0}
src/components/dhtmlxGantt/codebase/dhtmlxgantt.d.ts
¶Ô±ÈÐÂÎļþ
ÎļþÌ«´ó
src/components/dhtmlxGantt/codebase/dhtmlxgantt.js
¶Ô±ÈÐÂÎļþ
ÎļþÌ«´ó
src/components/dhtmlxGantt/codebase/dhtmlxgantt.js.map
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1 @@
{"version":3,"sources":["webpack://dhtmlxgantt/webpack/universalModuleDefinition","webpack://dhtmlxgantt/webpack/bootstrap","webpack://dhtmlxgantt/./sources/utils/utils.js","webpack://dhtmlxgantt/./sources/core/ui/utils/dom_helpers.js","webpack://dhtmlxgantt/./sources/utils/helpers.js","webpack://dhtmlxgantt/./sources/utils/extends.js","webpack://dhtmlxgantt/(webpack)/buildin/global.js","webpack://dhtmlxgantt/./sources/utils/eventable.js","webpack://dhtmlxgantt/./sources/core/ui/render/viewport/get_visible_bars_range.js","webpack://dhtmlxgantt/./sources/core/ui/lightbox/controls/base_control.js","webpack://dhtmlxgantt/./node_modules/inherits/inherits_browser.js","webpack://dhtmlxgantt/./node_modules/process/browser.js","webpack://dhtmlxgantt/./sources/core/ui/grid/editors/editors/base.js","webpack://dhtmlxgantt/./sources/utils/env.js","webpack://dhtmlxgantt/./node_modules/readable-stream/lib/_stream_duplex.js","webpack://dhtmlxgantt/./node_modules/buffer/index.js","webpack://dhtmlxgantt/./sources/core/ui/layout/cell.js","webpack://dhtmlxgantt/./sources/utils/is_headless.js","webpack://dhtmlxgantt/./sources/utils/placeholder_task.js","webpack://dhtmlxgantt/./node_modules/core-util-is/lib/util.js","webpack://dhtmlxgantt/./sources/core/ui/lightbox/controls/select_control.js","webpack://dhtmlxgantt/./sources/core/ui/render/viewport/is_bar_in_viewport.js","webpack://dhtmlxgantt/./sources/core/ui/render/is_legacy_smart_render.js","webpack://dhtmlxgantt/./sources/utils/global.js","webpack://dhtmlxgantt/./node_modules/safe-buffer/index.js","webpack://dhtmlxgantt/./node_modules/process-nextick-args/index.js","webpack://dhtmlxgantt/./sources/core/ui/grid/tasks_grid_dnd_marker_helpers/drop_target.js","webpack://dhtmlxgantt/./sources/core/ui/render/viewport/is_column_visible.js","webpack://dhtmlxgantt/./sources/core/ui/render/viewport/get_visible_cells_range.js","webpack://dhtmlxgantt/./sources/core/ui/render/viewport/get_bg_row_rectangle.js","webpack://dhtmlxgantt/./sources/core/ui/render/task_bar_render.js","webpack://dhtmlxgantt/./sources/core/ui/timeline/timeline.js","webpack://dhtmlxgantt/./sources/core/ui/render/viewport/get_grid_row_rectangle.js","webpack://dhtmlxgantt/./sources/core/ui/mouse_event_container.js","webpack://dhtmlxgantt/./sources/core/ui/grid/grid.js","webpack://dhtmlxgantt/./sources/core/ui/timeline/scales.js","webpack://dhtmlxgantt/./sources/core/ui/utils/html_helpers.js","webpack://dhtmlxgantt/./sources/core/resource_timetable_builder.js","webpack://dhtmlxgantt/./sources/core/ui/layout/layout.js","webpack://dhtmlxgantt/./sources/core/ui/render/viewport/is_link_in_viewport.js","webpack://dhtmlxgantt/./sources/core/ui/render/viewport/factory/get_visible_link_range.js","webpack://dhtmlxgantt/./sources/core/worktime/strategy/work_unit_cache/index.ts","webpack://dhtmlxgantt/./sources/core/worktime/calendar_arguments_helper.js","webpack://dhtmlxgantt/./sources/core/ui/row_position_mixin.js","webpack://dhtmlxgantt/./sources/core/common/duration_formatter_numeric.ts","webpack://dhtmlxgantt/./sources/utils/task_tree_helpers.js","webpack://dhtmlxgantt/./sources/core/gantt_data_range.js","webpack://dhtmlxgantt/./sources/core/datastore/treedatastore.js","webpack://dhtmlxgantt/./sources/core/datastore/power_array.js","webpack://dhtmlxgantt/./sources/core/datastore/datastore.js","webpack://dhtmlxgantt/./sources/utils/timeout.js","webpack://dhtmlxgantt/./sources/core/ui/utils/dom_event_scope.js","webpack://dhtmlxgantt/./node_modules/form-data/lib/browser.js","webpack://dhtmlxgantt/(webpack)/buildin/amd-options.js","webpack://dhtmlxgantt/./node_modules/url/url.js","webpack://dhtmlxgantt/./node_modules/readable-stream/lib/_stream_transform.js","webpack://dhtmlxgantt/./node_modules/string_decoder/lib/string_decoder.js","webpack://dhtmlxgantt/./node_modules/timers-browserify/main.js","webpack://dhtmlxgantt/./node_modules/readable-stream/lib/_stream_writable.js","webpack://dhtmlxgantt/./node_modules/readable-stream/lib/internal/streams/destroy.js","webpack://dhtmlxgantt/./node_modules/readable-stream/lib/internal/streams/stream-browser.js","webpack://dhtmlxgantt/./node_modules/events/events.js","webpack://dhtmlxgantt/./node_modules/readable-stream/lib/_stream_readable.js","webpack://dhtmlxgantt/./node_modules/readable-stream/readable-browser.js","webpack://dhtmlxgantt/./node_modules/stream-http/lib/response.js","webpack://dhtmlxgantt/./node_modules/stream-http/lib/capability.js","webpack://dhtmlxgantt/./node_modules/stream-http/index.js","webpack://dhtmlxgantt/./node_modules/isarray/index.js","webpack://dhtmlxgantt/./sources/core/ui/wai_aria.js","webpack://dhtmlxgantt/./sources/core/ui/lightbox/lightbox_optional_time.js","webpack://dhtmlxgantt/./sources/core/ui/lightbox/controls/typeselect_control.js","webpack://dhtmlxgantt/./sources/core/ui/lightbox/controls/constraint_control.js","webpack://dhtmlxgantt/./sources/core/ui/lightbox/controls/parent_control.js","webpack://dhtmlxgantt/./sources/core/ui/lightbox/controls/duration_control.js","webpack://dhtmlxgantt/./sources/core/ui/lightbox/controls/radio_control.js","webpack://dhtmlxgantt/./sources/core/ui/lightbox/controls/checkbox_control.js","webpack://dhtmlxgantt/./sources/core/ui/lightbox/controls/time_control.js","webpack://dhtmlxgantt/./sources/core/ui/lightbox/controls/textarea_control.js","webpack://dhtmlxgantt/./sources/core/ui/lightbox/controls/template_control.js","webpack://dhtmlxgantt/./sources/core/ui/lightbox/index.js","webpack://dhtmlxgantt/./sources/core/ui/touch.js","webpack://dhtmlxgantt/./sources/core/ui/plugins/timeline_zoom.ts","webpack://dhtmlxgantt/./sources/core/ui/plugins/dhtmlx_hooks.js","webpack://dhtmlxgantt/./sources/core/ui/plugins/jquery_hooks.js","webpack://dhtmlxgantt/./sources/core/ui/plugins/autoscroll.js","webpack://dhtmlxgantt/./sources/core/ui/plugins/index.js","webpack://dhtmlxgantt/./sources/css/skins/contrast_white.js","webpack://dhtmlxgantt/./sources/css/skins/contrast_black.js","webpack://dhtmlxgantt/./sources/css/skins/material.js","webpack://dhtmlxgantt/./sources/css/skins/broadway.js","webpack://dhtmlxgantt/./sources/css/skins/terrace.js","webpack://dhtmlxgantt/./sources/css/skins/meadow.js","webpack://dhtmlxgantt/./sources/css/skins/skyblue.js","webpack://dhtmlxgantt/./sources/core/ui/skin.js","webpack://dhtmlxgantt/./sources/core/facades/layout.js","webpack://dhtmlxgantt/./sources/core/data_task_layers.gpl.js","webpack://dhtmlxgantt/./sources/core/ui/main_layout_initializer.js","webpack://dhtmlxgantt/./sources/core/ui/timeline/links_dnd.js","webpack://dhtmlxgantt/./sources/core/ui/timeline/tasks_dnd.js","webpack://dhtmlxgantt/./sources/core/ui/timeline/main_timeline_initializer.js","webpack://dhtmlxgantt/./sources/core/ui/grid/tasks_grid_dnd_marker_helpers/highlight.js","webpack://dhtmlxgantt/./sources/core/ui/grid/tasks_grid_dnd_marker_helpers/multi_level.js","webpack://dhtmlxgantt/./sources/core/ui/grid/tasks_grid_dnd_marker_helpers/locked_level.js","webpack://dhtmlxgantt/./sources/core/ui/grid/tasks_grid_dnd_marker.js","webpack://dhtmlxgantt/./sources/core/ui/grid/tasks_grid_dnd.js","webpack://dhtmlxgantt/./sources/core/ui/grid/main_grid_initializer.js","webpack://dhtmlxgantt/./sources/core/ui/render/task_grid_row_resize_render.js","webpack://dhtmlxgantt/./sources/core/ui/render/resource_histogram_render.js","webpack://dhtmlxgantt/./sources/core/ui/render/resource_matrix_render.js","webpack://dhtmlxgantt/./sources/core/ui/render/task_grid_line_render.js","webpack://dhtmlxgantt/./sources/core/ui/render/link_render.js","webpack://dhtmlxgantt/./sources/core/ui/render/prerender/task_bg_placeholder.js","webpack://dhtmlxgantt/./sources/core/ui/render/task_bg_render.js","webpack://dhtmlxgantt/./sources/core/ui/render/task_rollup_render.js","webpack://dhtmlxgantt/./sources/core/ui/render/viewport/is_split_task_in_viewport.js","webpack://dhtmlxgantt/./sources/core/ui/render/task_split_render.js","webpack://dhtmlxgantt/./sources/core/ui/render/task_bar_smart_render.js","webpack://dhtmlxgantt/./sources/core/ui/grid/editors/linked_properties.js","webpack://dhtmlxgantt/./sources/core/ui/grid/editors/editors/duration.js","webpack://dhtmlxgantt/./sources/core/ui/grid/editors/editors/predecessor.js","webpack://dhtmlxgantt/./sources/core/ui/grid/editors/editors/date.js","webpack://dhtmlxgantt/./sources/core/ui/grid/editors/editors/select.js","webpack://dhtmlxgantt/./sources/core/ui/grid/editors/editors/number.js","webpack://dhtmlxgantt/./sources/core/ui/grid/editors/editors/text.js","webpack://dhtmlxgantt/./sources/core/ui/grid/editors/keyboard_mappings/keyboard_navigation.js","webpack://dhtmlxgantt/./sources/core/ui/grid/editors/keyboard_mappings/default.js","webpack://dhtmlxgantt/./sources/core/ui/grid/editors/keyboard_mappings.js","webpack://dhtmlxgantt/./sources/core/ui/grid/editors/controller.js","webpack://dhtmlxgantt/./sources/core/ui/timeline/tasks_canvas_render.gpl.js","webpack://dhtmlxgantt/./sources/core/ui/layout/scrollbar_cell.js","webpack://dhtmlxgantt/./sources/core/ui/layout/resizer_cell.gpl.js","webpack://dhtmlxgantt/./sources/core/ui/layout/view_cell.js","webpack://dhtmlxgantt/./sources/core/ui/layout/view_layout.js","webpack://dhtmlxgantt/./sources/core/ui/render/viewport/get_bar_rectangle.js","webpack://dhtmlxgantt/./sources/core/ui/render/viewport/get_link_rectangle.js","webpack://dhtmlxgantt/./sources/core/ui/render/viewport/is_in_viewport.js","webpack://dhtmlxgantt/./sources/core/ui/render/render_factory.js","webpack://dhtmlxgantt/./sources/core/ui/render/layer_engine.js","webpack://dhtmlxgantt/./sources/core/ui/gantt_layers.js","webpack://dhtmlxgantt/./sources/core/ui/mouse.js","webpack://dhtmlxgantt/./sources/core/ui/configurable.js","webpack://dhtmlxgantt/./sources/core/ui/ui_factory.js","webpack://dhtmlxgantt/./sources/core/ui/index.js","webpack://dhtmlxgantt/./sources/core/ui/message.js","webpack://dhtmlxgantt/./sources/core/ui_core.js","webpack://dhtmlxgantt/./sources/locale/locale_ua.ts","webpack://dhtmlxgantt/./sources/locale/locale_tr.ts","webpack://dhtmlxgantt/./sources/locale/locale_sv.ts","webpack://dhtmlxgantt/./sources/locale/locale_sk.ts","webpack://dhtmlxgantt/./sources/locale/locale_si.ts","webpack://dhtmlxgantt/./sources/locale/locale_ru.ts","webpack://dhtmlxgantt/./sources/locale/locale_ro.ts","webpack://dhtmlxgantt/./sources/locale/locale_pt.ts","webpack://dhtmlxgantt/./sources/locale/locale_pl.ts","webpack://dhtmlxgantt/./sources/locale/locale_no.ts","webpack://dhtmlxgantt/./sources/locale/locale_nl.ts","webpack://dhtmlxgantt/./sources/locale/locale_nb.ts","webpack://dhtmlxgantt/./sources/locale/locale_manager.ts","webpack://dhtmlxgantt/./sources/locale/locale_kr.ts","webpack://dhtmlxgantt/./sources/locale/locale_jp.ts","webpack://dhtmlxgantt/./sources/locale/locale_it.ts","webpack://dhtmlxgantt/./sources/locale/locale_id.ts","webpack://dhtmlxgantt/./sources/locale/locale_hu.ts","webpack://dhtmlxgantt/./sources/locale/locale_hr.ts","webpack://dhtmlxgantt/./sources/locale/locale_he.ts","webpack://dhtmlxgantt/./sources/locale/locale_fr.ts","webpack://dhtmlxgantt/./sources/locale/locale_fi.ts","webpack://dhtmlxgantt/./sources/locale/locale_fa.ts","webpack://dhtmlxgantt/./sources/locale/locale_es.ts","webpack://dhtmlxgantt/./sources/locale/locale_en.ts","webpack://dhtmlxgantt/./sources/locale/locale_el.ts","webpack://dhtmlxgantt/./sources/locale/locale_de.ts","webpack://dhtmlxgantt/./sources/locale/locale_da.ts","webpack://dhtmlxgantt/./sources/locale/locale_cs.ts","webpack://dhtmlxgantt/./sources/locale/locale_cn.ts","webpack://dhtmlxgantt/./sources/locale/locale_ca.ts","webpack://dhtmlxgantt/./sources/locale/locale_be.ts","webpack://dhtmlxgantt/./sources/locale/locale_ar.ts","webpack://dhtmlxgantt/./sources/locale/index.ts","webpack://dhtmlxgantt/./sources/publish_helpers/void_script_third.ts","webpack://dhtmlxgantt/./sources/core/destructor.js","webpack://dhtmlxgantt/./sources/core/common/assert.js","webpack://dhtmlxgantt/./sources/core/ui/resize_listener.js","webpack://dhtmlxgantt/./sources/core/gantt_core.js","webpack://dhtmlxgantt/./sources/core/cached_functions.js","webpack://dhtmlxgantt/./sources/core/data_task_types.js","webpack://dhtmlxgantt/./sources/publish_helpers/void_script_second.ts","webpack://dhtmlxgantt/./sources/core/data.js","webpack://dhtmlxgantt/./sources/core/facades/worktime_calendars.js","webpack://dhtmlxgantt/./sources/core/worktime/strategy/no_work_time.js","webpack://dhtmlxgantt/./sources/core/worktime/time_calculator.js","webpack://dhtmlxgantt/./sources/core/worktime/dynamic_resource_calendars.js","webpack://dhtmlxgantt/./sources/core/worktime/legacy_resource_config.js","webpack://dhtmlxgantt/./sources/core/worktime/strategy/work_unit_cache/date_duration_cache.ts","webpack://dhtmlxgantt/./sources/core/worktime/strategy/work_unit_cache/larger_units_helper.ts","webpack://dhtmlxgantt/./sources/core/worktime/strategy/work_unit_cache/workunit_object_cache.ts","webpack://dhtmlxgantt/./sources/core/worktime/strategy/work_unit_cache/workunit_map_cache.ts","webpack://dhtmlxgantt/./sources/core/worktime/strategy/calendar_strategy.js","webpack://dhtmlxgantt/./sources/core/worktime/strategy/work_calendar_merger.js","webpack://dhtmlxgantt/./sources/core/worktime/calendar_manager.js","webpack://dhtmlxgantt/./sources/core/worktime/work_time.js","webpack://dhtmlxgantt/./sources/core/load.js","webpack://dhtmlxgantt/./sources/core/tasks.js","webpack://dhtmlxgantt/./sources/core/grid_column_api.gpl.js","webpack://dhtmlxgantt/./sources/core/ui/plugins/column_grid_dnd/scrollable_grid.ts","webpack://dhtmlxgantt/./sources/core/ui/plugins/column_grid_dnd/column_grid_dnd.ts","webpack://dhtmlxgantt/./sources/core/ui/plugins/column_grid_dnd/index.ts","webpack://dhtmlxgantt/./sources/core/ui/grid/task_grid_row_resize.js","webpack://dhtmlxgantt/./sources/core/ui/row_position_fixed_height.js","webpack://dhtmlxgantt/./sources/core/ui/grid/grid_resize.gpl.js","webpack://dhtmlxgantt/./sources/core/grid_column_api.js","webpack://dhtmlxgantt/./sources/core/dynamic_loading.js","webpack://dhtmlxgantt/./sources/core/plugins/empty_state_screen.ts","webpack://dhtmlxgantt/./sources/core/common/link_formatter_simple.ts","webpack://dhtmlxgantt/./sources/core/plugins/formatters.js","webpack://dhtmlxgantt/./sources/core/plugins/auto_task_types.js","webpack://dhtmlxgantt/./sources/core/plugins/new_task_placeholder.js","webpack://dhtmlxgantt/./sources/core/plugins/resource_assignments.js","webpack://dhtmlxgantt/./sources/core/plugins/resources.js","webpack://dhtmlxgantt/./sources/core/plugins/wbs.js","webpack://dhtmlxgantt/./sources/core/plugins/batch_update.js","webpack://dhtmlxgantt/./sources/core/plugins/index.js","webpack://dhtmlxgantt/./sources/core/dataprocessor/simple_storage.ts","webpack://dhtmlxgantt/./sources/core/dataprocessor/extend_gantt.ts","webpack://dhtmlxgantt/./sources/core/dataprocessor/data_processor_events.ts","webpack://dhtmlxgantt/./sources/core/dataprocessor/data_processor.ts","webpack://dhtmlxgantt/./sources/core/dataprocessor/index.js","webpack://dhtmlxgantt/./sources/core/datastore/datastore_render.js","webpack://dhtmlxgantt/./sources/core/datastore/select.js","webpack://dhtmlxgantt/./sources/core/facades/datastore_links.js","webpack://dhtmlxgantt/./sources/core/facades/datastore_tasks.js","webpack://dhtmlxgantt/./sources/core/facades/datastore.js","webpack://dhtmlxgantt/./sources/core/datastore/datastore_hooks.js","webpack://dhtmlxgantt/./node_modules/bluebird/js/browser/bluebird.js","webpack://dhtmlxgantt/./sources/utils/promise.js","webpack://dhtmlxgantt/./sources/core/common/state.js","webpack://dhtmlxgantt/./sources/core/common/templates.js","webpack://dhtmlxgantt/./sources/core/common/dnd.js","webpack://dhtmlxgantt/./node_modules/remote-client/dist/remote.es6.js","webpack://dhtmlxgantt/./sources/core/remote/remote_events.js","webpack://dhtmlxgantt/./sources/core/common/date_parsers/csp_compliant_version.ts","webpack://dhtmlxgantt/./sources/core/common/date_parsers/fast_version.ts","webpack://dhtmlxgantt/./sources/core/common/date.js","webpack://dhtmlxgantt/./sources/core/common/serialize.ts","webpack://dhtmlxgantt/./sources/core/common/ajax.js","webpack://dhtmlxgantt/./sources/core/common/config.ts","webpack://dhtmlxgantt/./sources/core/common/services.js","webpack://dhtmlxgantt/./sources/ext/extension_manager.ts","webpack://dhtmlxgantt/./sources/constants/index.js","webpack://dhtmlxgantt/./sources/factory/make_instance_common.js","webpack://dhtmlxgantt/./sources/factory/make_instance_web.js","webpack://dhtmlxgantt/./sources/ext/undo/undo.ts","webpack://dhtmlxgantt/./sources/ext/undo/monitor.ts","webpack://dhtmlxgantt/./sources/ext/undo/index.ts","webpack://dhtmlxgantt/./sources/ext/tooltip/tooltip.ts","webpack://dhtmlxgantt/./sources/ext/tooltip/tooltipManager.ts","webpack://dhtmlxgantt/./sources/ext/tooltip/index.ts","webpack://dhtmlxgantt/./sources/ext/quick_info/quickInfo.ts","webpack://dhtmlxgantt/./sources/ext/quick_info/index.ts","webpack://dhtmlxgantt/./sources/ext/multiselect.js","webpack://dhtmlxgantt/./sources/ext/marker.js","webpack://dhtmlxgantt/./sources/ext/keyboard_navigation/core.js","webpack://dhtmlxgantt/./sources/ext/keyboard_navigation/modals.js","webpack://dhtmlxgantt/./sources/ext/keyboard_navigation/elements/task_cell.js","webpack://dhtmlxgantt/./sources/ext/keyboard_navigation/elements/task_row.js","webpack://dhtmlxgantt/./sources/ext/keyboard_navigation/elements/header_cell.js","webpack://dhtmlxgantt/./sources/ext/keyboard_navigation/elements/nav_node.js","webpack://dhtmlxgantt/./sources/ext/keyboard_navigation/elements/gantt_node.js","webpack://dhtmlxgantt/./sources/ext/keyboard_navigation/common/trap_modal_focus.js","webpack://dhtmlxgantt/./sources/ext/keyboard_navigation/common/eventhandler.js","webpack://dhtmlxgantt/./sources/ext/keyboard_navigation/common/keyboard_shortcuts.js","webpack://dhtmlxgantt/./sources/ext/keyboard_navigation.js","webpack://dhtmlxgantt/./sources/ext/fullscreen/index.ts","webpack://dhtmlxgantt/./node_modules/querystring-es3/encode.js","webpack://dhtmlxgantt/./node_modules/querystring-es3/decode.js","webpack://dhtmlxgantt/./node_modules/querystring-es3/index.js","webpack://dhtmlxgantt/./node_modules/url/util.js","webpack://dhtmlxgantt/(webpack)/buildin/module.js","webpack://dhtmlxgantt/./node_modules/punycode/punycode.js","webpack://dhtmlxgantt/./node_modules/builtin-status-codes/browser.js","webpack://dhtmlxgantt/./node_modules/xtend/immutable.js","webpack://dhtmlxgantt/./node_modules/to-arraybuffer/index.js","webpack://dhtmlxgantt/./node_modules/readable-stream/lib/_stream_passthrough.js","webpack://dhtmlxgantt/./node_modules/util-deprecate/browser.js","webpack://dhtmlxgantt/./node_modules/setimmediate/setImmediate.js","webpack://dhtmlxgantt/./node_modules/readable-stream/lib/internal/streams/BufferList.js","webpack://dhtmlxgantt/./node_modules/stream-http/lib/request.js","webpack://dhtmlxgantt/./node_modules/https-browserify/index.js","webpack://dhtmlxgantt/./node_modules/ieee754/index.js","webpack://dhtmlxgantt/./node_modules/base64-js/index.js","webpack://dhtmlxgantt/./sources/ext/export_api/index.ts","webpack://dhtmlxgantt/./sources/ext/drag_timeline/eventsManager.ts","webpack://dhtmlxgantt/./sources/ext/drag_timeline/index.ts","webpack://dhtmlxgantt/./sources/ext/click_drag/selectedRegion.ts","webpack://dhtmlxgantt/./sources/ext/click_drag/eventsManager.ts","webpack://dhtmlxgantt/./sources/ext/click_drag/index.ts","webpack://dhtmlxgantt/./sources/ext/extensions_gpl.ts","webpack://dhtmlxgantt/./sources/dhtmlxgantt.gpl.ts"],"names":["root","factory","exports","module","define","amd","window","installedModules","__webpack_require__","moduleId","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","prototype","hasOwnProperty","p","s","_typeof","obj","iterator","constructor","seed","helpers","plainObjectConstructor","toString","copy","result","isDate","Date","isArray","Array","length","isCustomType","apply","defined","mixin","target","source","force","f","undefined","uid","valueOf","functor","arguments","event","el","handler","capture","addEventListener","attachEvent","eventRemove","removeEventListener","detachEvent","elementPosition","elem","top","left","right","bottom","getBoundingClientRect","box","body","document","docElem","documentElement","parentNode","scrollTop","pageYOffset","scrollLeft","pageXOffset","clientTop","clientLeft","offsetWidth","offsetHeight","parseInt","offsetTop","offsetLeft","offsetParent","y","Math","round","x","width","height","isVisible","node","display","visibility","getComputedStyle","style","currentStyle","hasNonNegativeTabIndex","isNaN","getAttribute","hasHref","a","area","nodeName","loLowerCase","isEnabled","input","select","textarea","button","toLowerCase","hasAttribute","getClassName","className","baseVal","indexOf","_trimString","_slave","getTargetNode","e","trg","tagName","srcElement","shadowRoot","composedPath","str","String","trim","this","replace","isShadowDomSupported","head","createShadowRoot","attachShadow","getRootNode","element","ShadowRoot","host","getNodePosition","getFocusableNodes","nodes","querySelectorAll","join","nodesArray","slice","$position","sort","b","tabIndex","splice","getScrollSize","div","createElement","cssText","appendChild","clientWidth","removeChild","addClassName","removeClassName","split","regEx","RegExp","insertNode","newone","innerHTML","child","firstChild","removeNode","getChildNodes","css","ch","childNodes","len","out","push","toNode","getElementById","querySelector","locateClassName","classname","strict","ind","charAt","locateAttribute","attribute","getRelativeEventPosition","ev","clientX","clientY","isChildOf","parent","hasClass","classList","contains","test","closest","selector","matches","msMatchesSelector","webkitMatchesSelector","parentElement","nodeType","console","error","hasShadowParent","getActiveElement","activeElement","getSelection","focusNode","units","second","minute","hour","day","week","month","quarter","year","getFullYear","getMonth","getDate","arrayFilter","arr","callback","filter","checkZeroId","id","getSecondsInUnit","unit","forEach","workArray","arrayMap","map","resArray","arrayIncludes","item","includes","arrayFind","find","arrayDifference","arraySome","hashToArray","hash","sortArrayOfHash","field","desc","compare","throttle","timeout","wait","setTimeout","pop","isValidDate","getTime","isStringObject","Function","isNumberObject","isBooleanObject","delay","timer","$cancelTimeout","$pending","args","clearTimeout","$execute","objectKeys","keys","isEventable","replaceValidZeroId","rootId","findBinary","array","prev","low","high","floor","__","g","eval","EventHost","_silent_mode","listeners","_silentStart","_silentEnd","createEventStorage","handlers","index","eventStorage","combinedResult","handlerResult","addEvent","settings","handlerId","once","originalHandler","removeEvent","clear","eventHost","eventName","thisObject","attachAll","callEvent","eventArguments","handlerName","concat","checkEvent","list","eventId","detachAllEvents","gantt","view","config","datastore","viewport","start","getItemIndexByTopPosition","end","y_end","count","max","min","dummy","log","BaseControl","render","set_value","get_value","focus","ctor","superCtor","super_","writable","configurable","TempCtor","cachedSetTimeout","cachedClearTimeout","process","defaultSetTimout","Error","defaultClearTimeout","runTimeout","fun","currentQueue","queue","draining","queueIndex","cleanUpNextTick","drainQueue","run","marker","runClearTimeout","Item","noop","nextTick","title","browser","env","argv","version","versions","on","addListener","off","removeListener","removeAllListeners","emit","prependListener","prependOnceListener","binding","cwd","chdir","dir","umask","BaseEditor","show","column","placeholder","hide","get_input","is_changed","currentValue","is_valid","save","isWindowAwailable","isIE","navigator","userAgent","isIE6","XMLHttpRequest","isIE7","isIE8","isOpera","isChrome","isKHTML","isFF","isIPad","search","isEdge","isNode","pna","Duplex","util","inherits","Readable","Writable","v","method","options","readable","allowHalfOpen","onend","_writableState","ended","onEndNT","self","highWaterMark","_readableState","destroyed","set","_destroy","err","cb","global","base64","ieee754","kMaxLength","Buffer","TYPED_ARRAY_SUPPORT","createBuffer","that","RangeError","Uint8Array","__proto__","arg","encodingOrOffset","allocUnsafe","from","TypeError","ArrayBuffer","byteOffset","byteLength","fromArrayLike","fromArrayBuffer","string","encoding","isEncoding","actual","write","fromString","isBuffer","checked","buffer","val","isnan","type","data","fromObject","assertSize","size","isView","loweredCase","utf8ToBytes","base64ToBytes","swap","bidirectionalIndexOf","arrayIndexOf","lastIndexOf","indexSize","arrLength","valLength","read","buf","readUInt16BE","foundIndex","found","j","hexWrite","offset","Number","remaining","strLen","parsed","substr","utf8Write","blitBuffer","asciiWrite","byteArray","charCodeAt","asciiToBytes","latin1Write","base64Write","ucs2Write","hi","lo","utf16leToBytes","base64Slice","fromByteArray","utf8Slice","res","secondByte","thirdByte","fourthByte","tempCodePoint","firstByte","codePoint","bytesPerSequence","codePoints","MAX_ARGUMENTS_LENGTH","fromCharCode","decodeCodePointsArray","SlowBuffer","alloc","INSPECT_MAX_BYTES","foo","subarray","typedArraySupport","poolSize","_augment","species","fill","allocUnsafeSlow","_isBuffer","pos","swap16","swap32","swap64","hexSlice","asciiSlice","latin1Slice","utf16leSlice","equals","inspect","match","thisStart","thisEnd","thisCopy","targetCopy","isFinite","toJSON","_arr","ret","toHex","bytes","checkOffset","ext","checkInt","objectWriteUInt16","littleEndian","objectWriteUInt32","checkIEEE754","writeFloat","noAssert","writeDouble","newBuf","sliceLen","readUIntLE","mul","readUIntBE","readUInt8","readUInt16LE","readUInt32LE","readUInt32BE","readIntLE","pow","readIntBE","readInt8","readInt16LE","readInt16BE","readInt32LE","readInt32BE","readFloatLE","readFloatBE","readDoubleLE","readDoubleBE","writeUIntLE","writeUIntBE","writeUInt8","writeUInt16LE","writeUInt16BE","writeUInt32LE","writeUInt32BE","writeIntLE","limit","sub","writeIntBE","writeInt8","writeInt16LE","writeInt16BE","writeInt32LE","writeInt32BE","writeFloatLE","writeFloatBE","writeDoubleLE","writeDoubleBE","targetStart","code","INVALID_BASE64_RE","Infinity","leadSurrogate","toByteArray","stringtrim","base64clean","src","dst","utils","eventable","domHelpers","Cell","$container","$parent","$config","headerHeight","$gantt","$domEvents","_createDomEventScope","$id","$name","$factory","destructor","$view","$services","getService","detach","_headerClickHandler","detachAll","cell","scrollTo","html","getNode","padding","resize","_final","$preResize","topCont","topSize","getSize","minWidth","maxWidth","minHeight","maxHeight","setSize","_hide","cellIndex","moveView","hidden","$toHTML","content","header","raw","canCollapse","$fill","init","toggle","delegate","collapsed","gravity","getContentSize","$lastSize","contentX","contentY","_getBorderSizes","borders","horizontal","vertical","_currentBorders","_borders","_sizeHeader","_sizeContent","_setBorders","cssHash","xLayout","transform","$root","store","placeholder_task","exists","getItem","types","objectToString","isBoolean","isNull","isNullOrUndefined","isNumber","isString","isSymbol","isUndefined","isRegExp","re","isObject","isError","isFunction","isPrimitive","__extends","htmlHelpers","_super","SelectControl","sns","getHtmlSelect","_dhx_onchange","onchange","_focus","start_date","end_date","getItemTop","getItemHeight","startCoord","posFromDate","endCoord","x_end","smart_rendering","_smart_render","globalScope","copyProps","SafeBuffer","fn","arg1","arg2","arg3","createDropTargetObject","targetParent","targetIndex","targetId","nextSibling","prevSibling","nextSiblingTarget","dndTaskId","targetTaskId","getParent","getBranchIndex","prevSiblingTarget","firstChildTarget","lastChildTarget","children","getChildren","isLegacyRender","columnIndex","scale","viewPort","cellLeftCoord","cellRightCoord","firstCellIndex","lastCellIndex","_task_default_render","task","_isAllowedUnscheduledTask","_isTaskInTimelineLimits","getItemPosition","cfg","templates","$getTemplates","taskType","getTaskType","getBarHeight","milestone","controlsMargin","padd","item_attribute","setAttribute","show_progress","done","progress","pr","progressColor","backgroundColor","opacity","progress_text","rtl","position","wrapper","drag_progress","isReadonly","drag","markerPos","_render_task_progress","task_text","_render_task_content","textColor","color","basic","template","itemId","$getConfig","state","getState","getTask","project","isSummaryTask","isSplitTask","open_split_tasks","$open","select_task","isSelectedTask","drag_id","drag_mode","touch_drag","link_source_id","link_target_id","highlight_critical_path","isCriticalTask","link_landing_area","from_id","from_start","link_from_start","to_start","link_to_start","allowDrag","isLinkAllowed","dragClass","_combine_item_class","task_class","styles","side","margin","_get_link_crossing_css","marginStyle","_render_side_content","leftside_text","_render_leftside_content","rightside_text","_render_rightside_content","_waiAria","setTaskBarAttr","drag_resize","_render_pair","drag_links","show_links","outer","inner","showLinkPoints","touch","cssClass","text","abs","cond","leftside","$source","links","start_to_start","$target","finish_to_start","finish_to_finish","_get_conditions","ln","link","getLink","tp","min_date","marginLeft","max_date","marginRight","renderer","type_renderers","defaultRenderer","ScaleHelper","topPositionMixin","canvasRender","Timeline","$scaleHelper","_posFromDateCache","_timelineDragScroll","container","$task","$task_scale","$task_data","$task_bg","$task_links","$task_bars","_tasks","col_width","full_width","trace_x","rendered","attr","linksAttr","bindLinks","link_attribute","layers","_createLayerConfig","tasks","linkLayers","_attachLayers","dragTimeline","attach","dataHeight","scale_height","refresh","backgroundImage","rowStore","getTotalHeight","data_els","contentHeight","contentWidth","scrollHeight","scrollWidth","scrolled","_refreshScales","smart_scales","getViewPort","scales","_scales","_getScaleChunkHtml","taskFilter","expose","$ui","taskBar","hide_bar","taskSplitBar","append","taskRollupBar","taskBg","_taskLayers","_linkLayers","_bindStore","taskRenderer","getDataRender","createDataRender","defaultContainer","taskLayers","layer","update","bar_layer","addLayer","_taskRenderer","getLayer","_initStaticBackgroundRender","linkStore","getDatastore","linkRenderer","linkLayer","_linkRenderer","staticRender","_staticBgHandler","static_background","timeline_placeholder","staticBgContainer","$task_bg_static","insertBefore","staticBackgroundHeight","getScale","destroy","_clearLayers","removeLayer","_render_tasks_scales","scales_html","outer_width","_getScales","availWidth","autosize","autosize_min_width","cfgs","prepareConfigs","min_column_width","fromPos","toPos","scale_row_class","tplClass","_prepareScaleHtml","globalConfig","globalTemplates","cells","date","format","date_to_str","startIndex","endIndex","inherit_scale_class","scale_cell_class","cssclass","getTimelineCellAttr","dateFromPos","summ","part","_getColumnDuration","dateValue","columnIndexByDate","assert","wholeCells","partCell","roundPos","_getNextVisibleColumn","columns","ignores","visibleDateIndex","_getPrevVisibleColumn","_getClosestVisibleColumn","days","trace_x_ascending","ignore_x","dateIndex","visibleIndex","visibleDate","transition","trace_index_transition","xLeft","xRight","rowHeight","taskId","isMilestoneRender","task_height","bar_height","task_height_offset","sqrt","primaryScale","getSubScales","sortScales","add","step","_timelineCacheAttached","_resetTopPositionHeight","_unbindStore","_resetHeight","events","mouseEvents","h","gridResize","rowResize","ColumnDnd","Grid","$state","gridAriaAttr","gridAttrString","gridDataAriaAttr","gridDataAttrString","_ganttConfig","reorderColumns","reorder_grid_columns","$grid","gridScaleRowAttrString","$grid_scale","$grid_data","resizer","_renderHeaderResizers","doOnRender","_mouseDelegates","_addLayers","_initEvents","_columnDND","_validateColumnWidth","numericWidth","outerWidth","getGridColumns","innerWidth","elasticColumns","grid_elastic_columns","scrollable","_setColumnsWidth","columnProperty","newColumnWidth","col","min_grid_column_width","columnsWidth","grid_width","_getGridWidth","_gridCacheAttached","_initSmartRenderingPlaceholder","_calculateGridWidth","_renderGridHeader","getColumnIndex","excludeHidden","hiddenIndexShift","getColumn","gridLine","gridTaskRowResizer","resize_rows","_refreshPlaceholderOnStoreUpdate","scrollY","scroll","getView","getScrollState","scrollSize","$rowsPlaceholder","close","open","_getColumnWidth","min_width","new_width","max_width","_checkGridColumnMinWidthLimits","_getGridWidthLimits","min_limit","max_limit","newWidth","start_index","columns_width","final_width","extra_width","start_width","share","curExtra","_getColsTotalWidth","cols_width","parseFloat","unknown","gridWidth","autofit","diff","delta","changed","_setContentSize","locale","reverse","labels","lineHeigth","last","colWidth","_sort","direction","grid_header_class","label","gridScaleCellAttrString","lineHeight","dateHelper","services","getSum","sizes","to","setSumWidth","sum_width","parts","adjustSize","splitSize","full","cellSize","_isLegacyMode","scaleConfig","scale_unit","date_scale","subscales","_prepareScaleObject","legacyMode","initTemplate","min_coll_width","container_width","minDate","maxDate","heights","configs","main_scale","initScaleConfig","processIgnores","initColSizes","limitVisibleRange","unshift","alineScaleColumns","reverseScale","setPosSettings","indexes","trace_indexes","_ignore_time_config","skip_off_time","skip","probe","isWorkTime","display_count","min_col_width","line_height","cont_width","column_count","eachColumn","iterateScales","lower_scale","upper_scale","upper_dates","lower_dates","prevUpper","up","target_index","upper_start","upper_end","lower_start","lower_end","targetWidth","curr","tzOffset","getTimezoneOffset","_correct_dst_change","dates","lastDate","outDate","shared","attributes","_this","entry","_attributes","getHtmlOption","_getHtmlContainer","getHtmlButton","getHtmlDiv","getHtmlLabel","getHtmlInput","_getHtmlAttributes","tag","resourceTaskCache","$data","tasksStore","resource","resourceProperty","timeline","cacheKey","items","assignmentsPassed","timegrid","process_resource_assignments","resource_property","$role","getResourceAssignments","$resource_id","$task_id","getTaskBy","assignments","scaleUnit","scaleStep","precalculatedTimes","task_id","firstColumn","currDate","calendar","work_time","getTaskCalendar","cachedTimes","timestamp","calculateResourceLoadFromAssignments","timetable","resource_render_empty_cells","calculateResourceLoad","Layout","_parseConfig","$cells","_resizeScrollbars","scrollbars","scrollbar","scrollChanged","visibleScrollbars","hiddenScrollbars","scrollbarsToHide","showScrollbar","hideScrollbar","shouldHide","shouldShow","visibleGroups","group","$scrollbarRepaint","_syncCellSizes","groupName","newSize","groups","_eachChild","_syncGroupSize","_xLayout","getNextSibling","newSizeValue","isGravity","ownSize","resizeSibling","getPrevSibling","siblingSize","totalGravity","totalSize","k","mainGrid","$content","startStage","mainCall","_resizeInProgress","contentViews","getCellsByType","setContentSize","_getAutosizeMode","$originalWidthStored","$originalWidth","$originalHeightStored","$originalHeight","isChild","cellId","alert","rows","cols","views","initUI","getCells","_cleanElSize","_getBoxStyles","computed","properties","boxSizing","clientHeight","MozBoxSizing","horPaddings","paddingLeft","paddingRight","borderLeftWidth","borderRightWidth","vertPaddings","paddingTop","paddingBottom","borderTopWidth","borderBottomWidth","borderBox","innerHeight","outerHeight","boxSizes","contentSizes","_sizes","_calcFreeSpace","_free","_gravity","_calcSize","_configureBorders","borderClass","lastVisibleIndex","lastCell","borderColorClass","_updateCellVisibility","oldVisibleCells","_visibleCells","firstCall","visibleCells","parentVisibility","hide_empty","hideCell","cellView","marginSide","dx","dy","sourceTop","sourceHeight","targetTop","targetHeight","sourceLeft","sourceRight","targetLeft","targetRight","tmp","getLinkRectangle","coordinates","calculated","clearCache","initialized","getVisibleItems","rec","buildCache","visibleBoxes","ids","workunit_map_cache_1","workunit_object_cache_1","larger_units_helper_1","LargerUnitsCache","createCacheObject","Map","WorkUnitsMapCache","WorkUnitsObjectCache","IsWorkTimeArgument","ClosestWorkTimeArgument","CalculateEndDateArgument","duration","GetDurationArgument","getWorkHoursArguments","setWorkTimeArguments","unsetWorkTimeArguments","isWorkTimeArguments","processedConfig","duration_unit","getClosestWorkTimeArguments","_getStartEndConfig","param","argumentType","duration_step","getDurationArguments","hasDurationArguments","calculateEndDateArguments","quickPositionHelperFactory","getItemTopCache","getRowTopCache","getItemHeightCache","totalHeightCache","getItemHeightCacheState","quickPosition","resetCache","newState","getCacheStateTotalHeight","shouldClearHeightCache","getRowTop","canUseSimpleCalculation","all","getIndexRange","itemIndex","getIndexById","parentId","_fillHeightCache","defaultHeight","row_height","eachItem","globalHeight","itemHeightCache","sumHeight","oldState","newValue","getHeight","totalHeight","countVisible","current","next","getIdByIndex","DurationFormatterNumeric","canParse","parse","copyLinkIdsArray","linkIds","targetHash","isLinkExists","copyLinkIds","getSubtreeLinks","isTaskExists","eachTask","getSubtreeTasks","PrimaryScaleHelper","_init_tasks_range","scale_offset_minimal","helper","_scale_range_unit","range","start_interval","resolveConfigRange","onlyProjectTasks","getTaskByTime","getSubtaskDates","calculateEndDate","_min_date","_max_date","fit_tasks","old_min","old_max","_adjust_scales","powerArray","DataStore","isPlaceholderTask","TreeDataStore","_branches","pull","$initItem","loadedItem","initItem","existingItem","move","$index","root_id","$parentProperty","parentProperty","$getRootId","$openInitially","openInitially","visibleOrder","$create","fullOrder","_searchVisibleOrder","_indexRangeCache","_eachItemMainRangeCache","_getItemsCache","_skip_refresh","getConfig","splitParents","splitItems","taskOpenState","taskVisibility","haveSplitItems","_attachDataChange","_isSplitItem","canOpenSplitTasks","$split_subtask","$expanded_branch","_buildTree","setParent","_add_branch","$level","calculateItemLevel","$local_index","_updateOrder","hasChild","loaded","_parseInner","_addItemInner","_move_branch","$rendered_parent","_changeIdInner","oldId","newId","_replace_branch_child","_traverseBranches","branch","_removeItemInner","sid","tindex","source_pid","tbranch","placeholderIds","tid","_moveInner","childId","pid","getSiblings","siblings","previousSibling","clearAll","level","eachParent","_setParentInner","new_pid","silent","_eachItemCached","cache","_eachItemIterate","startId","itemsStack","useCache","startItem","parentsHash","old_parent","new_parent","old_id","new_id","newbranch","criteria","original_criteria","els","temp","rule","renderedParent","actualParent","_skipTaskRecalculation","$powerArray","$removeAt","$remove","$find","$insertAt","$each","master","$map","$filter","_filterRule","copyOnParse","isSilent","updateItem","removeItem","order","data_size","addItem","changeId","sindex","$destroyed","unselect","alreadySilent","arraysEqual","arr1","arr2","quick","skipFilter","_quick_refresh","_mark_recompute","oldOrder","serialize","filteredOrder","getItems","_getNullIfUndefined","getFirst","getLast","getNext","getPrev","updPerSecond","_on_timeout","ceil","createScope","eventScope","staticArray","extend","FormData","__webpack_amd_options__","punycode","Url","protocol","slashes","auth","port","hostname","query","pathname","path","href","urlParse","resolve","relative","resolveObject","protocolPattern","portPattern","simplePathPattern","unwise","autoEscape","nonHostChars","hostEndingChars","hostnamePartPattern","hostnamePartStart","unsafeProtocol","javascript","javascript:","hostlessProtocol","slashedProtocol","http","https","ftp","gopher","file","http:","https:","ftp:","gopher:","file:","querystring","url","parseQueryString","slashesDenoteHost","u","queryIndex","splitter","uSplit","rest","simplePath","exec","proto","lowerProto","atSign","hostEnd","hec","decodeURIComponent","parseHost","ipv6Hostname","hostparts","newpart","validParts","notHost","bit","toASCII","ae","esc","encodeURIComponent","escape","qm","stringify","rel","tkeys","tk","tkey","rkeys","rk","rkey","relPath","shift","isSourceAbs","isRelAbs","mustEndAbs","removeAllDots","srcPath","psychotic","authInHost","hasTrailingSlash","isAbsolute","Transform","_transformState","afterTransform","er","ts","transforming","writecb","writechunk","rs","reading","needReadable","_read","needTransform","writeencoding","sync","_transform","flush","_flush","prefinish","stream","chunk","_write","_this2","err2","StringDecoder","nb","enc","nenc","retried","_normalizeEncoding","normalizeEncoding","utf16Text","utf16End","fillLast","utf8FillLast","base64Text","base64End","simpleWrite","simpleEnd","lastNeed","lastTotal","lastChar","utf8CheckByte","_byte","utf8CheckExtraBytes","total","utf8CheckIncomplete","scope","Timeout","clearFn","_id","_clearFn","setInterval","clearInterval","unref","ref","enroll","msecs","_idleTimeoutId","_idleTimeout","unenroll","_unrefActive","active","_onTimeout","setImmediate","clearImmediate","CorkedRequest","finish","corkReq","pendingcb","corkedRequestsFree","onCorkedFinish","asyncWrite","WritableState","internalUtil","deprecate","Stream","OurUint8Array","realHasInstance","destroyImpl","nop","isDuplex","objectMode","writableObjectMode","hwm","writableHwm","writableHighWaterMark","defaultHwm","finalCalled","needDrain","ending","finished","noDecode","decodeStrings","defaultEncoding","writing","corked","bufferProcessing","onwrite","writelen","onwriteStateUpdate","finishMaybe","errorEmitted","onwriteError","needFinish","bufferedRequest","clearBuffer","afterWrite","lastBufferedRequest","prefinished","bufferedRequestCount","writev","_writev","doWrite","onwriteDrain","holder","allBuffers","isBuf","callFinal","need","getBuffer","_","hasInstance","pipe","_isUint8Array","_uint8ArrayToBuffer","writeAfterEnd","valid","validChunk","newChunk","decodeChunk","writeOrBuffer","cork","uncork","setDefaultEncoding","endWritable","_undestroy","undestroy","emitErrorNT","readableDestroyed","writableDestroyed","endEmitted","EventEmitter","_events","_maxListeners","defaultMaxListeners","setMaxListeners","context","listener","newListener","warned","trace","fired","listenerCount","evlistener","emitter","ReadableState","EElistenerCount","debugUtil","debug","debuglog","BufferList","kProxyEvents","readableObjectMode","readableHwm","readableHighWaterMark","pipes","pipesCount","flowing","emittedReadable","readableListening","resumeScheduled","awaitDrain","readingMore","decoder","readableAddChunk","addToFront","skipChunkCheck","emitReadable","onEofChunk","chunkInvalid","getPrototypeOf","addChunk","maybeReadMore","needMoreData","isPaused","setEncoding","MAX_HWM","howMuchToRead","computeNewHighWaterMark","emitReadable_","flow","maybeReadMore_","nReadingNextTick","resume_","fromList","hasStrings","tail","copyFromBufferString","copyFromBuffer","fromListPartial","endReadable","endReadableNT","xs","nOrig","doRead","dest","pipeOpts","endFn","stdout","stderr","unpipe","onunpipe","unpipeInfo","hasUnpiped","onclose","onfinish","ondrain","onerror","ondata","cleanedUp","pipeOnDrain","increasedAwaitDrain","pause","resume","dests","wrap","paused","_fromList","PassThrough","capability","rStates","readyStates","UNSENT","OPENED","HEADERS_RECEIVED","LOADING","DONE","IncomingMessage","xhr","response","fetchTimer","_mode","headers","rawHeaders","trailers","rawTrailers","_fetchResponse","statusCode","status","statusMessage","statusText","writableStream","WritableStream","Promise","reject","_destroyed","_resumeFetch","abort","pipeTo","reader","getReader","then","_xhr","_pos","responseURL","getAllResponseHeaders","_charset","overrideMimeType","mimeType","charsetMatch","_onXHRProgress","readyState","VBArray","responseBody","toArray","responseText","newData","MSStreamReader","onprogress","onload","readAsArrayBuffer","fetch","ReadableStream","abortController","AbortController","blobConstructor","Blob","getXHR","XDomainRequest","checkTypeSupport","responseType","haveArrayBuffer","haveSlice","arraybuffer","msstream","mozchunkedarraybuffer","vbArray","ClientRequest","statusCodes","request","opts","defaultProtocol","location","toUpperCase","req","Agent","defaultMaxSockets","globalAgent","STATUS_CODES","METHODS","htmlTags","extraSpaces","stripHTMLLite","htmlText","singleQuotes","escapeQuotes","getAttributeString","dateString","aria-label","_taskCommonAttr","tooltip_text","$dataprocessor_class","drag_move","taskRowAttr","order_branch","linkAttr","linkTypes","toStart","fromStart","start_to_finish","drag_link","gridSeparatorAttr","rowResizerAttr","lightboxHiddenAttr","lightboxVisibleAttr","lightboxAttr","lightboxButtonAttrString","buttonName","role","tabindex","lightboxHeader","headerText","lightboxSelectAttrString","time_option","years","months","hours","minutes","lightboxDurationInputAttrString","section","column_duration","aria-valuemin","inlineEditorAttr","multiselect","attrs","new_task","reorderMarkerAttr","removeAttribute","gridCellAttrString","textValue","editor","gridAddButtonAttrString","messageButtonAttrString","buttonLabel","messageInfoAttr","messageModalAttr","quickInfoAttr","quickInfoHeaderAttrString","quickInfoHeader","quickInfoButtonAttrString","tooltipAttr","tooltipVisibleAttr","tooltipHiddenAttr","payload","wai_aria_attributes","_extend_to_optional","lightbox_block","optional_time","mapping","_resolve_default_mapping","disable","enable","disabled","update_block","_lightbox_id","button_text","resizeLightbox","button_click","_get_typed_lightbox_config","form_blocks","duration_optional","time_optional","time","TypeselectControl","typeKey","typeValue","oldOnChange","changeLightboxType","_lightbox_new_type","ConstraintControl","isNonTimedConstraint","constraint_types","ASAP","ALAP","toggleTimeSelect","timeSelects","isNonTimed","getTimePicker","typeSelect","_time_format_order","_eventsInitialized","constraintDate","constraint_date","_fill_lightbox_select","constraintType","constraint_type","getConstraintType","getTimePickerValue","ParentControl","_display","item_id","allow_root","root_label","_filter","map_to","tmpDom","newOptions","onselect","replaceChild","DurationControl","getFormatter","formatter","_getStartDate","getElementsByTagName","_getDuration","singleDate","single_date","readonly","ariaAttr","durationInputClass","duration_val","inps","btns","endspan","_calc_date","task_end_date","task_date","_change_duration","onclick","onkeydown","charCode","keyCode","which","constants","KEY_CODES","DOWN","UP","calculateDuration","startDate","endDate","RadioControl","radio","default_value","CheckboxControl","single_value","checkboxes","TimeControl","auto_end_date","_update_lightbox_select","selects","autofix_end","_get_timepicker_step","_getEndDate","TextareaControl","_get_input","TemplateControl","ResourcesControl","getHtmlButtons","buttons","floatRight","_migrate_buttons","getHtmlTimePickerOptions","start_year","end_year","tdate","timeFormat","year_range","month_full","first","_time_values","time_picker","setTime","getHours","getMinutes","_lightbox_methods","_lightbox_template","_lightbox_root","registerProvider","lightbox","showLightbox","getLightbox","_center_lightbox","showCover","_fill_lightbox","round_dnd_dates","_is_chart_visible","time_step","getLabel","sections","updateCollection","list_name","collection","serverList","resetLightbox","getLightboxType","_lightbox_type","lightboxDiv","fullWidth","ds","classNames","cspEnvironment","csp","salesforceEnvironment","setParentNode","_lightbox","_is_lightbox_timepicker","wide_form","buttons_left","buttons_right","drag_lightbox","onmousedown","_ready_to_dnd","onselectstart","cursor","_init_dnd_events","_render_sections","backup_overflow","overflow","labelBlock","inputBlock","inputId","bindLabelsToInputs","_init_lightbox_events","block","con","lightbox_additional_height","scroll_top","scroll_left","view_height","_cover","lightbox_events","gantt_save_btn","_save_lightbox","gantt_delete_btn","$click","hideLightbox","gantt_cancel_btn","_cancel_lightbox","sec","buttonTarget","SPACE","shiftKey","click","edit_save","edit_cancel","getLightboxValues","$new","_update_flags","refreshData","addTask","getTaskIndex","refreshTask","updateTask","hideCover","_custom_lightbox","_set_lightbox_values","lightbox_header","task_time","getLightboxSection","getValue","setValue","get_template_control","control","get_select_control","get_textarea_control","get_time_control","eventElement","_move_while_dnd","_finish_dnd","_dnd_start_lb","gantt_unselectable","lb","now","pageX","pageY","_lb_start","ariaAttrs","date_part","time_format","getTimeFormat","limit_time_select","first_hour","last_hour","setHours","needSetTime","mapOffset","checkbox","resources","constraint","typeselect","_simple_confirm","message","ok","confirm","type_value","_silent_redraw_lightbox","oldType","formData","updTask","scrollX","scrollState","visible","getTaskDND","tasksDnD","_tasks_dnd","touch_feedback","touch_feedback_duration","_prevent_touch_scroll","_touch_feedback","vibrate","platform","maxTouchPoints","touchEventsSupported","createEvent","_touch_events","touches","pointerEnabled","pointerType","msPointerEnabled","MSPOINTER_TYPE_MOUSE","touchHandlers","names","accessor","ignore","dblclicktime","actionMode","scrollMode","actionStart","longTapTimer","currentDndId","dndNodes","targetView","start_drag","on_mouse_move","preventDefault","cancelBubble","newScrollState","scrollView","block_action","allViews","$layout","findTargetView","_locate_css","locate","on_mouse_down","renders","_getTaskLayers","isTaskVisible","task_attribute","cloneNode","cloneTaskRendered","_start_dnd","_touch_drag","remove","on_mouse_up","onDoubleClick","USE_KEY","_defaultScales","TimelineZoom","zoomIn","getCurrentLevel","setLevel","zoomOut","_levels","_activeLevelIndex","getLevels","zoomLevel","_getZoomIndexByName","_setLevel","levelName","_getVisibleDate","scrollPos","_visibleDate","cursorOffset","nextConfig","chartConfig","cursorDate","newPosition","middleDate","_attachWheelEvent","_domEvents","_useKey","_handler","passive","_defaultHandler","timelineOffset","wheelUp","deltaY","wheelDelta","stopPropagation","_setScaleSettings","_setScaleDates","_initialStartDate","_initialEndDate","activeLevelIndex","_mapScales","levels","_minColumnWidth","minColumnWidth","_maxColumnWidth","maxColumnWidth","_widthStep","widthStep","useKey","_initialized","trigger","_stepUp","_stepDown","nextLevel","dhtmlx","attaches","attachGantt","cmp","attachObject","dataType","dataObj","vs","av","grid","border","gridId","gridObj","dhtmlXCellObject","jQuery","$","methods","dhx_gantt","each","newgantt","Gantt","getGanttInstance","isHeadless","scrollRange","scrollStep","scrollDelay","scrollSpeed","interval","isMove","delayTimeout","startPos","started","eventPos","isDisplayed","isScrollState","dragMarker","isResize","isLink","isClickDrag","autoscroll","defineDelayTimeout","speed","autoscroll_speed","tick","autoscroll_delay","defineScrollInterval","autoscrollInterval","isScroll","targetTouches","gridDrag","posX","posY","need_scroll","currentScrollTop","scrollOuterHeight","inner_height","scrollInnerHeight","currentScrollLeft","scrollOuterWidth","inner_width","scrollInnerWidth","autoscroll_step","boxSize","zoom","skins","link_line_width","link_arrow_size","_second_column_width","_third_column_width","material","_redefine_lightbox_buttons","getTaskNode","indx","broadway","_config_buttons_left","_config_buttons_right","terrace","meadow","skyblue","_get_skin","skin","skinset","_configure","resetSkin","getTimeline","getGrid","getBaseCell","getVerticalScrollbar","baseCell","getAttachedScrollbar","getHorizontalScrollbar","attachedScrollbar","DEFAULT_VALUE","tryCall","fallback","getTaskTop","getTaskPosition","getTaskBarHeight","getTaskHeight","roundTaskDates","domAttr","getLinkNode","oldH","oldV","scrollHorizontal","scrollVertical","verticalViews","_getLinkedViews","horizontalViews","commonViews","viewId","$skipSmartRenderOnScroll","newV","newH","showDate","date_x","scroll_to","task_scroll_offset","showTask","leftPos","_scroll_state","gridCell","timelineCell","x_pos","y_pos","scroll_size","x_inner","y_inner","scrollVer","scrollHor","horState","verState","getLayoutView","cellName","scrollLayoutCell","horizontalScroll","verticalScroll","addTaskLayer","addLinkLayer","initializer","_legacyGridResizerClass","layout","resizers","gridResizer","onCreated","mainTimeline","show_chart","colsWidth","hideGrid","show_grid","grid_limits","ganttContainerWidth","verticalScrollbarWidth","gridOverflow","original_grid_width","skinSettings","_initScrollStateEvents","_getVerticalScrollbar","_getHorizontalScrollbar","oldPos","newPos","$scroll_ver","$scroll_hor","_findGridResizer","gridFirst","_getSiblings","_behind","_front","onInitialized","resizeInfo","initialWidth","prevCellWidth","nextCellWidth","viewCell","limits","newBehindSize","newFrontSize","oldBackSize","oldFrontSize","newBackSize","oldSize","onDestroyed","initLinksDND","_link_landing","_link_target_task","_link_target_task_start","_link_source_task","_link_source_task_start","markerDefaultOffset","scrollDefaultSize","getDndState","DnD","dnd","sensitivity","updates_per_second","mousemoveContainer","getLinePos","isStart","taskPos","xEnd","yEnd","milestoneWidth","origWidth","getVisibleMilestoneWidth","getMilestonePosition","isMilestone","getPosition","markerSize","getMarkerSize","viewportSize","getVieportSize","offsetX","tooltip_offset_x","offsetY","tooltip_offset_y","ganttOffsetY","updateMarkedHtml","drag_link_class","resetDndState","showDirectingLine","s_x","s_y","e_x","e_y","_direction","getDirectionLine","link_direction_class","dist","tan","angle","atan","coordinateCircleQuarter","PI","sin","cos","ieTransform","shiftLeft","shiftTop","sX","eX","sY","eY","_dir_start","dd","advanceMarker","landing","prevTarget","prevLanding","prevToStart","targ","eventTarget","_dir_end","targetChanged","_get_link_type","addLink","createLinkDND","createTaskDND","round_task_dates","dragMultiple","before_start","before_finish","after_finish","_handlers","clear_drag_state","set_actions","drag_from_start","evs","stage","_move","_resize","_resize_progress","start_x","start_y","coords_x","_drag_task_coords","minDurationInUnits","_calculateMinDuration","min_duration","_init_task_timing","diffValue","_find_max_shift","dragItems","correctShift","minX","maxX","maxShift","minShift","multipleDragShift","new_start","new_end","obj_s_x","obj_e_x","_mouse_position_change","_is_number","_update_on_move","_update_item_on_move","original","curr_date","dragHash","_isMultiselect","getSelectedTasks","dragProject","drag_project","initialDrag","childDrag","_bulk_dnd","_update_parents","_get_drag_mode","_fix_dnd_scale_time","fixStart","correct_work_time","roundDate","fixEnd","_fix_working_times","getClosestWorkTime","correctTaskWorkTime","_finalize_mouse_up","_fireEvent","_dhx_changed","finalizingBulkMove","moveCount","doFinalize","batchUpdate","modes","dragProperty","selectedTasksIds","selectedTask","_addSubtasksToDragMultiple","params","drag_state","drag_multiple","summaryId","taskDnD","linkDnD","_linksDnD","_tasksDnD","_attachDomEvents","_attachStateProvider","extendDom","_clearDomEvents","_clearStateProvider","_delete_link_handler","question","link_description","confirm_link_deleting","deleteLink","coll","coll_date","scale_step","unregisterProvider","gridToPageCoordinates","gridPos","setWidthWithinContainer","containerSize","removeLineHighlight","markerLine","highlightPosition","ePos","gridHeight","getTaskMarkerPosition","pointerEvents","markerFolder","maxBottom","folderHighlightWidth","highlightFolder","linePos","indentNode","indent","itemTop","itemHeight","childCount","getLineMarkerPosition","markerLineTop","highlightRow","dropTarget","relTargetPos","eventTop","findClosesTarget","allowedLevel","targetLevel","findTargetAbove","findTargetBelow","targetTask","targetAbove","targetBelow","rootLevel","getLockedLevelTarget","getMultiLevelTarget","higlighter","dnd_sensitivity","hideQuickInfo","_hideQuickInfo","checkPlaceholderTask","initial_open_state","outerHTML","drop_target","$transparent","getDropPosition","$drop_target","doctype","minTop","firstVisibleTaskIndex","firstVisibleTaskId","firstVisibleTaskPos","hiddenTaskPart","gridPosition","gridBottom","placeholderRowHeight","getTargetTaskId","lockLevel","order_branch_free","getStore","lastTaskOfLevel","last_item","_getGridPos","_getTargetY","_getTaskByY","dropIndex","gridDataSizes","targetY","over","nextId","prevId","rowDnd","rowDndMarker","extendGantt","inlineEditors","_inlineEditors","createEditors","initEvents","clearEvents","scroll_on_click","_is_icon_open_click","conf","sorting_method","callHandler","createTask","totalWidth","getRowRectangle","getVisibleRange","resize_el","task_grid_row_resizer_attribute","getRectangle","getVisibleCellsRange","isColumnVisible","resourceTimetable","renderBar","renderConnection","prevLevel","getResourceLoad","renderedHistogramCells","renderedHistogramRows","renderedHistogramCapacity","detachRenderedHistogramCell","renderedRow","renderCapacityElement","capacityMatrix","maxCapacity","renderedElement","capacityElement","capacity","colStart","colEnd","bar","connection","renderHistogramLine","renderHistogramCell","histogram_cell_class","histogram_cell_label","histogram_cell_allocated","smartRendering","histogram_cell_capacity","row","checkedColumns","renderedCell","renderedResourceLines","renderResourceLineCell","resource_cell_class","resource_cell_value","detachRenderedResourceLine","aria","date_grid","tree","grid_indent","grid_blank","grid_file","grid_open","grid_folder","align","justifyContent","center","getGlobalTaskIndex","grid_row_class","css_template","isSelected","onrender","rowNode","cellNode","external_render","adapter","isElement","renderElement","isInViewPort","drawer","current_pos","dirs","down","point","get_lines","dots","line_to","get_path","line","_get_line","get_wrapper_sizes","wrapper_size","link_wrapper_width","get_line_sizes","line_size","marginTop","render_line","innerPos","get_direction","vect","path_builder","point_to","get_points","pt","get_endpoint","xy","shiftX","lineType","get_line_type","forward","sign","milestoneHeight","lines","cssTemplate","link_class","isCriticalLink","endpoint","_render_link_arrow","borderColor","placeholderConfig","lastTaskId","placeholderTask","unscheduled","calendar_id","bgPlaceholder","renderedCells","isRendered","detachRenderedCell","getCellClassTemplate","task_cell_class","warn","timeline_cell_class","getCellContentTemplate","timeline_cell_content","renderOneCell","contentTemplate","cssTemplateContent","htmlTemplateContent","customCell","static_background_cells","cellCssTemplate","cellHtmlTemplate","show_task_cells","odd","task_row_class","placeholderTop","placeholderHeight","prepareData","createBaseBarRender","defaultRender","renderedNodes","checkVisibility","generateChildElement","childCopy","$rendered_at","getKey","renderParentId","rollup","$rollup","itemNode","rollupKey","isBarInViewport","isInViewPortParent","isInViewPortChild","isProject","resetProjectDates","shouldUseSplitRendering","splitKey","mapTo","keepDatesOnEdit","decreaseStartDate","keepDurationOnEdit","schedule_from_end","defaultActionOnEdit","TextEditor","formatters","durationFormatter","PredecessorEditor","linkFormatter","parseInputString","predecessors","delimiter","formatPredecessors","formatLinkKey","lag","getLinksDiff","predecessorCodes","selectedLinks","getSelectedLinks","existingLinksSearch","linkId","linksToAdd","linkKey","linksToDelete","linksDiff","autoSchedule","inputPredecessors","taskPredecessors","html5DateFormat","dateToStr","strToDate","DateEditor","str_to_date","minValue","maxValue","minAttr","maxAttr","SelectEditor","optionsHtml","NumberEditor","controller","onBlurDelay","keyNav","keyboardNavigation","activeCell","locateCell","columnName","editorState","getEditorConfig","startEdit","command","hasEditor","keyboard","preventKeyNav","ENTER","ctrlKey","metaKey","ESC","LEFT","RIGHT","editorType","DELETE","TAB","editPrevCell","editNextCell","modifiers","anyModifier","alt","ctrl","meta","getCommandHandler","onShow","onHide","isChanged","defaultPrevented","shouldPrevent","defaultMapping","keyNavMappings","setMapping","getMapping","keyboard_navigation_cells","getKeyboardMapping","textEditorFactory","numberEditorFactory","selectEditorFactory","dateEditorFactory","predecessorEditorFactory","durationEditorFactory","linkedPropertiesProcessor","initConfigs","editor_types","number","predecessor","keyboardMapping","eventBus","inlineEditController","_createPlaceholder","_getEditorPosition","findVisibleIndex","updateTaskDateProperties","ganttHandlers","_itemId","_columnName","_editor","_editorType","_placeholder","batch_update","editorConfig","_getItemValue","oldValue","inline_editors_date_processing","_findEditableCell","nextIndex","nextColumn","getNextCell","getFirstCell","getLastCell","canChangeRow","moveRow","moveTask","nextItem","editNextRow","skipReadonly","editPrevRow","ScrollbarCell","SCROLL_MODIFIER_KEYS","_scrollHorizontalHandler","_scrollVerticalHandler","_outerScrollVerticalHandler","_outerScrollHorizontalHandler","_mouseWheelHandler","_isHorizontal","scrollPosition","_isVertical","_initVertical","_initHorizontal","_initMouseWheel","_initLinkedViews","_getRootParent","_eachView","eachCell","_updateLinkedViews","scrollHorizontally","_scrolling","codeScrollLeft","scrollVertically","_wheel_time","_oldLeft","_getScrollSize","outerSize","isHorizontal","linked","scrollProperty","innerSizeProperty","outerProperty","_getScrollOffset","cellScrollSize","nonScrollableSize","outerScroll","innerScroll","scrollSizes","_setScrollSize","toggleVisibility","_getScaleOffset","parentLayout","_oldTop","_checkWheelTarget","targetNode","connectedViews","wheelSpeed","wheelSpeedConfig","wheel_scroll_sensitivity","ff","deltaX","wheelDeltaX","multiplier","deltaMode","wx","wy","horizontalScrollModifier","horizontal_scroll_key","oldLeft","detail","oldTop","ViewCell","childConfig","createView","$initialized","unload","outerX","outerY","childSize","ViewLayout","$cell","byMaxSize","otherCell","barRectangle","sourceBox","targetBox","genericViewPortChecker","basicGetRectangle","basicGetRange","task_area_pulls","task_area_renderers","getRenderer","renderMethod","updateMethod","renderCallbackMethod","specializedViewPortChecker","layer_attribute","render_item","layerView","viewConfig","rendererViewPort","dom","useBuffer","remove_item","clear_container","get_visible_range","prepare_data","render_items","createDocumentFragment","vis","itemsSearch","renderedItems","newElements","update_items","nodesToRemove","renderCalledFor","restore","replace_item","newNode","change_id","oldid","newid","clearRenderers","renderFactoryProvider","mergeFilters","filter_methods","filter_method","renderFactory","createGroup","getContainer","relativeRoot","defaultFilters","initLayer","renderGroup","tempCollection","renderers","filters","getLayers","_add","pending","topmost","requestUpdate","onUpdateRequest","eachLayer","createLayerFactory","getVisibleTaskRange","getVisibleLinksRangeFactory","isLinkInViewport","previusSiblingContainer","defaultContainerSibling","setService","rangeFunction","removeTaskLayer","_clearTaskLayers","_getLinkLayers","removeLinkLayer","_clearLinkLayers","createMouseHandler","eventHandlers","doubleclick","contextMenu","addEventTarget","onClick","findEventHandlers","callEventHandlers","_multiselect","selectTask","onContextMenu","returnValue","delegateHandlers","details_on_dblclick","onMouseMove","_last_move_event","domEvents","reset","elementHandlers","extendSettings","parentSettings","own","$extendedConfig","setPrototypeOf","parentView","parentConfig","parentTemplates","createFactory","createdViews","creator","configure","registerView","viewConstructor","uiFactory","createLayers","Resizer","Scrollbar","ResourceGrid","ResourceTimeline","ResourceHistogram","gridEditorsFactory","renderTaskBar","renderSplitTaskBar","renderRollupTaskBar","renderTaskBg","renderLink","gridRenderer","resourceMatrixRenderer","resourceHistogramRenderer","gridTaskRowResizerRenderer","mainGridInitializer","mainTimelineInitializer","mainLayoutInitializer","attachInitializer","layersEngine","layersApi","resourceRow","resourceHistogram","layersService","boxAttribute","_dhx_msg_cfg","usercall","modalBox","modal_key","messageBox","modality","cover","info","expire","timers","getFirstDefined","values","_createBox","cancel","contentId","message_ok","message_cancel","btn","_boxStructure","alertPopup","confirmPopup","boxPopup","box_params","focusable","hideAll","popups","modalbox","codeHelpers","_eventRemoveAll","uiApi","$mouseEvents","createLayoutFacade","targetAttribute","_locateHTML","initial_scroll","firstTask","getTaskByIndex","activePlugins","plugins","availablePlugins","auto_scheduling","click_drag","clickDrag","critical_path","drag_timeline","export_api","exportToPDF","fullscreen","grouping","groupBy","keyboard_navigation","addMarker","eachSelectedTask","overlay","quick_info","quick_info_content","tooltip","tooltips","undo","plugin","default","month_short","day_full","day_short","icon_save","icon_cancel","icon_details","icon_edit","icon_delete","confirm_closing","confirm_deleting","section_description","section_time","section_type","column_wbs","column_text","column_start_date","column_add","link_start","link_end","type_task","type_project","type_milestone","weeks","section_constraint","asap","alap","snet","snlt","fnet","fnlt","mso","mfo","resources_filter_placeholder","resources_filter_label","empty_state_text_link","empty_state_text_description","LocaleManager","addLocale","_locales","getLocale","locale_ar_1","locale_be_1","locale_ca_1","locale_cn_1","locale_cs_1","locale_da_1","locale_de_1","locale_el_1","locale_en_1","locale_es_1","locale_fa_1","locale_fi_1","locale_fr_1","locale_he_1","locale_hr_1","locale_hu_1","locale_id_1","locale_it_1","locale_jp_1","locale_kr_1","locale_manager_1","locale_nb_1","locale_nl_1","locale_no_1","locale_pl_1","locale_pt_1","locale_ro_1","locale_ru_1","locale_si_1","locale_sk_1","locale_sv_1","locale_tr_1","locale_ua_1","en","ar","be","ca","cn","cs","da","de","es","fa","fi","fr","he","hr","hu","it","jp","kr","nl","no","pl","ro","ru","si","sk","sv","tr","ua","_dp","check","show_errors","listenWindowResize","resizeDelay","resizeTimeout","container_resize_timeout","container_resize_method","lowlevelResizeWatcher","repaintGantt","previousHeight","previousWidth","getPropertyValue","resizeWatcher","contentWindow","addResizeListener","calculateScaleRange","invalidContainerMessage","validateNode","isHTMLElement","_reinit","_quickRefresh","stores","_getDatastores","dropLayout","rebuildLayout","storeNames","resetLayout","initTemplates","edit","delete","confirm_deleting_title","deleteTask","preserveScroll","preserve_scroll","new_pos","verticalScrollbar","setSizes","getTaskRowNode","prevOffset","time_unit","offsetChanged","activate","_cached_functions","update_if_changed","critical_path_mode","wrap_methods","_prefetch_originals","prefetch","methodname","optimizer","argumentsArray","get_arguments_hash","cached_values","has_cached_value","get_cached_value","cache_value","arguments_hash","is_date","getUTCDate","stringify_argument","deactivate","setup","override_gantt","gantt_methods","optimize_render","deactivTimeout","checkType","isUnscheduledTask","show_unscheduled","taskStart","taskEnd","_getProjectEnd","project_end","_getProjectStart","project_start","getDefaultTaskDate","parent_id","_set_default_task_timing","details_on_create","parseDate","getSelectedId","getTaskTimingMode","task_type","$no_start","$no_end","$rendered_type","updateTaskTiming","$effective_calendar","getSubtaskInfo","task_mode","dirty","$calculate_duration","effectiveCalendar","inherit_calendar","taskMode","taskTiming","getSubtaskDuration","updateAll","has_changed","oldStart","oldEnd","upper","lower","colIndex","steps","calendarManager","timeCalculator","getWorkHours","setWorkTime","unsetWorkTime","_hasDuration","hasDuration","mergeCalendars","createCalendar","addCalendar","getCalendar","getCalendars","getResourceCalendar","deleteCalendar","CalendarDisabledTimeStrategy","argumentsHelper","_calculateDuration","fixedUnits","hasWorkTime","createArgumentsHelper","NoWorkTimeCalendar","TimeCalculator","$disabledCalendar","_getCalendar","manager","dynamicCalendars","getCalendarIdFromMultipleResources","resourceAssignments","resource_id","getResourcesCalendarKey","tempCalendar","assignment","resourceId","mergeResourceCalendars","isLegacyResourceCalendarFormat","resourceCalendarsProperty","getResourceProperty","resourceCalendarsConfig","resource_calendars","propertyName","getCalendarIdFromLegacyConfig","calendarId","DateDurationCache","_getCacheObject","_cache","unitCache","stepCache","yearCache","durations","endDates","_endDateCacheKey","_durationCacheKey","getEndDate","compute","startDateTimestamp","resultTimestamp","getDuration","endDateTimestamp","getMinutesPerWeek","weekStart","_weekCache","has","_calendar","minutesPerWeek","week_start","getHoursPerDay","getMinutesPerMonth","monthStart","_monthCache","minutesPerMonth","nextMonth","subCache","setItem","rawValue","CalendarWorkTimeStrategy","_workingUnitsCache","_largeUnitsCache","_dateDurationCache","_worktime","_cached_timestamps","_cached_timestamps_count","_clearCaches","_getUnitOrder","_resetTimestampCache","_timestamp","UTC","_checkIfWorkingUnit","_is_work_day","_getWorkHours","_is_work_hour","startHour","endHour","_getTimeOfDayStamp","dayEnd","_is_work_minute","checkTime","_nextDate","_getWorkUnitsBetweenGeneric","stepStart","stepEnd","checkFirst","checkLast","isLastStep","_isWorkTime","unitOrder","biggerTimeUnit","_getClosestWorkTimeFuture","_getMinutesPerHour","hourStart","hourEnd","worktimes","_getMinutesPerDay","durationMinutes","durationHours","_getWorkUnitsForRange","getUnitsPerDay","_getMinutesBetweenSingleDay","_getIntervalTimestamp","minuteFrom","minuteTo","_getMinutesBetween","firstDayStart","firstDayEnd","day_start","lastDayStart","lastDayEnd","startPart","endPart","_getHoursBetween","_setConfig","_parseSettings","haveCustomWeeks","customWeeks","customWeeksRangeStart","customWeeksRangeEnd","customWeeksBoundaries","_parseHours","minCustomRangeStart","maxCustomRangeEnd","customTime","rangeStart","rangeEnd","fromReadable","toReadable","currentWeek","_tryChangeCalendarSettings","backup","JSON","_arraysEqual","_compareSettings","mySettings","thatSettings","myDays","otherDates","myHours","otherHours","myWeek","thatWeek","getDay","getSeconds","endHours","timestampRanges","timerangeConfig","startMinute","endMinute","durationSeconds","calendarConfig","reset_calendar","isWorkUnit","dateKey","mult","_calculateEndDate","_calculateMinuteEndDate","_subtractMinuteDate","_calculateHourEndDate","_addInterval","stopAction","added","dstShift","_addHoursUntilDayEnd","rangeHours","addHours","intervalEnd","durationLeft","setMinutes","setSeconds","hoursPerDay","_addMinutesUntilHourEnd","hour_start","rangeMinutes","addMinutes","_subtractMinutesUntilHourStart","hourStartTimestamp","initialDateTimestamp","minutePrecision","_isMinutePrecision","addedInterval","calculatedDay","daySchedule","minutesInDay","dayStart","iterateFromDayEnd","isWorkHour","workInterval","prevInterval","minutesInHour","_getClosestWorkTimePast","times","lastInterval","_getClosestWorkTime","inputDate","closestFuture","closestPast","_getClosestWorkTimeGeneric","_findClosestTimeInDay","resultDate","fromDayEnd","_getClosestWorkMinute","increment","worktime","exceptions","hasRegularHours","_checkWorkHours","dayConfig","hoursArray","WorkTimeCalendarMerger","_getIntervals","_toHoursArray","intervalsArray","formatHHMM","secondsValue","minutePart","toFixed","_intersectHourRanges","baseArray","overridesArray","base","_mergeAdjacentIntervals","_mergeHoursConfig","firstHours","secondHours","merge","firstConfig","secondConfig","mergedSettings","firstDate","secondDate","CalendarMergeHelper","legacyResourceCalendarConfig","dynamicResourceCalendars","CalendarManager","_calendars","_legacyConfig","_isLegacyConfig","createDefaultCalendars","_convertWorkTimeSettings","calendars","mergeHelper","_createCalendarFromConfig","apiCore","preparedConfig","parentCalendar","defaults","fulltime","_getOwnCalendar","calendar_property","dynamic_resource_calendars","calendarsConfig","taskObject","groupMode","group_mode","currentTask","isCalendar","restoreConfigCalendars","possibleCalendar","every","worktimeFacadeFactory","facade","jsonParseError","load","_load_url","cl","_load_type","ajax","on_load","xmlDoc","resp","_process_loading","collections","_load_collections","resourcesStore","assignmentsByTasks","attachAssignmentsToTasks","linksStore","collections_loaded","option","option_key","$ignore","json","dhx_security","security_key","serializeTask","_copyObject","serializeLink","_copyLink","xml_format","format_date","rawLinks","getLinks","xml","_xmlNodeToJSON","attrs_only","nodeValue","_getCollections","loader","xpath","itms","_getXML","toptag","getXMLTopNode","xmltop","xmlParseError","skey","oldxml","startdate","est","enddate","predecessortasks","editable_property","readonly_property","getGridColumn","ScrollableGrid","_scrollOrder","getCurrentX","_dnd","_scrollView","attachEvents","isScrollable","gridBoundingRect","maxLeft","minLeft","currentX","autoscrollRight","autoscrollStart","autoscrollLeft","autoscrollStop","getCorrection","scrollable_grid_1","ColumnsGridDnd","_targetMarker","calculateCurrentPosition","eventX","DND","_scrollableGrid","_draggedCell","draggedColumn","draggedIndex","_gridConfig","_originAutoscroll","_dragX","columnIndexes","findColumnsIndexes","targetColumn","cleanTargetMarker","setMarkerPosition","drawTargetMarker","_a","xBefore","xAfter","columnRelativePos","draggedId","currentColumn","startX","endX","relativeX","gridOffset","_obj","nextPosition","column_grid_dnd_1","_task_grid_row_resize","row_before_start","row_id","row_after_start","row_drag_move","pointerPosition","markerStartPosition","marker_height","minPointerPosition","min_task_grid_row_height","row_drag_end","oldItemHeight","finalHeight","cachedRowHeight","canUseSimpleCalc","_getRowHeight","_refreshState","globalRowHeight","visibleColumns","loadedBranches","oldHasChildren","branch_loading","branch_loading_property","needLoading","requestData","show_empty_state","emptyStateElement","isGanttEmpty","renderContent","placeholderContainer","clickEvents","attachAddTaskEvent","detachAddTaskEvents","oldNodes","emptyStateElementNode","LinkFormatterSimple","_getWBSCode","_linkReg","linkPart","_findSource","_gantt","pred","getWBSCode","reqTemplate","wbs","getTaskByWBSCode","DurationFormatter","LinkFormatter","enter","callIfEnabled","auto_types","checkTaskType","changedTypes","targetType","getTaskTypeToUpdate","$needsUpdate","updateParentTypes","getUpdatedTypes","applyChanges","delTaskParent","allTypes","hasChildren","originalRowDndParent","originalMoveTaskParent","isParsingDone","updateAfterRemoveChild","updateTaskType","insertPlaceholder","placeholders","afterEdit","newTask","dataProcessor","_silencedPlaceholder","setUpdated","ready","isPlaceholderLink","action","commands","entity","resourceAssignmentsProperty","resource_assignment_store","resourceAssignmentFormats","auto","singleValue","valueArray","resourceValueArray","assignmentsArray","resourceAssignmentFormat","assignmentModes","fixedDates","fixedDuration","initAssignmentFields","initDelay","timing","_assignmentTimeFromTask","resourceAssignmentsStore","createDatastore","_makeAssignmentsFromTask","detectFormat","usedIds","defaultMode","_updateTaskBack","_assignAssignments","getTaskAssignments","_loadAssignmentsFromTask","taskAssignments","_syncAssignments","storeAssignments","taskValues","assignmentsStoreValues","inBoth","inTaskNotInStore","inStoreNotInTask","taskOwner","ownerId","foundOwnerAssignment","taskSearch","storeSearch","processedIds","inTask","inStore","diffAssignments","ignoreFields","assignmentHasChanged","updateAssignment","_syncOnTaskUpdate","assignmentsStore","totalAssignments","needUpdate","needUpdateFor","undoBatchCancel","assignmentsHash","deleteIds","idsSearch","_syncOnTaskDelete","resourceAssignmentsCache","resourceTaskAssignmentsCache","taskAssignmentsCache","searchTaskId","resourceTaskCacheKey","getTaskResources","uniqueResources","updateTaskAssignments","createResourceMethods","singleResourceCacheBuilt","falsyValuePrefix","random","resourceHashFunction","getCacheKey","resourceIds","typeFilter","getResourceTasks","matchingResources","resourceValue","selectAssignments","owners","propertyValue","filterResourceTasks","resourcePlugin","renderEditableLabel","editable","renderSummaryLabel","sum","reduce","editableResourceCellTemplate","editableResourceCellClass","getSummaryResourceAssignments","resource_store","childResource","initEditableDiagram","timeoutId","makeEditable","cancelAnimationFrame","requestAnimationFrame","contentEditable","assignmentEditInProcess","blur","strValue","innerText","rowId","assignmentId","parse_date","assignmentStore","saveState","nextChunk","createHelper","dataprocessor_assignments","dataprocessor_resources","editable_resource_diagram","fetchTasks","lightbox_resources","lightboxOptions","resourceStoreConfig","initItems","storeType","$resourcesStore","lightboxOptionsFnc","defaultResourceCellClass","defaultResourceCellTemplate","_needRecalc","_isRecalcNeeded","_isGroupSort","_calcWBS","$virtual","$wbs","_setWBSCode","getByWBSCode","currentNode","_isFirst","_prevSibling","_wbs","_parent","createWbs","createMethod","isActive","disableMethod","methodName","dummyMethod","restoreMethod","restoreMethods","batchUpdatePayload","noRedraw","dp_mode","call_dp","updateMode","setUpdateMode","resetProjects","refreshLink","methodsHash","setGanttMode","sendData","SimpleStorage","_storage","storeItem","getStoredItem","dp","getUserData","userdata","setUserData","_change_id","_ganttMode","changeTaskId","changeLinkId","_row_style","_delete_task","_sendTaskOrder","setDp","DataProcessorEvents","$dp","_dataProcessorHandlers","treeHelper","cascadeDelete","clientSideDelete","cascade_delete","deleteAfterConfirmation","needDbDelete","needCascadeDelete","dpMode","cascade","sendAllData","_tSend","_waitMode","itemLinks","_links","getTaskLinks","updateLink","_tMode","_serverProcessor","substring","serverProcessor","pluralizedMode","urlSeparator","upd","isExist","objData","xml_date","handleResourceCRUD","handleResourceAssignmentCRUD","updated","updatedRows","clientOnly","_in_progress","insertedTasks","pendingAssignments","putAssignmentToQueue","insertResourceAssignment","insertResource","data_processor_events_1","extend_gantt_1","simple_storage_1","createDataProcessor","router","tMode","DataProcessor","setTransactionMode","serverProcessorURL","action_param","autoUpdate","_headers","_payload","_postDelim","_routerParametersFormat","_invalid","messages","inserted","deleted","invalid","invalid_cell","enableUTFencoding","_serializeAsJson","_router","_utf","getSyncState","findRow","existing","set_invalid","is_invalid","markRow","_methods","details","getActionByState","checkBeforeUpdate","editStop","pendingUpdateModes_1","_beforeSendData","_getRowData","_serializeAsJSON","serialize_one","stack","pref","serialized","_forEachUpdatedRow","_sendData","_getAllData","pattern","defineAction","_uActions","afterUpdateCallback","btag","ganttMode","correct","originalSid","afterUpdate","_xml","getGanttMode","reqUrl","filePath","processCallback","finalizeUpdate","cleanUpdate","atag","_dp_init","_setDefaultTransactionMode","delete_confirmation","dataProcessorEvents","setOnAfterUpdate","setOnBeforeUpdateHandler","setAutoUpdate","user","_user","_needUpdate","_updateBusy","afterAutoUpdate","fullSync","loadUpdate","xml_node","getUpdates","vers","_getXmlNodeValue","updates","status_1","parent_1","_applyPayload","_cleanupArgumentsBeforeSend","dataToSend","processedData","_cleanupItemBeforeSend","updatedItem","output","queryParams","dhxVersion","urlParams","preprocessedData","taskState_1","taskAction","ganttMode_1","_onResolvedCreateUpdate_1","actionPromise","errorMsgStart","errorMsgEnd","catch","hasOne","_prepareDate","_prepareArray","traversedObjects","_prepareObject","rawItem","processedItem","_prepareDataItem","dataItem","DEPRECATED_api","server","getDataProcessorModes","getAvailableModes","bindDataStore","itemRepainter","allData","loadedRanges","_i","layerData","skipRepaint","refreshId","selectedId","deleteItem","_unselect","subItem","getLinkCount","newLink","getTaskCount","getVisibleTaskCount","startTask","calculateTaskLevel","createTasksFacade","createLinksFacade","createDatastoreSelect","datastoreRender","getDatastores","createDatastoreFacade","$StoreType","open_tree_initially","deepcopy_on_parse","storeAccessName","dropService","storeList","refresh_links","refreshLinks","hasSplitParent","_clear_data","oldSelectId","_skipResourceRepaint","unselectTask","facadeFactory","originalTask","checkLinkedTaskVisibility","sync_link","sourceTask","sync_link_delete","sync_links","mapEvents","mapFrom","sourceEvent","targetEvent","taskLinks","existingLink","sourceMatch","targetMatch","typeMatch","show_tasks_outside_timescale","changedTask","sourceVisible","targetVisible","deletedLinks","onItemLoading","onBeforeAdd","onAfterAdd","onBeforeUpdate","onAfterUpdate","onBeforeDelete","onAfterDelete","onIdChange","onBeforeItemMove","onAfterItemMove","onFilterItem","onItemOpen","onItemClose","onBeforeSelect","onAfterSelect","onAfterUnselect","__WEBPACK_AMD_DEFINE_FACTORY__","__WEBPACK_AMD_DEFINE_ARRAY__","__WEBPACK_AMD_DEFINE_RESULT__","_dereq_","1","SomePromiseArray","_SomePromiseArray","any","promises","promise","setHowMany","setUnwrap","2","firstLineError","schedule","Queue","Async","_customScheduler","_isTickUsed","_lateQueue","_normalQueue","_haveDrainedQueues","_trampolineEnabled","drainQueues","_drainQueues","_schedule","AsyncInvokeLater","receiver","_queueTick","AsyncInvoke","AsyncSettlePromises","_pushOne","_drainQueue","_drainQueueStep","_settlePromises","setScheduler","hasCustomScheduler","enableTrampoline","disableTrampolineIfNecessary","hasDevTools","haveItemsQueued","fatalError","exit","throwLater","invokeLater","invoke","settlePromises","_reset","./queue","./schedule","./util","3","INTERNAL","tryConvertToPromise","calledBind","rejectThis","_reject","targetRejected","promiseRejectionQueued","bindingPromise","_then","bindingResolved","thisArg","_bitField","_resolveCallback","bindingRejected","_propagateFrom","propagateFromFunction","_boundValue","boundValueFunction","maybePromise","_target","_setBoundTo","_setOnCancel","_boundTo","_isBound","4","old","bluebird","noConflict","./promise","5","cr","callerCache","getterCache","canEvaluate","isIdentifier","caller","classString","ensureMethod","namedGetter","indexedGetter","maybeGetter","getGetter","6","PromiseArray","apiRejection","tryCatch","errorObj","async","_async","cancellation","_warn","_isCancellable","_cancelBy","_isFollowing","_followee","_cancelBranched","_cancellationParent","_setWillBeCancelled","_branchHasCancelled","_branchesRemainingToCancel","_enoughBranchesHaveCancelled","canceller","_invokeOnCancel","_cancel","_setCancelled","_cancelPromises","_length","_unsetOnCancel","_onCancelField","isPending","_isCancelled","isCancellable","isCancelled","_doInvokeOnCancel","onCancelCallback","internalOnly","_attachExtraTrace","_resultCancelled","_onCancel","_invokeInternalOnCancel","7","NEXT_FILTER","getKeys","instances","boundTo","predicateLoop","matchesPredicate","./es5","8","longStackTraces","contextStack","Context","_trace","CapturedTrace","peekContext","lastIndex","_promiseCreated","_pushContext","_popContext","_peekContext","deactivateLongStackTraces","activateLongStackTraces","Promise_pushContext","Promise_popContext","Promise_PeekContext","Promise_peekContext","Promise_promiseCreated","ctx","9","unhandledRejectionHandled","possiblyUnhandledRejection","printWarning","getDomain","_getDomain","Warning","es5","canAttachTrace","bluebirdFramePattern","nodeFramePattern","parseLinePattern","stackFramePattern","formatStack","indentStackFrames","debugging","warnings","wForgottenReturn","suppressUnhandledRejections","_ensurePossibleRejectionHandled","_setRejectionIsUnhandled","_notifyUnhandledRejection","_notifyUnhandledRejectionIsHandled","fireRejectionEvent","_setReturnedNonUndefined","_returnedNonUndefined","_isRejectionUnhandled","reason","_settledValue","_setUnhandledRejectionIsNotified","_unsetUnhandledRejectionIsNotified","_isUnhandledRejectionNotified","_unsetRejectionIsUnhandled","shouldUseOwnTrace","onPossiblyUnhandledRejection","domain","domainBind","onUnhandledRejectionHandled","disableLongStackTraces","longStackTracesIsSupported","Promise_captureStackTrace","_captureStackTrace","Promise_attachExtraTrace","Promise_dereferenceTrace","_dereferenceTrace","longStackTracesCaptureStackTrace","longStackTracesAttachExtraTrace","longStackTracesDereferenceTrace","hasLongStackTraces","fireDomEvent","CustomEvent","dispatchEvent","eventData","cancelable","domEvent","Event","initCustomEvent","fireGlobalEvent","generatePromiseLifecycleEventObject","eventToObjectGenerator","promiseCreated","promiseFulfilled","promiseRejected","promiseResolved","promiseCancelled","promiseChained","warning","_warning","unhandledRejection","rejectionHandled","activeFireEvent","globalEventFired","domEventFired","defaultFireEvent","cancellationExecute","executor","onCancel","_attachCancellationCallback","cancellationAttachCancellationCallback","previousOnCancel","cancellationOnCancel","cancellationSetOnCancel","cancellationClearCancellationData","cancellationPropagateFrom","flags","branchesRemainingToCancel","warningsOption","_clearCancellationData","_execute","_propagateFromFunction","monitoring","_boundValueFunction","isFulfilled","ignoreSelf","attachExtraTrace","__stackCleaned__","parseStackAndMessage","notEnumerableProp","formatAndLogError","cleanStack","isTraceLine","isInternalFrame","shouldIgnore","stackFramesAsArray","isSoft","localHandler","localEventFired","formatNonError","maxChars","snip","captureStackTrace","parseLineInfoRegex","parseLineInfo","fileName","_promisesCreated","uncycle","stackToIndex","cycleEdgeNode","currentChildLength","stacks","currentLastIndex","currentLastLine","commonRootMeetPoint","removeCommonRoots","removeDuplicateOrEmptyJumps","reconstructStack","v8stackFramePattern","v8stackFormatter","stackTraceLimit","ignoreUntil","hasStackAfterThrow","isTTY","checkForgottenReturns","handlerLine","creatorLine","traceLines","lineMatches","firstUserLine","msg","setBounds","lastLineError","firstFileName","lastFileName","firstStackLines","lastStackLines","firstIndex","deprecated","replacement","./errors","10","returner","thrower","thenReturn","thenThrow","catchThrow","_reason","caught","catchReturn","_value","11","PromiseReduce","PromiseAll","promiseAllThis","mapSeries","12","_TypeError","_RangeError","Objectfreeze","freeze","subError","nameProperty","defaultMessage","SubError","CancellationError","TimeoutError","AggregateError","OperationalError","cause","errorTypes","RejectionError","13","isES5","getDescriptor","getOwnPropertyDescriptor","getOwnPropertyNames","propertyIsWritable","prop","descriptor","ObjectKeys","14","PromiseMap","15","catchFilter","PassThroughHandlerContext","called","cancelPromise","FinallyHandlerCancelReaction","finallyHandler","checkCancel","succeed","fail","reasonOrValue","isFinallyHandler","isRejected","_passThrough","success","lastly","tap","tapCatch","handlerOrPredicate","catchInstances","./catch_filter","16","Proxyable","yieldHandlers","PromiseSpawn","generatorFunction","yieldHandler","internal","_finallyPromise","_promise","_stack","_generatorFunction","_receiver","_generator","_yieldHandlers","_yieldedPromise","_cancellationPhase","_isResolved","_cleanup","_fulfill","_promiseCancelled","coroutine","returnSentinel","_continue","_promiseFulfilled","_promiseRejected","_run","_rejectCallback","traceParent","promiseFromYieldHandler","bitField","_proxy","PromiseSpawn$","generator","spawn","addYieldHandler","17","spread","18","MappingPromiseArray","constructor$","_callback","_preservedValues","_limit","_inFlight","_queue","_asyncInit","concurrency","_init$","_init","_values","preservedValues","_totalResolved","_resolve","booleans","19","_resolveFromSyncValue","attempt","20","maybeWrapAsError","rErrorKey","wrapAsOperationalError","isUntypedError","markAsOriginatingFromRejection","multiArgs","wrapped","21","spreadAdapter","nodeback","successAdapter","errorAdapter","newReason","asCallback","nodeify","22","makeSelfResolutionError","reflectHandler","PromiseInspection","UNDEFINED_BINDING","errors","APPLY","createContext","nodebackForPromise","_fulfillmentHandler0","_rejectionHandler0","_promise0","_receiver0","_resolveFromExecutor","deferResolve","deferReject","fillTypes","reflect","didFulfill","didReject","_setIsFinal","fulfillmentValue","rejectionReason","originatesFromRejection","getNewLibraryCopy","is","fromNode","fromCallback","_isFateSealed","_setAsyncGuaranteed","cast","_setFulfilled","fulfilled","rejected","internalData","haveInternalData","settler","_settlePromiseCtx","_settlePromiseLateCancellationObserver","_addCallbacks","_setLength","_setRejected","_setFollowing","_isFinal","_unsetCancelled","_receiverAt","_promiseAt","_fulfillmentHandlerAt","_rejectionHandlerAt","_migrateCallback0","follower","fulfill","_migrateCallbackAt","proxyable","shouldBind","_setFollowee","synchronous","ignoreNonErrorWarnings","ensureErrorObject","hasStack","_settlePromiseFromHandler","_settlePromise","isPromise","asyncGuaranteed","_settlePromise0","_clearCallbackDataAtIndex","_fulfillPromises","_rejectPromises","defer","toFastProperties","./any.js","./async","./bind","./call_get.js","./cancel","./context","./debuggability","./direct_resolve","./each.js","./filter.js","./finally","./generators.js","./join","./map.js","./method","./nodeback","./nodeify.js","./promise_array","./promisify.js","./props.js","./race.js","./reduce.js","./settle.js","./some.js","./synchronous_inspection","./thenables","./timers.js","./using.js","23","resolveValueIfEmpty","asArray","_iterate","_resolveEmptyArray","toResolutionValue","getActualLength","shouldCopyValues","isResolved","24","THIS","withAppended","defaultPromisified","__isPromisified__","noCopyPropsPattern","defaultFilter","propsFilter","isPromisified","hasPromisified","suffix","getDataPropertyOrDefault","promisifiableMethods","suffixRegexp","inheritedDataKeys","passesDefaultFilter","keyWithoutAsyncSuffix","checkValid","escapeIdentRegex","makeNodePromisified","makeNodePromisifiedEval","defaultThis","promisified","promisifyAll","promisifier","promisifiedKey","promisify","copyDescriptors","isClass","25","Es6Map","mapToEntries","extractEntry","PropertiesPromiseArray","entries","isMap","_isMap","props","castValue","entriesToMap","keyOffset","26","_capacity","_willBeOverCapacity","_checkCapacity","wrapMask","front","_resizeTo","oldCapacity","srcIndex","dstIndex","arrayMove","27","raceLater","race","28","ReductionPromiseArray","initialValue","_each","_fn","_initialValue","_currentCancellable","_eachValues","completed","valueOrReason","gotAccum","accum","_gotAccum","gotValue","_eachComplete","sender","_resultCancelled$","29","NativePromise","getNativePromise","MutationObserver","GlobalSetImmediate","ProcessNextTick","isRecentNode","nativePromise","standalone","cordova","toggleScheduled","div2","observe","disconnect","30","SettledPromiseArray","_promiseResolved","inspection","_settledValueField","settle","31","CANCELLATION","_howMany","_unwrap","some","howMany","isArrayResolved","_canPossiblyFulfill","_getRangeError","_addFulfilled","_fulfilled","_addRejected","_checkOutcome","_rejected","32","__isCancelled","33","hasProp","doGetThen","getThen","isAnyBluebirdPromise","doThenable","34","HandleWrapper","handle","afterValue","ms","successClear","failureClear","handleWrapper","afterTimeout","35","NULL","dispose","thenable","_isDisposable","_getDisposer","_setDisposable","castPreservingDisposable","tryDispose","Disposer","_data","_context","FunctionDisposer","maybeUnwrapDisposer","isDisposer","ResourceList","doDispose","_unsetDisposable","using","spreadArgs","disposer","reflectedResources","resultPromise","inspections","_disposer","36","tryCatchTarget","globalObject","tryCatcher","Child","Parent","T","maybeError","safeToString","appendee","defaultValue","excludedPrototypes","isExcludedProto","visitedKeys","enumeration","thisAssignmentPattern","hasMethods","hasMethodsOtherThanConstructor","hasThisAssignmentAndStaticMethods","FakeConstructor","ic","rident","filledRange","prefix","ArrayFrom","itResult","hasEnvVariables","chrome","loadTimes","P","stateProviders","provider","regTemplates","initial","template_name","date_format","server_utc","task_unscheduled_time","grid_date_format","tooltip_date_format","copyDomEvent","altKey","_settings","inputMethods","getInputMethods","_drag_start_timer","clearDragTimer","eventParams","timeStamp","original_target","dragStart","traceDragEvents","domElement","inputMethod","mousemove","dragMove","dragScroll","limited_mousemove","dndActive","mouseup","dragEnd","checkPositionChange","diff_x","diff_y","initDnDMarker","backupEventTarget","getEvent","backup_element","elementFromPoint","_defineProperties","__webpack_exports__","_t","instance","Constructor","_classCallCheck","token","_url","_token","_seed","api","protoProps","staticProps","_createClass","Accept","Content-Type","Remote-Token","_fetch","_x","_x2","_t2","credentials","_t3","_t4","_t5","_t6","websocket","_e","_e2","_s","_t29","_wrapper","connect","_t8","_socket","WebSocket","onmessage","fire","_send","_resubscribe","onError","_t9","_this3","_uid","onCall","_t10","_this4","_t11","_t12","_t13","_t14","send","_t15","_e3","_t30","_t31","_e4","onResponse","_t18","_t32","_t20","_t34","_t23","_t33","_t24","_t35","_t26","_t27","_t28","remote_client","remoteEvents","remote","Client","_ready","back","_remote","cspVersion","utc","to_fixed","getUTCMonth","getUTCFullYear","getUTCDay","getUTCHours","getUTCMinutes","getUTCSeconds","getUTCISOWeek","getISOWeek","mask","month_short_hash","month_full_hash","fastVersion","dateToStrFn","getWeek","splt","strToDateFn","cspCompliantVersion","canUseCsp","useCsp","cspAutoCheck","time_part","start_on_monday","month_start","setDate","quarter_start","res_month","setMonth","year_start","minute_start","getMilliseconds","setMilliseconds","_add_days","modifiedDate","inc","originalDate","incCondition","getHoursCondition","getDateCondition","ndate","setYear","add_quarter","num","_getWeekNumber","isoWeek","nday","first_thursday","year_number","ordinal_date","convert_to_utc","createConfig","DOMParser","ActiveXObject","loadXML","parseFromString","tagname","responseXML","xpathExp","docObj","selectNodes","ownerDocument","evaluate","XPathResult","ANY_TYPE","iterateNext","_call","onLoad","getSync","put","postData","del","post","postSync","isQt","onreadystatechange","noCache","setRequestHeader","show_loading","dhx_save_btn","dhx_cancel_btn","dhx_delete_btn","project_sections","milestone_sections","grid_resizer_column_attribute","keep_grid_width","grid_resize","prevent_default_scroll","service","ExtensionsManager","addExtension","_extensions","getExtension","supportedExtensions","license","extensionManager","ExtensionManager","RemoteEvents","templatesLoader","stateService","selected_task","i18n","setLocale","localeObject","MAX_UNDO_STEPS","Undo","maxSteps","undoEnabled","redoEnabled","invert","revert","inverseCommands","_undoStack","_redoStack","getUndoStack","setUndoStack","getRedoStack","setRedoStack","clearUndoStack","clearRedoStack","updateConfigs","undo_steps","undo_types","undo_actions","redo","_pop","_reorderCommands","_applyAction","_push","logAction","weights","actionWeights","weightA","entities","actions","isExists","getMethod","startsWith","noTrack","onBeforeUndo","onBeforeRedo","batchActions","Monitor","_batchAction","_batchMode","_ignore","_ignoreMoveEvents","_initialTasks","_initialLinks","_nestedTasks","_nestedLinks","_undo","_attachEvents","overwrite","_storeTask","_storeLink","isMoveEventsIgnored","toggleIgnoreMoveEvents","startIgnore","stopIgnore","startBatchAction","_timeout","stopBatchAction","onTaskAdded","_storeTaskCommand","onTaskUpdated","onTaskMoved","getInitialTask","_storeEntityCommand","onTaskDeleted","childrenLinks","_storeLinkCommand","onLinkAdded","onLinkUpdated","onLinkDeleted","setNestedTasks","taskIds","_getLinks","setInitialTask","uniqueLinks","setInitialLink","setInitialTaskObject","clearInitialTasks","getInitialLink","clearInitialLinks","deleteCacheCooldown","saveInitialAll","getMoveObjectByTaskId","nested","_storeCommand","actionType","entityType","monitor_1","undo_1","monitor","changeTaskCommandId","updLink","oldTaskId","newTaskId","changeLinkCommandId","updateTasksIds","updateLinksIds","getInitialState","Tooltip","_tooltipNode","setViewport","_root","_isLikeMouseEvent","_calculateTooltipPosition","setContent","_getViewPort","_getViewPortSize","tooltipNode","mouse","containerPos","domEventsScope","tooltip_1","TooltipManager","_listeners","_initDelayedFunctions","hideTooltip","delayHide","watchableTarget","doOnMouseEnter","onmouseenter","onmousemove","onmouseleave","tooltipFor","cloneDomEvent","clone","delayShow","tooltip_timeout","tooltip_hide_timeout","tooltipManager_1","tooltipManager","touch_tooltip","QuickInfo","_showForTask","_showAtCoordinates","forced","qi","_quickInfoBox","_quickInfoBoxId","_quickInfoTask","quick_info_detached","setContainer","_container","defaultContent","quickinfo_buttons","_createQuickInfoElement","titleBox","titleContent","titleDate","main","controls","_qiButtonClickHandler","_qiKeyPressHandler","_qi_button_click","_appendAtCoordinates","show_quick_info","_getContainer","_get_event_counter_part","xViewport","yViewport","_init_quick_info","_prepare_quick_info_classname","_fill_quick_data","_show_quick_info","domEv","_quickInfoReadonly","quick_info_class","allowedButtons","isEditor","quick_info_title","quick_info_date","popupHeight","scrolls","screenWidth","relativePopupBottom","top_1","quickInfo_1","quickInfo","hidingFunction","clearQuickInfo","multiselect_one_level","_selected","_one_level","_active","_first_selected_when_shift","getDefaultSelected","selected","getSelected","setFirstSelected","getFirstSelected","updateState","setLastSelected","getLastSelected","afterSelect","forSelected","isSameLevel","doSelection","target_ev","defaultLast","isLast","multiSelect","singleSelection","inline_editors_multiselect_open","blockSelection","first_indx","target_indx","last_indx","old_selectTask","old_unselectTask","toggleTaskSelection","getLastSelectedTask","old_isSelected","render_marker","show_markers","marker_class","markerHeight","initMarkerArea","markerArea","$marker_area","_markers","renderMarkers","getMarker","deleteMarker","updateMarker","_getMarkers","$keyboardNavigation","dispatcher","activeNode","globalNode","GanttNode","setActiveNode","getActiveNode","getDefaultNode","TaskCell","TaskRow","isValid","setDefaultNode","fromDomElement","inputs","HeaderCell","focusGlobalNode","blurNode","focusChanged","compareTo","keptFocus","keyDownHandler","isModal","ganttNode","shortcuts","getCommandFromEvent","findHandler","doAction","awaitsFocus","_delay","clearDelay","modalsStack","afterPopup","startModal","trapFocus","endModal","currentTarget","isTopModal","traceLightbox","focusElement","globalIndex","_compose","cellElement","nextElement","prevTask","moveTo","nextTask","home","pagedown","pageup","bindAll","KeyNavNode","viewWidth","viewHeight","scrollPositionX","scrollPositionY","attachedScrollbarHorizontal","scrollbarHorizontal","attachedScrollbarVertical","scrollbarVertical","scrollGrid","shift+down","shift+up","shift+right","shift+left","space","ctrl+left","ctrl+right","ctrl+enter","taskRow","enter, space","EventHandler","canStringifyThis","canStringifyThat","eventFacade","$eventAttached","alt+left","alt+right","alt+up","alt+down","ctrl+z","ctrl+r","currentFocus","currentIndex","lastItem","firstItem","getHash","shortcut","unbind","initKeys","createCommand","expr","getExpressions","words","getWords","commandKeys","specialKeys","printableKey","getHashFromEvent","junctionChar","term","combinationChar","backspace","tab","insert","plus","f1","f2","f3","f4","f5","f6","f7","f8","f9","f10","f11","f12","isTaskFocused","isInlineEditorCell","isNoKeyboardNavigationElement","isLightboxElement","focusHandler","$preventDefault","reFocusActiveNode","outsideGantt","localName","mousedownHandler","locateTask","onReady","updateRender","_redrawTasks","focusedItemVisible","createdTaskId","keepFocusOnNewTask","nodeConstructor","focusOnCreate","getScope","scopes","headerCell","taskCell","findVisibleColumnIndex","keyNavFacade","addShortcut","scopeObject","getShortcutHandler","removeShortcut","getScopeName","setupKeyNav","isExpanded","fullscreenElement","mozFullScreenElement","webkitFullscreenElement","msFullscreenElement","isFullscreenAvailable","fullscreenEnabled","webkitFullscreenEnabled","mozFullScreenEnabled","msFullscreenEnabled","backupBodyPadding","backupElementSizes","zIndex","modified","backupPositioning","updateSizes","expandGantt","onFullScreenChange","getFullscreenElement","positions","originalPositioning","resetParentPositioning","setFullScreenSizes","record","restoreParentPositioning","restoreSizes","cantFullscreen","expand","requestArguments","webkitRequestFullscreen","Element","ALLOW_KEYBOARD_INPUT","requestFullscreen","msRequestFullscreen","mozRequestFullScreen","collapse","requestExitFullscreen","msExitFullscreen","mozCancelFullScreen","webkitExitFullscreen","exitFullscreen","stringifyPrimitive","sep","eq","ks","qs","regexp","maxKeys","kstr","vstr","idx","decode","encode","webpackPolyfill","paths","freeExports","freeModule","freeGlobal","maxInt","tMin","tMax","skew","damp","initialBias","initialN","regexPunycode","regexNonASCII","regexSeparators","not-basic","invalid-input","baseMinusTMin","stringFromCharCode","mapDomain","ucs2decode","extra","counter","ucs2encode","basicToDigit","digitToBasic","digit","flag","adapt","numPoints","firstTime","oldi","w","baseMinusT","inputLength","bias","handledCPCount","basicLength","q","handledCPCountPlusOne","qMinusT","ucs2","toUnicode","100","101","102","200","201","202","203","204","205","206","207","208","226","300","301","302","303","304","305","307","308","400","401","402","403","404","405","406","407","408","409","410","411","412","413","414","415","416","417","418","421","422","423","424","425","426","428","429","431","451","500","501","502","503","504","505","506","507","508","509","510","511","arrayCopy","localStorage","registerImmediate","nextHandle","tasksByHandle","currentlyRunningATask","doc","attachTo","runIfPresent","postMessage","importScripts","postMessageIsAsynchronous","oldOnMessage","canUsePostMessage","messagePrefix","onGlobalMessage","installPostMessageImplementation","MessageChannel","channel","port1","port2","installMessageChannelImplementation","script","installReadyStateChangeImplementation","copyBuffer","custom","toArrayBuffer","preferBinary","_opts","_body","setHeader","useFetch","decideMode","_fetchTimer","_onFinish","lowerName","unsafeHeaders","getHeader","removeHeader","headersObj","headersList","keyName","signal","_fetchAbortController","requestTimeout","withCredentials","_connect","ontimeout","_response","statusValid","flushHeaders","setNoDelay","setSocketKeepAlive","validateParams","isLE","mLen","nBytes","eLen","eMax","eBias","nBits","NaN","rt","LN2","b64","lens","getLens","validLen","placeHoldersLen","Arr","_byteLength","curByte","revLookup","uint8","extraBytes","len2","encodeChunk","lookup","tripletToBase64","_apiUrl","getNodeJSTransport","defaultPort","_prepareConfigPDF","previousDateRage","_serializeHtml","_serializeAll","_fixColumns","_sendToExport","exportToPNG","exportToICal","_serializePlain","exportToExcel","visual","convert","_eachTaskTimed","_no_progress_colors","_serializeTable","_serializeColumns","rawDates","_serializeScales","exportToJSON","_getWorktimeSettings","importFromExcel","File","_nodejsImportExcel","_sendImportAjaxExcel","importFromMSProject","_nodejsImportMSP","_sendImportAjaxMSP","importFromPrimaveraP6","exportToMSProject","skip_circular_links","oldXmlFormat","oldFormatDate","oldXmlDate","oldDateFormat","_customProjectProperties","_customTaskProperties","_clearRecLinks","_exportConfig","$custom_data","exportToPrimaveraP6","formDataInstance","network","parts1","parts2","parts3","X-Requested-With","sheet","getHeaders","resData","durationUnit","projectProperties","taskProperties","_xdr","pack","_nodejsPostRequest","Content-Length","_markColumns","$template","_ajaxToExport","xdoc","_serializableGanttConfig","callbackFunction","form","_createHiddenForm","submit","_hidden_export_form","_copyObjectBase","formatDate","_color_box","_color_hash","_getStyles","_getColor","_getMinutesWorktimeSettings","parsedRanges","defaultWorkTimes","0","wTime","_working_time_helper","get_calendar","_pull","_originalCopyObject","_copyObjectPlain","rgb","_copyObjectTable","toISOstring","_copyObjectColumns","getDayIndex","_day_index_by_date","$start","$end","hiddenCells","scaleCellsWidth","$type","tmps","$text","$left","$right","_copyObjectColors","$color","ct","_copyObjectAll","smartScales","_exportSerialize","_getRaw","_scale_helpers","_get_scales","autosizeMinWidth","_get_resize_options","cellColors","cellCss","scaleCell","scaleCell_class","scaleCss","exportMode","ccount","xmlFormat","_lvl","_clearLevel","_makeLinksSameLevel","skippedLinks","_clearCircDependencies","_clearLinksSameLevel","usedTasks","prevLink","sources","$_source","_onCircDependencyFind","targets","curLink","_source","targetLvl","linkT","sourceParent","$_target","projectName","projectDates","start_end","manual","EventsManager","_mouseDown","_calculateDirectionVector","vectors","resultVector_1","vector","magnitude","angleDegrees","atan2","_applyDndReadyStyles","_timeline","_clearDndReadyStyles","_getScrollPosition","_countNewScrollPosition","coords","_startPoint","shiftY","_scrollState","_setScrollPosition","_stopDrag","_originalReadonly","_startDrag","enabled","filterTargets","clickDragUseKey","eventsManager_1","helpers_1","SelectedRegion","_el","_singleRow","_getTaskPositionByTop","_view","_viewPort","_endPoint","draw","singleRow","_useRequestAnimationFrame","useRequestAnimationFrame","getElement","setStart","startPoint","_startDate","setEnd","endPoint","_endDate","_positionPoint","absolute","setPosition","positionPoint","tasksByTime","tasksByIndex","_getTasksByTop","getInBounds","startValue","endValue","selectedRegion","_originPosition","_restoreOriginPosition","scheduledDndCoordinates","_getCoordinates","dragTimelineUseKey","viewPortBounds","selectedRegion_1","defaultConfig","eventsManager","__assign","click_drag_1","drag_timeline_1","export_api_1","fullscreen_1","quick_info_1","extensions_gpl_1"],"mappings":"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","file":"dhtmlxgantt.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine(\"dhtmlxgantt\", [], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"dhtmlxgantt\"] = factory();\n\telse\n\t\troot[\"dhtmlxgantt\"] = factory();\n})(window, function() {\nreturn "," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"/codebase/\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 299);\n","function _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nvar helpers = require(\"./helpers\");\n\nvar plainObjectConstructor = {}.constructor.toString();\n\nfunction isCustomType(object) {\n  var constructorString = object.constructor.toString();\n  return constructorString !== plainObjectConstructor;\n}\n\nfunction copy(object) {\n  var i, result; // iterator, types array, result\n\n  if (object && _typeof(object) == \"object\") {\n    switch (true) {\n      case helpers.isDate(object):\n        result = new Date(object);\n        break;\n\n      case helpers.isArray(object):\n        result = new Array(object.length);\n\n        for (i = 0; i < object.length; i++) {\n          result[i] = copy(object[i]);\n        }\n\n        break;\n\n      /*\t\tcase (helpers.isStringObject(object)):\r\n      \t\t\tresult = new String(object);\r\n      \t\t\tbreak;\r\n      \t\tcase (helpers.isNumberObject(object)):\r\n      \t\t\tresult = new Number(object);\r\n      \t\t\tbreak;\r\n      \t\tcase (helpers.isBooleanObject(object)):\r\n      \t\t\tresult = new Boolean(object);\r\n      \t\t\tbreak;*/\n\n      default:\n        if (isCustomType(object)) {\n          result = Object.create(object);\n        } else {\n          result = {};\n        }\n\n        for (i in object) {\n          if (Object.prototype.hasOwnProperty.apply(object, [i])) result[i] = copy(object[i]);\n        }\n\n        break;\n    }\n  }\n\n  return result || object;\n}\n\nfunction mixin(target, source, force) {\n  for (var f in source) {\n    if (target[f] === undefined || force) target[f] = source[f];\n  }\n\n  return target;\n}\n\nfunction defined(obj) {\n  return typeof obj != \"undefined\";\n}\n\nvar seed;\n\nfunction uid() {\n  if (!seed) seed = new Date().valueOf();\n  seed++;\n  return seed;\n} //creates function with specified \"this\" pointer\n\n\nfunction bind(functor, object) {\n  if (functor.bind) return functor.bind(object);else return function () {\n    return functor.apply(object, arguments);\n  };\n}\n\nfunction event(el, event, handler, capture) {\n  if (el.addEventListener) el.addEventListener(event, handler, capture === undefined ? false : capture);else if (el.attachEvent) el.attachEvent(\"on\" + event, handler);\n}\n\nfunction eventRemove(el, event, handler, capture) {\n  if (el.removeEventListener) el.removeEventListener(event, handler, capture === undefined ? false : capture);else if (el.detachEvent) el.detachEvent(\"on\" + event, handler);\n}\n\nmodule.exports = {\n  copy: copy,\n  defined: defined,\n  mixin: mixin,\n  uid: uid,\n  bind: bind,\n  event: event,\n  eventRemove: eventRemove\n};","//returns position of html element on the page\nfunction elementPosition(elem) {\n  var top = 0,\n      left = 0,\n      right = 0,\n      bottom = 0;\n\n  if (elem.getBoundingClientRect) {\n    //HTML5 method\n    var box = elem.getBoundingClientRect();\n    var body = document.body;\n    var docElem = document.documentElement || document.body.parentNode || document.body;\n    var scrollTop = window.pageYOffset || docElem.scrollTop || body.scrollTop;\n    var scrollLeft = window.pageXOffset || docElem.scrollLeft || body.scrollLeft;\n    var clientTop = docElem.clientTop || body.clientTop || 0;\n    var clientLeft = docElem.clientLeft || body.clientLeft || 0;\n    top = box.top + scrollTop - clientTop;\n    left = box.left + scrollLeft - clientLeft;\n    right = document.body.offsetWidth - box.right;\n    bottom = document.body.offsetHeight - box.bottom;\n  } else {\n    //fallback to naive approach\n    while (elem) {\n      top = top + parseInt(elem.offsetTop, 10);\n      left = left + parseInt(elem.offsetLeft, 10);\n      elem = elem.offsetParent;\n    }\n\n    right = document.body.offsetWidth - elem.offsetWidth - left;\n    bottom = document.body.offsetHeight - elem.offsetHeight - top;\n  }\n\n  return {\n    y: Math.round(top),\n    x: Math.round(left),\n    width: elem.offsetWidth,\n    height: elem.offsetHeight,\n    right: Math.round(right),\n    bottom: Math.round(bottom)\n  };\n}\n\nfunction isVisible(node) {\n  var display = false,\n      visibility = false;\n\n  if (window.getComputedStyle) {\n    var style = window.getComputedStyle(node, null);\n    display = style[\"display\"];\n    visibility = style[\"visibility\"];\n  } else if (node.currentStyle) {\n    display = node.currentStyle[\"display\"];\n    visibility = node.currentStyle[\"visibility\"];\n  }\n\n  return display != \"none\" && visibility != \"hidden\";\n}\n\nfunction hasNonNegativeTabIndex(node) {\n  return !isNaN(node.getAttribute(\"tabindex\")) && node.getAttribute(\"tabindex\") * 1 >= 0;\n}\n\nfunction hasHref(node) {\n  var canHaveHref = {\n    \"a\": true,\n    \"area\": true\n  };\n\n  if (canHaveHref[node.nodeName.loLowerCase()]) {\n    return !!node.getAttribute(\"href\");\n  }\n\n  return true;\n}\n\nfunction isEnabled(node) {\n  var canDisable = {\n    \"input\": true,\n    \"select\": true,\n    \"textarea\": true,\n    \"button\": true,\n    \"object\": true\n  };\n\n  if (canDisable[node.nodeName.toLowerCase()]) {\n    return !node.hasAttribute(\"disabled\");\n  }\n\n  return true;\n}\n\nfunction getFocusableNodes(root) {\n  var nodes = root.querySelectorAll([\"a[href]\", \"area[href]\", \"input\", \"select\", \"textarea\", \"button\", \"iframe\", \"object\", \"embed\", \"[tabindex]\", \"[contenteditable]\"].join(\", \"));\n  var nodesArray = Array.prototype.slice.call(nodes, 0);\n\n  for (var i = 0; i < nodesArray.length; i++) {\n    nodesArray[i].$position = i; // we remember original nodes order, \n    // so when we sort them by tabindex we ensure order of nodes with same tabindex is preserved, \n    // since some browsers do unstable sort\n  } // use tabindex to sort focusable nodes\n\n\n  nodesArray.sort(function (a, b) {\n    if (a.tabIndex === 0 && b.tabIndex !== 0) {\n      return 1;\n    }\n\n    if (a.tabIndex !== 0 && b.tabIndex === 0) {\n      return -1;\n    }\n\n    if (a.tabIndex === b.tabIndex) {\n      // ensure we do stable sort\n      return a.$position - b.$position;\n    }\n\n    if (a.tabIndex < b.tabIndex) {\n      return -1;\n    }\n\n    return 1;\n  });\n\n  for (var i = 0; i < nodesArray.length; i++) {\n    var node = nodesArray[i];\n    var isValid = (hasNonNegativeTabIndex(node) || isEnabled(node) || hasHref(node)) && isVisible(node);\n\n    if (!isValid) {\n      nodesArray.splice(i, 1);\n      i--;\n    }\n  }\n\n  return nodesArray;\n}\n\nfunction getScrollSize() {\n  var div = document.createElement(\"div\");\n  div.style.cssText = \"visibility:hidden;position:absolute;left:-1000px;width:100px;padding:0px;margin:0px;height:110px;min-height:100px;overflow-y:scroll;\";\n  document.body.appendChild(div);\n  var width = div.offsetWidth - div.clientWidth;\n  document.body.removeChild(div);\n  return width;\n}\n\nfunction getClassName(node) {\n  if (!node) return \"\";\n  var className = node.className || \"\";\n  if (className.baseVal) //'className' exist but not a string - IE svg element in DOM\n    className = className.baseVal;\n  if (!className.indexOf) className = \"\";\n  return _trimString(className);\n}\n\nfunction addClassName(node, className) {\n  if (className && node.className.indexOf(className) === -1) {\n    node.className += \" \" + className;\n  }\n}\n\nfunction removeClassName(node, name) {\n  name = name.split(\" \");\n\n  for (var i = 0; i < name.length; i++) {\n    var regEx = new RegExp(\"\\\\s?\\\\b\" + name[i] + \"\\\\b(?![-_.])\", \"\");\n    node.className = node.className.replace(regEx, \"\");\n  }\n}\n\nfunction hasClass(element, className) {\n  if ('classList' in element) {\n    return element.classList.contains(className);\n  } else {\n    return new RegExp(\"\\\\b\" + className + \"\\\\b\").test(element.className);\n  }\n}\n\nfunction toNode(node) {\n  if (typeof node === \"string\") {\n    return document.getElementById(node) || document.querySelector(node) || document.body;\n  }\n\n  return node || document.body;\n}\n\nvar _slave;\n\nfunction insert(node, newone) {\n  if (!_slave) {\n    _slave = document.createElement(\"div\");\n  }\n\n  _slave.innerHTML = newone;\n  var child = _slave.firstChild;\n  node.appendChild(child);\n  return child;\n}\n\nfunction remove(node) {\n  if (node && node.parentNode) {\n    node.parentNode.removeChild(node);\n  }\n}\n\nfunction getChildren(node, css) {\n  var ch = node.childNodes;\n  var len = ch.length;\n  var out = [];\n\n  for (var i = 0; i < len; i++) {\n    var obj = ch[i];\n\n    if (obj.className && obj.className.indexOf(css) !== -1) {\n      out.push(obj);\n    }\n  }\n\n  return out;\n}\n\nfunction getTargetNode(e) {\n  var trg;\n  if (e.tagName) trg = e;else {\n    e = e || window.event;\n    trg = e.target || e.srcElement;\n\n    if (trg.shadowRoot && e.composedPath) {\n      trg = e.composedPath()[0];\n    }\n  }\n  return trg;\n}\n\nfunction locateAttribute(e, attribute) {\n  if (!attribute) return;\n  var trg = getTargetNode(e);\n\n  while (trg) {\n    if (trg.getAttribute) {\n      //text nodes has not getAttribute\n      var test = trg.getAttribute(attribute);\n      if (test) return trg;\n    }\n\n    trg = trg.parentNode;\n  }\n\n  return null;\n}\n\nfunction _trimString(str) {\n  var func = String.prototype.trim || function () {\n    return this.replace(/^\\s+|\\s+$/g, \"\");\n  };\n\n  return func.apply(str);\n}\n\nfunction locateClassName(e, classname, strict) {\n  var trg = getTargetNode(e);\n  var css = \"\";\n  if (strict === undefined) strict = true;\n\n  while (trg) {\n    css = getClassName(trg);\n\n    if (css) {\n      var ind = css.indexOf(classname);\n\n      if (ind >= 0) {\n        if (!strict) return trg; //check that we have exact match\n\n        var left = ind === 0 || !_trimString(css.charAt(ind - 1));\n        var right = ind + classname.length >= css.length || !_trimString(css.charAt(ind + classname.length));\n        if (left && right) return trg;\n      }\n    }\n\n    trg = trg.parentNode;\n  }\n\n  return null;\n}\n/*\r\nevent position relatively to DOM element\r\n */\n\n\nfunction getRelativeEventPosition(ev, node) {\n  var d = document.documentElement;\n  var box = elementPosition(node);\n  return {\n    x: ev.clientX + d.scrollLeft - d.clientLeft - box.x + node.scrollLeft,\n    y: ev.clientY + d.scrollTop - d.clientTop - box.y + node.scrollTop\n  };\n}\n\nfunction isChildOf(child, parent) {\n  if (!child || !parent) {\n    return false;\n  }\n\n  while (child && child != parent) {\n    child = child.parentNode;\n  }\n\n  return child === parent;\n}\n\nfunction closest(element, selector) {\n  if (element.closest) {\n    return element.closest(selector);\n  } else if (element.matches || element.msMatchesSelector || element.webkitMatchesSelector) {\n    var el = element;\n    if (!document.documentElement.contains(el)) return null;\n\n    do {\n      var method = el.matches || el.msMatchesSelector || el.webkitMatchesSelector;\n      if (method.call(el, selector)) return el;\n      el = el.parentElement || el.parentNode;\n    } while (el !== null && el.nodeType === 1);\n\n    return null;\n  } else {\n    // eslint-disable-next-line no-console\n    console.error(\"Your browser is not supported\");\n    return null;\n  }\n}\n\nfunction isShadowDomSupported() {\n  return document.head.createShadowRoot || document.head.attachShadow;\n}\n/**\r\n * Returns element that has the browser focus, or null if no element has focus.\r\n * Works with shadow DOM, so it's prefereed to use this function instead of document.activeElement directly.\r\n * @returns HTMLElement\r\n */\n\n\nfunction getActiveElement() {\n  var activeElement = document.activeElement;\n\n  if (activeElement.shadowRoot) {\n    activeElement = activeElement.shadowRoot.activeElement;\n  }\n\n  if (activeElement === document.body && document.getSelection) {\n    activeElement = document.getSelection().focusNode || document.body;\n  }\n\n  return activeElement;\n}\n/**\r\n * Returns document.body or the host node of the ShadowRoot, if the element is attached to ShadowDom\r\n * @param {HTMLElement} element \r\n * @returns HTMLElement\r\n */\n\n\nfunction getRootNode(element) {\n  if (!element) {\n    return document.body;\n  }\n\n  if (!isShadowDomSupported()) {\n    return document.body;\n  }\n\n  while (element.parentNode && (element = element.parentNode)) {\n    if (element instanceof ShadowRoot) {\n      return element.host;\n    }\n  }\n\n  return document.body;\n}\n\nfunction hasShadowParent(element) {\n  return !!getRootNode(element);\n}\n\nmodule.exports = {\n  getNodePosition: elementPosition,\n  getFocusableNodes: getFocusableNodes,\n  getScrollSize: getScrollSize,\n  getClassName: getClassName,\n  addClassName: addClassName,\n  removeClassName: removeClassName,\n  insertNode: insert,\n  removeNode: remove,\n  getChildNodes: getChildren,\n  toNode: toNode,\n  locateClassName: locateClassName,\n  locateAttribute: locateAttribute,\n  getTargetNode: getTargetNode,\n  getRelativeEventPosition: getRelativeEventPosition,\n  isChildOf: isChildOf,\n  hasClass: hasClass,\n  closest: closest,\n  getRootNode: getRootNode,\n  hasShadowParent: hasShadowParent,\n  isShadowDomSupported: isShadowDomSupported,\n  getActiveElement: getActiveElement\n};","function _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nvar units = {\n  \"second\": 1,\n  \"minute\": 60,\n  \"hour\": 60 * 60,\n  \"day\": 60 * 60 * 24,\n  \"week\": 60 * 60 * 24 * 7,\n  \"month\": 60 * 60 * 24 * 30,\n  \"quarter\": 60 * 60 * 24 * 30 * 3,\n  \"year\": 60 * 60 * 24 * 365\n};\n\nfunction getSecondsInUnit(unit) {\n  return units[unit] || units.hour;\n}\n\nfunction forEach(arr, callback) {\n  if (arr.forEach) {\n    arr.forEach(callback);\n  } else {\n    var workArray = arr.slice();\n\n    for (var i = 0; i < workArray.length; i++) {\n      callback(workArray[i], i);\n    }\n  }\n}\n\nfunction arrayMap(arr, callback) {\n  if (arr.map) {\n    return arr.map(callback);\n  } else {\n    var workArray = arr.slice();\n    var resArray = [];\n\n    for (var i = 0; i < workArray.length; i++) {\n      resArray.push(callback(workArray[i], i));\n    }\n\n    return resArray;\n  }\n}\n\nfunction arrayFind(arr, callback) {\n  if (arr.find) {\n    return arr.find(callback);\n  } else {\n    for (var i = 0; i < arr.length; i++) {\n      if (callback(arr[i], i)) {\n        return arr[i];\n      }\n    }\n  }\n}\n\nfunction arrayIncludes(arr, item) {\n  if (arr.includes) {\n    return arr.includes(item);\n  } else {\n    for (var i = 0; i < arr.length; i++) {\n      if (arr[i] === item) {\n        return true;\n      }\n    }\n\n    return false;\n  }\n} // iframe-safe array type check instead of using instanceof\n\n\nfunction isArray(obj) {\n  if (Array.isArray) {\n    return Array.isArray(obj);\n  } else {\n    // close enough\n    return obj && obj.length !== undefined && obj.pop && obj.push;\n  }\n} // non-primitive string object, e.g. new String(\"abc\")\n\n\nfunction isStringObject(obj) {\n  return obj && _typeof(obj) === \"object\" && Function.prototype.toString.call(obj.constructor) === \"function String() { [native code] }\";\n} // non-primitive number object, e.g. new Number(5)\n\n\nfunction isNumberObject(obj) {\n  return obj && _typeof(obj) === \"object\" && Function.prototype.toString.call(obj.constructor) === \"function Number() { [native code] }\";\n} // non-primitive number object, e.g. new Boolean(true)\n\n\nfunction isBooleanObject(obj) {\n  return obj && _typeof(obj) === \"object\" && Function.prototype.toString.call(obj.constructor) === \"function Boolean() { [native code] }\";\n}\n\nfunction isDate(obj) {\n  if (obj && _typeof(obj) === \"object\") {\n    return !!(obj.getFullYear && obj.getMonth && obj.getDate);\n  } else {\n    return false;\n  }\n}\n\nfunction isValidDate(obj) {\n  return isDate(obj) && !isNaN(obj.getTime());\n}\n\nfunction arrayFilter(arr, callback) {\n  var result = [];\n\n  if (arr.filter) {\n    return arr.filter(callback);\n  } else {\n    for (var i = 0; i < arr.length; i++) {\n      if (callback(arr[i], i)) {\n        result[result.length] = arr[i];\n      }\n    }\n\n    return result;\n  }\n}\n\nfunction hashToArray(hash) {\n  var result = [];\n\n  for (var key in hash) {\n    if (hash.hasOwnProperty(key)) {\n      result.push(hash[key]);\n    }\n  }\n\n  return result;\n}\n\nfunction arraySome(arr, callback) {\n  if (arr.length === 0) return false;\n\n  for (var i = 0; i < arr.length; i++) {\n    if (callback(arr[i], i, arr)) {\n      return true;\n    }\n  }\n\n  return false;\n}\n\nfunction arrayDifference(arr, callback) {\n  return arrayFilter(arr, function (item, i) {\n    return !callback(item, i);\n  });\n}\n\nfunction throttle(callback, timeout) {\n  var wait = false;\n  return function () {\n    if (!wait) {\n      callback.apply(null, arguments);\n      wait = true;\n      setTimeout(function () {\n        wait = false;\n      }, timeout);\n    }\n  };\n}\n\nfunction delay(callback, timeout) {\n  var timer;\n\n  var result = function result() {\n    result.$cancelTimeout();\n    result.$pending = true;\n    var args = Array.prototype.slice.call(arguments);\n    timer = setTimeout(function () {\n      callback.apply(this, args);\n      result.$pending = false;\n    }, timeout);\n  };\n\n  result.$pending = false;\n\n  result.$cancelTimeout = function () {\n    clearTimeout(timer);\n    result.$pending = false;\n  };\n\n  result.$execute = function () {\n    var args = Array.prototype.slice.call(arguments);\n    callback.apply(this, args);\n    result.$cancelTimeout();\n  };\n\n  return result;\n}\n\nfunction sortArrayOfHash(arr, field, desc) {\n  var compare = function compare(a, b) {\n    return a < b;\n  };\n\n  arr.sort(function (a, b) {\n    if (a[field] === b[field]) return 0;\n    return desc ? compare(a[field], b[field]) : compare(b[field], a[field]);\n  });\n}\n\nfunction objectKeys(obj) {\n  if (Object.keys) {\n    return Object.keys(obj);\n  }\n\n  var result = [];\n  var key;\n\n  for (key in obj) {\n    if (Object.prototype.hasOwnProperty.call(obj, key)) {\n      result.push(key);\n    }\n  }\n\n  return result;\n}\n\nfunction isEventable(obj) {\n  return obj.attachEvent && obj.detachEvent;\n} //GS-1090: A task should be able to have the id = 0\n\n\nfunction replaceValidZeroId(id, rootId) {\n  if (checkZeroId(id) && !checkZeroId(rootId)) {\n    id = \"0\";\n  }\n\n  return id;\n}\n\nfunction checkZeroId(id) {\n  if (id === 0) {\n    return true;\n  }\n\n  return false;\n}\n\nfunction findBinary(array, target) {\n  // modified binary search, target value not exactly match array elements, looking for closest one\n  var low = 0,\n      high = array.length - 1,\n      i,\n      item,\n      prev;\n\n  while (low <= high) {\n    i = Math.floor((low + high) / 2);\n    item = +array[i];\n    prev = +array[i - 1];\n\n    if (item < target) {\n      low = i + 1;\n      continue;\n    }\n\n    if (item > target) {\n      if (!(!isNaN(prev) && prev < target)) {\n        high = i - 1;\n        continue;\n      } else {\n        // if target is between 'i' and 'i-1' return 'i - 1'\n        return i - 1;\n      }\n    }\n\n    while (+array[i] == +array[i + 1]) {\n      i++;\n    }\n\n    return i;\n  }\n\n  return array.length - 1;\n}\n\nmodule.exports = {\n  getSecondsInUnit: getSecondsInUnit,\n  forEach: forEach,\n  arrayMap: arrayMap,\n  arrayIncludes: arrayIncludes,\n  arrayFind: arrayFind,\n  arrayFilter: arrayFilter,\n  arrayDifference: arrayDifference,\n  arraySome: arraySome,\n  hashToArray: hashToArray,\n  sortArrayOfHash: sortArrayOfHash,\n  throttle: throttle,\n  isArray: isArray,\n  isDate: isDate,\n  isValidDate: isValidDate,\n  isStringObject: isStringObject,\n  isNumberObject: isNumberObject,\n  isBooleanObject: isBooleanObject,\n  delay: delay,\n  objectKeys: objectKeys,\n  isEventable: isEventable,\n  replaceValidZeroId: replaceValidZeroId,\n  checkZeroId: checkZeroId,\n  findBinary: findBinary\n};","module.exports = function (d, b) {\n  for (var p in b) {\n    if (b.hasOwnProperty(p)) d[p] = b[p];\n  }\n\n  function __() {\n    this.constructor = d;\n  }\n\n  d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n};","function _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nvar g; // This works in non-strict mode\n\ng = function () {\n  return this;\n}();\n\ntry {\n  // This works if eval is allowed (see CSP)\n  g = g || Function(\"return this\")() || (1, eval)(\"this\");\n} catch (e) {\n  // This works if the window reference is available\n  if ((typeof window === \"undefined\" ? \"undefined\" : _typeof(window)) === \"object\") g = window;\n} // g can still be undefined, but nothing to do about it...\n// We return undefined, instead of nothing here, so it's\n// easier to handle this case. if(!global) { ...}\n\n\nmodule.exports = g;","var EventHost = function EventHost() {\n  this._silent_mode = false;\n  this.listeners = {};\n};\n\nEventHost.prototype = {\n  _silentStart: function _silentStart() {\n    this._silent_mode = true;\n  },\n  _silentEnd: function _silentEnd() {\n    this._silent_mode = false;\n  }\n};\n\nvar createEventStorage = function createEventStorage(obj) {\n  var handlers = {};\n  var index = 0;\n\n  var eventStorage = function eventStorage() {\n    var combinedResult = true;\n\n    for (var i in handlers) {\n      var handlerResult = handlers[i].apply(obj, arguments);\n      combinedResult = combinedResult && handlerResult;\n    }\n\n    return combinedResult;\n  };\n\n  eventStorage.addEvent = function (handler, settings) {\n    if (typeof handler == \"function\") {\n      var handlerId;\n\n      if (settings && settings.id) {\n        handlerId = settings.id;\n      } else {\n        handlerId = index;\n        index++;\n      }\n\n      if (settings && settings.once) {\n        var originalHandler = handler;\n\n        handler = function handler() {\n          originalHandler();\n          eventStorage.removeEvent(handlerId);\n        };\n      }\n\n      handlers[handlerId] = handler;\n      return handlerId;\n    }\n\n    return false;\n  };\n\n  eventStorage.removeEvent = function (id) {\n    delete handlers[id];\n  };\n\n  eventStorage.clear = function () {\n    handlers = {};\n  };\n\n  return eventStorage;\n};\n\nfunction makeEventable(obj) {\n  var eventHost = new EventHost();\n\n  obj.attachEvent = function (eventName, handler, settings) {\n    eventName = 'ev_' + eventName.toLowerCase();\n\n    if (!eventHost.listeners[eventName]) {\n      eventHost.listeners[eventName] = createEventStorage(this);\n    }\n\n    if (settings && settings.thisObject) {\n      handler = handler.bind(settings.thisObject);\n    }\n\n    var innerId = eventHost.listeners[eventName].addEvent(handler, settings);\n    var handlerId = eventName + ':' + innerId; //return ID (ev_eventname:1)\n\n    if (settings && settings.id) {\n      handlerId = settings.id;\n    }\n\n    return handlerId;\n  };\n\n  obj.attachAll = function (callback) {\n    this.attachEvent('listen_all', callback);\n  };\n\n  obj.callEvent = function (name, eventArguments) {\n    if (eventHost._silent_mode) return true;\n    var handlerName = 'ev_' + name.toLowerCase();\n    var listeners = eventHost.listeners;\n\n    if (listeners['ev_listen_all']) {\n      listeners['ev_listen_all'].apply(this, [name].concat(eventArguments));\n    }\n\n    if (listeners[handlerName]) return listeners[handlerName].apply(this, eventArguments);\n    return true;\n  };\n\n  obj.checkEvent = function (name) {\n    var listeners = eventHost.listeners;\n    return !!listeners['ev_' + name.toLowerCase()];\n  };\n\n  obj.detachEvent = function (id) {\n    if (id) {\n      var listeners = eventHost.listeners;\n\n      for (var i in listeners) {\n        listeners[i].removeEvent(id); //remove event\n      }\n\n      var list = id.split(':'); //get EventName and ID\n\n      var listeners = eventHost.listeners;\n\n      if (list.length === 2) {\n        var eventName = list[0];\n        var eventId = list[1];\n\n        if (listeners[eventName]) {\n          listeners[eventName].removeEvent(eventId); //remove event\n        }\n      }\n    }\n  };\n\n  obj.detachAllEvents = function () {\n    for (var name in eventHost.listeners) {\n      eventHost.listeners[name].clear();\n    }\n  };\n}\n\nmodule.exports = makeEventable;","module.exports = function getVisibleTasksRange(gantt, view, config, datastore, viewport) {\n  var buffer = 1;\n  var start = view.getItemIndexByTopPosition(viewport.y) || 0;\n  var end = view.getItemIndexByTopPosition(viewport.y_end) || datastore.count();\n  var indexStart = Math.max(0, start - buffer);\n  var indexEnd = Math.min(datastore.count(), end + buffer);\n  return {\n    start: indexStart,\n    end: indexEnd\n  };\n};","function dummy() {\n  // eslint-disable-next-line\n  console.log(\"Method is not implemented.\");\n}\n\nfunction BaseControl() {} // base methods will be runned in gantt context\n\n\nBaseControl.prototype.render = dummy; // arguments: sns\n\nBaseControl.prototype.set_value = dummy; // arguments: node, value, ev, sns(config)\n\nBaseControl.prototype.get_value = dummy; // arguments node, ev, sns(config)\n\nBaseControl.prototype.focus = dummy; // arguments: node\n\nmodule.exports = function (gantt) {\n  // we could send current instance of gantt to module\n  return BaseControl;\n};","if (typeof Object.create === 'function') {\n  // implementation from standard node.js 'util' module\n  module.exports = function inherits(ctor, superCtor) {\n    ctor.super_ = superCtor;\n    ctor.prototype = Object.create(superCtor.prototype, {\n      constructor: {\n        value: ctor,\n        enumerable: false,\n        writable: true,\n        configurable: true\n      }\n    });\n  };\n} else {\n  // old school shim for old browsers\n  module.exports = function inherits(ctor, superCtor) {\n    ctor.super_ = superCtor;\n\n    var TempCtor = function TempCtor() {};\n\n    TempCtor.prototype = superCtor.prototype;\n    ctor.prototype = new TempCtor();\n    ctor.prototype.constructor = ctor;\n  };\n}","// shim for using process in browser\nvar process = module.exports = {}; // cached from whatever global is present so that test runners that stub it\n// don't break things.  But we need to wrap it in a try catch in case it is\n// wrapped in strict mode code which doesn't define any globals.  It's inside a\n// function because try/catches deoptimize in certain engines.\n\nvar cachedSetTimeout;\nvar cachedClearTimeout;\n\nfunction defaultSetTimout() {\n  throw new Error('setTimeout has not been defined');\n}\n\nfunction defaultClearTimeout() {\n  throw new Error('clearTimeout has not been defined');\n}\n\n(function () {\n  try {\n    if (typeof setTimeout === 'function') {\n      cachedSetTimeout = setTimeout;\n    } else {\n      cachedSetTimeout = defaultSetTimout;\n    }\n  } catch (e) {\n    cachedSetTimeout = defaultSetTimout;\n  }\n\n  try {\n    if (typeof clearTimeout === 'function') {\n      cachedClearTimeout = clearTimeout;\n    } else {\n      cachedClearTimeout = defaultClearTimeout;\n    }\n  } catch (e) {\n    cachedClearTimeout = defaultClearTimeout;\n  }\n})();\n\nfunction runTimeout(fun) {\n  if (cachedSetTimeout === setTimeout) {\n    //normal enviroments in sane situations\n    return setTimeout(fun, 0);\n  } // if setTimeout wasn't available but was latter defined\n\n\n  if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {\n    cachedSetTimeout = setTimeout;\n    return setTimeout(fun, 0);\n  }\n\n  try {\n    // when when somebody has screwed with setTimeout but no I.E. maddness\n    return cachedSetTimeout(fun, 0);\n  } catch (e) {\n    try {\n      // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n      return cachedSetTimeout.call(null, fun, 0);\n    } catch (e) {\n      // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error\n      return cachedSetTimeout.call(this, fun, 0);\n    }\n  }\n}\n\nfunction runClearTimeout(marker) {\n  if (cachedClearTimeout === clearTimeout) {\n    //normal enviroments in sane situations\n    return clearTimeout(marker);\n  } // if clearTimeout wasn't available but was latter defined\n\n\n  if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {\n    cachedClearTimeout = clearTimeout;\n    return clearTimeout(marker);\n  }\n\n  try {\n    // when when somebody has screwed with setTimeout but no I.E. maddness\n    return cachedClearTimeout(marker);\n  } catch (e) {\n    try {\n      // When we are in I.E. but the script has been evaled so I.E. doesn't  trust the global object when called normally\n      return cachedClearTimeout.call(null, marker);\n    } catch (e) {\n      // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.\n      // Some versions of I.E. have different rules for clearTimeout vs setTimeout\n      return cachedClearTimeout.call(this, marker);\n    }\n  }\n}\n\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n  if (!draining || !currentQueue) {\n    return;\n  }\n\n  draining = false;\n\n  if (currentQueue.length) {\n    queue = currentQueue.concat(queue);\n  } else {\n    queueIndex = -1;\n  }\n\n  if (queue.length) {\n    drainQueue();\n  }\n}\n\nfunction drainQueue() {\n  if (draining) {\n    return;\n  }\n\n  var timeout = runTimeout(cleanUpNextTick);\n  draining = true;\n  var len = queue.length;\n\n  while (len) {\n    currentQueue = queue;\n    queue = [];\n\n    while (++queueIndex < len) {\n      if (currentQueue) {\n        currentQueue[queueIndex].run();\n      }\n    }\n\n    queueIndex = -1;\n    len = queue.length;\n  }\n\n  currentQueue = null;\n  draining = false;\n  runClearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n  var args = new Array(arguments.length - 1);\n\n  if (arguments.length > 1) {\n    for (var i = 1; i < arguments.length; i++) {\n      args[i - 1] = arguments[i];\n    }\n  }\n\n  queue.push(new Item(fun, args));\n\n  if (queue.length === 1 && !draining) {\n    runTimeout(drainQueue);\n  }\n}; // v8 likes predictible objects\n\n\nfunction Item(fun, array) {\n  this.fun = fun;\n  this.array = array;\n}\n\nItem.prototype.run = function () {\n  this.fun.apply(null, this.array);\n};\n\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\n\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\nprocess.prependListener = noop;\nprocess.prependOnceListener = noop;\n\nprocess.listeners = function (name) {\n  return [];\n};\n\nprocess.binding = function (name) {\n  throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () {\n  return '/';\n};\n\nprocess.chdir = function (dir) {\n  throw new Error('process.chdir is not supported');\n};\n\nprocess.umask = function () {\n  return 0;\n};","module.exports = function (gantt) {\n  var BaseEditor = function BaseEditor() {};\n\n  BaseEditor.prototype = {\n    show: function show(id, column, config, placeholder) {},\n    hide: function hide() {},\n    set_value: function set_value(value, id, column, node) {\n      this.get_input(node).value = value;\n    },\n    get_value: function get_value(id, column, node) {\n      return this.get_input(node).value || \"\";\n    },\n    is_changed: function is_changed(value, id, column, node) {\n      var currentValue = this.get_value(id, column, node);\n\n      if (currentValue && value && currentValue.valueOf && value.valueOf) {\n        return currentValue.valueOf() != value.valueOf();\n      } else {\n        return currentValue != value;\n      }\n    },\n    is_valid: function is_valid(value, id, column, node) {\n      return true;\n    },\n    save: function save(id, column, node) {},\n    get_input: function get_input(node) {\n      return node.querySelector(\"input\");\n    },\n    focus: function focus(node) {\n      var input = this.get_input(node);\n\n      if (!input) {\n        return;\n      }\n\n      if (input.focus) {\n        input.focus();\n      }\n\n      if (input.select) {\n        input.select();\n      }\n    }\n  };\n  return BaseEditor;\n};","/* eslint-disable no-restricted-globals */\nvar isWindowAwailable = typeof window !== \"undefined\";\n/* eslint-enable no-restricted-globals */\n\nvar env = {\n  isIE: isWindowAwailable && (navigator.userAgent.indexOf(\"MSIE\") >= 0 || navigator.userAgent.indexOf(\"Trident\") >= 0),\n  isIE6: isWindowAwailable && !XMLHttpRequest && navigator.userAgent.indexOf(\"MSIE\") >= 0,\n  isIE7: isWindowAwailable && navigator.userAgent.indexOf(\"MSIE 7.0\") >= 0 && navigator.userAgent.indexOf(\"Trident\") < 0,\n  isIE8: isWindowAwailable && navigator.userAgent.indexOf(\"MSIE 8.0\") >= 0 && navigator.userAgent.indexOf(\"Trident\") >= 0,\n  isOpera: isWindowAwailable && navigator.userAgent.indexOf(\"Opera\") >= 0,\n  isChrome: isWindowAwailable && navigator.userAgent.indexOf(\"Chrome\") >= 0,\n  isKHTML: isWindowAwailable && (navigator.userAgent.indexOf(\"Safari\") >= 0 || navigator.userAgent.indexOf(\"Konqueror\") >= 0),\n  isFF: isWindowAwailable && navigator.userAgent.indexOf(\"Firefox\") >= 0,\n  isIPad: isWindowAwailable && navigator.userAgent.search(/iPad/gi) >= 0,\n  isEdge: isWindowAwailable && navigator.userAgent.indexOf(\"Edge\") != -1,\n  isNode: !isWindowAwailable || typeof navigator == \"undefined\"\n};\nmodule.exports = env;","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n// a duplex stream is just a stream that is both readable and writable.\n// Since JS doesn't have multiple prototypal inheritance, this class\n// prototypally inherits from Readable, and then parasitically from\n// Writable.\n'use strict';\n/*<replacement>*/\n\nvar pna = require('process-nextick-args');\n/*</replacement>*/\n\n/*<replacement>*/\n\n\nvar objectKeys = Object.keys || function (obj) {\n  var keys = [];\n\n  for (var key in obj) {\n    keys.push(key);\n  }\n\n  return keys;\n};\n/*</replacement>*/\n\n\nmodule.exports = Duplex;\n/*<replacement>*/\n\nvar util = require('core-util-is');\n\nutil.inherits = require('inherits');\n/*</replacement>*/\n\nvar Readable = require('./_stream_readable');\n\nvar Writable = require('./_stream_writable');\n\nutil.inherits(Duplex, Readable);\n{\n  // avoid scope creep, the keys array can then be collected\n  var keys = objectKeys(Writable.prototype);\n\n  for (var v = 0; v < keys.length; v++) {\n    var method = keys[v];\n    if (!Duplex.prototype[method]) Duplex.prototype[method] = Writable.prototype[method];\n  }\n}\n\nfunction Duplex(options) {\n  if (!(this instanceof Duplex)) return new Duplex(options);\n  Readable.call(this, options);\n  Writable.call(this, options);\n  if (options && options.readable === false) this.readable = false;\n  if (options && options.writable === false) this.writable = false;\n  this.allowHalfOpen = true;\n  if (options && options.allowHalfOpen === false) this.allowHalfOpen = false;\n  this.once('end', onend);\n}\n\nObject.defineProperty(Duplex.prototype, 'writableHighWaterMark', {\n  // making it explicit this property is not enumerable\n  // because otherwise some prototype manipulation in\n  // userland will fail\n  enumerable: false,\n  get: function get() {\n    return this._writableState.highWaterMark;\n  }\n}); // the no-half-open enforcer\n\nfunction onend() {\n  // if we allow half-open state, or if the writable side ended,\n  // then we're ok.\n  if (this.allowHalfOpen || this._writableState.ended) return; // no more data can be written.\n  // But allow more writes to happen in this tick.\n\n  pna.nextTick(onEndNT, this);\n}\n\nfunction onEndNT(self) {\n  self.end();\n}\n\nObject.defineProperty(Duplex.prototype, 'destroyed', {\n  get: function get() {\n    if (this._readableState === undefined || this._writableState === undefined) {\n      return false;\n    }\n\n    return this._readableState.destroyed && this._writableState.destroyed;\n  },\n  set: function set(value) {\n    // we ignore the value if the stream\n    // has not been initialized yet\n    if (this._readableState === undefined || this._writableState === undefined) {\n      return;\n    } // backward compatibility, the user is explicitly\n    // managing destroyed\n\n\n    this._readableState.destroyed = value;\n    this._writableState.destroyed = value;\n  }\n});\n\nDuplex.prototype._destroy = function (err, cb) {\n  this.push(null);\n  this.end();\n  pna.nextTick(cb, err);\n};","/*!\n * The buffer module from node.js, for the browser.\n *\n * @author   Feross Aboukhadijeh <feross@feross.org> <http://feross.org>\n * @license  MIT\n */\n\n/* eslint-disable no-proto */\n'use strict';\n\nvar base64 = require('base64-js');\n\nvar ieee754 = require('ieee754');\n\nvar isArray = require('isarray');\n\nexports.Buffer = Buffer;\nexports.SlowBuffer = SlowBuffer;\nexports.INSPECT_MAX_BYTES = 50;\n/**\n * If `Buffer.TYPED_ARRAY_SUPPORT`:\n *   === true    Use Uint8Array implementation (fastest)\n *   === false   Use Object implementation (most compatible, even IE6)\n *\n * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,\n * Opera 11.6+, iOS 4.2+.\n *\n * Due to various browser bugs, sometimes the Object implementation will be used even\n * when the browser supports typed arrays.\n *\n * Note:\n *\n *   - Firefox 4-29 lacks support for adding new properties to `Uint8Array` instances,\n *     See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438.\n *\n *   - Chrome 9-10 is missing the `TypedArray.prototype.subarray` function.\n *\n *   - IE10 has a broken `TypedArray.prototype.subarray` function which returns arrays of\n *     incorrect length in some situations.\n\n * We detect these buggy browsers and set `Buffer.TYPED_ARRAY_SUPPORT` to `false` so they\n * get the Object implementation, which is slower but behaves correctly.\n */\n\nBuffer.TYPED_ARRAY_SUPPORT = global.TYPED_ARRAY_SUPPORT !== undefined ? global.TYPED_ARRAY_SUPPORT : typedArraySupport();\n/*\n * Export kMaxLength after typed array support is determined.\n */\n\nexports.kMaxLength = kMaxLength();\n\nfunction typedArraySupport() {\n  try {\n    var arr = new Uint8Array(1);\n    arr.__proto__ = {\n      __proto__: Uint8Array.prototype,\n      foo: function foo() {\n        return 42;\n      }\n    };\n    return arr.foo() === 42 && // typed array instances can be augmented\n    typeof arr.subarray === 'function' && // chrome 9-10 lack `subarray`\n    arr.subarray(1, 1).byteLength === 0; // ie10 has broken `subarray`\n  } catch (e) {\n    return false;\n  }\n}\n\nfunction kMaxLength() {\n  return Buffer.TYPED_ARRAY_SUPPORT ? 0x7fffffff : 0x3fffffff;\n}\n\nfunction createBuffer(that, length) {\n  if (kMaxLength() < length) {\n    throw new RangeError('Invalid typed array length');\n  }\n\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    // Return an augmented `Uint8Array` instance, for best performance\n    that = new Uint8Array(length);\n    that.__proto__ = Buffer.prototype;\n  } else {\n    // Fallback: Return an object instance of the Buffer class\n    if (that === null) {\n      that = new Buffer(length);\n    }\n\n    that.length = length;\n  }\n\n  return that;\n}\n/**\n * The Buffer constructor returns instances of `Uint8Array` that have their\n * prototype changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of\n * `Uint8Array`, so the returned instances will have all the node `Buffer` methods\n * and the `Uint8Array` methods. Square bracket notation works as expected -- it\n * returns a single octet.\n *\n * The `Uint8Array` prototype remains unmodified.\n */\n\n\nfunction Buffer(arg, encodingOrOffset, length) {\n  if (!Buffer.TYPED_ARRAY_SUPPORT && !(this instanceof Buffer)) {\n    return new Buffer(arg, encodingOrOffset, length);\n  } // Common case.\n\n\n  if (typeof arg === 'number') {\n    if (typeof encodingOrOffset === 'string') {\n      throw new Error('If encoding is specified then the first argument must be a string');\n    }\n\n    return allocUnsafe(this, arg);\n  }\n\n  return from(this, arg, encodingOrOffset, length);\n}\n\nBuffer.poolSize = 8192; // not used by this implementation\n// TODO: Legacy, not needed anymore. Remove in next major version.\n\nBuffer._augment = function (arr) {\n  arr.__proto__ = Buffer.prototype;\n  return arr;\n};\n\nfunction from(that, value, encodingOrOffset, length) {\n  if (typeof value === 'number') {\n    throw new TypeError('\"value\" argument must not be a number');\n  }\n\n  if (typeof ArrayBuffer !== 'undefined' && value instanceof ArrayBuffer) {\n    return fromArrayBuffer(that, value, encodingOrOffset, length);\n  }\n\n  if (typeof value === 'string') {\n    return fromString(that, value, encodingOrOffset);\n  }\n\n  return fromObject(that, value);\n}\n/**\n * Functionally equivalent to Buffer(arg, encoding) but throws a TypeError\n * if value is a number.\n * Buffer.from(str[, encoding])\n * Buffer.from(array)\n * Buffer.from(buffer)\n * Buffer.from(arrayBuffer[, byteOffset[, length]])\n **/\n\n\nBuffer.from = function (value, encodingOrOffset, length) {\n  return from(null, value, encodingOrOffset, length);\n};\n\nif (Buffer.TYPED_ARRAY_SUPPORT) {\n  Buffer.prototype.__proto__ = Uint8Array.prototype;\n  Buffer.__proto__ = Uint8Array;\n\n  if (typeof Symbol !== 'undefined' && Symbol.species && Buffer[Symbol.species] === Buffer) {\n    // Fix subarray() in ES2016. See: https://github.com/feross/buffer/pull/97\n    Object.defineProperty(Buffer, Symbol.species, {\n      value: null,\n      configurable: true\n    });\n  }\n}\n\nfunction assertSize(size) {\n  if (typeof size !== 'number') {\n    throw new TypeError('\"size\" argument must be a number');\n  } else if (size < 0) {\n    throw new RangeError('\"size\" argument must not be negative');\n  }\n}\n\nfunction alloc(that, size, fill, encoding) {\n  assertSize(size);\n\n  if (size <= 0) {\n    return createBuffer(that, size);\n  }\n\n  if (fill !== undefined) {\n    // Only pay attention to encoding if it's a string. This\n    // prevents accidentally sending in a number that would\n    // be interpretted as a start offset.\n    return typeof encoding === 'string' ? createBuffer(that, size).fill(fill, encoding) : createBuffer(that, size).fill(fill);\n  }\n\n  return createBuffer(that, size);\n}\n/**\n * Creates a new filled Buffer instance.\n * alloc(size[, fill[, encoding]])\n **/\n\n\nBuffer.alloc = function (size, fill, encoding) {\n  return alloc(null, size, fill, encoding);\n};\n\nfunction allocUnsafe(that, size) {\n  assertSize(size);\n  that = createBuffer(that, size < 0 ? 0 : checked(size) | 0);\n\n  if (!Buffer.TYPED_ARRAY_SUPPORT) {\n    for (var i = 0; i < size; ++i) {\n      that[i] = 0;\n    }\n  }\n\n  return that;\n}\n/**\n * Equivalent to Buffer(num), by default creates a non-zero-filled Buffer instance.\n * */\n\n\nBuffer.allocUnsafe = function (size) {\n  return allocUnsafe(null, size);\n};\n/**\n * Equivalent to SlowBuffer(num), by default creates a non-zero-filled Buffer instance.\n */\n\n\nBuffer.allocUnsafeSlow = function (size) {\n  return allocUnsafe(null, size);\n};\n\nfunction fromString(that, string, encoding) {\n  if (typeof encoding !== 'string' || encoding === '') {\n    encoding = 'utf8';\n  }\n\n  if (!Buffer.isEncoding(encoding)) {\n    throw new TypeError('\"encoding\" must be a valid string encoding');\n  }\n\n  var length = byteLength(string, encoding) | 0;\n  that = createBuffer(that, length);\n  var actual = that.write(string, encoding);\n\n  if (actual !== length) {\n    // Writing a hex string, for example, that contains invalid characters will\n    // cause everything after the first invalid character to be ignored. (e.g.\n    // 'abxxcd' will be treated as 'ab')\n    that = that.slice(0, actual);\n  }\n\n  return that;\n}\n\nfunction fromArrayLike(that, array) {\n  var length = array.length < 0 ? 0 : checked(array.length) | 0;\n  that = createBuffer(that, length);\n\n  for (var i = 0; i < length; i += 1) {\n    that[i] = array[i] & 255;\n  }\n\n  return that;\n}\n\nfunction fromArrayBuffer(that, array, byteOffset, length) {\n  array.byteLength; // this throws if `array` is not a valid ArrayBuffer\n\n  if (byteOffset < 0 || array.byteLength < byteOffset) {\n    throw new RangeError('\\'offset\\' is out of bounds');\n  }\n\n  if (array.byteLength < byteOffset + (length || 0)) {\n    throw new RangeError('\\'length\\' is out of bounds');\n  }\n\n  if (byteOffset === undefined && length === undefined) {\n    array = new Uint8Array(array);\n  } else if (length === undefined) {\n    array = new Uint8Array(array, byteOffset);\n  } else {\n    array = new Uint8Array(array, byteOffset, length);\n  }\n\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    // Return an augmented `Uint8Array` instance, for best performance\n    that = array;\n    that.__proto__ = Buffer.prototype;\n  } else {\n    // Fallback: Return an object instance of the Buffer class\n    that = fromArrayLike(that, array);\n  }\n\n  return that;\n}\n\nfunction fromObject(that, obj) {\n  if (Buffer.isBuffer(obj)) {\n    var len = checked(obj.length) | 0;\n    that = createBuffer(that, len);\n\n    if (that.length === 0) {\n      return that;\n    }\n\n    obj.copy(that, 0, 0, len);\n    return that;\n  }\n\n  if (obj) {\n    if (typeof ArrayBuffer !== 'undefined' && obj.buffer instanceof ArrayBuffer || 'length' in obj) {\n      if (typeof obj.length !== 'number' || isnan(obj.length)) {\n        return createBuffer(that, 0);\n      }\n\n      return fromArrayLike(that, obj);\n    }\n\n    if (obj.type === 'Buffer' && isArray(obj.data)) {\n      return fromArrayLike(that, obj.data);\n    }\n  }\n\n  throw new TypeError('First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object.');\n}\n\nfunction checked(length) {\n  // Note: cannot use `length < kMaxLength()` here because that fails when\n  // length is NaN (which is otherwise coerced to zero.)\n  if (length >= kMaxLength()) {\n    throw new RangeError('Attempt to allocate Buffer larger than maximum ' + 'size: 0x' + kMaxLength().toString(16) + ' bytes');\n  }\n\n  return length | 0;\n}\n\nfunction SlowBuffer(length) {\n  if (+length != length) {\n    // eslint-disable-line eqeqeq\n    length = 0;\n  }\n\n  return Buffer.alloc(+length);\n}\n\nBuffer.isBuffer = function isBuffer(b) {\n  return !!(b != null && b._isBuffer);\n};\n\nBuffer.compare = function compare(a, b) {\n  if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {\n    throw new TypeError('Arguments must be Buffers');\n  }\n\n  if (a === b) return 0;\n  var x = a.length;\n  var y = b.length;\n\n  for (var i = 0, len = Math.min(x, y); i < len; ++i) {\n    if (a[i] !== b[i]) {\n      x = a[i];\n      y = b[i];\n      break;\n    }\n  }\n\n  if (x < y) return -1;\n  if (y < x) return 1;\n  return 0;\n};\n\nBuffer.isEncoding = function isEncoding(encoding) {\n  switch (String(encoding).toLowerCase()) {\n    case 'hex':\n    case 'utf8':\n    case 'utf-8':\n    case 'ascii':\n    case 'latin1':\n    case 'binary':\n    case 'base64':\n    case 'ucs2':\n    case 'ucs-2':\n    case 'utf16le':\n    case 'utf-16le':\n      return true;\n\n    default:\n      return false;\n  }\n};\n\nBuffer.concat = function concat(list, length) {\n  if (!isArray(list)) {\n    throw new TypeError('\"list\" argument must be an Array of Buffers');\n  }\n\n  if (list.length === 0) {\n    return Buffer.alloc(0);\n  }\n\n  var i;\n\n  if (length === undefined) {\n    length = 0;\n\n    for (i = 0; i < list.length; ++i) {\n      length += list[i].length;\n    }\n  }\n\n  var buffer = Buffer.allocUnsafe(length);\n  var pos = 0;\n\n  for (i = 0; i < list.length; ++i) {\n    var buf = list[i];\n\n    if (!Buffer.isBuffer(buf)) {\n      throw new TypeError('\"list\" argument must be an Array of Buffers');\n    }\n\n    buf.copy(buffer, pos);\n    pos += buf.length;\n  }\n\n  return buffer;\n};\n\nfunction byteLength(string, encoding) {\n  if (Buffer.isBuffer(string)) {\n    return string.length;\n  }\n\n  if (typeof ArrayBuffer !== 'undefined' && typeof ArrayBuffer.isView === 'function' && (ArrayBuffer.isView(string) || string instanceof ArrayBuffer)) {\n    return string.byteLength;\n  }\n\n  if (typeof string !== 'string') {\n    string = '' + string;\n  }\n\n  var len = string.length;\n  if (len === 0) return 0; // Use a for loop to avoid recursion\n\n  var loweredCase = false;\n\n  for (;;) {\n    switch (encoding) {\n      case 'ascii':\n      case 'latin1':\n      case 'binary':\n        return len;\n\n      case 'utf8':\n      case 'utf-8':\n      case undefined:\n        return utf8ToBytes(string).length;\n\n      case 'ucs2':\n      case 'ucs-2':\n      case 'utf16le':\n      case 'utf-16le':\n        return len * 2;\n\n      case 'hex':\n        return len >>> 1;\n\n      case 'base64':\n        return base64ToBytes(string).length;\n\n      default:\n        if (loweredCase) return utf8ToBytes(string).length; // assume utf8\n\n        encoding = ('' + encoding).toLowerCase();\n        loweredCase = true;\n    }\n  }\n}\n\nBuffer.byteLength = byteLength;\n\nfunction slowToString(encoding, start, end) {\n  var loweredCase = false; // No need to verify that \"this.length <= MAX_UINT32\" since it's a read-only\n  // property of a typed array.\n  // This behaves neither like String nor Uint8Array in that we set start/end\n  // to their upper/lower bounds if the value passed is out of range.\n  // undefined is handled specially as per ECMA-262 6th Edition,\n  // Section 13.3.3.7 Runtime Semantics: KeyedBindingInitialization.\n\n  if (start === undefined || start < 0) {\n    start = 0;\n  } // Return early if start > this.length. Done here to prevent potential uint32\n  // coercion fail below.\n\n\n  if (start > this.length) {\n    return '';\n  }\n\n  if (end === undefined || end > this.length) {\n    end = this.length;\n  }\n\n  if (end <= 0) {\n    return '';\n  } // Force coersion to uint32. This will also coerce falsey/NaN values to 0.\n\n\n  end >>>= 0;\n  start >>>= 0;\n\n  if (end <= start) {\n    return '';\n  }\n\n  if (!encoding) encoding = 'utf8';\n\n  while (true) {\n    switch (encoding) {\n      case 'hex':\n        return hexSlice(this, start, end);\n\n      case 'utf8':\n      case 'utf-8':\n        return utf8Slice(this, start, end);\n\n      case 'ascii':\n        return asciiSlice(this, start, end);\n\n      case 'latin1':\n      case 'binary':\n        return latin1Slice(this, start, end);\n\n      case 'base64':\n        return base64Slice(this, start, end);\n\n      case 'ucs2':\n      case 'ucs-2':\n      case 'utf16le':\n      case 'utf-16le':\n        return utf16leSlice(this, start, end);\n\n      default:\n        if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding);\n        encoding = (encoding + '').toLowerCase();\n        loweredCase = true;\n    }\n  }\n} // The property is used by `Buffer.isBuffer` and `is-buffer` (in Safari 5-7) to detect\n// Buffer instances.\n\n\nBuffer.prototype._isBuffer = true;\n\nfunction swap(b, n, m) {\n  var i = b[n];\n  b[n] = b[m];\n  b[m] = i;\n}\n\nBuffer.prototype.swap16 = function swap16() {\n  var len = this.length;\n\n  if (len % 2 !== 0) {\n    throw new RangeError('Buffer size must be a multiple of 16-bits');\n  }\n\n  for (var i = 0; i < len; i += 2) {\n    swap(this, i, i + 1);\n  }\n\n  return this;\n};\n\nBuffer.prototype.swap32 = function swap32() {\n  var len = this.length;\n\n  if (len % 4 !== 0) {\n    throw new RangeError('Buffer size must be a multiple of 32-bits');\n  }\n\n  for (var i = 0; i < len; i += 4) {\n    swap(this, i, i + 3);\n    swap(this, i + 1, i + 2);\n  }\n\n  return this;\n};\n\nBuffer.prototype.swap64 = function swap64() {\n  var len = this.length;\n\n  if (len % 8 !== 0) {\n    throw new RangeError('Buffer size must be a multiple of 64-bits');\n  }\n\n  for (var i = 0; i < len; i += 8) {\n    swap(this, i, i + 7);\n    swap(this, i + 1, i + 6);\n    swap(this, i + 2, i + 5);\n    swap(this, i + 3, i + 4);\n  }\n\n  return this;\n};\n\nBuffer.prototype.toString = function toString() {\n  var length = this.length | 0;\n  if (length === 0) return '';\n  if (arguments.length === 0) return utf8Slice(this, 0, length);\n  return slowToString.apply(this, arguments);\n};\n\nBuffer.prototype.equals = function equals(b) {\n  if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer');\n  if (this === b) return true;\n  return Buffer.compare(this, b) === 0;\n};\n\nBuffer.prototype.inspect = function inspect() {\n  var str = '';\n  var max = exports.INSPECT_MAX_BYTES;\n\n  if (this.length > 0) {\n    str = this.toString('hex', 0, max).match(/.{2}/g).join(' ');\n    if (this.length > max) str += ' ... ';\n  }\n\n  return '<Buffer ' + str + '>';\n};\n\nBuffer.prototype.compare = function compare(target, start, end, thisStart, thisEnd) {\n  if (!Buffer.isBuffer(target)) {\n    throw new TypeError('Argument must be a Buffer');\n  }\n\n  if (start === undefined) {\n    start = 0;\n  }\n\n  if (end === undefined) {\n    end = target ? target.length : 0;\n  }\n\n  if (thisStart === undefined) {\n    thisStart = 0;\n  }\n\n  if (thisEnd === undefined) {\n    thisEnd = this.length;\n  }\n\n  if (start < 0 || end > target.length || thisStart < 0 || thisEnd > this.length) {\n    throw new RangeError('out of range index');\n  }\n\n  if (thisStart >= thisEnd && start >= end) {\n    return 0;\n  }\n\n  if (thisStart >= thisEnd) {\n    return -1;\n  }\n\n  if (start >= end) {\n    return 1;\n  }\n\n  start >>>= 0;\n  end >>>= 0;\n  thisStart >>>= 0;\n  thisEnd >>>= 0;\n  if (this === target) return 0;\n  var x = thisEnd - thisStart;\n  var y = end - start;\n  var len = Math.min(x, y);\n  var thisCopy = this.slice(thisStart, thisEnd);\n  var targetCopy = target.slice(start, end);\n\n  for (var i = 0; i < len; ++i) {\n    if (thisCopy[i] !== targetCopy[i]) {\n      x = thisCopy[i];\n      y = targetCopy[i];\n      break;\n    }\n  }\n\n  if (x < y) return -1;\n  if (y < x) return 1;\n  return 0;\n}; // Finds either the first index of `val` in `buffer` at offset >= `byteOffset`,\n// OR the last index of `val` in `buffer` at offset <= `byteOffset`.\n//\n// Arguments:\n// - buffer - a Buffer to search\n// - val - a string, Buffer, or number\n// - byteOffset - an index into `buffer`; will be clamped to an int32\n// - encoding - an optional encoding, relevant is val is a string\n// - dir - true for indexOf, false for lastIndexOf\n\n\nfunction bidirectionalIndexOf(buffer, val, byteOffset, encoding, dir) {\n  // Empty buffer means no match\n  if (buffer.length === 0) return -1; // Normalize byteOffset\n\n  if (typeof byteOffset === 'string') {\n    encoding = byteOffset;\n    byteOffset = 0;\n  } else if (byteOffset > 0x7fffffff) {\n    byteOffset = 0x7fffffff;\n  } else if (byteOffset < -0x80000000) {\n    byteOffset = -0x80000000;\n  }\n\n  byteOffset = +byteOffset; // Coerce to Number.\n\n  if (isNaN(byteOffset)) {\n    // byteOffset: it it's undefined, null, NaN, \"foo\", etc, search whole buffer\n    byteOffset = dir ? 0 : buffer.length - 1;\n  } // Normalize byteOffset: negative offsets start from the end of the buffer\n\n\n  if (byteOffset < 0) byteOffset = buffer.length + byteOffset;\n\n  if (byteOffset >= buffer.length) {\n    if (dir) return -1;else byteOffset = buffer.length - 1;\n  } else if (byteOffset < 0) {\n    if (dir) byteOffset = 0;else return -1;\n  } // Normalize val\n\n\n  if (typeof val === 'string') {\n    val = Buffer.from(val, encoding);\n  } // Finally, search either indexOf (if dir is true) or lastIndexOf\n\n\n  if (Buffer.isBuffer(val)) {\n    // Special case: looking for empty string/buffer always fails\n    if (val.length === 0) {\n      return -1;\n    }\n\n    return arrayIndexOf(buffer, val, byteOffset, encoding, dir);\n  } else if (typeof val === 'number') {\n    val = val & 0xFF; // Search for a byte value [0-255]\n\n    if (Buffer.TYPED_ARRAY_SUPPORT && typeof Uint8Array.prototype.indexOf === 'function') {\n      if (dir) {\n        return Uint8Array.prototype.indexOf.call(buffer, val, byteOffset);\n      } else {\n        return Uint8Array.prototype.lastIndexOf.call(buffer, val, byteOffset);\n      }\n    }\n\n    return arrayIndexOf(buffer, [val], byteOffset, encoding, dir);\n  }\n\n  throw new TypeError('val must be string, number or Buffer');\n}\n\nfunction arrayIndexOf(arr, val, byteOffset, encoding, dir) {\n  var indexSize = 1;\n  var arrLength = arr.length;\n  var valLength = val.length;\n\n  if (encoding !== undefined) {\n    encoding = String(encoding).toLowerCase();\n\n    if (encoding === 'ucs2' || encoding === 'ucs-2' || encoding === 'utf16le' || encoding === 'utf-16le') {\n      if (arr.length < 2 || val.length < 2) {\n        return -1;\n      }\n\n      indexSize = 2;\n      arrLength /= 2;\n      valLength /= 2;\n      byteOffset /= 2;\n    }\n  }\n\n  function read(buf, i) {\n    if (indexSize === 1) {\n      return buf[i];\n    } else {\n      return buf.readUInt16BE(i * indexSize);\n    }\n  }\n\n  var i;\n\n  if (dir) {\n    var foundIndex = -1;\n\n    for (i = byteOffset; i < arrLength; i++) {\n      if (read(arr, i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)) {\n        if (foundIndex === -1) foundIndex = i;\n        if (i - foundIndex + 1 === valLength) return foundIndex * indexSize;\n      } else {\n        if (foundIndex !== -1) i -= i - foundIndex;\n        foundIndex = -1;\n      }\n    }\n  } else {\n    if (byteOffset + valLength > arrLength) byteOffset = arrLength - valLength;\n\n    for (i = byteOffset; i >= 0; i--) {\n      var found = true;\n\n      for (var j = 0; j < valLength; j++) {\n        if (read(arr, i + j) !== read(val, j)) {\n          found = false;\n          break;\n        }\n      }\n\n      if (found) return i;\n    }\n  }\n\n  return -1;\n}\n\nBuffer.prototype.includes = function includes(val, byteOffset, encoding) {\n  return this.indexOf(val, byteOffset, encoding) !== -1;\n};\n\nBuffer.prototype.indexOf = function indexOf(val, byteOffset, encoding) {\n  return bidirectionalIndexOf(this, val, byteOffset, encoding, true);\n};\n\nBuffer.prototype.lastIndexOf = function lastIndexOf(val, byteOffset, encoding) {\n  return bidirectionalIndexOf(this, val, byteOffset, encoding, false);\n};\n\nfunction hexWrite(buf, string, offset, length) {\n  offset = Number(offset) || 0;\n  var remaining = buf.length - offset;\n\n  if (!length) {\n    length = remaining;\n  } else {\n    length = Number(length);\n\n    if (length > remaining) {\n      length = remaining;\n    }\n  } // must be an even number of digits\n\n\n  var strLen = string.length;\n  if (strLen % 2 !== 0) throw new TypeError('Invalid hex string');\n\n  if (length > strLen / 2) {\n    length = strLen / 2;\n  }\n\n  for (var i = 0; i < length; ++i) {\n    var parsed = parseInt(string.substr(i * 2, 2), 16);\n    if (isNaN(parsed)) return i;\n    buf[offset + i] = parsed;\n  }\n\n  return i;\n}\n\nfunction utf8Write(buf, string, offset, length) {\n  return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length);\n}\n\nfunction asciiWrite(buf, string, offset, length) {\n  return blitBuffer(asciiToBytes(string), buf, offset, length);\n}\n\nfunction latin1Write(buf, string, offset, length) {\n  return asciiWrite(buf, string, offset, length);\n}\n\nfunction base64Write(buf, string, offset, length) {\n  return blitBuffer(base64ToBytes(string), buf, offset, length);\n}\n\nfunction ucs2Write(buf, string, offset, length) {\n  return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length);\n}\n\nBuffer.prototype.write = function write(string, offset, length, encoding) {\n  // Buffer#write(string)\n  if (offset === undefined) {\n    encoding = 'utf8';\n    length = this.length;\n    offset = 0; // Buffer#write(string, encoding)\n  } else if (length === undefined && typeof offset === 'string') {\n    encoding = offset;\n    length = this.length;\n    offset = 0; // Buffer#write(string, offset[, length][, encoding])\n  } else if (isFinite(offset)) {\n    offset = offset | 0;\n\n    if (isFinite(length)) {\n      length = length | 0;\n      if (encoding === undefined) encoding = 'utf8';\n    } else {\n      encoding = length;\n      length = undefined;\n    } // legacy write(string, encoding, offset, length) - remove in v0.13\n\n  } else {\n    throw new Error('Buffer.write(string, encoding, offset[, length]) is no longer supported');\n  }\n\n  var remaining = this.length - offset;\n  if (length === undefined || length > remaining) length = remaining;\n\n  if (string.length > 0 && (length < 0 || offset < 0) || offset > this.length) {\n    throw new RangeError('Attempt to write outside buffer bounds');\n  }\n\n  if (!encoding) encoding = 'utf8';\n  var loweredCase = false;\n\n  for (;;) {\n    switch (encoding) {\n      case 'hex':\n        return hexWrite(this, string, offset, length);\n\n      case 'utf8':\n      case 'utf-8':\n        return utf8Write(this, string, offset, length);\n\n      case 'ascii':\n        return asciiWrite(this, string, offset, length);\n\n      case 'latin1':\n      case 'binary':\n        return latin1Write(this, string, offset, length);\n\n      case 'base64':\n        // Warning: maxLength not taken into account in base64Write\n        return base64Write(this, string, offset, length);\n\n      case 'ucs2':\n      case 'ucs-2':\n      case 'utf16le':\n      case 'utf-16le':\n        return ucs2Write(this, string, offset, length);\n\n      default:\n        if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding);\n        encoding = ('' + encoding).toLowerCase();\n        loweredCase = true;\n    }\n  }\n};\n\nBuffer.prototype.toJSON = function toJSON() {\n  return {\n    type: 'Buffer',\n    data: Array.prototype.slice.call(this._arr || this, 0)\n  };\n};\n\nfunction base64Slice(buf, start, end) {\n  if (start === 0 && end === buf.length) {\n    return base64.fromByteArray(buf);\n  } else {\n    return base64.fromByteArray(buf.slice(start, end));\n  }\n}\n\nfunction utf8Slice(buf, start, end) {\n  end = Math.min(buf.length, end);\n  var res = [];\n  var i = start;\n\n  while (i < end) {\n    var firstByte = buf[i];\n    var codePoint = null;\n    var bytesPerSequence = firstByte > 0xEF ? 4 : firstByte > 0xDF ? 3 : firstByte > 0xBF ? 2 : 1;\n\n    if (i + bytesPerSequence <= end) {\n      var secondByte, thirdByte, fourthByte, tempCodePoint;\n\n      switch (bytesPerSequence) {\n        case 1:\n          if (firstByte < 0x80) {\n            codePoint = firstByte;\n          }\n\n          break;\n\n        case 2:\n          secondByte = buf[i + 1];\n\n          if ((secondByte & 0xC0) === 0x80) {\n            tempCodePoint = (firstByte & 0x1F) << 0x6 | secondByte & 0x3F;\n\n            if (tempCodePoint > 0x7F) {\n              codePoint = tempCodePoint;\n            }\n          }\n\n          break;\n\n        case 3:\n          secondByte = buf[i + 1];\n          thirdByte = buf[i + 2];\n\n          if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) {\n            tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | thirdByte & 0x3F;\n\n            if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) {\n              codePoint = tempCodePoint;\n            }\n          }\n\n          break;\n\n        case 4:\n          secondByte = buf[i + 1];\n          thirdByte = buf[i + 2];\n          fourthByte = buf[i + 3];\n\n          if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) {\n            tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | fourthByte & 0x3F;\n\n            if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) {\n              codePoint = tempCodePoint;\n            }\n          }\n\n      }\n    }\n\n    if (codePoint === null) {\n      // we did not generate a valid codePoint so insert a\n      // replacement char (U+FFFD) and advance only 1 byte\n      codePoint = 0xFFFD;\n      bytesPerSequence = 1;\n    } else if (codePoint > 0xFFFF) {\n      // encode to utf16 (surrogate pair dance)\n      codePoint -= 0x10000;\n      res.push(codePoint >>> 10 & 0x3FF | 0xD800);\n      codePoint = 0xDC00 | codePoint & 0x3FF;\n    }\n\n    res.push(codePoint);\n    i += bytesPerSequence;\n  }\n\n  return decodeCodePointsArray(res);\n} // Based on http://stackoverflow.com/a/22747272/680742, the browser with\n// the lowest limit is Chrome, with 0x10000 args.\n// We go 1 magnitude less, for safety\n\n\nvar MAX_ARGUMENTS_LENGTH = 0x1000;\n\nfunction decodeCodePointsArray(codePoints) {\n  var len = codePoints.length;\n\n  if (len <= MAX_ARGUMENTS_LENGTH) {\n    return String.fromCharCode.apply(String, codePoints); // avoid extra slice()\n  } // Decode in chunks to avoid \"call stack size exceeded\".\n\n\n  var res = '';\n  var i = 0;\n\n  while (i < len) {\n    res += String.fromCharCode.apply(String, codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH));\n  }\n\n  return res;\n}\n\nfunction asciiSlice(buf, start, end) {\n  var ret = '';\n  end = Math.min(buf.length, end);\n\n  for (var i = start; i < end; ++i) {\n    ret += String.fromCharCode(buf[i] & 0x7F);\n  }\n\n  return ret;\n}\n\nfunction latin1Slice(buf, start, end) {\n  var ret = '';\n  end = Math.min(buf.length, end);\n\n  for (var i = start; i < end; ++i) {\n    ret += String.fromCharCode(buf[i]);\n  }\n\n  return ret;\n}\n\nfunction hexSlice(buf, start, end) {\n  var len = buf.length;\n  if (!start || start < 0) start = 0;\n  if (!end || end < 0 || end > len) end = len;\n  var out = '';\n\n  for (var i = start; i < end; ++i) {\n    out += toHex(buf[i]);\n  }\n\n  return out;\n}\n\nfunction utf16leSlice(buf, start, end) {\n  var bytes = buf.slice(start, end);\n  var res = '';\n\n  for (var i = 0; i < bytes.length; i += 2) {\n    res += String.fromCharCode(bytes[i] + bytes[i + 1] * 256);\n  }\n\n  return res;\n}\n\nBuffer.prototype.slice = function slice(start, end) {\n  var len = this.length;\n  start = ~~start;\n  end = end === undefined ? len : ~~end;\n\n  if (start < 0) {\n    start += len;\n    if (start < 0) start = 0;\n  } else if (start > len) {\n    start = len;\n  }\n\n  if (end < 0) {\n    end += len;\n    if (end < 0) end = 0;\n  } else if (end > len) {\n    end = len;\n  }\n\n  if (end < start) end = start;\n  var newBuf;\n\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    newBuf = this.subarray(start, end);\n    newBuf.__proto__ = Buffer.prototype;\n  } else {\n    var sliceLen = end - start;\n    newBuf = new Buffer(sliceLen, undefined);\n\n    for (var i = 0; i < sliceLen; ++i) {\n      newBuf[i] = this[i + start];\n    }\n  }\n\n  return newBuf;\n};\n/*\n * Need to make sure that buffer isn't trying to write out of bounds.\n */\n\n\nfunction checkOffset(offset, ext, length) {\n  if (offset % 1 !== 0 || offset < 0) throw new RangeError('offset is not uint');\n  if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length');\n}\n\nBuffer.prototype.readUIntLE = function readUIntLE(offset, byteLength, noAssert) {\n  offset = offset | 0;\n  byteLength = byteLength | 0;\n  if (!noAssert) checkOffset(offset, byteLength, this.length);\n  var val = this[offset];\n  var mul = 1;\n  var i = 0;\n\n  while (++i < byteLength && (mul *= 0x100)) {\n    val += this[offset + i] * mul;\n  }\n\n  return val;\n};\n\nBuffer.prototype.readUIntBE = function readUIntBE(offset, byteLength, noAssert) {\n  offset = offset | 0;\n  byteLength = byteLength | 0;\n\n  if (!noAssert) {\n    checkOffset(offset, byteLength, this.length);\n  }\n\n  var val = this[offset + --byteLength];\n  var mul = 1;\n\n  while (byteLength > 0 && (mul *= 0x100)) {\n    val += this[offset + --byteLength] * mul;\n  }\n\n  return val;\n};\n\nBuffer.prototype.readUInt8 = function readUInt8(offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 1, this.length);\n  return this[offset];\n};\n\nBuffer.prototype.readUInt16LE = function readUInt16LE(offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 2, this.length);\n  return this[offset] | this[offset + 1] << 8;\n};\n\nBuffer.prototype.readUInt16BE = function readUInt16BE(offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 2, this.length);\n  return this[offset] << 8 | this[offset + 1];\n};\n\nBuffer.prototype.readUInt32LE = function readUInt32LE(offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 4, this.length);\n  return (this[offset] | this[offset + 1] << 8 | this[offset + 2] << 16) + this[offset + 3] * 0x1000000;\n};\n\nBuffer.prototype.readUInt32BE = function readUInt32BE(offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 4, this.length);\n  return this[offset] * 0x1000000 + (this[offset + 1] << 16 | this[offset + 2] << 8 | this[offset + 3]);\n};\n\nBuffer.prototype.readIntLE = function readIntLE(offset, byteLength, noAssert) {\n  offset = offset | 0;\n  byteLength = byteLength | 0;\n  if (!noAssert) checkOffset(offset, byteLength, this.length);\n  var val = this[offset];\n  var mul = 1;\n  var i = 0;\n\n  while (++i < byteLength && (mul *= 0x100)) {\n    val += this[offset + i] * mul;\n  }\n\n  mul *= 0x80;\n  if (val >= mul) val -= Math.pow(2, 8 * byteLength);\n  return val;\n};\n\nBuffer.prototype.readIntBE = function readIntBE(offset, byteLength, noAssert) {\n  offset = offset | 0;\n  byteLength = byteLength | 0;\n  if (!noAssert) checkOffset(offset, byteLength, this.length);\n  var i = byteLength;\n  var mul = 1;\n  var val = this[offset + --i];\n\n  while (i > 0 && (mul *= 0x100)) {\n    val += this[offset + --i] * mul;\n  }\n\n  mul *= 0x80;\n  if (val >= mul) val -= Math.pow(2, 8 * byteLength);\n  return val;\n};\n\nBuffer.prototype.readInt8 = function readInt8(offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 1, this.length);\n  if (!(this[offset] & 0x80)) return this[offset];\n  return (0xff - this[offset] + 1) * -1;\n};\n\nBuffer.prototype.readInt16LE = function readInt16LE(offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 2, this.length);\n  var val = this[offset] | this[offset + 1] << 8;\n  return val & 0x8000 ? val | 0xFFFF0000 : val;\n};\n\nBuffer.prototype.readInt16BE = function readInt16BE(offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 2, this.length);\n  var val = this[offset + 1] | this[offset] << 8;\n  return val & 0x8000 ? val | 0xFFFF0000 : val;\n};\n\nBuffer.prototype.readInt32LE = function readInt32LE(offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 4, this.length);\n  return this[offset] | this[offset + 1] << 8 | this[offset + 2] << 16 | this[offset + 3] << 24;\n};\n\nBuffer.prototype.readInt32BE = function readInt32BE(offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 4, this.length);\n  return this[offset] << 24 | this[offset + 1] << 16 | this[offset + 2] << 8 | this[offset + 3];\n};\n\nBuffer.prototype.readFloatLE = function readFloatLE(offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 4, this.length);\n  return ieee754.read(this, offset, true, 23, 4);\n};\n\nBuffer.prototype.readFloatBE = function readFloatBE(offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 4, this.length);\n  return ieee754.read(this, offset, false, 23, 4);\n};\n\nBuffer.prototype.readDoubleLE = function readDoubleLE(offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 8, this.length);\n  return ieee754.read(this, offset, true, 52, 8);\n};\n\nBuffer.prototype.readDoubleBE = function readDoubleBE(offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 8, this.length);\n  return ieee754.read(this, offset, false, 52, 8);\n};\n\nfunction checkInt(buf, value, offset, ext, max, min) {\n  if (!Buffer.isBuffer(buf)) throw new TypeError('\"buffer\" argument must be a Buffer instance');\n  if (value > max || value < min) throw new RangeError('\"value\" argument is out of bounds');\n  if (offset + ext > buf.length) throw new RangeError('Index out of range');\n}\n\nBuffer.prototype.writeUIntLE = function writeUIntLE(value, offset, byteLength, noAssert) {\n  value = +value;\n  offset = offset | 0;\n  byteLength = byteLength | 0;\n\n  if (!noAssert) {\n    var maxBytes = Math.pow(2, 8 * byteLength) - 1;\n    checkInt(this, value, offset, byteLength, maxBytes, 0);\n  }\n\n  var mul = 1;\n  var i = 0;\n  this[offset] = value & 0xFF;\n\n  while (++i < byteLength && (mul *= 0x100)) {\n    this[offset + i] = value / mul & 0xFF;\n  }\n\n  return offset + byteLength;\n};\n\nBuffer.prototype.writeUIntBE = function writeUIntBE(value, offset, byteLength, noAssert) {\n  value = +value;\n  offset = offset | 0;\n  byteLength = byteLength | 0;\n\n  if (!noAssert) {\n    var maxBytes = Math.pow(2, 8 * byteLength) - 1;\n    checkInt(this, value, offset, byteLength, maxBytes, 0);\n  }\n\n  var i = byteLength - 1;\n  var mul = 1;\n  this[offset + i] = value & 0xFF;\n\n  while (--i >= 0 && (mul *= 0x100)) {\n    this[offset + i] = value / mul & 0xFF;\n  }\n\n  return offset + byteLength;\n};\n\nBuffer.prototype.writeUInt8 = function writeUInt8(value, offset, noAssert) {\n  value = +value;\n  offset = offset | 0;\n  if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0);\n  if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value);\n  this[offset] = value & 0xff;\n  return offset + 1;\n};\n\nfunction objectWriteUInt16(buf, value, offset, littleEndian) {\n  if (value < 0) value = 0xffff + value + 1;\n\n  for (var i = 0, j = Math.min(buf.length - offset, 2); i < j; ++i) {\n    buf[offset + i] = (value & 0xff << 8 * (littleEndian ? i : 1 - i)) >>> (littleEndian ? i : 1 - i) * 8;\n  }\n}\n\nBuffer.prototype.writeUInt16LE = function writeUInt16LE(value, offset, noAssert) {\n  value = +value;\n  offset = offset | 0;\n  if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0);\n\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    this[offset] = value & 0xff;\n    this[offset + 1] = value >>> 8;\n  } else {\n    objectWriteUInt16(this, value, offset, true);\n  }\n\n  return offset + 2;\n};\n\nBuffer.prototype.writeUInt16BE = function writeUInt16BE(value, offset, noAssert) {\n  value = +value;\n  offset = offset | 0;\n  if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0);\n\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    this[offset] = value >>> 8;\n    this[offset + 1] = value & 0xff;\n  } else {\n    objectWriteUInt16(this, value, offset, false);\n  }\n\n  return offset + 2;\n};\n\nfunction objectWriteUInt32(buf, value, offset, littleEndian) {\n  if (value < 0) value = 0xffffffff + value + 1;\n\n  for (var i = 0, j = Math.min(buf.length - offset, 4); i < j; ++i) {\n    buf[offset + i] = value >>> (littleEndian ? i : 3 - i) * 8 & 0xff;\n  }\n}\n\nBuffer.prototype.writeUInt32LE = function writeUInt32LE(value, offset, noAssert) {\n  value = +value;\n  offset = offset | 0;\n  if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0);\n\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    this[offset + 3] = value >>> 24;\n    this[offset + 2] = value >>> 16;\n    this[offset + 1] = value >>> 8;\n    this[offset] = value & 0xff;\n  } else {\n    objectWriteUInt32(this, value, offset, true);\n  }\n\n  return offset + 4;\n};\n\nBuffer.prototype.writeUInt32BE = function writeUInt32BE(value, offset, noAssert) {\n  value = +value;\n  offset = offset | 0;\n  if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0);\n\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    this[offset] = value >>> 24;\n    this[offset + 1] = value >>> 16;\n    this[offset + 2] = value >>> 8;\n    this[offset + 3] = value & 0xff;\n  } else {\n    objectWriteUInt32(this, value, offset, false);\n  }\n\n  return offset + 4;\n};\n\nBuffer.prototype.writeIntLE = function writeIntLE(value, offset, byteLength, noAssert) {\n  value = +value;\n  offset = offset | 0;\n\n  if (!noAssert) {\n    var limit = Math.pow(2, 8 * byteLength - 1);\n    checkInt(this, value, offset, byteLength, limit - 1, -limit);\n  }\n\n  var i = 0;\n  var mul = 1;\n  var sub = 0;\n  this[offset] = value & 0xFF;\n\n  while (++i < byteLength && (mul *= 0x100)) {\n    if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) {\n      sub = 1;\n    }\n\n    this[offset + i] = (value / mul >> 0) - sub & 0xFF;\n  }\n\n  return offset + byteLength;\n};\n\nBuffer.prototype.writeIntBE = function writeIntBE(value, offset, byteLength, noAssert) {\n  value = +value;\n  offset = offset | 0;\n\n  if (!noAssert) {\n    var limit = Math.pow(2, 8 * byteLength - 1);\n    checkInt(this, value, offset, byteLength, limit - 1, -limit);\n  }\n\n  var i = byteLength - 1;\n  var mul = 1;\n  var sub = 0;\n  this[offset + i] = value & 0xFF;\n\n  while (--i >= 0 && (mul *= 0x100)) {\n    if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) {\n      sub = 1;\n    }\n\n    this[offset + i] = (value / mul >> 0) - sub & 0xFF;\n  }\n\n  return offset + byteLength;\n};\n\nBuffer.prototype.writeInt8 = function writeInt8(value, offset, noAssert) {\n  value = +value;\n  offset = offset | 0;\n  if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80);\n  if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value);\n  if (value < 0) value = 0xff + value + 1;\n  this[offset] = value & 0xff;\n  return offset + 1;\n};\n\nBuffer.prototype.writeInt16LE = function writeInt16LE(value, offset, noAssert) {\n  value = +value;\n  offset = offset | 0;\n  if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000);\n\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    this[offset] = value & 0xff;\n    this[offset + 1] = value >>> 8;\n  } else {\n    objectWriteUInt16(this, value, offset, true);\n  }\n\n  return offset + 2;\n};\n\nBuffer.prototype.writeInt16BE = function writeInt16BE(value, offset, noAssert) {\n  value = +value;\n  offset = offset | 0;\n  if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000);\n\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    this[offset] = value >>> 8;\n    this[offset + 1] = value & 0xff;\n  } else {\n    objectWriteUInt16(this, value, offset, false);\n  }\n\n  return offset + 2;\n};\n\nBuffer.prototype.writeInt32LE = function writeInt32LE(value, offset, noAssert) {\n  value = +value;\n  offset = offset | 0;\n  if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000);\n\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    this[offset] = value & 0xff;\n    this[offset + 1] = value >>> 8;\n    this[offset + 2] = value >>> 16;\n    this[offset + 3] = value >>> 24;\n  } else {\n    objectWriteUInt32(this, value, offset, true);\n  }\n\n  return offset + 4;\n};\n\nBuffer.prototype.writeInt32BE = function writeInt32BE(value, offset, noAssert) {\n  value = +value;\n  offset = offset | 0;\n  if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000);\n  if (value < 0) value = 0xffffffff + value + 1;\n\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    this[offset] = value >>> 24;\n    this[offset + 1] = value >>> 16;\n    this[offset + 2] = value >>> 8;\n    this[offset + 3] = value & 0xff;\n  } else {\n    objectWriteUInt32(this, value, offset, false);\n  }\n\n  return offset + 4;\n};\n\nfunction checkIEEE754(buf, value, offset, ext, max, min) {\n  if (offset + ext > buf.length) throw new RangeError('Index out of range');\n  if (offset < 0) throw new RangeError('Index out of range');\n}\n\nfunction writeFloat(buf, value, offset, littleEndian, noAssert) {\n  if (!noAssert) {\n    checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38);\n  }\n\n  ieee754.write(buf, value, offset, littleEndian, 23, 4);\n  return offset + 4;\n}\n\nBuffer.prototype.writeFloatLE = function writeFloatLE(value, offset, noAssert) {\n  return writeFloat(this, value, offset, true, noAssert);\n};\n\nBuffer.prototype.writeFloatBE = function writeFloatBE(value, offset, noAssert) {\n  return writeFloat(this, value, offset, false, noAssert);\n};\n\nfunction writeDouble(buf, value, offset, littleEndian, noAssert) {\n  if (!noAssert) {\n    checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308);\n  }\n\n  ieee754.write(buf, value, offset, littleEndian, 52, 8);\n  return offset + 8;\n}\n\nBuffer.prototype.writeDoubleLE = function writeDoubleLE(value, offset, noAssert) {\n  return writeDouble(this, value, offset, true, noAssert);\n};\n\nBuffer.prototype.writeDoubleBE = function writeDoubleBE(value, offset, noAssert) {\n  return writeDouble(this, value, offset, false, noAssert);\n}; // copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)\n\n\nBuffer.prototype.copy = function copy(target, targetStart, start, end) {\n  if (!start) start = 0;\n  if (!end && end !== 0) end = this.length;\n  if (targetStart >= target.length) targetStart = target.length;\n  if (!targetStart) targetStart = 0;\n  if (end > 0 && end < start) end = start; // Copy 0 bytes; we're done\n\n  if (end === start) return 0;\n  if (target.length === 0 || this.length === 0) return 0; // Fatal error conditions\n\n  if (targetStart < 0) {\n    throw new RangeError('targetStart out of bounds');\n  }\n\n  if (start < 0 || start >= this.length) throw new RangeError('sourceStart out of bounds');\n  if (end < 0) throw new RangeError('sourceEnd out of bounds'); // Are we oob?\n\n  if (end > this.length) end = this.length;\n\n  if (target.length - targetStart < end - start) {\n    end = target.length - targetStart + start;\n  }\n\n  var len = end - start;\n  var i;\n\n  if (this === target && start < targetStart && targetStart < end) {\n    // descending copy from end\n    for (i = len - 1; i >= 0; --i) {\n      target[i + targetStart] = this[i + start];\n    }\n  } else if (len < 1000 || !Buffer.TYPED_ARRAY_SUPPORT) {\n    // ascending copy from start\n    for (i = 0; i < len; ++i) {\n      target[i + targetStart] = this[i + start];\n    }\n  } else {\n    Uint8Array.prototype.set.call(target, this.subarray(start, start + len), targetStart);\n  }\n\n  return len;\n}; // Usage:\n//    buffer.fill(number[, offset[, end]])\n//    buffer.fill(buffer[, offset[, end]])\n//    buffer.fill(string[, offset[, end]][, encoding])\n\n\nBuffer.prototype.fill = function fill(val, start, end, encoding) {\n  // Handle string cases:\n  if (typeof val === 'string') {\n    if (typeof start === 'string') {\n      encoding = start;\n      start = 0;\n      end = this.length;\n    } else if (typeof end === 'string') {\n      encoding = end;\n      end = this.length;\n    }\n\n    if (val.length === 1) {\n      var code = val.charCodeAt(0);\n\n      if (code < 256) {\n        val = code;\n      }\n    }\n\n    if (encoding !== undefined && typeof encoding !== 'string') {\n      throw new TypeError('encoding must be a string');\n    }\n\n    if (typeof encoding === 'string' && !Buffer.isEncoding(encoding)) {\n      throw new TypeError('Unknown encoding: ' + encoding);\n    }\n  } else if (typeof val === 'number') {\n    val = val & 255;\n  } // Invalid ranges are not set to a default, so can range check early.\n\n\n  if (start < 0 || this.length < start || this.length < end) {\n    throw new RangeError('Out of range index');\n  }\n\n  if (end <= start) {\n    return this;\n  }\n\n  start = start >>> 0;\n  end = end === undefined ? this.length : end >>> 0;\n  if (!val) val = 0;\n  var i;\n\n  if (typeof val === 'number') {\n    for (i = start; i < end; ++i) {\n      this[i] = val;\n    }\n  } else {\n    var bytes = Buffer.isBuffer(val) ? val : utf8ToBytes(new Buffer(val, encoding).toString());\n    var len = bytes.length;\n\n    for (i = 0; i < end - start; ++i) {\n      this[i + start] = bytes[i % len];\n    }\n  }\n\n  return this;\n}; // HELPER FUNCTIONS\n// ================\n\n\nvar INVALID_BASE64_RE = /[^+\\/0-9A-Za-z-_]/g;\n\nfunction base64clean(str) {\n  // Node strips out invalid characters like \\n and \\t from the string, base64-js does not\n  str = stringtrim(str).replace(INVALID_BASE64_RE, ''); // Node converts strings with length < 2 to ''\n\n  if (str.length < 2) return ''; // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not\n\n  while (str.length % 4 !== 0) {\n    str = str + '=';\n  }\n\n  return str;\n}\n\nfunction stringtrim(str) {\n  if (str.trim) return str.trim();\n  return str.replace(/^\\s+|\\s+$/g, '');\n}\n\nfunction toHex(n) {\n  if (n < 16) return '0' + n.toString(16);\n  return n.toString(16);\n}\n\nfunction utf8ToBytes(string, units) {\n  units = units || Infinity;\n  var codePoint;\n  var length = string.length;\n  var leadSurrogate = null;\n  var bytes = [];\n\n  for (var i = 0; i < length; ++i) {\n    codePoint = string.charCodeAt(i); // is surrogate component\n\n    if (codePoint > 0xD7FF && codePoint < 0xE000) {\n      // last char was a lead\n      if (!leadSurrogate) {\n        // no lead yet\n        if (codePoint > 0xDBFF) {\n          // unexpected trail\n          if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD);\n          continue;\n        } else if (i + 1 === length) {\n          // unpaired lead\n          if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD);\n          continue;\n        } // valid lead\n\n\n        leadSurrogate = codePoint;\n        continue;\n      } // 2 leads in a row\n\n\n      if (codePoint < 0xDC00) {\n        if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD);\n        leadSurrogate = codePoint;\n        continue;\n      } // valid surrogate pair\n\n\n      codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000;\n    } else if (leadSurrogate) {\n      // valid bmp char, but last char was a lead\n      if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD);\n    }\n\n    leadSurrogate = null; // encode utf8\n\n    if (codePoint < 0x80) {\n      if ((units -= 1) < 0) break;\n      bytes.push(codePoint);\n    } else if (codePoint < 0x800) {\n      if ((units -= 2) < 0) break;\n      bytes.push(codePoint >> 0x6 | 0xC0, codePoint & 0x3F | 0x80);\n    } else if (codePoint < 0x10000) {\n      if ((units -= 3) < 0) break;\n      bytes.push(codePoint >> 0xC | 0xE0, codePoint >> 0x6 & 0x3F | 0x80, codePoint & 0x3F | 0x80);\n    } else if (codePoint < 0x110000) {\n      if ((units -= 4) < 0) break;\n      bytes.push(codePoint >> 0x12 | 0xF0, codePoint >> 0xC & 0x3F | 0x80, codePoint >> 0x6 & 0x3F | 0x80, codePoint & 0x3F | 0x80);\n    } else {\n      throw new Error('Invalid code point');\n    }\n  }\n\n  return bytes;\n}\n\nfunction asciiToBytes(str) {\n  var byteArray = [];\n\n  for (var i = 0; i < str.length; ++i) {\n    // Node's code seems to be doing this and not & 0x7F..\n    byteArray.push(str.charCodeAt(i) & 0xFF);\n  }\n\n  return byteArray;\n}\n\nfunction utf16leToBytes(str, units) {\n  var c, hi, lo;\n  var byteArray = [];\n\n  for (var i = 0; i < str.length; ++i) {\n    if ((units -= 2) < 0) break;\n    c = str.charCodeAt(i);\n    hi = c >> 8;\n    lo = c % 256;\n    byteArray.push(lo);\n    byteArray.push(hi);\n  }\n\n  return byteArray;\n}\n\nfunction base64ToBytes(str) {\n  return base64.toByteArray(base64clean(str));\n}\n\nfunction blitBuffer(src, dst, offset, length) {\n  for (var i = 0; i < length; ++i) {\n    if (i + offset >= dst.length || i >= src.length) break;\n    dst[i + offset] = src[i];\n  }\n\n  return i;\n}\n\nfunction isnan(val) {\n  return val !== val; // eslint-disable-line no-self-compare\n}","var utils = require(\"../../../utils/utils\"),\n    eventable = require(\"../../../utils/eventable\"),\n    domHelpers = require(\"../utils/dom_helpers\");\n\nvar Cell = function () {\n  \"use strict\";\n\n  function Cell(parent, config, factory, gantt) {\n    if (parent) {\n      this.$container = domHelpers.toNode(parent);\n      this.$parent = parent;\n    } // save config\n\n\n    this.$config = utils.mixin(config, {\n      headerHeight: 33\n    });\n    this.$gantt = gantt;\n    this.$domEvents = gantt._createDomEventScope(); // set id\n\n    this.$id = config.id || \"c\" + utils.uid();\n    this.$name = \"cell\";\n    this.$factory = factory;\n    eventable(this);\n  }\n\n  Cell.prototype.destructor = function () {\n    this.$parent = this.$container = this.$view = null;\n    var mouse = this.$gantt.$services.getService(\"mouseEvents\");\n    mouse.detach(\"click\", \"gantt_header_arrow\", this._headerClickHandler);\n    this.$domEvents.detachAll();\n    this.callEvent(\"onDestroy\", []);\n    this.detachAllEvents();\n  };\n\n  Cell.prototype.cell = function (id) {\n    return null;\n  };\n\n  Cell.prototype.scrollTo = function (left, top) {\n    //GS-333 Add a way to scroll the HTML views:\n    var cell = this.$view;\n    if (this.$config.html) cell = this.$view.firstChild;\n\n    if (left * 1 == left) {\n      cell.scrollLeft = left;\n    }\n\n    if (top * 1 == top) {\n      cell.scrollTop = top;\n    }\n  };\n\n  Cell.prototype.clear = function () {\n    this.getNode().innerHTML = \"\";\n    this.getNode().className = \"gantt_layout_content\";\n    this.getNode().style.padding = \"0\";\n  };\n\n  Cell.prototype.resize = function (_final) {\n    if (this.$parent) {\n      return this.$parent.resize(_final);\n    }\n\n    if (_final === false) {\n      this.$preResize = true;\n    }\n\n    var topCont = this.$container;\n    var x = topCont.offsetWidth;\n    var y = topCont.offsetHeight;\n    var topSize = this.getSize();\n\n    if (topCont === document.body) {\n      x = document.body.offsetWidth;\n      y = document.body.offsetHeight;\n    }\n\n    if (x < topSize.minWidth) {\n      x = topSize.minWidth;\n    }\n\n    if (x > topSize.maxWidth) {\n      x = topSize.maxWidth;\n    }\n\n    if (y < topSize.minHeight) {\n      y = topSize.minHeight;\n    }\n\n    if (y > topSize.maxHeight) {\n      y = topSize.maxHeight;\n    }\n\n    this.setSize(x, y);\n\n    if (!this.$preResize) {//\tself.callEvent(\"onResize\", [x, y]);\n    }\n\n    this.$preResize = false;\n  };\n\n  Cell.prototype.hide = function () {\n    this._hide(true);\n\n    this.resize();\n  };\n\n  Cell.prototype.show = function (force) {\n    this._hide(false);\n\n    if (force && this.$parent) {\n      this.$parent.show();\n    }\n\n    this.resize();\n  };\n\n  Cell.prototype._hide = function (mode) {\n    if (mode === true && this.$view.parentNode) {\n      this.$view.parentNode.removeChild(this.$view);\n    } else if (mode === false && !this.$view.parentNode) {\n      var index = this.$parent.cellIndex(this.$id);\n      this.$parent.moveView(this, index);\n    }\n\n    this.$config.hidden = mode;\n  };\n\n  Cell.prototype.$toHTML = function (content, css) {\n    if (content === void 0) {\n      content = \"\";\n    }\n\n    css = [css || \"\", this.$config.css || \"\"].join(\" \");\n    var obj = this.$config;\n    var header = \"\";\n\n    if (obj.raw) {\n      content = typeof obj.raw === \"string\" ? obj.raw : \"\";\n    } else {\n      if (!content) {\n        content = \"<div class='gantt_layout_content' \" + (css ? \" class='\" + css + \"' \" : \"\") + \" >\" + (obj.html || \"\") + \"</div>\";\n      }\n\n      if (obj.header) {\n        var collapseIcon = obj.canCollapse ? \"<div class='gantt_layout_header_arrow'></div>\" : \"\";\n        header = \"<div class='gantt_layout_header'>\" + collapseIcon + \"<div class='gantt_layout_header_content'>\" + obj.header + \"</div></div>\";\n      }\n    }\n\n    return \"<div class='gantt_layout_cell \" + css + \"' data-cell-id='\" + this.$id + \"'>\" + header + content + \"</div>\";\n  };\n\n  Cell.prototype.$fill = function (node, parent) {\n    this.$view = node;\n    this.$parent = parent;\n    this.init();\n  };\n\n  Cell.prototype.getNode = function () {\n    return this.$view.querySelector(\"gantt_layout_cell\") || this.$view;\n  };\n\n  Cell.prototype.init = function () {\n    // [NOT-GOOD] code is executed for each component, while it still has only one handler, it is no good\n    var self = this;\n\n    this._headerClickHandler = function (e) {\n      var cellId = domHelpers.locateAttribute(e, \"data-cell-id\");\n\n      if (cellId == self.$id) {\n        self.toggle();\n      }\n    };\n\n    var mouse = this.$gantt.$services.getService(\"mouseEvents\");\n    mouse.delegate(\"click\", \"gantt_header_arrow\", this._headerClickHandler);\n    this.callEvent(\"onReady\", []);\n  };\n\n  Cell.prototype.toggle = function () {\n    this.$config.collapsed = !this.$config.collapsed;\n    this.resize();\n  };\n\n  Cell.prototype.getSize = function () {\n    var size = {\n      height: this.$config.height || 0,\n      width: this.$config.width || 0,\n      gravity: this.$config.gravity || 1,\n      minHeight: this.$config.minHeight || 0,\n      minWidth: this.$config.minWidth || 0,\n      maxHeight: this.$config.maxHeight || 100000000000,\n      maxWidth: this.$config.maxWidth || 100000000000\n    };\n\n    if (this.$config.collapsed) {\n      var mode = this.$config.mode === \"x\";\n      size[mode ? \"width\" : \"height\"] = size[mode ? \"maxWidth\" : \"maxHeight\"] = this.$config.headerHeight;\n    }\n\n    return size;\n  };\n\n  Cell.prototype.getContentSize = function () {\n    var width = this.$lastSize.contentX;\n\n    if (width !== width * 1) {\n      width = this.$lastSize.width;\n    }\n\n    var height = this.$lastSize.contentY;\n\n    if (height !== height * 1) {\n      height = this.$lastSize.height;\n    }\n\n    return {\n      width: width,\n      height: height\n    };\n  };\n\n  Cell.prototype._getBorderSizes = function () {\n    var borders = {\n      top: 0,\n      right: 0,\n      bottom: 0,\n      left: 0,\n      horizontal: 0,\n      vertical: 0\n    };\n\n    if (this._currentBorders) {\n      if (this._currentBorders[this._borders.left]) {\n        borders.left = 1;\n        borders.horizontal++;\n      }\n\n      if (this._currentBorders[this._borders.right]) {\n        borders.right = 1;\n        borders.horizontal++;\n      }\n\n      if (this._currentBorders[this._borders.top]) {\n        borders.top = 1;\n        borders.vertical++;\n      }\n\n      if (this._currentBorders[this._borders.bottom]) {\n        borders.bottom = 1;\n        borders.vertical++;\n      }\n    }\n\n    return borders;\n  };\n\n  Cell.prototype.setSize = function (x, y) {\n    this.$view.style.width = x + \"px\";\n    this.$view.style.height = y + \"px\";\n\n    var borders = this._getBorderSizes();\n\n    var contentY = y - borders.vertical;\n    var contentX = x - borders.horizontal;\n    this.$lastSize = {\n      x: x,\n      y: y,\n      contentX: contentX,\n      contentY: contentY\n    };\n\n    if (this.$config.header) {\n      this._sizeHeader();\n    } else {\n      this._sizeContent();\n    }\n  };\n\n  Cell.prototype._borders = {\n    \"left\": \"gantt_layout_cell_border_left\",\n    \"right\": \"gantt_layout_cell_border_right\",\n    \"top\": \"gantt_layout_cell_border_top\",\n    \"bottom\": \"gantt_layout_cell_border_bottom\"\n  };\n\n  Cell.prototype._setBorders = function (css, view) {\n    if (!view) {\n      view = this;\n    }\n\n    var node = view.$view;\n\n    for (var i in this._borders) {\n      domHelpers.removeClassName(node, this._borders[i]);\n    }\n\n    if (typeof css == \"string\") {\n      css = [css];\n    }\n\n    var cssHash = {};\n\n    for (var i = 0; i < css.length; i++) {\n      domHelpers.addClassName(node, css[i]);\n      cssHash[css[i]] = true;\n    }\n\n    view._currentBorders = cssHash;\n  };\n\n  Cell.prototype._sizeContent = function () {\n    var content = this.$view.childNodes[0];\n\n    if (content && content.className == \"gantt_layout_content\") {\n      content.style.height = this.$lastSize.contentY + \"px\";\n    }\n  };\n\n  Cell.prototype._sizeHeader = function () {\n    var size = this.$lastSize;\n    size.contentY -= this.$config.headerHeight;\n    var header = this.$view.childNodes[0];\n    var content = this.$view.childNodes[1];\n    var xLayout = this.$config.mode === \"x\";\n\n    if (this.$config.collapsed) {\n      content.style.display = \"none\";\n\n      if (xLayout) {\n        header.className = \"gantt_layout_header collapsed_x\";\n        header.style.width = size.y + \"px\";\n        var d = Math.floor(size.y / 2 - size.x / 2);\n        header.style.transform = \"rotate(90deg) translate(\" + d + \"px, \" + d + \"px)\";\n        content.style.display = \"none\";\n      } else {\n        header.className = \"gantt_layout_header collapsed_y\";\n      }\n    } else {\n      if (xLayout) {\n        header.className = \"gantt_layout_header\";\n      } else {\n        header.className = \"gantt_layout_header vertical\";\n      }\n\n      header.style.width = 'auto';\n      header.style.transform = '';\n      content.style.display = \"\";\n      content.style.height = size.contentY + \"px\";\n    }\n\n    header.style.height = this.$config.headerHeight + \"px\";\n  };\n\n  return Cell;\n}();\n\nmodule.exports = Cell;","var utils = require(\"./env\");\n\nmodule.exports = function (gantt) {\n  return utils.isNode || !gantt.$root;\n};","/**\r\n * Check the over task or draggble task is placeholder task\r\n */\nmodule.exports = function isPlaceholderTask(id, gantt, store, config) {\n  // return false;\n  var config = gantt ? gantt.config : config;\n\n  if (config && config.placeholder_task) {\n    if (store.exists(id)) {\n      var item = store.getItem(id);\n      return item.type === config.types.placeholder;\n    }\n  }\n\n  return false;\n};","function _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\n// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n// NOTE: These type checking functions intentionally don't use `instanceof`\n// because it is fragile and can be easily faked with `Object.create()`.\nfunction isArray(arg) {\n  if (Array.isArray) {\n    return Array.isArray(arg);\n  }\n\n  return objectToString(arg) === '[object Array]';\n}\n\nexports.isArray = isArray;\n\nfunction isBoolean(arg) {\n  return typeof arg === 'boolean';\n}\n\nexports.isBoolean = isBoolean;\n\nfunction isNull(arg) {\n  return arg === null;\n}\n\nexports.isNull = isNull;\n\nfunction isNullOrUndefined(arg) {\n  return arg == null;\n}\n\nexports.isNullOrUndefined = isNullOrUndefined;\n\nfunction isNumber(arg) {\n  return typeof arg === 'number';\n}\n\nexports.isNumber = isNumber;\n\nfunction isString(arg) {\n  return typeof arg === 'string';\n}\n\nexports.isString = isString;\n\nfunction isSymbol(arg) {\n  return _typeof(arg) === 'symbol';\n}\n\nexports.isSymbol = isSymbol;\n\nfunction isUndefined(arg) {\n  return arg === void 0;\n}\n\nexports.isUndefined = isUndefined;\n\nfunction isRegExp(re) {\n  return objectToString(re) === '[object RegExp]';\n}\n\nexports.isRegExp = isRegExp;\n\nfunction isObject(arg) {\n  return _typeof(arg) === 'object' && arg !== null;\n}\n\nexports.isObject = isObject;\n\nfunction isDate(d) {\n  return objectToString(d) === '[object Date]';\n}\n\nexports.isDate = isDate;\n\nfunction isError(e) {\n  return objectToString(e) === '[object Error]' || e instanceof Error;\n}\n\nexports.isError = isError;\n\nfunction isFunction(arg) {\n  return typeof arg === 'function';\n}\n\nexports.isFunction = isFunction;\n\nfunction isPrimitive(arg) {\n  return arg === null || typeof arg === 'boolean' || typeof arg === 'number' || typeof arg === 'string' || _typeof(arg) === 'symbol' || // ES6 symbol\n  typeof arg === 'undefined';\n}\n\nexports.isPrimitive = isPrimitive;\nexports.isBuffer = Buffer.isBuffer;\n\nfunction objectToString(o) {\n  return Object.prototype.toString.call(o);\n}","var __extends = require(\"../../../../utils/extends\");\n\nvar htmlHelpers = require(\"../../utils/html_helpers\");\n\nmodule.exports = function (gantt) {\n  var _super = require(\"./base_control\")(gantt);\n\n  function SelectControl() {\n    var self = _super.apply(this, arguments) || this;\n    return self;\n  }\n\n  __extends(SelectControl, _super);\n\n  SelectControl.prototype.render = function (sns) {\n    var height = (sns.height || \"23\") + \"px\";\n    var html = \"<div class='gantt_cal_ltext' style='height:\" + height + \";'>\";\n    html += htmlHelpers.getHtmlSelect(sns.options, [{\n      key: \"style\",\n      value: \"width:100%;\"\n    }, {\n      key: \"title\",\n      value: sns.name\n    }]);\n    html += \"</div>\";\n    return html;\n  };\n\n  SelectControl.prototype.set_value = function (node, value, ev, sns) {\n    var select = node.firstChild;\n\n    if (!select._dhx_onchange && sns.onchange) {\n      select.onchange = sns.onchange;\n      select._dhx_onchange = true;\n    }\n\n    if (typeof value === \"undefined\") value = (select.options[0] || {}).value;\n    select.value = value || \"\";\n  };\n\n  SelectControl.prototype.get_value = function (node) {\n    return node.firstChild.value;\n  };\n\n  SelectControl.prototype.focus = function (node) {\n    var a = node.firstChild;\n\n    gantt._focus(a, true);\n  };\n\n  return SelectControl;\n};","// optimized checker for task bars smart rendering\n// first check the vertical position since it's easier to calculate\nmodule.exports = function isBarInViewport(item, viewport, view, config, gantt) {\n  if (!item.start_date || !item.end_date) {\n    return null;\n  }\n\n  var top = view.getItemTop(item.id);\n  var height = view.getItemHeight(item.id);\n\n  if (top > viewport.y_end || top + height < viewport.y) {\n    return false;\n  }\n\n  var padding = 200;\n  var startCoord = view.posFromDate(item.start_date);\n  var endCoord = view.posFromDate(item.end_date);\n  var left = Math.min(startCoord, endCoord) - padding;\n  var right = Math.max(startCoord, endCoord) + padding;\n\n  if (left > viewport.x_end || right < viewport.x) {\n    return false;\n  }\n\n  return true;\n};","module.exports = function (gantt) {\n  return gantt.config.smart_rendering && gantt._smart_render;\n};","/* eslint-disable no-restricted-globals */\nvar globalScope;\n\nif (typeof window !== \"undefined\") {\n  globalScope = window;\n} else {\n  globalScope = global;\n}\n/* eslint-enable no-restricted-globals */\n\n\nmodule.exports = globalScope;","/* eslint-disable node/no-deprecated-api */\nvar buffer = require('buffer');\n\nvar Buffer = buffer.Buffer; // alternative to using Object.keys for old browsers\n\nfunction copyProps(src, dst) {\n  for (var key in src) {\n    dst[key] = src[key];\n  }\n}\n\nif (Buffer.from && Buffer.alloc && Buffer.allocUnsafe && Buffer.allocUnsafeSlow) {\n  module.exports = buffer;\n} else {\n  // Copy properties from require('buffer')\n  copyProps(buffer, exports);\n  exports.Buffer = SafeBuffer;\n}\n\nfunction SafeBuffer(arg, encodingOrOffset, length) {\n  return Buffer(arg, encodingOrOffset, length);\n} // Copy static methods from Buffer\n\n\ncopyProps(Buffer, SafeBuffer);\n\nSafeBuffer.from = function (arg, encodingOrOffset, length) {\n  if (typeof arg === 'number') {\n    throw new TypeError('Argument must not be a number');\n  }\n\n  return Buffer(arg, encodingOrOffset, length);\n};\n\nSafeBuffer.alloc = function (size, fill, encoding) {\n  if (typeof size !== 'number') {\n    throw new TypeError('Argument must be a number');\n  }\n\n  var buf = Buffer(size);\n\n  if (fill !== undefined) {\n    if (typeof encoding === 'string') {\n      buf.fill(fill, encoding);\n    } else {\n      buf.fill(fill);\n    }\n  } else {\n    buf.fill(0);\n  }\n\n  return buf;\n};\n\nSafeBuffer.allocUnsafe = function (size) {\n  if (typeof size !== 'number') {\n    throw new TypeError('Argument must be a number');\n  }\n\n  return Buffer(size);\n};\n\nSafeBuffer.allocUnsafeSlow = function (size) {\n  if (typeof size !== 'number') {\n    throw new TypeError('Argument must be a number');\n  }\n\n  return buffer.SlowBuffer(size);\n};","'use strict';\n\nif (!process.version || process.version.indexOf('v0.') === 0 || process.version.indexOf('v1.') === 0 && process.version.indexOf('v1.8.') !== 0) {\n  module.exports = {\n    nextTick: nextTick\n  };\n} else {\n  module.exports = process;\n}\n\nfunction nextTick(fn, arg1, arg2, arg3) {\n  if (typeof fn !== 'function') {\n    throw new TypeError('\"callback\" argument must be a function');\n  }\n\n  var len = arguments.length;\n  var args, i;\n\n  switch (len) {\n    case 0:\n    case 1:\n      return process.nextTick(fn);\n\n    case 2:\n      return process.nextTick(function afterTickOne() {\n        fn.call(null, arg1);\n      });\n\n    case 3:\n      return process.nextTick(function afterTickTwo() {\n        fn.call(null, arg1, arg2);\n      });\n\n    case 4:\n      return process.nextTick(function afterTickThree() {\n        fn.call(null, arg1, arg2, arg3);\n      });\n\n    default:\n      args = new Array(len - 1);\n      i = 0;\n\n      while (i < args.length) {\n        args[i++] = arguments[i];\n      }\n\n      return process.nextTick(function afterTick() {\n        fn.apply(null, args);\n      });\n  }\n}","/**\r\n * The state object for order branch drag and drop\r\n */\nvar utils = require(\"../../../../utils/utils\");\n\nmodule.exports = {\n  createDropTargetObject: function createDropTargetObject(parent) {\n    var res = {\n      targetParent: null,\n      targetIndex: 0,\n      targetId: null,\n      child: false,\n      nextSibling: false,\n      prevSibling: false\n    };\n\n    if (parent) {\n      utils.mixin(res, parent, true);\n    }\n\n    return res;\n  },\n  nextSiblingTarget: function nextSiblingTarget(dndTaskId, targetTaskId, store) {\n    var result = this.createDropTargetObject();\n    result.targetId = targetTaskId;\n    result.nextSibling = true;\n    result.targetParent = store.getParent(result.targetId);\n    result.targetIndex = store.getBranchIndex(result.targetId);\n\n    if (store.getParent(dndTaskId) != result.targetParent || result.targetIndex < store.getBranchIndex(dndTaskId)) {\n      result.targetIndex += 1;\n    }\n\n    return result;\n  },\n  prevSiblingTarget: function prevSiblingTarget(dndTaskId, targetTaskId, store) {\n    var result = this.createDropTargetObject();\n    result.targetId = targetTaskId;\n    result.prevSibling = true;\n    result.targetParent = store.getParent(result.targetId);\n    result.targetIndex = store.getBranchIndex(result.targetId);\n\n    if (store.getParent(dndTaskId) == result.targetParent && result.targetIndex > store.getBranchIndex(dndTaskId)) {\n      result.targetIndex -= 1;\n    }\n\n    return result;\n  },\n  firstChildTarget: function firstChildTarget(dndTaskId, targetTaskId, store) {\n    var result = this.createDropTargetObject();\n    result.targetId = targetTaskId;\n    result.targetParent = result.targetId;\n    result.targetIndex = 0;\n    result.child = true;\n    return result;\n  },\n  lastChildTarget: function lastChildTarget(dndTaskId, targetTaskId, store) {\n    var children = store.getChildren(targetTaskId);\n    var result = this.createDropTargetObject();\n    result.targetId = children[children.length - 1];\n    result.targetParent = targetTaskId;\n    result.targetIndex = children.length;\n    result.nextSibling = true;\n    return result;\n  }\n};","var isLegacyRender = require(\"../is_legacy_smart_render\");\n\nmodule.exports = function isColumnVisible(columnIndex, scale, viewPort, gantt) {\n  var width = scale.width[columnIndex];\n\n  if (width <= 0) {\n    return false;\n  }\n\n  if (!gantt.config.smart_rendering || isLegacyRender(gantt)) {\n    return true;\n  }\n\n  var cellLeftCoord = scale.left[columnIndex] - width;\n  var cellRightCoord = scale.left[columnIndex] + width;\n  return cellLeftCoord <= viewPort.x_end && cellRightCoord >= viewPort.x; //do not render skipped columns\n};","module.exports = function getVisibleCellsRange(scale, viewport) {\n  var firstCellIndex = 0;\n  var lastCellIndex = scale.left.length - 1;\n\n  if (viewport) {\n    for (var i = 0; i < scale.left.length; i++) {\n      var left = scale.left[i];\n\n      if (left < viewport.x) {\n        firstCellIndex = i;\n      }\n\n      if (left > viewport.x_end) {\n        lastCellIndex = i;\n        break;\n      }\n    }\n  }\n\n  return {\n    start: firstCellIndex,\n    end: lastCellIndex\n  };\n};","module.exports = function (item, view, config) {\n  return {\n    top: view.getItemTop(item.id),\n    height: view.getItemHeight(item.id),\n    left: 0,\n    right: Infinity\n  };\n};","function createTaskRenderer(gantt) {\n  function _render_task_element(task, view, config) {\n    var config = view.$getConfig();\n    var painters = config.type_renderers;\n    var renderer = painters[gantt.getTaskType(task.type)],\n        defaultRenderer = _task_default_render;\n\n    if (!renderer) {\n      return defaultRenderer.call(gantt, task, view, config);\n    } else {\n      return renderer.call(gantt, task, function (task) {\n        return defaultRenderer.call(gantt, task, view, config);\n      }, view);\n    }\n  }\n\n  function _task_default_render(task, view, config) {\n    if (gantt._isAllowedUnscheduledTask(task)) return;\n\n    if (!gantt._isTaskInTimelineLimits(task)) {\n      return;\n    }\n\n    var pos = view.getItemPosition(task);\n    var cfg = config,\n        templates = view.$getTemplates();\n    var taskType = gantt.getTaskType(task.type);\n    var height = view.getBarHeight(task.id, taskType == cfg.types.milestone);\n    var controlsMargin = 0;\n\n    if (taskType == cfg.types.milestone) {\n      controlsMargin = (height - pos.height) / 2;\n    }\n\n    var padd = Math.floor((view.getItemHeight(task.id) - height) / 2); //\tif(task.type == cfg.types.milestone){\n    //\t\tpadd -= 1;\n    //\t}\n    //\tif (taskType == cfg.types.milestone && cfg.link_line_width > 1) {\n    //\t\t//little adjust milestone position, so horisontal corners would match link arrow when thickness of link line is more than 1px\n    //\t\tpadd += 1;\n    //\t}\n\n    if (taskType == cfg.types.milestone) {\n      pos.left -= Math.round(height / 2);\n      pos.width = height;\n    }\n\n    var div = document.createElement(\"div\");\n    var width = Math.round(pos.width);\n\n    if (view.$config.item_attribute) {\n      div.setAttribute(view.$config.item_attribute, task.id);\n      div.setAttribute(view.$config.bind + \"_id\", task.id); // 'task_id'/'resource_id' for backward compatibility\n    }\n\n    if (cfg.show_progress && taskType != cfg.types.milestone) {\n      _render_task_progress(task, div, width, cfg, templates);\n    } //use separate div to display content above progress bar\n\n\n    var content = _render_task_content(task, width, templates);\n\n    if (task.textColor) {\n      content.style.color = task.textColor;\n    }\n\n    div.appendChild(content);\n\n    var css = _combine_item_class(\"gantt_task_line\", templates.task_class(task.start_date, task.end_date, task), task.id, view);\n\n    if (task.color || task.progressColor || task.textColor) {\n      css += \" gantt_task_inline_color\";\n    }\n\n    if (pos.width < 20) {\n      css += \" gantt_thin_task\";\n    }\n\n    div.className = css;\n    var styles = [\"left:\" + pos.left + \"px\", \"top:\" + (padd + pos.top) + 'px', \"height:\" + (taskType == cfg.types.milestone ? pos.height : height) + 'px', \"line-height:\" + Math.max(height < 30 ? height - 2 : height, 0) + 'px', \"width:\" + width + 'px'];\n\n    if (task.color) {\n      styles.push(\"background-color:\" + task.color);\n    }\n\n    if (task.textColor) {\n      styles.push(\"color:\" + task.textColor);\n    }\n\n    div.style.cssText = styles.join(\";\");\n\n    var side = _render_leftside_content(task, cfg, templates, controlsMargin);\n\n    if (side) div.appendChild(side);\n    side = _render_rightside_content(task, cfg, templates, controlsMargin);\n    if (side) div.appendChild(side);\n\n    gantt._waiAria.setTaskBarAttr(task, div);\n\n    var state = gantt.getState();\n\n    if (!gantt.isReadonly(task)) {\n      if (cfg.drag_resize && !gantt.isSummaryTask(task) && taskType != cfg.types.milestone) {\n        _render_pair(div, \"gantt_task_drag\", task, function (css) {\n          var el = document.createElement(\"div\");\n          el.className = css;\n          return el;\n        }, cfg);\n      }\n\n      if (cfg.drag_links && cfg.show_links) {\n        _render_pair(div, \"gantt_link_control\", task, function (css) {\n          var outer = document.createElement(\"div\");\n          outer.className = css;\n          outer.style.cssText = [\"height:\" + height + 'px', \"line-height:\" + height + 'px'].join(\";\");\n          var inner = document.createElement(\"div\");\n          inner.className = \"gantt_link_point\";\n          var showLinkPoints = false;\n\n          if (state.link_source_id && cfg.touch) {\n            showLinkPoints = true;\n          }\n\n          inner.style.display = showLinkPoints ? \"block\" : \"\";\n          outer.appendChild(inner);\n          return outer;\n        }, cfg, controlsMargin);\n      }\n    }\n\n    return div;\n  }\n\n  function _render_side_content(task, template, cssClass, marginStyle) {\n    if (!template) return null;\n    var text = template(task.start_date, task.end_date, task);\n    if (!text) return null;\n    var content = document.createElement(\"div\");\n    content.className = \"gantt_side_content \" + cssClass;\n    content.innerHTML = text;\n\n    if (marginStyle) {\n      content.style[marginStyle.type] = Math.abs(marginStyle.value) + \"px\";\n    }\n\n    return content;\n  }\n\n  function _render_leftside_content(task, cfg, templates, margin) {\n    var css = \"gantt_left \" + _get_link_crossing_css(!cfg.rtl ? true : false, task, cfg);\n\n    var marginStyle = null;\n\n    if (margin) {\n      marginStyle = {\n        type: \"marginRight\",\n        value: margin\n      };\n    }\n\n    return _render_side_content(task, templates.leftside_text, css, marginStyle);\n  }\n\n  function _render_rightside_content(task, cfg, templates, margin) {\n    var css = \"gantt_right \" + _get_link_crossing_css(!cfg.rtl ? false : true, task, cfg);\n\n    var marginStyle = null;\n\n    if (margin) {\n      marginStyle = {\n        type: \"marginLeft\",\n        value: margin\n      };\n    }\n\n    return _render_side_content(task, templates.rightside_text, css, marginStyle);\n  }\n\n  function _get_link_crossing_css(left, task) {\n    var cond = _get_conditions(left);\n\n    for (var i in cond) {\n      var links = task[i];\n\n      for (var ln = 0; ln < links.length; ln++) {\n        var link = gantt.getLink(links[ln]);\n\n        for (var tp = 0; tp < cond[i].length; tp++) {\n          if (link.type == cond[i][tp]) {\n            return \"gantt_link_crossing\";\n          }\n        }\n      }\n    }\n\n    return \"\";\n  }\n\n  function _render_task_content(task, width, templates) {\n    var content = document.createElement(\"div\");\n\n    if (gantt.getTaskType(task.type) != gantt.config.types.milestone) {\n      content.innerHTML = templates.task_text(task.start_date, task.end_date, task);\n    } else if (gantt.getTaskType(task.type) == gantt.config.types.milestone && width) {\n      content.style.height = content.style.width = width + \"px\";\n    }\n\n    content.className = \"gantt_task_content\"; //content.style.width = width + 'px';\n\n    return content;\n  }\n\n  function _render_task_progress(task, element, maxWidth, cfg, templates) {\n    var done = task.progress * 1 || 0;\n    maxWidth = Math.max(maxWidth - 2, 0); //2px for borders\n\n    var pr = document.createElement(\"div\");\n    var width = Math.round(maxWidth * done);\n    width = Math.min(maxWidth, width);\n\n    if (task.progressColor) {\n      pr.style.backgroundColor = task.progressColor;\n      pr.style.opacity = 1;\n    }\n\n    pr.style.width = width + 'px';\n    pr.className = \"gantt_task_progress\";\n    pr.innerHTML = templates.progress_text(task.start_date, task.end_date, task);\n\n    if (cfg.rtl) {\n      pr.style.position = \"absolute\";\n      pr.style.right = \"0px\";\n    }\n\n    var wrapper = document.createElement(\"div\");\n    wrapper.className = \"gantt_task_progress_wrapper\";\n    wrapper.appendChild(pr);\n    element.appendChild(wrapper);\n\n    if (gantt.config.drag_progress && !gantt.isReadonly(task)) {\n      var drag = document.createElement(\"div\");\n      var markerPos = width;\n\n      if (cfg.rtl) {\n        markerPos = maxWidth - width;\n      }\n\n      drag.style.left = markerPos + 'px';\n      drag.className = \"gantt_task_progress_drag\";\n      pr.appendChild(drag);\n      element.appendChild(drag);\n    }\n  }\n\n  function _get_conditions(leftside) {\n    if (leftside) {\n      return {\n        $source: [gantt.config.links.start_to_start],\n        $target: [gantt.config.links.start_to_start, gantt.config.links.finish_to_start]\n      };\n    } else {\n      return {\n        $source: [gantt.config.links.finish_to_start, gantt.config.links.finish_to_finish],\n        $target: [gantt.config.links.finish_to_finish]\n      };\n    }\n  }\n\n  function _combine_item_class(basic, template, itemId, view) {\n    var cfg = view.$getConfig();\n    var css = [basic];\n    if (template) css.push(template);\n    var state = gantt.getState();\n    var task = gantt.getTask(itemId);\n\n    if (gantt.getTaskType(task.type) == cfg.types.milestone) {\n      css.push(\"gantt_milestone\");\n    } else if (gantt.getTaskType(task.type) == cfg.types.project) {\n      css.push(\"gantt_project\");\n    }\n\n    css.push(\"gantt_bar_\" + gantt.getTaskType(task.type));\n    if (gantt.isSummaryTask(task)) css.push(\"gantt_dependent_task\");\n\n    if (gantt.isSplitTask(task) && (cfg.open_split_tasks && !task.$open || !cfg.open_split_tasks)) {\n      css.push(\"gantt_split_parent\");\n    }\n\n    if (cfg.select_task && gantt.isSelectedTask(itemId)) {\n      css.push(\"gantt_selected\");\n    }\n\n    if (itemId == state.drag_id) {\n      css.push(\"gantt_drag_\" + state.drag_mode);\n\n      if (state.touch_drag) {\n        css.push(\"gantt_touch_\" + state.drag_mode);\n      }\n    }\n\n    if (state.link_source_id == itemId) css.push(\"gantt_link_source\");\n    if (state.link_target_id == itemId) css.push(\"gantt_link_target\");\n\n    if (cfg.highlight_critical_path && gantt.isCriticalTask) {\n      if (gantt.isCriticalTask(task)) css.push(\"gantt_critical_task\");\n    }\n\n    if (state.link_landing_area && state.link_target_id && state.link_source_id && state.link_target_id != state.link_source_id && (state.link_target_id == itemId || state.link_source_id == itemId)) {\n      var from_id = state.link_source_id;\n      var from_start = state.link_from_start;\n      var to_start = state.link_to_start;\n      var allowDrag = gantt.isLinkAllowed(from_id, itemId, from_start, to_start);\n      var dragClass = \"\";\n\n      if (allowDrag) {\n        if (to_start) dragClass = \"link_start_allow\";else dragClass = \"link_finish_allow\";\n      } else {\n        if (to_start) dragClass = \"link_start_deny\";else dragClass = \"link_finish_deny\";\n      }\n\n      css.push(dragClass);\n    }\n\n    return css.join(\" \");\n  }\n\n  function _render_pair(parent, css, task, content, config, margin) {\n    var state = gantt.getState();\n    var className, element;\n\n    if (+task.start_date >= +state.min_date) {\n      className = [css, config.rtl ? \"task_right\" : \"task_left\", \"task_start_date\"];\n      element = content(className.join(\" \"));\n      element.setAttribute(\"data-bind-property\", \"start_date\");\n\n      if (margin) {\n        element.style.marginLeft = margin + \"px\";\n      }\n\n      parent.appendChild(element);\n    }\n\n    if (+task.end_date <= +state.max_date) {\n      className = [css, config.rtl ? \"task_left\" : \"task_right\", \"task_end_date\"];\n      element = content(className.join(\" \"));\n      element.setAttribute(\"data-bind-property\", \"end_date\");\n\n      if (margin) {\n        element.style.marginRight = margin + \"px\";\n      }\n\n      parent.appendChild(element);\n    }\n  }\n\n  return _render_task_element;\n}\n\nmodule.exports = createTaskRenderer;","var ScaleHelper = require(\"./scales_ignore\");\n\nvar eventable = require(\"../../../utils/eventable\");\n\nvar utils = require(\"../../../utils/utils\");\n\nvar helpers = require(\"../../../utils/helpers\");\n\nvar topPositionMixin = require(\"../row_position_mixin\");\n\nvar canvasRender = require(\"./tasks_canvas_render\");\n\nvar Timeline = function Timeline(parent, config, factory, gantt) {\n  this.$config = utils.mixin({}, config || {});\n  this.$scaleHelper = new ScaleHelper(gantt);\n  this.$gantt = gantt;\n  this._posFromDateCache = {};\n  this._timelineDragScroll = null;\n  utils.mixin(this, topPositionMixin(this));\n  eventable(this);\n};\n\nTimeline.prototype = {\n  init: function init(container) {\n    container.innerHTML += \"<div class='gantt_task' style='width:inherit;height:inherit;'></div>\";\n    this.$task = container.childNodes[0];\n    this.$task.innerHTML = \"<div class='gantt_task_scale'></div><div class='gantt_data_area'></div>\";\n    this.$task_scale = this.$task.childNodes[0];\n    this.$task_data = this.$task.childNodes[1];\n    this.$task_data.innerHTML = \"<div class='gantt_task_bg'></div><div class='gantt_links_area'></div><div class='gantt_bars_area'></div>\";\n    this.$task_bg = this.$task_data.childNodes[0];\n    this.$task_links = this.$task_data.childNodes[1];\n    this.$task_bars = this.$task_data.childNodes[2];\n    this._tasks = {\n      col_width: 0,\n      width: [],\n      // width of each column\n      full_width: 0,\n      // width of all columns\n      trace_x: [],\n      rendered: {}\n    };\n    var config = this.$getConfig();\n    var attr = config[this.$config.bind + \"_attribute\"];\n    var linksAttr = config[this.$config.bindLinks + \"_attribute\"];\n\n    if (!attr && this.$config.bind) {\n      attr = \"data-\" + this.$config.bind + \"-id\";\n    }\n\n    if (!linksAttr && this.$config.bindLinks) {\n      linksAttr = \"data-\" + this.$config.bindLinks + \"-id\";\n    }\n\n    this.$config.item_attribute = attr || null;\n    this.$config.link_attribute = linksAttr || null;\n\n    var layers = this._createLayerConfig();\n\n    if (!this.$config.layers) {\n      this.$config.layers = layers.tasks;\n    }\n\n    if (!this.$config.linkLayers) {\n      this.$config.linkLayers = layers.links;\n    }\n\n    this._attachLayers(this.$gantt);\n\n    this.callEvent(\"onReady\", []); //this.refresh();\n\n    if (this.$gantt.ext.dragTimeline) {\n      this._timelineDragScroll = this.$gantt.ext.dragTimeline.create();\n\n      this._timelineDragScroll.attach(this);\n    }\n  },\n  setSize: function setSize(width, height) {\n    var config = this.$getConfig();\n\n    if (width * 1 === width) {\n      this.$config.width = width;\n    }\n\n    if (height * 1 === height) {\n      this.$config.height = height;\n      var dataHeight = Math.max(this.$config.height - config.scale_height);\n      this.$task_data.style.height = dataHeight + 'px';\n    }\n\n    this.refresh();\n    this.$task_bg.style.backgroundImage = \"\";\n\n    if (config.smart_rendering && this.$config.rowStore) {\n      this.$task_bg.style.height = this.getTotalHeight() + \"px\";\n    } else {\n      this.$task_bg.style.height = \"\";\n    }\n\n    var scale = this._tasks; //timeline area layers\n\n    var data_els = this.$task_data.childNodes;\n\n    for (var i = 0, len = data_els.length; i < len; i++) {\n      var el = data_els[i];\n      if (el.hasAttribute(\"data-layer\") && el.style) el.style.width = scale.full_width + \"px\";\n    }\n  },\n  isVisible: function isVisible() {\n    if (this.$parent && this.$parent.$config) {\n      return !this.$parent.$config.hidden;\n    } else {\n      return this.$task.offsetWidth;\n    }\n  },\n  getSize: function getSize() {\n    var config = this.$getConfig();\n    var store = this.$config.rowStore;\n    var contentHeight = store ? this.getTotalHeight() : 0,\n        contentWidth = this.isVisible() ? this._tasks.full_width : 0;\n    return {\n      x: this.isVisible() ? this.$config.width : 0,\n      y: this.isVisible() ? this.$config.height : 0,\n      contentX: this.isVisible() ? contentWidth : 0,\n      contentY: this.isVisible() ? config.scale_height + contentHeight : 0,\n      scrollHeight: this.isVisible() ? contentHeight : 0,\n      scrollWidth: this.isVisible() ? contentWidth : 0\n    };\n  },\n  scrollTo: function scrollTo(left, top) {\n    if (!this.isVisible()) return;\n    var scrolled = false;\n    this.$config.scrollTop = this.$config.scrollTop || 0;\n    this.$config.scrollLeft = this.$config.scrollLeft || 0;\n\n    if (top * 1 === top) {\n      this.$config.scrollTop = top;\n      this.$task_data.scrollTop = this.$config.scrollTop;\n      scrolled = true;\n    }\n\n    if (left * 1 === left) {\n      this.$task.scrollLeft = left;\n      this.$config.scrollLeft = this.$task.scrollLeft;\n\n      this._refreshScales();\n\n      scrolled = true;\n    }\n\n    if (scrolled) {\n      this.callEvent(\"onScroll\", [this.$config.scrollLeft, this.$config.scrollTop]);\n    }\n  },\n  _refreshScales: function _refreshScales() {\n    if (!this.isVisible()) return;\n    var config = this.$getConfig();\n    if (!config.smart_scales) return;\n    var viewPort = this.getViewPort();\n    var scales = this._scales;\n    this.$task_scale.innerHTML = this._getScaleChunkHtml(scales, viewPort.x, viewPort.x_end);\n  },\n  getViewPort: function getViewPort() {\n    var scrollLeft = this.$config.scrollLeft || 0;\n    var scrollTop = this.$config.scrollTop || 0;\n    var height = this.$config.height || 0;\n    var width = this.$config.width || 0;\n    return {\n      y: scrollTop,\n      y_end: scrollTop + height,\n      x: scrollLeft,\n      x_end: scrollLeft + width,\n      height: height,\n      width: width\n    };\n  },\n  _createLayerConfig: function _createLayerConfig() {\n    var self = this;\n\n    var taskFilter = function taskFilter() {\n      return self.isVisible();\n    };\n\n    var barVisible = function barVisible(id, task) {\n      return !task.hide_bar;\n    };\n\n    var taskLayers = [{\n      expose: true,\n      renderer: this.$gantt.$ui.layers.taskBar(),\n      container: this.$task_bars,\n      filter: [taskFilter, barVisible]\n    }, {\n      renderer: this.$gantt.$ui.layers.taskSplitBar(),\n      filter: [taskFilter],\n      container: this.$task_bars,\n      append: true\n    }, {\n      renderer: this.$gantt.$ui.layers.taskRollupBar(),\n      filter: [taskFilter],\n      container: this.$task_bars,\n      append: true\n    }, {\n      renderer: this.$gantt.$ui.layers.taskBg(),\n      container: this.$task_bg,\n      filter: [//function(){\n      //\treturn !self.$getConfig().static_background;\n      //},\n      taskFilter]\n    }];\n    var linkLayers = [{\n      expose: true,\n      renderer: this.$gantt.$ui.layers.link(),\n      container: this.$task_links,\n      filter: [taskFilter]\n    }];\n    return {\n      tasks: taskLayers,\n      links: linkLayers\n    };\n  },\n  _attachLayers: function _attachLayers(gantt) {\n    this._taskLayers = [];\n    this._linkLayers = [];\n    var self = this;\n    var layers = this.$gantt.$services.getService(\"layers\");\n\n    if (this.$config.bind) {\n      this._bindStore();\n\n      var taskRenderer = layers.getDataRender(this.$config.bind);\n\n      if (!taskRenderer) {\n        taskRenderer = layers.createDataRender({\n          name: this.$config.bind,\n          defaultContainer: function defaultContainer() {\n            return self.$task_data;\n          }\n        });\n      }\n\n      taskRenderer.container = function () {\n        return self.$task_data;\n      };\n\n      var taskLayers = this.$config.layers;\n\n      for (var i = 0; taskLayers && i < taskLayers.length; i++) {\n        var layer = taskLayers[i];\n\n        if (typeof layer == \"string\") {\n          layer = this.$gantt.$ui.layers[layer]();\n        }\n\n        if (typeof layer == \"function\" || layer && layer.render && layer.update) {\n          layer = {\n            renderer: layer\n          };\n        }\n\n        layer.view = this;\n        var bar_layer = taskRenderer.addLayer(layer);\n\n        this._taskLayers.push(bar_layer);\n\n        if (layer.expose) {\n          this._taskRenderer = taskRenderer.getLayer(bar_layer);\n        }\n      }\n\n      this._initStaticBackgroundRender();\n    }\n\n    if (this.$config.bindLinks) {\n      self.$config.linkStore = self.$gantt.getDatastore(self.$config.bindLinks);\n      var linkRenderer = layers.getDataRender(this.$config.bindLinks);\n\n      if (!linkRenderer) {\n        linkRenderer = layers.createDataRender({\n          name: this.$config.bindLinks,\n          defaultContainer: function defaultContainer() {\n            return self.$task_data;\n          }\n        });\n      }\n\n      var linkLayers = this.$config.linkLayers;\n\n      for (var i = 0; linkLayers && i < linkLayers.length; i++) {\n        if (typeof layer == \"string\") {\n          layer = this.$gantt.$ui.layers[layer]();\n        }\n\n        var layer = linkLayers[i];\n        layer.view = this; //\tlayer.getViewPort = getViewPort;\n        //\tsubscribeSmartRender(layer);\n\n        var linkLayer = linkRenderer.addLayer(layer);\n\n        this._taskLayers.push(linkLayer);\n\n        if (linkLayers[i].expose) {\n          this._linkRenderer = linkRenderer.getLayer(linkLayer);\n        }\n      }\n    }\n  },\n  _initStaticBackgroundRender: function _initStaticBackgroundRender() {\n    var self = this;\n    var staticRender = canvasRender.create();\n    var store = self.$config.rowStore;\n    if (!store) return;\n    this._staticBgHandler = store.attachEvent(\"onStoreUpdated\", function (id, item, mode) {\n      if (id !== null) {\n        return;\n      }\n\n      if (!self.isVisible()) return;\n      var config = self.$getConfig();\n\n      if (config.static_background || config.timeline_placeholder) {\n        var store = self.$gantt.getDatastore(self.$config.bind);\n        var staticBgContainer = self.$task_bg_static;\n\n        if (!staticBgContainer) {\n          staticBgContainer = document.createElement(\"div\");\n          staticBgContainer.className = \"gantt_task_bg\";\n          self.$task_bg_static = staticBgContainer;\n\n          if (self.$task_bg.nextSibling) {\n            self.$task_data.insertBefore(staticBgContainer, self.$task_bg.nextSibling);\n          } else {\n            self.$task_data.appendChild(staticBgContainer);\n          }\n        }\n\n        if (store) {\n          var staticBackgroundHeight = self.getTotalHeight();\n\n          if (config.timeline_placeholder) {\n            staticBackgroundHeight = config.timeline_placeholder.height || self.$task_data.offsetHeight || 99999;\n          }\n\n          staticRender.render(staticBgContainer, config, self.getScale(), staticBackgroundHeight, self.getItemHeight(item ? item.id : null));\n        }\n      } else if (config.static_background) {\n        if (self.$task_bg_static && self.$task_bg_static.parentNode) {\n          self.$task_bg_static.parentNode.removeChild(self.$task_bg_static);\n        }\n      }\n    });\n    this.attachEvent(\"onDestroy\", function () {\n      staticRender.destroy();\n    });\n\n    this._initStaticBackgroundRender = function () {}; //init once\n\n  },\n  _clearLayers: function _clearLayers(gantt) {\n    var layers = this.$gantt.$services.getService(\"layers\");\n    var taskRenderer = layers.getDataRender(this.$config.bind);\n    var linkRenderer = layers.getDataRender(this.$config.bindLinks);\n\n    if (this._taskLayers) {\n      for (var i = 0; i < this._taskLayers.length; i++) {\n        taskRenderer.removeLayer(this._taskLayers[i]);\n      }\n    }\n\n    if (this._linkLayers) {\n      for (var i = 0; i < this._linkLayers.length; i++) {\n        linkRenderer.removeLayer(this._linkLayers[i]);\n      }\n    }\n\n    this._linkLayers = [];\n    this._taskLayers = [];\n  },\n  _render_tasks_scales: function _render_tasks_scales() {\n    var config = this.$getConfig();\n    var scales_html = \"\",\n        outer_width = 0,\n        scale_height = 0;\n    var state = this.$gantt.getState();\n\n    if (this.isVisible()) {\n      var helpers = this.$scaleHelper;\n\n      var scales = this._getScales();\n\n      scale_height = config.scale_height;\n      var availWidth = this.$config.width;\n\n      if (config.autosize == \"x\" || config.autosize == \"xy\") {\n        availWidth = Math.max(config.autosize_min_width, 0);\n      }\n\n      var cfgs = helpers.prepareConfigs(scales, config.min_column_width, availWidth, scale_height - 1, state.min_date, state.max_date, config.rtl);\n      var cfg = this._tasks = cfgs[cfgs.length - 1];\n      this._scales = cfgs;\n      this._posFromDateCache = {};\n      scales_html = this._getScaleChunkHtml(cfgs, 0, this.$config.width);\n      outer_width = cfg.full_width + \"px\"; //cfg.full_width + (this._scroll_sizes().y ? scrollSizes.scroll_size : 0) + \"px\";\n\n      scale_height += \"px\";\n    }\n\n    this.$task_scale.style.height = scale_height;\n    this.$task_data.style.width = this.$task_scale.style.width = outer_width;\n    this.$task_scale.innerHTML = scales_html;\n  },\n  _getScaleChunkHtml: function _get_scale_chunk_html(scales, fromPos, toPos) {\n    var templates = this.$gantt.templates;\n    var html = [];\n    var css = templates.scale_row_class;\n\n    for (var i = 0; i < scales.length; i++) {\n      var cssClass = \"gantt_scale_line\";\n      var tplClass = css(scales[i]);\n\n      if (tplClass) {\n        cssClass += \" \" + tplClass;\n      }\n\n      html.push(\"<div class=\\\"\" + cssClass + \"\\\" style=\\\"height:\" + scales[i].height + \"px;position:relative;line-height:\" + scales[i].height + \"px\\\">\" + this._prepareScaleHtml(scales[i], fromPos, toPos) + \"</div>\");\n    }\n\n    return html.join(\"\");\n  },\n  _prepareScaleHtml: function _prepare_scale_html(config, fromPos, toPos) {\n    var globalConfig = this.$getConfig();\n    var globalTemplates = this.$gantt.templates;\n    var cells = [];\n    var date = null,\n        css = null;\n    var content = config.format || config.template || config.date;\n\n    if (typeof content === \"string\") {\n      content = this.$gantt.date.date_to_str(content);\n    }\n\n    var startIndex = 0,\n        endIndex = config.count;\n\n    if (globalConfig.smart_scales && !isNaN(fromPos) && !isNaN(toPos)) {\n      startIndex = helpers.findBinary(config.left, fromPos);\n      endIndex = helpers.findBinary(config.left, toPos) + 1;\n    }\n\n    css = config.css || function () {};\n\n    if (!config.css && globalConfig.inherit_scale_class) {\n      css = globalTemplates.scale_cell_class;\n    }\n\n    for (var i = startIndex; i < endIndex; i++) {\n      if (!config.trace_x[i]) break;\n      date = new Date(config.trace_x[i]);\n      var value = content.call(this, date),\n          width = config.width[i],\n          height = config.height,\n          left = config.left[i],\n          style = \"\",\n          template = \"\",\n          cssclass = \"\";\n\n      if (width) {\n        var position = globalConfig.smart_scales ? \"position:absolute;left:\" + left + \"px\" : \"\";\n        style = \"width:\" + width + \"px;height:\" + height + \"px;\" + position;\n        cssclass = \"gantt_scale_cell\" + (i == config.count - 1 ? \" gantt_last_cell\" : \"\");\n        template = css.call(this, date);\n        if (template) cssclass += \" \" + template;\n\n        var ariaAttr = this.$gantt._waiAria.getTimelineCellAttr(value);\n\n        var cell = \"<div class='\" + cssclass + \"'\" + ariaAttr + \" style='\" + style + \"'>\" + value + \"</div>\";\n        cells.push(cell);\n      } else {//do not render ignored cells\n      }\n    }\n\n    return cells.join(\"\");\n  },\n  dateFromPos: function dateFromPos(x) {\n    var scale = this._tasks;\n\n    if (x < 0 || x > scale.full_width || !scale.full_width) {\n      return null;\n    }\n\n    var ind = helpers.findBinary(this._tasks.left, x);\n    var summ = this._tasks.left[ind];\n    var col_width = scale.width[ind] || scale.col_width;\n    var part = 0;\n\n    if (col_width) {\n      part = (x - summ) / col_width;\n\n      if (scale.rtl) {\n        part = 1 - part;\n      }\n    }\n\n    var unit = 0;\n\n    if (part) {\n      unit = this._getColumnDuration(scale, scale.trace_x[ind]);\n    }\n\n    var date = new Date(scale.trace_x[ind].valueOf() + Math.round(part * unit));\n    return date;\n  },\n  posFromDate: function posFromDate(date) {\n    if (!this.isVisible()) return 0;\n\n    if (!date) {\n      return 0;\n    }\n\n    var dateValue = String(date.valueOf());\n\n    if (this._posFromDateCache[dateValue] !== undefined) {\n      return this._posFromDateCache[dateValue];\n    }\n\n    var ind = this.columnIndexByDate(date);\n    this.$gantt.assert(ind >= 0, \"Invalid day index\");\n    var wholeCells = Math.floor(ind);\n    var partCell = ind % 1;\n\n    var pos = this._tasks.left[Math.min(wholeCells, this._tasks.width.length - 1)];\n\n    if (wholeCells == this._tasks.width.length) pos += this._tasks.width[this._tasks.width.length - 1]; //for(var i=1; i <= wholeCells; i++)\n    //\tpos += gantt._tasks.width[i-1];\n\n    if (partCell) {\n      if (wholeCells < this._tasks.width.length) {\n        pos += this._tasks.width[wholeCells] * (partCell % 1);\n      } else {\n        pos += 1;\n      }\n    }\n\n    var roundPos = Math.round(pos);\n    this._posFromDateCache[dateValue] = roundPos;\n    return Math.round(roundPos);\n  },\n  _getNextVisibleColumn: function _getNextVisibleColumn(startIndex, columns, ignores) {\n    // iterate columns to the right\n    var date = +columns[startIndex];\n    var visibleDateIndex = startIndex;\n\n    while (ignores[date]) {\n      visibleDateIndex++;\n      date = +columns[visibleDateIndex];\n    }\n\n    return visibleDateIndex;\n  },\n  _getPrevVisibleColumn: function _getPrevVisibleColumn(startIndex, columns, ignores) {\n    // iterate columns to the left\n    var date = +columns[startIndex];\n    var visibleDateIndex = startIndex;\n\n    while (ignores[date]) {\n      visibleDateIndex--;\n      date = +columns[visibleDateIndex];\n    }\n\n    return visibleDateIndex;\n  },\n  _getClosestVisibleColumn: function _getClosestVisibleColumn(startIndex, columns, ignores) {\n    var visibleDateIndex = this._getNextVisibleColumn(startIndex, columns, ignores);\n\n    if (!columns[visibleDateIndex]) {\n      visibleDateIndex = this._getPrevVisibleColumn(startIndex, columns, ignores);\n    }\n\n    return visibleDateIndex;\n  },\n  columnIndexByDate: function columnIndexByDate(date) {\n    var pos = new Date(date).valueOf();\n    var days = this._tasks.trace_x_ascending,\n        ignores = this._tasks.ignore_x;\n    var state = this.$gantt.getState();\n\n    if (pos <= state.min_date) {\n      if (this._tasks.rtl) {\n        return days.length;\n      } else {\n        return 0;\n      }\n    }\n\n    if (pos >= state.max_date) {\n      if (this._tasks.rtl) {\n        return 0;\n      } else {\n        return days.length;\n      }\n    }\n\n    var dateIndex = helpers.findBinary(days, pos);\n\n    var visibleIndex = this._getClosestVisibleColumn(dateIndex, days, ignores);\n\n    var visibleDate = days[visibleIndex];\n    var transition = this._tasks.trace_index_transition;\n\n    if (!visibleDate) {\n      if (transition) {\n        return transition[0];\n      } else {\n        return 0;\n      }\n    }\n\n    var part = (date - days[visibleIndex]) / this._getColumnDuration(this._tasks, days[visibleIndex]);\n\n    if (transition) {\n      return transition[visibleIndex] + (1 - part);\n    } else {\n      return visibleIndex + part;\n    }\n  },\n  getItemPosition: function getItemPosition(task, start_date, end_date) {\n    var xLeft, xRight, width;\n\n    if (this._tasks.rtl) {\n      xRight = this.posFromDate(start_date || task.start_date);\n      xLeft = this.posFromDate(end_date || task.end_date);\n    } else {\n      xLeft = this.posFromDate(start_date || task.start_date);\n      xRight = this.posFromDate(end_date || task.end_date);\n    }\n\n    width = Math.max(xRight - xLeft, 0);\n    var y = this.getItemTop(task.id);\n    var height = this.getBarHeight(task.id);\n    var rowHeight = this.getItemHeight(task.id);\n    return {\n      left: xLeft,\n      top: y,\n      height: height,\n      width: width,\n      rowHeight: rowHeight\n    };\n  },\n  getBarHeight: function getBarHeight(taskId, isMilestoneRender) {\n    var config = this.$getConfig();\n    var task = this.$config.rowStore.getItem(taskId); // height of the bar item\n\n    var height = task.task_height || task.bar_height || config.bar_height || config.task_height;\n    var rowHeight = this.getItemHeight(taskId);\n\n    if (height == \"full\") {\n      var offset = config.task_height_offset || 5;\n      height = rowHeight - offset;\n    } //item height cannot be bigger than row height\n\n\n    height = Math.min(height, rowHeight);\n\n    if (isMilestoneRender) {\n      // to get correct height for addapting Milestone to the row\n      height = Math.round(height / Math.sqrt(2));\n    }\n\n    return Math.max(height, 0);\n  },\n  getScale: function getScale() {\n    return this._tasks;\n  },\n  _getScales: function _get_scales() {\n    var config = this.$getConfig();\n    var helpers = this.$scaleHelper;\n    var scales = [helpers.primaryScale(config)].concat(helpers.getSubScales(config));\n    helpers.sortScales(scales);\n    return scales;\n  },\n  _getColumnDuration: function _get_coll_duration(scale, date) {\n    return this.$gantt.date.add(date, scale.step, scale.unit) - date;\n  },\n  _bindStore: function _bindStore() {\n    if (this.$config.bind) {\n      var rowStore = this.$gantt.getDatastore(this.$config.bind);\n      this.$config.rowStore = rowStore;\n\n      if (rowStore && !rowStore._timelineCacheAttached) {\n        var self = this;\n        rowStore._timelineCacheAttached = rowStore.attachEvent(\"onBeforeFilter\", function () {\n          self._resetTopPositionHeight();\n        });\n      }\n    }\n  },\n  _unbindStore: function _unbindStore() {\n    if (this.$config.bind) {\n      var rowStore = this.$gantt.getDatastore(this.$config.bind);\n\n      if (rowStore && rowStore._timelineCacheAttached) {\n        rowStore.detachEvent(rowStore._timelineCacheAttached);\n        rowStore._timelineCacheAttached = false;\n      }\n    }\n  },\n  refresh: function refresh() {\n    this._bindStore();\n\n    if (this.$config.bindLinks) {\n      this.$config.linkStore = this.$gantt.getDatastore(this.$config.bindLinks);\n    }\n\n    this._resetTopPositionHeight();\n\n    this._resetHeight();\n\n    this._initStaticBackgroundRender();\n\n    this._render_tasks_scales();\n  },\n  destructor: function destructor() {\n    var gantt = this.$gantt;\n\n    this._clearLayers(gantt);\n\n    this._unbindStore();\n\n    this.$task = null;\n    this.$task_scale = null;\n    this.$task_data = null;\n    this.$task_bg = null;\n    this.$task_links = null;\n    this.$task_bars = null;\n    this.$gantt = null;\n\n    if (this.$config.rowStore) {\n      this.$config.rowStore.detachEvent(this._staticBgHandler);\n      this.$config.rowStore = null;\n    }\n\n    if (this.$config.linkStore) {\n      this.$config.linkStore = null;\n    }\n\n    if (this._timelineDragScroll) {\n      this._timelineDragScroll.destructor();\n\n      this._timelineDragScroll = null;\n    }\n\n    this.callEvent(\"onDestroy\", []);\n    this.detachAllEvents();\n  }\n};\nmodule.exports = Timeline;","module.exports = function (item, view, config) {\n  return {\n    top: view.getItemTop(item.id),\n    height: view.getItemHeight(item.id),\n    left: 0,\n    right: Infinity\n  };\n};","function create(gantt) {\n  var events = [];\n  return {\n    delegate: function delegate(event, className, handler, root) {\n      events.push([event, className, handler, root]);\n      var helper = gantt.$services.getService(\"mouseEvents\");\n      helper.delegate(event, className, handler, root);\n    },\n    destructor: function destructor() {\n      var mouseEvents = gantt.$services.getService(\"mouseEvents\");\n\n      for (var i = 0; i < events.length; i++) {\n        var h = events[i];\n        mouseEvents.detach(h[0], h[1], h[2], h[3]);\n      }\n\n      events = [];\n    }\n  };\n}\n\nmodule.exports = create;","var domHelpers = require(\"../utils/dom_helpers\"),\n    utils = require(\"../../../utils/utils\"),\n    eventable = require(\"../../../utils/eventable\"),\n    gridResize = require(\"./grid_resize\"),\n    topPositionMixin = require(\"../row_position_mixin\"),\n    rowResize = require(\"./task_grid_row_resize\");\n\nvar ColumnDnd = require(\"../plugins/column_grid_dnd\")[\"default\"];\n\nvar Grid = function Grid(parent, config, factory, gantt) {\n  this.$config = utils.mixin({}, config || {});\n  this.$gantt = gantt;\n  this.$parent = parent;\n  eventable(this);\n  this.$state = {};\n  utils.mixin(this, topPositionMixin(this));\n};\n\nGrid.prototype = {\n  init: function init(container) {\n    var gantt = this.$gantt;\n\n    var gridAriaAttr = gantt._waiAria.gridAttrString();\n\n    var gridDataAriaAttr = gantt._waiAria.gridDataAttrString();\n\n    var _ganttConfig = this.$getConfig();\n\n    var reorderColumns = _ganttConfig.reorder_grid_columns || false;\n\n    if (this.$config.reorder_grid_columns !== undefined) {\n      reorderColumns = this.$config.reorder_grid_columns;\n    }\n\n    container.innerHTML = \"<div class='gantt_grid' style='height:inherit;width:inherit;' \" + gridAriaAttr + \"></div>\";\n    this.$grid = container.childNodes[0];\n    this.$grid.innerHTML = \"<div class='gantt_grid_scale' \" + gantt._waiAria.gridScaleRowAttrString() + \"></div><div class='gantt_grid_data' \" + gridDataAriaAttr + \"></div>\";\n    this.$grid_scale = this.$grid.childNodes[0];\n    this.$grid_data = this.$grid.childNodes[1];\n    var attr = _ganttConfig[this.$config.bind + \"_attribute\"];\n\n    if (!attr && this.$config.bind) {\n      attr = \"data-\" + this.$config.bind + \"-id\";\n    }\n\n    this.$config.item_attribute = attr || null;\n\n    if (!this.$config.layers) {\n      var layers = this._createLayerConfig();\n\n      this.$config.layers = layers;\n    }\n\n    var resizer = gridResize(gantt, this);\n    resizer.init();\n    this._renderHeaderResizers = resizer.doOnRender;\n    this._mouseDelegates = require(\"../mouse_event_container\")(gantt);\n    var resizerrow = rowResize(gantt, this);\n    resizerrow.init();\n\n    this._addLayers(this.$gantt);\n\n    this._initEvents();\n\n    if (reorderColumns) {\n      this._columnDND = new ColumnDnd(gantt, this);\n\n      this._columnDND.init();\n    }\n\n    this.callEvent(\"onReady\", []); //this.refresh();\n  },\n  _validateColumnWidth: function _validateColumnWidth(column, property) {\n    // user can set {name:\"text\", width:\"200\",...} for some reason,\n    // check and convert it to number when possible\n    var value = column[property];\n\n    if (value && value != \"*\") {\n      var gantt = this.$gantt;\n      var numericWidth = value * 1;\n\n      if (isNaN(numericWidth)) {\n        gantt.assert(false, \"Wrong \" + property + \" value of column \" + column.name);\n      } else {\n        column[property] = numericWidth;\n      }\n    }\n  },\n  setSize: function setSize(width, height) {\n    this.$config.width = this.$state.width = width;\n    this.$config.height = this.$state.height = height; // TODO: maybe inherit and override in a subclass instead of extending here\n\n    var columns = this.getGridColumns(),\n        innerWidth = 0;\n    var config = this.$getConfig();\n    var elasticColumns = config.grid_elastic_columns;\n\n    for (var i = 0, l = columns.length; i < l; i++) {\n      this._validateColumnWidth(columns[i], \"min_width\");\n\n      this._validateColumnWidth(columns[i], \"max_width\");\n\n      this._validateColumnWidth(columns[i], \"width\");\n\n      innerWidth += columns[i].width * 1;\n    }\n\n    var outerWidth;\n\n    if (isNaN(innerWidth) || !this.$config.scrollable) {\n      outerWidth = this._setColumnsWidth(width + 1);\n      innerWidth = outerWidth;\n    }\n\n    if (this.$config.scrollable && elasticColumns && !isNaN(innerWidth)) {\n      // GS-1352: Allow resizing the grid columns, then the grid width is increased\n      // or keep the grid width, but don't allow column resize to affect the grid width\n      var columnProperty = \"width\";\n\n      if (elasticColumns == \"min_width\") {\n        columnProperty = \"min_width\";\n      }\n\n      var newColumnWidth = 0;\n      columns.forEach(function (col) {\n        newColumnWidth += col[columnProperty] || config.min_grid_column_width;\n      }); //newColumnWidth--; // the total column width shouldn't match the outerWidth // GS-2190 reducing width seems to be not needed\n\n      var columnsWidth = Math.max(newColumnWidth, width);\n      innerWidth = this._setColumnsWidth(columnsWidth);\n      outerWidth = width;\n    }\n\n    if (this.$config.scrollable) {\n      this.$grid_scale.style.width = innerWidth + \"px\";\n      this.$grid_data.style.width = innerWidth + \"px\";\n    } else {\n      this.$grid_scale.style.width = \"inherit\";\n      this.$grid_data.style.width = \"inherit\";\n    }\n\n    this.$config.width -= 1;\n    var config = this.$getConfig();\n\n    if (outerWidth !== width) {\n      if (outerWidth !== undefined) {\n        config.grid_width = outerWidth;\n        this.$config.width = outerWidth - 1;\n      } else {\n        if (!isNaN(innerWidth)) {\n          this._setColumnsWidth(innerWidth);\n\n          config.grid_width = innerWidth;\n          this.$config.width = innerWidth - 1;\n        }\n      }\n    }\n\n    var dataHeight = Math.max(this.$state.height - config.scale_height, 0);\n    this.$grid_data.style.height = dataHeight + \"px\";\n    this.refresh();\n  },\n  getSize: function getSize() {\n    var config = this.$getConfig();\n    var store = this.$config.rowStore;\n\n    var contentHeight = store ? this.getTotalHeight() : 0,\n        contentWidth = this._getGridWidth();\n\n    var size = {\n      x: this.$state.width,\n      y: this.$state.height,\n      contentX: this.isVisible() ? contentWidth : 0,\n      contentY: this.isVisible() ? config.scale_height + contentHeight : 0,\n      scrollHeight: this.isVisible() ? contentHeight : 0,\n      scrollWidth: this.isVisible() ? contentWidth : 0\n    };\n    return size;\n  },\n  _bindStore: function _bindStore() {\n    if (this.$config.bind) {\n      var rowStore = this.$gantt.getDatastore(this.$config.bind);\n      this.$config.rowStore = rowStore;\n\n      if (rowStore && !rowStore._gridCacheAttached) {\n        var self = this;\n        rowStore._gridCacheAttached = rowStore.attachEvent(\"onBeforeFilter\", function () {\n          self._resetTopPositionHeight();\n        });\n      }\n    }\n  },\n  _unbindStore: function _unbindStore() {\n    if (this.$config.bind) {\n      var rowStore = this.$gantt.getDatastore(this.$config.bind);\n\n      if (rowStore && rowStore._gridCacheAttached) {\n        rowStore.detachEvent(rowStore._gridCacheAttached);\n        rowStore._gridCacheAttached = false;\n      }\n    }\n  },\n  refresh: function refresh() {\n    this._bindStore();\n\n    this._resetTopPositionHeight();\n\n    this._resetHeight();\n\n    this._initSmartRenderingPlaceholder();\n\n    this._calculateGridWidth();\n\n    this._renderGridHeader();\n  },\n  getViewPort: function getViewPort() {\n    var scrollLeft = this.$config.scrollLeft || 0;\n    var scrollTop = this.$config.scrollTop || 0;\n    var height = this.$config.height || 0;\n    var width = this.$config.width || 0;\n    return {\n      y: scrollTop,\n      y_end: scrollTop + height,\n      x: scrollLeft,\n      x_end: scrollLeft + width,\n      height: height,\n      width: width\n    };\n  },\n  scrollTo: function scrollTo(left, top) {\n    if (!this.isVisible()) return;\n    var scrolled = false;\n    this.$config.scrollTop = this.$config.scrollTop || 0;\n    this.$config.scrollLeft = this.$config.scrollLeft || 0;\n\n    if (left * 1 == left) {\n      this.$config.scrollLeft = this.$state.scrollLeft = this.$grid.scrollLeft = left;\n      scrolled = true;\n    } // var config = this.$getConfig();\n\n\n    if (top * 1 == top) {\n      this.$config.scrollTop = this.$state.scrollTop = this.$grid_data.scrollTop = top;\n      scrolled = true;\n    }\n\n    if (scrolled) {\n      this.callEvent(\"onScroll\", [this.$config.scrollLeft, this.$config.scrollTop]);\n    }\n  },\n  getColumnIndex: function getColumnIndex(name, excludeHidden) {\n    var columns = this.$getConfig().columns;\n    var hiddenIndexShift = 0;\n\n    for (var i = 0; i < columns.length; i++) {\n      // GS-1257. If the cell is hidden, the target column index should be correct\n      if (excludeHidden && columns[i].hide) {\n        hiddenIndexShift++;\n      }\n\n      if (columns[i].name == name) {\n        return i - hiddenIndexShift;\n      }\n    }\n\n    return null;\n  },\n  getColumn: function getColumn(name) {\n    var index = this.getColumnIndex(name);\n\n    if (index === null) {\n      return null;\n    }\n\n    return this.$getConfig().columns[index];\n  },\n  getGridColumns: function getGridColumns() {\n    var config = this.$getConfig();\n    return config.columns.slice();\n  },\n  isVisible: function isVisible() {\n    if (this.$parent && this.$parent.$config) {\n      return !this.$parent.$config.hidden;\n    } else {\n      return this.$grid.offsetWidth;\n    }\n  },\n  // getItemHeight: function () {\n  // \tvar config = this.$getConfig();\n  // \treturn config.row_height;\n  // },\n  _createLayerConfig: function _createLayerConfig() {\n    var gantt = this.$gantt;\n    var self = this;\n    var layers = [{\n      renderer: gantt.$ui.layers.gridLine(),\n      container: this.$grid_data,\n      filter: [function () {\n        return self.isVisible();\n      }]\n    }, {\n      renderer: gantt.$ui.layers.gridTaskRowResizer(),\n      container: this.$grid_data,\n      append: true,\n      filter: [function () {\n        return gantt.config.resize_rows;\n      }]\n    }];\n    return layers;\n  },\n  _addLayers: function _addLayers(gantt) {\n    if (!this.$config.bind) return;\n    this._taskLayers = [];\n    var self = this;\n    var layers = this.$gantt.$services.getService(\"layers\");\n    var taskRenderer = layers.getDataRender(this.$config.bind);\n\n    if (!taskRenderer) {\n      taskRenderer = layers.createDataRender({\n        name: this.$config.bind,\n        defaultContainer: function defaultContainer() {\n          return self.$grid_data;\n        }\n      });\n    }\n\n    var taskLayers = this.$config.layers;\n\n    for (var i = 0; taskLayers && i < taskLayers.length; i++) {\n      var layer = taskLayers[i];\n      layer.view = this;\n      var bar_layer = taskRenderer.addLayer(layer);\n\n      this._taskLayers.push(bar_layer);\n    }\n\n    this._bindStore();\n\n    this._initSmartRenderingPlaceholder();\n  },\n  _refreshPlaceholderOnStoreUpdate: function _refreshPlaceholderOnStoreUpdate(id) {\n    var config = this.$getConfig(),\n        store = this.$config.rowStore;\n\n    if (!store || id !== null || !this.isVisible() || !config.smart_rendering) {\n      return;\n    }\n\n    var contentHeight;\n\n    if (this.$config.scrollY) {\n      var scroll = this.$gantt.$ui.getView(this.$config.scrollY);\n      if (scroll) contentHeight = scroll.getScrollState().scrollSize;\n    }\n\n    if (!contentHeight) {\n      contentHeight = store ? this.getTotalHeight() : 0;\n    }\n\n    if (contentHeight) {\n      if (this.$rowsPlaceholder && this.$rowsPlaceholder.parentNode) {\n        this.$rowsPlaceholder.parentNode.removeChild(this.$rowsPlaceholder);\n      }\n\n      var placeholder = this.$rowsPlaceholder = document.createElement(\"div\");\n      placeholder.style.visibility = \"hidden\";\n      placeholder.style.height = contentHeight + \"px\";\n      placeholder.style.width = \"1px\";\n      this.$grid_data.appendChild(placeholder);\n    }\n  },\n  _initSmartRenderingPlaceholder: function _initSmartRenderingPlaceholder() {\n    var store = this.$config.rowStore;\n\n    if (!store) {\n      return;\n    } else {\n      this._initSmartRenderingPlaceholder = function () {};\n    }\n\n    this._staticBgHandler = store.attachEvent(\"onStoreUpdated\", utils.bind(this._refreshPlaceholderOnStoreUpdate, this));\n  },\n  _initEvents: function _initEvents() {\n    var gantt = this.$gantt;\n\n    this._mouseDelegates.delegate(\"click\", \"gantt_close\", gantt.bind(function (e, id, trg) {\n      var store = this.$config.rowStore;\n      if (!store) return true;\n      var target = domHelpers.locateAttribute(e, this.$config.item_attribute);\n\n      if (target) {\n        store.close(target.getAttribute(this.$config.item_attribute));\n      }\n\n      return false;\n    }, this), this.$grid);\n\n    this._mouseDelegates.delegate(\"click\", \"gantt_open\", gantt.bind(function (e, id, trg) {\n      var store = this.$config.rowStore;\n      if (!store) return true;\n      var target = domHelpers.locateAttribute(e, this.$config.item_attribute);\n\n      if (target) {\n        store.open(target.getAttribute(this.$config.item_attribute));\n      }\n\n      return false;\n    }, this), this.$grid);\n  },\n  _clearLayers: function _clearLayers(gantt) {\n    var layers = this.$gantt.$services.getService(\"layers\");\n    var taskRenderer = layers.getDataRender(this.$config.bind);\n\n    if (this._taskLayers) {\n      for (var i = 0; i < this._taskLayers.length; i++) {\n        taskRenderer.removeLayer(this._taskLayers[i]);\n      }\n    }\n\n    this._taskLayers = [];\n  },\n  _getColumnWidth: function _getColumnWidth(column, config, width) {\n    var min_width = column.min_width || config.min_grid_column_width;\n    var new_width = Math.max(width, min_width || 10);\n    if (column.max_width) new_width = Math.min(new_width, column.max_width);\n    return new_width;\n  },\n  // set min width only if width < than config.min_grid_column_width\n  _checkGridColumnMinWidthLimits: function _checkGridColumnMinWidthLimits(columns, config) {\n    for (var i = 0, l = columns.length; i < l; i++) {\n      var width = columns[i].width * 1;\n\n      if (!columns[i].min_width && width < config.min_grid_column_width) {\n        columns[i].min_width = width;\n      }\n    }\n  },\n  // return min and max possible grid width according to restricts\n  _getGridWidthLimits: function _getGridWidthLimits() {\n    var config = this.$getConfig(),\n        columns = this.getGridColumns(),\n        min_limit = 0,\n        max_limit = 0;\n\n    for (var i = 0; i < columns.length; i++) {\n      min_limit += columns[i].min_width ? columns[i].min_width : config.min_grid_column_width;\n\n      if (max_limit !== undefined) {\n        max_limit = columns[i].max_width ? max_limit + columns[i].max_width : undefined;\n      }\n    }\n\n    this._checkGridColumnMinWidthLimits(columns, config); // FIX ME: should it be before calculating limits?\n\n\n    return [min_limit, max_limit];\n  },\n  // resize columns to get total newWidth, starting from columns[start_index]\n  _setColumnsWidth: function _setColumnsWidth(newWidth, start_index) {\n    var config = this.$getConfig();\n    var columns = this.getGridColumns(),\n        columns_width = 0,\n        final_width = newWidth;\n    start_index = !window.isNaN(start_index) ? start_index : -1;\n\n    for (var i = 0, l = columns.length; i < l; i++) {\n      columns_width += columns[i].width * 1;\n    }\n\n    if (window.isNaN(columns_width)) {\n      this._calculateGridWidth();\n\n      columns_width = 0;\n\n      for (var i = 0, l = columns.length; i < l; i++) {\n        columns_width += columns[i].width * 1;\n      }\n    }\n\n    var extra_width = final_width - columns_width;\n    var start_width = 0;\n\n    for (var i = 0; i < start_index + 1; i++) {\n      start_width += columns[i].width;\n    }\n\n    columns_width -= start_width;\n\n    for (var i = start_index + 1; i < columns.length; i++) {\n      var col = columns[i];\n      var share = Math.round(extra_width * (col.width / columns_width)); // columns have 2 additional restrict fields - min_width & max_width that are set by user\n\n      if (extra_width < 0) {\n        if (col.min_width && col.width + share < col.min_width) share = col.min_width - col.width;else if (!col.min_width && config.min_grid_column_width && col.width + share < config.min_grid_column_width) share = config.min_grid_column_width - col.width;\n      } else if (col.max_width && col.width + share > col.max_width) share = col.max_width - col.width;\n\n      columns_width -= col.width;\n      col.width += share;\n      extra_width -= share;\n    }\n\n    var iterator = extra_width > 0 ? 1 : -1;\n\n    while (extra_width > 0 && iterator === 1 || extra_width < 0 && iterator === -1) {\n      var curExtra = extra_width;\n\n      for (i = start_index + 1; i < columns.length; i++) {\n        var new_width = columns[i].width + iterator;\n\n        if (new_width == this._getColumnWidth(columns[i], config, new_width)) {\n          extra_width -= iterator;\n          columns[i].width = new_width;\n        }\n\n        if (!extra_width) break;\n      }\n\n      if (curExtra == extra_width) break;\n    } // if impossible to resize the right-side columns, resize the start column\n\n\n    if (extra_width && start_index > -1) {\n      var new_width = columns[start_index].width + extra_width;\n      if (new_width == this._getColumnWidth(columns[start_index], config, new_width)) columns[start_index].width = new_width;\n    } //if (this.callEvent(\"onGridResizeEnd\", [config.grid_width, final_width]) === false)\n    //\treturn;\n\n\n    return this._getColsTotalWidth();\n  },\n  _getColsTotalWidth: function _getColsTotalWidth() {\n    var columns = this.getGridColumns();\n    var cols_width = 0;\n\n    for (var i = 0; i < columns.length; i++) {\n      var v = parseFloat(columns[i].width);\n\n      if (window.isNaN(v)) {\n        return false;\n      }\n\n      cols_width += v;\n    }\n\n    return cols_width;\n  },\n  _calculateGridWidth: function _calculateGridWidth() {\n    var config = this.$getConfig();\n    var columns = this.getGridColumns();\n    var cols_width = 0;\n    var unknown = [];\n    var width = [];\n\n    for (var i = 0; i < columns.length; i++) {\n      var v = parseFloat(columns[i].width);\n\n      if (window.isNaN(v)) {\n        v = config.min_grid_column_width || 10;\n        unknown.push(i);\n      }\n\n      width[i] = v;\n      cols_width += v;\n    }\n\n    var gridWidth = this._getGridWidth() + 1;\n\n    if (config.autofit || unknown.length) {\n      var diff = gridWidth - cols_width; // TODO: logic may be improved for proportional changing of width\n      // autofit adjusts columns widths to the outer grid width\n      // it doesn't makes sense if grid has inner scroll with elastic columns\n\n      if (config.autofit && !config.grid_elastic_columns) {\n        // delta must be added for all columns\n        for (var i = 0; i < width.length; i++) {\n          var delta = Math.round(diff / (width.length - i));\n          width[i] += delta;\n\n          var new_width = this._getColumnWidth(columns[i], config, width[i]);\n\n          if (new_width != width[i]) {\n            delta = new_width - width[i];\n            width[i] = new_width;\n          }\n\n          diff -= delta;\n        }\n      } else if (unknown.length) {\n        // there are several columns with undefined width\n        for (var i = 0; i < unknown.length; i++) {\n          var delta = Math.round(diff / (unknown.length - i)); // no float values, just integer\n\n          var index = unknown[i];\n          width[index] += delta;\n\n          var new_width = this._getColumnWidth(columns[index], config, width[index]);\n\n          if (new_width != width[index]) {\n            delta = new_width - width[index];\n            width[index] = new_width;\n          }\n\n          diff -= delta;\n        }\n      }\n\n      for (var i = 0; i < width.length; i++) {\n        columns[i].width = width[i];\n      }\n    } else {\n      var changed = gridWidth != cols_width;\n      this.$config.width = cols_width - 1;\n      config.grid_width = cols_width;\n\n      if (changed) {\n        this.$parent._setContentSize(this.$config.width, null);\n      }\n    }\n  },\n  _renderGridHeader: function _renderGridHeader() {\n    var gantt = this.$gantt;\n    var config = this.$getConfig();\n    var locale = this.$gantt.locale;\n    var templates = this.$gantt.templates;\n    var columns = this.getGridColumns();\n\n    if (config.rtl) {\n      columns = columns.reverse();\n    }\n\n    var cells = [];\n    var width = 0,\n        labels = locale.labels;\n    var lineHeigth = config.scale_height - 1;\n\n    for (var i = 0; i < columns.length; i++) {\n      var last = i == columns.length - 1;\n      var col = columns[i]; // ensure columns have non-empty names\n\n      if (!col.name) {\n        col.name = gantt.uid() + \"\";\n      }\n\n      var colWidth = col.width * 1;\n\n      var gridWidth = this._getGridWidth();\n\n      if (last && gridWidth > width + colWidth) col.width = colWidth = gridWidth - width;\n      width += colWidth;\n      var sort = gantt._sort && col.name == gantt._sort.name ? \"<div class='gantt_sort gantt_\" + gantt._sort.direction + \"'></div>\" : \"\";\n      var cssClass = [\"gantt_grid_head_cell\", \"gantt_grid_head_\" + col.name, last ? \"gantt_last_cell\" : \"\", templates.grid_header_class(col.name, col)].join(\" \");\n      var style = \"width:\" + (colWidth - (last ? 1 : 0)) + \"px;\";\n      var label = col.label || labels[\"column_\" + col.name] || labels[col.name];\n      label = label || \"\";\n\n      var ariaAttrs = gantt._waiAria.gridScaleCellAttrString(col, label);\n\n      var cell = \"<div class='\" + cssClass + \"' style='\" + style + \"' \" + ariaAttrs + \" data-column-id='\" + col.name + \"' column_id='\" + col.name + \"'\" + \" data-column-name='\" + col.name + \"' data-column-index='\" + i + \"'\" + \">\" + label + sort + \"</div>\";\n      cells.push(cell);\n    }\n\n    this.$grid_scale.style.height = config.scale_height + \"px\";\n    this.$grid_scale.style.lineHeight = lineHeigth + \"px\"; //this.$grid_scale.style.width = \"inherit\";\n\n    this.$grid_scale.innerHTML = cells.join(\"\");\n\n    if (this._renderHeaderResizers) {\n      this._renderHeaderResizers();\n    }\n  },\n  _getGridWidth: function _getGridWidth() {\n    // TODO: refactor/remove/comment some of _getGridWidth/this.$config.width/this.$state.width, it's not clear what they do\n    return this.$config.width;\n  },\n  destructor: function destructor() {\n    this._clearLayers(this.$gantt);\n\n    if (this._mouseDelegates) {\n      this._mouseDelegates.destructor();\n\n      this._mouseDelegates = null;\n    }\n\n    this._unbindStore();\n\n    this.$grid = null;\n    this.$grid_scale = null;\n    this.$grid_data = null;\n    this.$gantt = null;\n\n    if (this.$config.rowStore) {\n      this.$config.rowStore.detachEvent(this._staticBgHandler);\n      this.$config.rowStore = null;\n    }\n\n    this.callEvent(\"onDestroy\", []);\n    this.detachAllEvents();\n  }\n};\nmodule.exports = Grid;","var utils = require(\"../../../utils/utils\");\n\nfunction ScaleHelper(gantt) {\n  var dateHelper = gantt.date;\n  var services = gantt.$services;\n  return {\n    getSum: function getSum(sizes, from, to) {\n      if (to === undefined) to = sizes.length - 1;\n      if (from === undefined) from = 0;\n      var summ = 0;\n\n      for (var i = from; i <= to; i++) {\n        summ += sizes[i];\n      }\n\n      return summ;\n    },\n    setSumWidth: function setSumWidth(sum_width, scale, from, to) {\n      var parts = scale.width;\n      if (to === undefined) to = parts.length - 1;\n      if (from === undefined) from = 0;\n      var length = to - from + 1;\n      if (from > parts.length - 1 || length <= 0 || to > parts.length - 1) return;\n      var oldWidth = this.getSum(parts, from, to);\n      var diff = sum_width - oldWidth;\n      this.adjustSize(diff, parts, from, to);\n      this.adjustSize(-diff, parts, to + 1);\n      scale.full_width = this.getSum(parts);\n    },\n    splitSize: function splitSize(width, count) {\n      var arr = [];\n\n      for (var i = 0; i < count; i++) {\n        arr[i] = 0;\n      }\n\n      this.adjustSize(width, arr);\n      return arr;\n    },\n    adjustSize: function adjustSize(width, parts, from, to) {\n      if (!from) from = 0;\n      if (to === undefined) to = parts.length - 1;\n      var length = to - from + 1;\n      var full = this.getSum(parts, from, to);\n\n      for (var i = from; i <= to; i++) {\n        var share = Math.floor(width * (full ? parts[i] / full : 1 / length));\n        full -= parts[i];\n        width -= share;\n        length--;\n        parts[i] += share;\n      }\n\n      parts[parts.length - 1] += width;\n    },\n    sortScales: function sortScales(scales) {\n      function cellSize(unit, step) {\n        var d = new Date(1970, 0, 1);\n        return dateHelper.add(d, step, unit) - d;\n      }\n\n      scales.sort(function (a, b) {\n        if (cellSize(a.unit, a.step) < cellSize(b.unit, b.step)) {\n          return 1;\n        } else if (cellSize(a.unit, a.step) > cellSize(b.unit, b.step)) {\n          return -1;\n        } else {\n          return 0;\n        }\n      });\n\n      for (var i = 0; i < scales.length; i++) {\n        scales[i].index = i;\n      }\n    },\n    _isLegacyMode: function _isLegacyMode(config) {\n      var scaleConfig = config || gantt.config;\n      return scaleConfig.scale_unit || scaleConfig.date_scale || scaleConfig.subscales;\n    },\n    _prepareScaleObject: function _prepareScaleObject(scale) {\n      var format = scale.format;\n\n      if (!format) {\n        format = scale.template || scale.date || \"%d %M\";\n      }\n\n      if (typeof format === \"string\") {\n        format = gantt.date.date_to_str(format);\n      }\n\n      return {\n        unit: scale.unit || \"day\",\n        step: scale.step || 1,\n        format: format,\n        css: scale.css\n      };\n    },\n    primaryScale: function primaryScale(config) {\n      var templates = services.getService(\"templateLoader\");\n\n      var legacyMode = this._isLegacyMode(config);\n\n      var scaleConfig = config || gantt.config;\n      var result;\n\n      if (legacyMode) {\n        templates.initTemplate(\"date_scale\", undefined, undefined, scaleConfig, gantt.config.templates);\n        result = {\n          unit: gantt.config.scale_unit,\n          step: gantt.config.step,\n          template: gantt.templates.date_scale,\n          date: gantt.config.date_scale,\n          css: gantt.templates.scale_cell_class\n        };\n      } else {\n        var primaryScale = scaleConfig.scales[0];\n        result = {\n          unit: primaryScale.unit,\n          step: primaryScale.step,\n          template: primaryScale.template,\n          format: primaryScale.format,\n          date: primaryScale.date,\n          css: primaryScale.css || gantt.templates.scale_cell_class\n        };\n      }\n\n      return this._prepareScaleObject(result);\n    },\n    getSubScales: function getSubScales(config) {\n      var legacyMode = this._isLegacyMode(config);\n\n      var scaleConfig = config || gantt.config;\n      var scales;\n\n      if (legacyMode) {\n        scales = scaleConfig.subscales || [];\n      } else {\n        scales = scaleConfig.scales.slice(1);\n      }\n\n      return scales.map(function (scale) {\n        return this._prepareScaleObject(scale);\n      }.bind(this));\n    },\n    prepareConfigs: function prepareConfigs(scales, min_coll_width, container_width, scale_height, minDate, maxDate, rtl) {\n      var heights = this.splitSize(scale_height, scales.length);\n      var full_width = container_width;\n      var configs = [];\n\n      for (var i = scales.length - 1; i >= 0; i--) {\n        var main_scale = i == scales.length - 1;\n        var cfg = this.initScaleConfig(scales[i], minDate, maxDate);\n\n        if (main_scale) {\n          this.processIgnores(cfg);\n        }\n\n        this.initColSizes(cfg, min_coll_width, full_width, heights[i]);\n        this.limitVisibleRange(cfg);\n\n        if (main_scale) {\n          full_width = cfg.full_width;\n        }\n\n        configs.unshift(cfg);\n      }\n\n      for (var i = 0; i < configs.length - 1; i++) {\n        this.alineScaleColumns(configs[configs.length - 1], configs[i]);\n      }\n\n      for (var i = 0; i < configs.length; i++) {\n        if (rtl) {\n          this.reverseScale(configs[i]);\n        }\n\n        this.setPosSettings(configs[i]);\n      }\n\n      return configs;\n    },\n    reverseScale: function reverseScale(scale) {\n      scale.width = scale.width.reverse();\n      scale.trace_x = scale.trace_x.reverse();\n      var indexes = scale.trace_indexes;\n      scale.trace_indexes = {};\n      scale.trace_index_transition = {};\n      scale.rtl = true;\n\n      for (var i = 0; i < scale.trace_x.length; i++) {\n        scale.trace_indexes[scale.trace_x[i].valueOf()] = i;\n        scale.trace_index_transition[indexes[scale.trace_x[i].valueOf()]] = i;\n      }\n\n      return scale;\n    },\n    setPosSettings: function setPosSettings(config) {\n      for (var i = 0, len = config.trace_x.length; i < len; i++) {\n        config.left.push((config.width[i - 1] || 0) + (config.left[i - 1] || 0));\n      }\n    },\n    _ignore_time_config: function _ignore_time_config(date, scale) {\n      if (gantt.config.skip_off_time) {\n        var skip = true;\n        var probe = date; // check dates in case custom scale unit, e.g. {unit: \"month\", step: 3}\n\n        for (var i = 0; i < scale.step; i++) {\n          if (i) {\n            probe = dateHelper.add(date, i, scale.unit);\n          }\n\n          skip = skip && !this.isWorkTime(probe, scale.unit);\n        }\n\n        return skip;\n      }\n\n      return false;\n    },\n    //defined in an extension\n    processIgnores: function processIgnores(config) {\n      config.ignore_x = {};\n      config.display_count = config.count;\n    },\n    initColSizes: function initColSizes(config, min_col_width, full_width, line_height) {\n      var cont_width = full_width;\n      config.height = line_height;\n      var column_count = config.display_count === undefined ? config.count : config.display_count;\n      if (!column_count) column_count = 1;\n      config.col_width = Math.floor(cont_width / column_count);\n\n      if (min_col_width) {\n        if (config.col_width < min_col_width) {\n          config.col_width = min_col_width;\n          cont_width = config.col_width * column_count;\n        }\n      }\n\n      config.width = [];\n      var ignores = config.ignore_x || {};\n\n      for (var i = 0; i < config.trace_x.length; i++) {\n        if (ignores[config.trace_x[i].valueOf()] || config.display_count == config.count) {\n          config.width[i] = 0;\n        } else {\n          // width of month columns should be proportional month duration\n          var width = 1;\n\n          if (config.unit == \"month\") {\n            var days = Math.round((dateHelper.add(config.trace_x[i], config.step, config.unit) - config.trace_x[i]) / (1000 * 60 * 60 * 24));\n            width = days;\n          }\n\n          config.width[i] = width;\n        }\n      }\n\n      this.adjustSize(cont_width - this.getSum(config.width)\n      /* 1 width per column from the code above */\n      , config.width);\n      config.full_width = this.getSum(config.width);\n    },\n    initScaleConfig: function initScaleConfig(config, min_date, max_date) {\n      var cfg = utils.mixin({\n        count: 0,\n        col_width: 0,\n        full_width: 0,\n        height: 0,\n        width: [],\n        left: [],\n        trace_x: [],\n        trace_indexes: {},\n        min_date: new Date(min_date),\n        max_date: new Date(max_date)\n      }, config);\n      this.eachColumn(config.unit, config.step, min_date, max_date, function (date) {\n        cfg.count++;\n        cfg.trace_x.push(new Date(date));\n        cfg.trace_indexes[date.valueOf()] = cfg.trace_x.length - 1;\n      });\n      cfg.trace_x_ascending = cfg.trace_x.slice();\n      return cfg;\n    },\n    iterateScales: function iterateScales(lower_scale, upper_scale, from, to, callback) {\n      var upper_dates = upper_scale.trace_x;\n      var lower_dates = lower_scale.trace_x;\n      var prev = from || 0;\n      var end = to || lower_dates.length - 1;\n      var prevUpper = 0;\n\n      for (var up = 1; up < upper_dates.length; up++) {\n        var target_index = lower_scale.trace_indexes[+upper_dates[up]];\n\n        if (target_index !== undefined && target_index <= end) {\n          if (callback) {\n            callback.apply(this, [prevUpper, up, prev, target_index]);\n          }\n\n          prev = target_index;\n          prevUpper = up;\n          continue;\n        }\n      }\n    },\n    alineScaleColumns: function alineScaleColumns(lower_scale, upper_scale, from, to) {\n      this.iterateScales(lower_scale, upper_scale, from, to, function (upper_start, upper_end, lower_start, lower_end) {\n        var targetWidth = this.getSum(lower_scale.width, lower_start, lower_end - 1);\n        var actualWidth = this.getSum(upper_scale.width, upper_start, upper_end - 1);\n\n        if (actualWidth != targetWidth) {\n          this.setSumWidth(targetWidth, upper_scale, upper_start, upper_end - 1);\n        }\n      });\n    },\n    eachColumn: function eachColumn(unit, step, min_date, max_date, callback) {\n      var start = new Date(min_date),\n          end = new Date(max_date);\n\n      if (dateHelper[unit + \"_start\"]) {\n        start = dateHelper[unit + \"_start\"](start);\n      }\n\n      var curr = new Date(start);\n\n      if (+curr >= +end) {\n        end = dateHelper.add(curr, step, unit);\n      }\n\n      while (+curr < +end) {\n        callback.call(this, new Date(curr));\n        var tzOffset = curr.getTimezoneOffset();\n        curr = dateHelper.add(curr, step, unit);\n        curr = gantt._correct_dst_change(curr, tzOffset, step, unit);\n        if (dateHelper[unit + '_start']) curr = dateHelper[unit + \"_start\"](curr);\n      }\n    },\n    limitVisibleRange: function limitVisibleRange(cfg) {\n      var dates = cfg.trace_x;\n      var left = 0,\n          right = cfg.width.length - 1;\n      var diff = 0;\n\n      if (+dates[0] < +cfg.min_date && left != right) {\n        var width = Math.floor(cfg.width[0] * ((dates[1] - cfg.min_date) / (dates[1] - dates[0])));\n        diff += cfg.width[0] - width;\n        cfg.width[0] = width;\n        dates[0] = new Date(cfg.min_date);\n      }\n\n      var last = dates.length - 1;\n      var lastDate = dates[last];\n      var outDate = dateHelper.add(lastDate, cfg.step, cfg.unit);\n\n      if (+outDate > +cfg.max_date && last > 0) {\n        var width = cfg.width[last] - Math.floor(cfg.width[last] * ((outDate - cfg.max_date) / (outDate - lastDate)));\n        diff += cfg.width[last] - width;\n        cfg.width[last] = width;\n      }\n\n      if (diff) {\n        var full = this.getSum(cfg.width);\n        var shared = 0;\n\n        for (var i = 0; i < cfg.width.length; i++) {\n          var share = Math.floor(diff * (cfg.width[i] / full));\n          cfg.width[i] += share;\n          shared += share;\n        }\n\n        this.adjustSize(diff - shared, cfg.width);\n      }\n    }\n  };\n}\n\nmodule.exports = ScaleHelper;","var helpers = require(\"../../../utils/helpers\");\n\nvar htmlHelpers = {\n  getHtmlSelect: function getHtmlSelect(options, attributes, value) {\n    var innerHTML = \"\";\n\n    var _this = this;\n\n    options = options || [];\n    helpers.forEach(options, function (entry) {\n      var _attributes = [{\n        key: \"value\",\n        value: entry.key\n      }];\n\n      if (value == entry.key) {\n        _attributes[_attributes.length] = {\n          key: \"selected\",\n          value: \"selected\"\n        };\n      }\n\n      if (entry.attributes) {\n        _attributes = _attributes.concat(entry.attributes);\n      }\n\n      innerHTML += _this.getHtmlOption({\n        innerHTML: entry.label\n      }, _attributes);\n    });\n    return _getHtmlContainer(\"select\", {\n      innerHTML: innerHTML\n    }, attributes);\n  },\n  getHtmlOption: function getHtmlOption(options, attributes) {\n    return _getHtmlContainer(\"option\", options, attributes);\n  },\n  getHtmlButton: function getHtmlButton(options, attributes) {\n    return _getHtmlContainer(\"button\", options, attributes);\n  },\n  getHtmlDiv: function getHtmlDiv(options, attributes) {\n    return _getHtmlContainer(\"div\", options, attributes);\n  },\n  getHtmlLabel: function getHtmlLabel(options, attributes) {\n    return _getHtmlContainer(\"label\", options, attributes);\n  },\n  getHtmlInput: function getHtmlInput(attributes) {\n    return \"<input\" + _getHtmlAttributes(attributes || []) + \">\";\n  }\n};\n\nfunction _getHtmlContainer(tag, options, attributes) {\n  var html;\n  options = options || [];\n  html = \"<\" + tag + _getHtmlAttributes(attributes || []) + \">\" + (options.innerHTML || \"\") + \"</\" + tag + \">\";\n  return html;\n}\n\nfunction _getHtmlAttributes(attributes) {\n  var html = \"\";\n  helpers.forEach(attributes, function (entry) {\n    html += \" \" + entry.key + \"='\" + entry.value + \"'\";\n  });\n  return html;\n}\n\nmodule.exports = htmlHelpers;","var helpers = require(\"../utils/helpers\");\n\nmodule.exports = function createResourceTimelineBuilder(gantt) {\n  var resourceTaskCache = {};\n  gantt.$data.tasksStore.attachEvent(\"onStoreUpdated\", function () {\n    resourceTaskCache = {};\n  });\n\n  function getResourceLoad(resource, resourceProperty, scale, timeline) {\n    var cacheKey = resource.id + \"_\" + resourceProperty + \"_\" + scale.unit + \"_\" + scale.step;\n    var res;\n\n    if (!resourceTaskCache[cacheKey]) {\n      res = resourceTaskCache[cacheKey] = calculateResourceLoad(resource, resourceProperty, scale, timeline);\n    } else {\n      res = resourceTaskCache[cacheKey];\n    }\n\n    return res;\n  }\n\n  function calculateResourceLoadFromAssignments(items, scale, assignmentsPassed) {\n    var scaleUnit = scale.unit;\n    var scaleStep = scale.step;\n    var timegrid = {};\n    var precalculatedTimes = {};\n\n    for (var i = 0; i < items.length; i++) {\n      var item = items[i];\n      var task = item;\n\n      if (assignmentsPassed) {\n        task = gantt.getTask(item.task_id);\n      }\n\n      var minDate = item.start_date || task.start_date;\n      var maxDate = item.end_date || task.end_date;\n\n      if (assignmentsPassed) {\n        if (item.start_date) {\n          minDate = new Date(Math.max(item.start_date.valueOf(), task.start_date.valueOf()));\n        }\n\n        if (item.end_date) {\n          maxDate = new Date(Math.min(item.end_date.valueOf(), task.end_date.valueOf()));\n        }\n      }\n\n      var firstColumn = helpers.findBinary(scale.trace_x, minDate.valueOf());\n      var currDate = new Date(scale.trace_x[firstColumn] || gantt.date[scaleUnit + \"_start\"](new Date(minDate)));\n      var calendar = gantt.config.work_time ? gantt.getTaskCalendar(task) : gantt;\n      precalculatedTimes[calendar.id] = {};\n\n      while (currDate < maxDate) {\n        var cachedTimes = precalculatedTimes[calendar.id];\n        var date = currDate;\n        var timestamp = date.valueOf();\n        currDate = gantt.date.add(currDate, scaleStep, scaleUnit);\n\n        if (cachedTimes[timestamp] === false) {\n          continue;\n        }\n\n        var isWorkTime = calendar.isWorkTime({\n          date: date,\n          task: task,\n          unit: scaleUnit\n        });\n\n        if (!isWorkTime) {\n          cachedTimes[timestamp] = false;\n          continue;\n        }\n\n        if (!timegrid[timestamp]) {\n          timegrid[timestamp] = {\n            tasks: [],\n            assignments: []\n          };\n        }\n\n        timegrid[timestamp].tasks.push(task);\n\n        if (assignmentsPassed) {\n          timegrid[timestamp].assignments.push(item);\n        }\n      }\n    }\n\n    return timegrid;\n  }\n\n  function calculateResourceLoad(resource, resourceProperty, scale, timeline) {\n    var items;\n    var assignmentsPassed = false;\n    var timegrid = {};\n\n    if (gantt.config.process_resource_assignments && resourceProperty === gantt.config.resource_property) {\n      if (resource.$role == \"task\") {\n        items = gantt.getResourceAssignments(resource.$resource_id, resource.$task_id);\n      } else {\n        items = gantt.getResourceAssignments(resource.id);\n      }\n\n      assignmentsPassed = true;\n    } else if (resource.$role == \"task\") {\n      items = [];\n    } else {\n      items = gantt.getTaskBy(resourceProperty, resource.id);\n    }\n\n    var timegrid = calculateResourceLoadFromAssignments(items, scale, assignmentsPassed);\n    var scaleUnit = scale.unit;\n    var scaleStep = scale.step;\n    var timetable = [];\n    var start, end, tasks, assignments, cell;\n    var config = timeline.$getConfig();\n\n    for (var i = 0; i < scale.trace_x.length; i++) {\n      start = new Date(scale.trace_x[i]);\n      end = gantt.date.add(start, scaleStep, scaleUnit);\n      cell = timegrid[start.valueOf()] || {};\n      tasks = cell.tasks || [];\n      assignments = cell.assignments || [];\n\n      if (tasks.length || config.resource_render_empty_cells) {\n        timetable.push({\n          start_date: start,\n          end_date: end,\n          tasks: tasks,\n          assignments: assignments\n        });\n      } else {\n        timetable.push(null);\n      }\n    }\n\n    return timetable;\n  }\n\n  return getResourceLoad;\n};","var __extends = require(\"../../../utils/extends\"),\n    domHelpers = require(\"../utils/dom_helpers\"),\n    Cell = require(\"./cell\");\n\nvar Layout = function (_super) {\n  \"use strict\";\n\n  __extends(Layout, _super);\n\n  function Layout(parent, config, factory) {\n    var _this = _super.apply(this, arguments) || this;\n\n    if (parent) _this.$root = true;\n\n    _this._parseConfig(config);\n\n    _this.$name = \"layout\";\n    return _this;\n  }\n\n  Layout.prototype.destructor = function () {\n    if (this.$container && this.$view) {\n      domHelpers.removeNode(this.$view);\n    }\n\n    for (var i = 0; i < this.$cells.length; i++) {\n      var child = this.$cells[i];\n      child.destructor();\n    }\n\n    this.$cells = [];\n\n    _super.prototype.destructor.call(this);\n  };\n\n  Layout.prototype._resizeScrollbars = function (autosize, scrollbars) {\n    var scrollChanged = false;\n    var visibleScrollbars = [],\n        hiddenScrollbars = [];\n    var scrollbarsToHide = [];\n\n    function showScrollbar(scrollbar) {\n      scrollbar.$parent.show();\n      scrollChanged = true;\n      visibleScrollbars.push(scrollbar);\n    }\n\n    function hideScrollbar(scrollbar) {\n      scrollbar.$parent.hide();\n      scrollChanged = true;\n      hiddenScrollbars.push(scrollbar);\n    }\n\n    var scrollbar;\n\n    for (var i = 0; i < scrollbars.length; i++) {\n      scrollbar = scrollbars[i];\n\n      if (autosize[scrollbar.$config.scroll]) {\n        hideScrollbar(scrollbar);\n      } else if (scrollbar.shouldHide()) {\n        //hideScrollbar(scrollbar);\n        scrollbarsToHide.push(scrollbar);\n      } else if (scrollbar.shouldShow()) {\n        showScrollbar(scrollbar);\n      } else {\n        if (scrollbar.isVisible()) {\n          visibleScrollbars.push(scrollbar);\n        } else {\n          hiddenScrollbars.push(scrollbar);\n        }\n      }\n    }\n\n    var visibleGroups = {};\n\n    for (var i = 0; i < visibleScrollbars.length; i++) {\n      if (visibleScrollbars[i].$config.group) {\n        visibleGroups[visibleScrollbars[i].$config.group] = true;\n      }\n    } // GS-2220\n\n\n    scrollbarsToHide.forEach(function (scrollbar) {\n      if (!(scrollbar.$config.group && visibleGroups[scrollbar.$config.group])) {\n        hideScrollbar(scrollbar);\n      }\n    });\n\n    for (var i = 0; i < hiddenScrollbars.length; i++) {\n      scrollbar = hiddenScrollbars[i];\n\n      if (scrollbar.$config.group && visibleGroups[scrollbar.$config.group]) {\n        showScrollbar(scrollbar); // GS-707 If the scrollbar was hidden then showed, the container resize shouldn't happen because of that\n\n        for (var j = 0; j < visibleScrollbars.length; j++) {\n          if (visibleScrollbars[j] == scrollbar) {\n            this.$gantt.$scrollbarRepaint = true;\n            break;\n          }\n        }\n      }\n    }\n\n    return scrollChanged;\n  };\n\n  Layout.prototype._syncCellSizes = function (groupName, newSize) {\n    if (!groupName) return;\n    var groups = {};\n\n    this._eachChild(function (cell) {\n      if (cell.$config.group && cell.$name != \"scrollbar\" && cell.$name != \"resizer\") {\n        if (!groups[cell.$config.group]) {\n          groups[cell.$config.group] = [];\n        }\n\n        groups[cell.$config.group].push(cell);\n      }\n    });\n\n    if (groups[groupName]) {\n      this._syncGroupSize(groups[groupName], newSize);\n    }\n\n    return groups[groupName];\n  };\n\n  Layout.prototype._syncGroupSize = function (cells, newSize) {\n    if (!cells.length) return;\n    var property = cells[0].$parent._xLayout ? \"width\" : \"height\";\n    var direction = cells[0].$parent.getNextSibling(cells[0].$id) ? 1 : -1;\n    var newSizeValue = newSize.value;\n    var isGravity = newSize.isGravity;\n\n    for (var i = 0; i < cells.length; i++) {\n      var ownSize = cells[i].getSize();\n      var resizeSibling = direction > 0 ? cells[i].$parent.getNextSibling(cells[i].$id) : cells[i].$parent.getPrevSibling(cells[i].$id);\n\n      if (resizeSibling.$name == \"resizer\") {\n        resizeSibling = direction > 0 ? resizeSibling.$parent.getNextSibling(resizeSibling.$id) : resizeSibling.$parent.getPrevSibling(resizeSibling.$id);\n      }\n\n      var siblingSize = resizeSibling.getSize();\n\n      if (!isGravity) {\n        if (resizeSibling[property]) {\n          var totalGravity = ownSize.gravity + siblingSize.gravity;\n          var totalSize = ownSize[property] + siblingSize[property];\n          var k = totalGravity / totalSize;\n          cells[i].$config.gravity = k * newSizeValue;\n          resizeSibling.$config[property] = totalSize - newSizeValue;\n          resizeSibling.$config.gravity = totalGravity - k * newSizeValue;\n        } else {\n          cells[i].$config[property] = newSizeValue;\n        }\n      } else {\n        cells[i].$config.gravity = newSizeValue;\n      }\n\n      var mainGrid = this.$gantt.$ui.getView(\"grid\");\n\n      if (mainGrid && cells[i].$content === mainGrid && !mainGrid.$config.scrollable && !isGravity) {\n        this.$gantt.config.grid_width = newSizeValue;\n      }\n    }\n  };\n\n  Layout.prototype.resize = function (startStage) {\n    var mainCall = false;\n\n    if (this.$root && !this._resizeInProgress) {\n      this.callEvent(\"onBeforeResize\", []);\n      mainCall = true;\n      this._resizeInProgress = true;\n    }\n\n    _super.prototype.resize.call(this, true);\n\n    _super.prototype.resize.call(this, false);\n\n    if (mainCall) {\n      var contentViews = [];\n      contentViews = contentViews.concat(this.getCellsByType(\"viewCell\"));\n      contentViews = contentViews.concat(this.getCellsByType(\"viewLayout\"));\n      contentViews = contentViews.concat(this.getCellsByType(\"hostCell\"));\n      var scrollbars = this.getCellsByType(\"scroller\");\n\n      for (var i = 0; i < contentViews.length; i++) {\n        if (!contentViews[i].$config.hidden) contentViews[i].setContentSize();\n      }\n\n      var autosize = this._getAutosizeMode(this.$config.autosize);\n      /* // possible to rollback set content size when autisize is disabled, not sure if need to\r\n      \t\tcontentViews.forEach(function(view){\r\n      \t\t\tconst parent = view.$parent;\r\n      \t\t\tif(!autosize.x){\r\n      \t\t\t\tif(parent.$config.$originalWidthStored){\r\n      \t\t\t\t\tparent.$config.$originalWidthStored = false;\r\n      \t\t\t\t\tparent.$config.width = parent.$config.$originalWidth;\r\n      \t\t\t\t\tparent.$config.$originalWidth = undefined;\r\n      \t\t\t\t}\r\n      \t\t\t}\r\n      \n      \t\t\tif(!autosize.y){\r\n      \t\t\t\tif(parent.$config.$originalHeightStored){\r\n      \t\t\t\t\tparent.$config.$originalHeightStored = false;\r\n      \t\t\t\t\tparent.$config.height = parent.$config.$originalHeight;\r\n      \t\t\t\t\tparent.$config.$originalHeight = undefined;\r\n      \t\t\t\t}\r\n      \t\t\t}\r\n      \t\t});*/\n\n\n      var scrollChanged = this._resizeScrollbars(autosize, scrollbars);\n\n      if (this.$config.autosize) {\n        this.autosize(this.$config.autosize);\n        contentViews.forEach(function (view) {\n          var parent = view.$parent;\n          var sizes = parent.getContentSize(autosize);\n\n          if (autosize.x) {\n            if (!parent.$config.$originalWidthStored) {\n              parent.$config.$originalWidthStored = true;\n              parent.$config.$originalWidth = parent.$config.width;\n            }\n\n            parent.$config.width = sizes.width;\n          }\n\n          if (autosize.y) {\n            if (!parent.$config.$originalHeightStored) {\n              parent.$config.$originalHeightStored = true;\n              parent.$config.$originalHeight = parent.$config.height;\n            }\n\n            parent.$config.height = sizes.height;\n          }\n        });\n        scrollChanged = true;\n      }\n\n      if (scrollChanged) {\n        this.resize();\n\n        for (var i = 0; i < contentViews.length; i++) {\n          if (!contentViews[i].$config.hidden) contentViews[i].setContentSize();\n        }\n      }\n\n      this.callEvent(\"onResize\", []);\n    }\n\n    if (mainCall) {\n      this._resizeInProgress = false;\n    }\n  };\n\n  Layout.prototype._eachChild = function (code, cell) {\n    cell = cell || this;\n    code(cell);\n\n    if (cell.$cells) {\n      for (var i = 0; i < cell.$cells.length; i++) {\n        this._eachChild(code, cell.$cells[i]);\n      }\n    }\n  };\n\n  Layout.prototype.isChild = function (view) {\n    var res = false;\n\n    this._eachChild(function (child) {\n      if (child === view || child.$content === view) {\n        res = true;\n      }\n    });\n\n    return res;\n  };\n\n  Layout.prototype.getCellsByType = function (type) {\n    var res = [];\n\n    if (type === this.$name) {\n      res.push(this);\n    }\n\n    if (this.$content && this.$content.$name == type) {\n      res.push(this.$content);\n    }\n\n    if (this.$cells) {\n      for (var i = 0; i < this.$cells.length; i++) {\n        var children = Layout.prototype.getCellsByType.call(this.$cells[i], type);\n\n        if (children.length) {\n          res.push.apply(res, children);\n        }\n      }\n    }\n\n    return res;\n  };\n\n  Layout.prototype.getNextSibling = function (cellId) {\n    var index = this.cellIndex(cellId);\n\n    if (index >= 0 && this.$cells[index + 1]) {\n      return this.$cells[index + 1];\n    } else {\n      return null;\n    }\n  };\n\n  Layout.prototype.getPrevSibling = function (cellId) {\n    var index = this.cellIndex(cellId);\n\n    if (index >= 0 && this.$cells[index - 1]) {\n      return this.$cells[index - 1];\n    } else {\n      return null;\n    }\n  };\n\n  Layout.prototype.cell = function (id) {\n    for (var i = 0; i < this.$cells.length; i++) {\n      var child = this.$cells[i];\n\n      if (child.$id === id) {\n        return child;\n      }\n\n      var sub = child.cell(id);\n\n      if (sub) {\n        return sub;\n      }\n    }\n  };\n\n  Layout.prototype.cellIndex = function (id) {\n    for (var i = 0; i < this.$cells.length; i++) {\n      if (this.$cells[i].$id === id) {\n        return i;\n      }\n    }\n\n    return -1;\n  };\n\n  Layout.prototype.moveView = function (view, ind) {\n    if (this.$cells[ind] !== view) {\n      return window.alert(\"Not implemented\");\n    } else {\n      ind += this.$config.header ? 1 : 0;\n      var node = this.$view;\n\n      if (ind >= node.childNodes.length) {\n        node.appendChild(view.$view);\n      } else {\n        node.insertBefore(view.$view, node.childNodes[ind]);\n      }\n    }\n  };\n\n  Layout.prototype._parseConfig = function (config) {\n    this.$cells = [];\n    this._xLayout = !config.rows;\n    var cells = config.rows || config.cols || config.views;\n\n    for (var i = 0; i < cells.length; i++) {\n      var cell = cells[i];\n      cell.mode = this._xLayout ? \"x\" : \"y\";\n      var $content = this.$factory.initUI(cell, this);\n\n      if (!$content) {\n        cells.splice(i, 1);\n        i--;\n      } else {\n        $content.$parent = this;\n        this.$cells.push($content);\n      }\n    }\n  };\n\n  Layout.prototype.getCells = function () {\n    return this.$cells;\n  };\n\n  Layout.prototype.render = function () {\n    var view = domHelpers.insertNode(this.$container, this.$toHTML());\n    this.$fill(view, null);\n    this.callEvent(\"onReady\", []);\n    this.resize(); // do simple repaint after the first call\n\n    this.render = this.resize;\n  };\n\n  Layout.prototype.$fill = function (node, parent) {\n    this.$view = node;\n    this.$parent = parent;\n    var cells = domHelpers.getChildNodes(node, \"gantt_layout_cell\");\n\n    for (var i = cells.length - 1; i >= 0; i--) {\n      var sub = this.$cells[i];\n      sub.$fill(cells[i], this); // initially hidden cell\n\n      if (sub.$config.hidden) {\n        sub.$view.parentNode.removeChild(sub.$view);\n      }\n    }\n  };\n\n  Layout.prototype.$toHTML = function () {\n    var mode = this._xLayout ? \"x\" : \"y\";\n    var html = [];\n\n    for (var i = 0; i < this.$cells.length; i++) {\n      html.push(this.$cells[i].$toHTML());\n    }\n\n    return _super.prototype.$toHTML.call(this, html.join(\"\"), (this.$root ? \"gantt_layout_root \" : \"\") + \"gantt_layout gantt_layout_\" + mode);\n  };\n\n  Layout.prototype.getContentSize = function (mode) {\n    var contentWidth = 0,\n        contentHeight = 0;\n    var cellSize, cell, borders;\n\n    for (var i = 0; i < this.$cells.length; i++) {\n      cell = this.$cells[i];\n      if (cell.$config.hidden) continue;\n      cellSize = cell.getContentSize(mode);\n\n      if (cell.$config.view === \"scrollbar\" && mode[cell.$config.scroll]) {\n        cellSize.height = 0;\n        cellSize.width = 0;\n      }\n\n      if (cell.$config.resizer) {\n        if (this._xLayout) {\n          cellSize.height = 0;\n        } else {\n          cellSize.width = 0;\n        }\n      }\n\n      borders = cell._getBorderSizes();\n\n      if (this._xLayout) {\n        contentWidth += cellSize.width + borders.horizontal;\n        contentHeight = Math.max(contentHeight, cellSize.height + borders.vertical);\n      } else {\n        contentWidth = Math.max(contentWidth, cellSize.width + borders.horizontal);\n        contentHeight += cellSize.height + borders.vertical;\n      }\n    }\n\n    borders = this._getBorderSizes();\n    contentWidth += borders.horizontal;\n    contentHeight += borders.vertical; // GS-149 & GS-150: By default this code only increases the container sizes, because of that, the cell sizes\n    // are also increased. Keep this code here in the case if something goes wrong\n\n    /*\r\n    if(this.$root){\r\n    \tcontentWidth += 1;\r\n    \tcontentHeight += 1;\r\n    }\r\n    */\n\n    return {\n      width: contentWidth,\n      height: contentHeight\n    };\n  };\n\n  Layout.prototype._cleanElSize = function (value) {\n    return (value || \"\").toString().replace(\"px\", \"\") * 1 || 0;\n  };\n\n  Layout.prototype._getBoxStyles = function (div) {\n    var computed = null;\n\n    if (window.getComputedStyle) {\n      computed = window.getComputedStyle(div, null);\n    } else {\n      //IE with elem.currentStyle does not calculate sizes from %, so will use the default approach\n      computed = {\n        \"width\": div.clientWidth,\n        \"height\": div.clientHeight\n      };\n    }\n\n    var properties = [\"width\", \"height\", \"paddingTop\", \"paddingBottom\", \"paddingLeft\", \"paddingRight\", \"borderLeftWidth\", \"borderRightWidth\", \"borderTopWidth\", \"borderBottomWidth\"];\n    var styles = {\n      boxSizing: computed.boxSizing == \"border-box\"\n    };\n\n    if (computed.MozBoxSizing) {\n      styles.boxSizing = computed.MozBoxSizing == \"border-box\";\n    }\n\n    for (var i = 0; i < properties.length; i++) {\n      styles[properties[i]] = computed[properties[i]] ? this._cleanElSize(computed[properties[i]]) : 0;\n    }\n\n    var box = {\n      horPaddings: styles.paddingLeft + styles.paddingRight + styles.borderLeftWidth + styles.borderRightWidth,\n      vertPaddings: styles.paddingTop + styles.paddingBottom + styles.borderTopWidth + styles.borderBottomWidth,\n      borderBox: styles.boxSizing,\n      innerWidth: styles.width,\n      innerHeight: styles.height,\n      outerWidth: styles.width,\n      outerHeight: styles.height\n    };\n\n    if (box.borderBox) {\n      box.innerWidth -= box.horPaddings;\n      box.innerHeight -= box.vertPaddings;\n    } else {\n      box.outerWidth += box.horPaddings;\n      box.outerHeight += box.vertPaddings;\n    }\n\n    return box;\n  };\n\n  Layout.prototype._getAutosizeMode = function (config) {\n    var res = {\n      x: false,\n      y: false\n    };\n\n    if (config === \"xy\") {\n      res.x = res.y = true;\n    } else if (config === \"y\" || config === true) {\n      res.y = true;\n    } else if (config === \"x\") {\n      res.x = true;\n    }\n\n    return res;\n  };\n\n  Layout.prototype.autosize = function (mode) {\n    var res = this._getAutosizeMode(mode);\n\n    var boxSizes = this._getBoxStyles(this.$container);\n\n    var contentSizes = this.getContentSize(mode);\n    var node = this.$container;\n\n    if (res.x) {\n      if (boxSizes.borderBox) {\n        contentSizes.width += boxSizes.horPaddings;\n      }\n\n      node.style.width = contentSizes.width + \"px\";\n    }\n\n    if (res.y) {\n      if (boxSizes.borderBox) {\n        contentSizes.height += boxSizes.vertPaddings;\n      }\n\n      node.style.height = contentSizes.height + \"px\";\n    }\n  };\n\n  Layout.prototype.getSize = function () {\n    this._sizes = [];\n    var width = 0;\n    var minWidth = 0;\n    var maxWidth = 100000000000;\n    var height = 0;\n    var maxHeight = 100000000000;\n    var minHeight = 0;\n\n    for (var i = 0; i < this.$cells.length; i++) {\n      var size = this._sizes[i] = this.$cells[i].getSize();\n\n      if (this.$cells[i].$config.hidden) {\n        continue;\n      }\n\n      if (this._xLayout) {\n        if (!size.width && size.minWidth) {\n          width += size.minWidth;\n        } else {\n          width += size.width;\n        }\n\n        maxWidth += size.maxWidth;\n        minWidth += size.minWidth;\n        height = Math.max(height, size.height);\n        maxHeight = Math.min(maxHeight, size.maxHeight); // min of maxHeight\n\n        minHeight = Math.max(minHeight, size.minHeight); // max of minHeight\n      } else {\n        if (!size.height && size.minHeight) {\n          height += size.minHeight;\n        } else {\n          height += size.height;\n        }\n\n        maxHeight += size.maxHeight;\n        minHeight += size.minHeight;\n        width = Math.max(width, size.width);\n        maxWidth = Math.min(maxWidth, size.maxWidth); // min of maxWidth\n\n        minWidth = Math.max(minWidth, size.minWidth); // max of minWidth\n      }\n    }\n\n    var self = _super.prototype.getSize.call(this); // maxWidth\n\n\n    if (self.maxWidth >= 100000) {\n      self.maxWidth = maxWidth;\n    } // maxHeight\n\n\n    if (self.maxHeight >= 100000) {\n      self.maxHeight = maxHeight;\n    } // minWidth\n\n\n    self.minWidth = self.minWidth !== self.minWidth ? 0 : self.minWidth; // || self.width || Math.max(minWidth, width);\n    // minHeight\n\n    self.minHeight = self.minHeight !== self.minHeight ? 0 : self.minHeight; //self.minHeight || self.height || Math.max(minHeight, height);\n    // sizes with paddings and margins\n\n    if (this._xLayout) {\n      self.minWidth += this.$config.margin * this.$cells.length || 0;\n      self.minWidth += this.$config.padding * 2 || 0;\n      self.minHeight += this.$config.padding * 2 || 0;\n    } else {\n      self.minHeight += this.$config.margin * this.$cells.length || 0;\n      self.minHeight += this.$config.padding * 2 || 0;\n    }\n\n    return self;\n  }; // calc total gravity and free space\n\n\n  Layout.prototype._calcFreeSpace = function (s, cell, xLayout) {\n    var min = xLayout ? cell.minWidth : cell.minHeight;\n    var max = xLayout ? cell.maxWidth : cell.maxWidth;\n    var side = s;\n\n    if (!side) {\n      side = Math.floor(this._free / this._gravity * cell.gravity);\n\n      if (side > max) {\n        side = max;\n        this._free -= side;\n        this._gravity -= cell.gravity;\n      }\n\n      if (side < min) {\n        side = min;\n        this._free -= side;\n        this._gravity -= cell.gravity;\n      }\n    } else {\n      if (side > max) {\n        side = max;\n      }\n\n      if (side < min) {\n        side = min;\n      }\n\n      this._free -= side;\n    }\n\n    return side;\n  };\n\n  Layout.prototype._calcSize = function (s, size, xLayout) {\n    var side = s;\n    var min = xLayout ? size.minWidth : size.minHeight;\n    var max = xLayout ? size.maxWidth : size.maxHeight;\n\n    if (!side) {\n      side = Math.floor(this._free / this._gravity * size.gravity);\n    }\n\n    if (side > max) {\n      side = max;\n    }\n\n    if (side < min) {\n      side = min;\n    }\n\n    return side;\n  };\n\n  Layout.prototype._configureBorders = function () {\n    if (this.$root) {\n      this._setBorders([this._borders.left, this._borders.top, this._borders.right, this._borders.bottom], this);\n    }\n\n    var borderClass = this._xLayout ? this._borders.right : this._borders.bottom;\n    var cells = this.$cells;\n    var lastVisibleIndex = cells.length - 1;\n\n    for (var i = lastVisibleIndex; i >= 0; i--) {\n      if (!cells[i].$config.hidden) {\n        lastVisibleIndex = i;\n        break;\n      }\n    }\n\n    for (var i = 0; i < cells.length; i++) {\n      if (cells[i].$config.hidden) {\n        continue;\n      }\n\n      var lastCell = i >= lastVisibleIndex;\n      var borderColorClass = \"\";\n\n      if (!lastCell && cells[i + 1]) {\n        if (cells[i + 1].$config.view == \"scrollbar\") {\n          if (this._xLayout) {\n            lastCell = true;\n          } else {\n            borderColorClass = \"gantt_layout_cell_border_transparent\";\n          }\n        }\n      }\n\n      this._setBorders(lastCell ? [] : [borderClass, borderColorClass], cells[i]);\n    }\n  };\n\n  Layout.prototype._updateCellVisibility = function () {\n    var oldVisibleCells = this._visibleCells || {};\n    var firstCall = !this._visibleCells;\n    var visibleCells = {};\n    var cell = null;\n    var parentVisibility = [];\n\n    for (var i = 0; i < this._sizes.length; i++) {\n      cell = this.$cells[i];\n\n      if (cell.$config.hide_empty) {\n        parentVisibility.push(cell);\n      }\n\n      if (!firstCall && cell.$config.hidden && oldVisibleCells[cell.$id]) {\n        cell._hide(true);\n      } else if (!cell.$config.hidden && !oldVisibleCells[cell.$id]) {\n        cell._hide(false);\n      }\n\n      if (!cell.$config.hidden) {\n        visibleCells[cell.$id] = true;\n      }\n    }\n\n    this._visibleCells = visibleCells; // GS-27. A way to hide the whole cell if all its children are hidden\n\n    for (var i = 0; i < parentVisibility.length; i++) {\n      var cell = parentVisibility[i];\n      var children = cell.$cells;\n      var hideCell = true;\n      children.forEach(function (child) {\n        if (!child.$config.hidden && !child.$config.resizer) {\n          hideCell = false;\n        }\n      });\n      cell.$config.hidden = hideCell;\n    }\n  };\n\n  Layout.prototype.setSize = function (x, y) {\n    this._configureBorders();\n\n    _super.prototype.setSize.call(this, x, y);\n\n    y = this.$lastSize.contentY;\n    x = this.$lastSize.contentX;\n    var padding = this.$config.padding || 0;\n    this.$view.style.padding = padding + \"px\";\n    this._gravity = 0;\n    this._free = this._xLayout ? x : y;\n    this._free -= padding * 2; // calc all gravity\n\n    var cell, size;\n\n    this._updateCellVisibility();\n\n    for (var i = 0; i < this._sizes.length; i++) {\n      cell = this.$cells[i];\n\n      if (cell.$config.hidden) {\n        continue;\n      }\n\n      var margin = this.$config.margin || 0;\n\n      if (cell.$name == \"resizer\" && !margin) {\n        margin = -1;\n      } // set margins to child cell\n\n\n      var cellView = cell.$view;\n      var marginSide = this._xLayout ? \"marginRight\" : \"marginBottom\";\n\n      if (i !== this.$cells.length - 1) {\n        cellView.style[marginSide] = margin + \"px\";\n        this._free -= margin; // calc free space without margin\n      }\n\n      size = this._sizes[i];\n\n      if (this._xLayout) {\n        if (!size.width) {\n          this._gravity += size.gravity;\n        }\n      } else {\n        if (!size.height) {\n          this._gravity += size.gravity;\n        }\n      }\n    }\n\n    for (var i = 0; i < this._sizes.length; i++) {\n      cell = this.$cells[i];\n\n      if (cell.$config.hidden) {\n        continue;\n      }\n\n      size = this._sizes[i];\n      var width = size.width;\n      var height = size.height;\n\n      if (this._xLayout) {\n        this._calcFreeSpace(width, size, true);\n      } else {\n        this._calcFreeSpace(height, size, false);\n      }\n    }\n\n    for (var i = 0; i < this.$cells.length; i++) {\n      cell = this.$cells[i];\n\n      if (cell.$config.hidden) {\n        continue;\n      }\n\n      size = this._sizes[i];\n      var dx = void 0;\n      var dy = void 0;\n\n      if (this._xLayout) {\n        dx = this._calcSize(size.width, size, true);\n        dy = y - padding * 2; // layout height without paddings\n      } else {\n        dx = x - padding * 2; // layout width without paddings\n\n        dy = this._calcSize(size.height, size, false);\n      }\n\n      cell.setSize(dx, dy);\n    }\n  };\n\n  return Layout;\n}(Cell);\n\nmodule.exports = Layout;","// optimized checker for links smart rendering\n// first check the vertical position since it's easier to calculate\nmodule.exports = function isLinkInViewPort(item, viewport, view, config, gantt) {\n  var source = view.$gantt.getTask(item.source);\n  var target = view.$gantt.getTask(item.target); // check vertical visibility first since it's a lighter check\n\n  var sourceTop = view.getItemTop(source.id);\n  var sourceHeight = view.getItemHeight(source.id);\n  var targetTop = view.getItemTop(target.id);\n  var targetHeight = view.getItemHeight(target.id);\n\n  if (viewport.y > sourceTop + sourceHeight && viewport.y > targetTop + targetHeight) {\n    return false;\n  }\n\n  if (viewport.y_end < targetTop && viewport.y_end < sourceTop) {\n    return false;\n  }\n\n  var padding = 100;\n  var sourceLeft = view.posFromDate(source.start_date);\n  var sourceRight = view.posFromDate(source.end_date);\n  var targetLeft = view.posFromDate(target.start_date);\n  var targetRight = view.posFromDate(target.end_date);\n\n  if (sourceLeft > sourceRight) {\n    // rtl\n    var tmp = sourceRight;\n    sourceRight = sourceLeft;\n    sourceLeft = tmp;\n  }\n\n  if (targetLeft > targetRight) {\n    // rtl\n    var tmp = targetRight;\n    targetRight = targetLeft;\n    targetLeft = tmp;\n  }\n\n  sourceLeft += -padding; // add buffer for custom elements\n\n  sourceRight += padding;\n  targetLeft += -padding; // add buffer for custom elements\n\n  targetRight += padding;\n\n  if (viewport.x > sourceRight && viewport.x > targetRight) {\n    return false;\n  }\n\n  if (viewport.x_end < sourceLeft && viewport.x_end < targetLeft) {\n    return false;\n  }\n\n  return true;\n};","var getLinkRectangle = require(\"../get_link_rectangle\");\n\nmodule.exports = function () {\n  var coordinates = [];\n  var calculated = false;\n\n  function clearCache() {\n    coordinates = [];\n    calculated = false;\n  }\n\n  function buildCache(datastore, view, gantt) {\n    var config = view.$getConfig();\n    var visibleItems = datastore.getVisibleItems(); //datastore.eachItem(function(link){\n\n    visibleItems.forEach(function (link) {\n      var rec = getLinkRectangle(link, view, config, gantt);\n\n      if (!rec) {\n        return;\n      }\n\n      coordinates.push({\n        id: link.id,\n        rec: rec\n      });\n    });\n    coordinates.sort(function (a, b) {\n      if (a.rec.right < b.rec.right) {\n        return -1;\n      } else {\n        return 1;\n      }\n    });\n    calculated = true;\n  }\n\n  var initialized = false;\n\n  function init(datastore) {\n    if (initialized) {\n      return;\n    }\n\n    initialized = true;\n    datastore.attachEvent(\"onPreFilter\", clearCache);\n    datastore.attachEvent(\"onStoreUpdated\", clearCache);\n    datastore.attachEvent(\"onClearAll\", clearCache);\n    datastore.attachEvent(\"onBeforeStoreUpdate\", clearCache);\n  }\n\n  return function getVisibleLinksRange(gantt, view, config, datastore, viewport) {\n    init(datastore);\n\n    if (!calculated) {\n      buildCache(datastore, view, gantt);\n    }\n\n    var visibleBoxes = [];\n\n    for (var i = 0; i < coordinates.length; i++) {\n      var item = coordinates[i];\n      var box = item.rec;\n\n      if (box.right < viewport.x) {\n        continue;\n      }\n\n      if (box.left < viewport.x_end && box.right > viewport.x && box.top < viewport.y_end && box.bottom > viewport.y) {\n        visibleBoxes.push(item.id);\n      }\n    }\n\n    return {\n      ids: visibleBoxes\n    };\n  };\n};","import { IWorkUnitCache } from \"./workunit_cache_interface\";\r\nimport { WorkUnitsMapCache } from \"./workunit_map_cache\";\r\nimport { WorkUnitsObjectCache } from \"./workunit_object_cache\";\r\nexport { LargerUnitsCache } from \"./larger_units_helper\";\r\n\r\nexport function createCacheObject(): IWorkUnitCache {\r\n\r\n\t// worktime hash is on the hot path,\r\n\t// Map seems to work faster than plain array, use it whenever possible\r\n\tif (typeof Map !== \"undefined\") {\r\n\t\treturn new WorkUnitsMapCache();\r\n\t} else {\r\n\t\treturn new WorkUnitsObjectCache();\r\n\t}\r\n}\r\n","var utils = require(\"../../utils/utils\");\n\nvar helpers = require(\"../../utils/helpers\");\n\nfunction IsWorkTimeArgument(date, unit, task, id, calendar) {\n  this.date = date;\n  this.unit = unit;\n  this.task = task;\n  this.id = id;\n  this.calendar = calendar;\n  return this;\n}\n\nfunction ClosestWorkTimeArgument(date, dir, unit, task, id, calendar) {\n  this.date = date;\n  this.dir = dir;\n  this.unit = unit;\n  this.task = task;\n  this.id = id;\n  this.calendar = calendar;\n  return this;\n}\n\nfunction CalculateEndDateArgument(start_date, duration, unit, step, task, id, calendar) {\n  this.start_date = start_date;\n  this.duration = duration;\n  this.unit = unit;\n  this.step = step;\n  this.task = task;\n  this.id = id;\n  this.calendar = calendar;\n  return this;\n}\n\nfunction GetDurationArgument(start, end, task, calendar) {\n  this.start_date = start;\n  this.end_date = end;\n  this.task = task;\n  this.calendar = calendar;\n  this.unit = null;\n  this.step = null;\n  return this;\n}\n\nvar calendarArgumentsHelper = function calendarArgumentsHelper(gantt) {\n  return {\n    getWorkHoursArguments: function getWorkHoursArguments() {\n      var config = arguments[0];\n\n      if (helpers.isDate(config)) {\n        config = {\n          date: config\n        };\n      } else {\n        config = utils.mixin({}, config);\n      }\n\n      if (!helpers.isValidDate(config.date)) {\n        gantt.assert(false, \"Invalid date argument for getWorkHours method\");\n        throw new Error(\"Invalid date argument for getWorkHours method\");\n      }\n\n      return config;\n    },\n    setWorkTimeArguments: function setWorkTimeArguments() {\n      return arguments[0];\n    },\n    unsetWorkTimeArguments: function unsetWorkTimeArguments() {\n      return arguments[0];\n    },\n    isWorkTimeArguments: function isWorkTimeArguments() {\n      var config = arguments[0];\n\n      if (config instanceof IsWorkTimeArgument) {\n        return config;\n      }\n\n      var processedConfig;\n\n      if (!config.date) {\n        //IsWorkTimeArgument(date, unit, task, id, calendar)\n        processedConfig = new IsWorkTimeArgument(arguments[0], arguments[1], arguments[2], null, arguments[3]);\n      } else {\n        processedConfig = new IsWorkTimeArgument(config.date, config.unit, config.task, null, config.calendar);\n      }\n\n      processedConfig.unit = processedConfig.unit || gantt.config.duration_unit;\n\n      if (!helpers.isValidDate(processedConfig.date)) {\n        gantt.assert(false, \"Invalid date argument for isWorkTime method\");\n        throw new Error(\"Invalid date argument for isWorkTime method\");\n      }\n\n      return processedConfig;\n    },\n    getClosestWorkTimeArguments: function getClosestWorkTimeArguments(arg) {\n      var config = arguments[0];\n      if (config instanceof ClosestWorkTimeArgument) return config;\n      var processedConfig;\n\n      if (helpers.isDate(config)) {\n        processedConfig = new ClosestWorkTimeArgument(config);\n      } else {\n        processedConfig = new ClosestWorkTimeArgument(config.date, config.dir, config.unit, config.task, null, //config.id,\n        config.calendar);\n      }\n\n      if (config.id) {\n        processedConfig.task = config;\n      }\n\n      processedConfig.dir = config.dir || 'any';\n      processedConfig.unit = config.unit || gantt.config.duration_unit;\n\n      if (!helpers.isValidDate(processedConfig.date)) {\n        gantt.assert(false, \"Invalid date argument for getClosestWorkTime method\");\n        throw new Error(\"Invalid date argument for getClosestWorkTime method\");\n      }\n\n      return processedConfig;\n    },\n    _getStartEndConfig: function _getStartEndConfig(param) {\n      var argumentType = GetDurationArgument;\n      var config;\n      if (param instanceof argumentType) return param;\n\n      if (helpers.isDate(param)) {\n        config = new argumentType(arguments[0], arguments[1], arguments[2], arguments[3]);\n      } else {\n        config = new argumentType(param.start_date, param.end_date, param.task);\n\n        if (param.id !== null && param.id !== undefined) {\n          config.task = param;\n        }\n      }\n\n      config.unit = config.unit || gantt.config.duration_unit;\n      config.step = config.step || gantt.config.duration_step;\n      config.start_date = config.start_date || config.start || config.date;\n\n      if (!helpers.isValidDate(config.start_date)) {\n        gantt.assert(false, \"Invalid start_date argument for getDuration method\");\n        throw new Error(\"Invalid start_date argument for getDuration method\");\n      }\n\n      if (!helpers.isValidDate(config.end_date)) {\n        gantt.assert(false, \"Invalid end_date argument for getDuration method\");\n        throw new Error(\"Invalid end_date argument for getDuration method\");\n      }\n\n      return config;\n    },\n    getDurationArguments: function getDurationArguments(start, end, unit, step) {\n      return this._getStartEndConfig.apply(this, arguments);\n    },\n    hasDurationArguments: function hasDurationArguments(start, end, unit, step) {\n      return this._getStartEndConfig.apply(this, arguments);\n    },\n    calculateEndDateArguments: function calculateEndDateArguments(start, duration, unit, step) {\n      var config = arguments[0];\n      if (config instanceof CalculateEndDateArgument) return config;\n      var processedConfig; //CalculateEndDateArgument(start_date, duration, unit, step, task, id, calendar)\n\n      if (helpers.isDate(config)) {\n        processedConfig = new CalculateEndDateArgument(arguments[0], arguments[1], arguments[2], undefined, arguments[3], undefined, arguments[4]);\n      } else {\n        processedConfig = new CalculateEndDateArgument(config.start_date, config.duration, config.unit, config.step, config.task, null, //config.id,\n        config.calendar);\n      }\n\n      if (config.id !== null && config.id !== undefined) {\n        processedConfig.task = config; // received a task object as an argument\n        // ignore 'unit' and 'step' properties in this case, since it's likely a part of data model of a task\n\n        processedConfig.unit = null;\n        processedConfig.step = null;\n      }\n\n      processedConfig.unit = processedConfig.unit || gantt.config.duration_unit;\n      processedConfig.step = processedConfig.step || gantt.config.duration_step;\n\n      if (!helpers.isValidDate(processedConfig.start_date)) {\n        gantt.assert(false, \"Invalid start_date argument for calculateEndDate method\");\n        throw new Error(\"Invalid start_date argument for calculateEndDate method\");\n      }\n\n      return processedConfig;\n    }\n  };\n};\n\nmodule.exports = calendarArgumentsHelper;","var quickPositionHelperFactory = require(\"./row_position_fixed_height\");\n\nfunction createMixin(view) {\n  var getItemTopCache = {};\n  var getRowTopCache = {};\n  var getItemHeightCache = null;\n  var totalHeightCache = -1;\n  var getItemHeightCacheState = null;\n  var quickPosition = quickPositionHelperFactory(view);\n  return {\n    _resetTopPositionHeight: function _resetTopPositionHeight() {\n      getItemTopCache = {};\n      getRowTopCache = {};\n      quickPosition.resetCache();\n    },\n    _resetHeight: function _resetHeight() {\n      var store = this.$config.rowStore;\n      var newState = this.getCacheStateTotalHeight(store);\n\n      if (!getItemHeightCacheState) {\n        getItemHeightCacheState = newState;\n      } else if (this.shouldClearHeightCache(getItemHeightCacheState, newState)) {\n        getItemHeightCacheState = newState;\n        getItemHeightCache = null;\n      }\n\n      totalHeightCache = -1;\n      quickPosition.resetCache();\n    },\n\n    /**\r\n     * Get top coordinate by row index (order)\r\n     * @param {number} index\r\n     */\n    getRowTop: function getRowTop(index) {\n      if (quickPosition.canUseSimpleCalculation()) {\n        return quickPosition.getRowTop(index);\n      }\n\n      var store = this.$config.rowStore;\n\n      if (!store) {\n        return 0;\n      }\n\n      if (getRowTopCache[index] !== undefined) {\n        return getRowTopCache[index];\n      } else {\n        var all = store.getIndexRange();\n        var top = 0;\n        var result = 0;\n\n        for (var i = 0; i < all.length; i++) {\n          getRowTopCache[i] = top;\n          top += this.getItemHeight(all[i].id);\n\n          if (i < index) {\n            result = top;\n          }\n        }\n\n        return result;\n      }\n    },\n\n    /**\r\n     * Get top coordinate by item id\r\n     * @param {*} task_id\r\n     */\n    getItemTop: function getItemTop(taskId) {\n      if (this.$config.rowStore) {\n        if (getItemTopCache[taskId] !== undefined) {\n          return getItemTopCache[taskId];\n        }\n\n        var store = this.$config.rowStore;\n        if (!store) return 0;\n        var itemIndex = store.getIndexById(taskId);\n\n        if (itemIndex === -1 && store.getParent && store.exists(taskId)) {\n          var parentId = store.getParent(taskId);\n\n          if (store.exists(parentId)) {\n            // if task is not found in list - maybe it's parent is a split task and we should use parents index instead\n            var parent = store.getItem(parentId);\n\n            if (this.$gantt.isSplitTask(parent)) {\n              return this.getItemTop(parentId);\n            }\n          }\n        }\n\n        getItemTopCache[taskId] = this.getRowTop(itemIndex);\n        return getItemTopCache[taskId];\n      } else {\n        return 0;\n      }\n    },\n\n    /**\r\n     * Get height of the item by item id\r\n     * @param {*} itemId\r\n     */\n    getItemHeight: function getItemHeight(itemId) {\n      if (quickPosition.canUseSimpleCalculation()) {\n        return quickPosition.getItemHeight(itemId);\n      }\n\n      if (!getItemHeightCache && this.$config.rowStore) {\n        this._fillHeightCache(this.$config.rowStore);\n      }\n\n      if (getItemHeightCache[itemId] !== undefined) {\n        return getItemHeightCache[itemId];\n      }\n\n      var defaultHeight = this.$getConfig().row_height;\n\n      if (this.$config.rowStore) {\n        var store = this.$config.rowStore;\n        if (!store) return defaultHeight;\n        var item = store.getItem(itemId);\n        return getItemHeightCache[itemId] = item && item.row_height || defaultHeight;\n      } else {\n        return defaultHeight;\n      }\n    },\n    _fillHeightCache: function _fillHeightCache(store) {\n      if (!store) {\n        return;\n      }\n\n      getItemHeightCache = {};\n      var defaultHeight = this.$getConfig().row_height;\n      store.eachItem(function (item) {\n        return getItemHeightCache[item.id] = item && item.row_height || defaultHeight;\n      });\n    },\n    getCacheStateTotalHeight: function getCacheStateTotalHeight(store) {\n      var globalHeight = this.$getConfig().row_height;\n      var itemHeightCache = {};\n      var items = [];\n      var sumHeight = 0;\n\n      if (store) {\n        store.eachItem(function (item) {\n          items.push(item);\n          itemHeightCache[item.id] = item.row_height;\n          sumHeight += item.row_height || globalHeight;\n        });\n      }\n\n      return {\n        globalHeight: globalHeight,\n        items: items,\n        count: items.length,\n        sumHeight: sumHeight\n      };\n    },\n    shouldClearHeightCache: function shouldClearHeightCache(oldState, newState) {\n      if (oldState.count != newState.count) {\n        return true;\n      }\n\n      if (oldState.globalHeight != newState.globalHeight) {\n        return true;\n      }\n\n      if (oldState.sumHeight != newState.sumHeight) {\n        return true;\n      }\n\n      for (var i in oldState.items) {\n        var newValue = newState.items[i];\n\n        if (newValue !== undefined && newValue != oldState.items[i]) {\n          return true;\n        }\n      }\n\n      return false;\n    },\n\n    /**\r\n     * Get total height of items\r\n     */\n    getTotalHeight: function getTotalHeight() {\n      if (quickPosition.canUseSimpleCalculation()) {\n        return quickPosition.getTotalHeight();\n      }\n\n      if (totalHeightCache != -1) {\n        return totalHeightCache;\n      }\n\n      if (this.$config.rowStore) {\n        var store = this.$config.rowStore;\n\n        this._fillHeightCache(store);\n\n        var getHeight = this.getItemHeight.bind(this);\n        var visibleItems = store.getVisibleItems();\n        var totalHeight = 0;\n        visibleItems.forEach(function (item) {\n          totalHeight += getHeight(item.id);\n        });\n        totalHeightCache = totalHeight;\n        return totalHeight;\n      } else {\n        return 0;\n      }\n    },\n\n    /**\r\n     * Get item by top position\r\n     * @param {*} top\r\n     */\n    getItemIndexByTopPosition: function getItemIndexByTopPosition(top) {\n      if (this.$config.rowStore) {\n        if (quickPosition.canUseSimpleCalculation()) {\n          return quickPosition.getItemIndexByTopPosition(top);\n        }\n\n        var store = this.$config.rowStore;\n\n        for (var i = 0; i < store.countVisible(); i++) {\n          var current = this.getRowTop(i);\n          var next = this.getRowTop(i + 1);\n\n          if (!next) {\n            var taskId = store.getIdByIndex(i);\n            next = current + this.getItemHeight(taskId);\n          }\n\n          if (top >= current && top < next) {\n            return i;\n          }\n        } // GS-1723: If we iterated all tasks and didn't find the position, the target is below all other tasks\n\n\n        return store.countVisible() + 2;\n      } else {\n        return 0;\n      }\n    }\n  };\n}\n\nmodule.exports = createMixin;","export default class DurationFormatterNumeric implements IDurationFormatter {\r\n\tstatic create = (settings: IDurationFormatterConfig = null): IDurationFormatter => {\r\n\t\treturn new DurationFormatterNumeric();\r\n\t}\r\n\tcanParse = (value: string) : boolean => {\r\n\t\treturn !isNaN(this.parse(value));\r\n\t}\r\n\tformat = (value: number) : string => {\r\n\t\treturn String(value);\r\n\t}\r\n\tparse = (value: string) : number => {\r\n\t\treturn parseInt(value, 10);\r\n\t}\r\n}","function copyLinkIdsArray(gantt, linkIds, targetHash) {\n  for (var i = 0; i < linkIds.length; i++) {\n    if (gantt.isLinkExists(linkIds[i])) {\n      targetHash[linkIds[i]] = gantt.getLink(linkIds[i]);\n    }\n  }\n}\n\nfunction copyLinkIds(gantt, task, targetHash) {\n  copyLinkIdsArray(gantt, task.$source, targetHash);\n  copyLinkIdsArray(gantt, task.$target, targetHash);\n}\n\nfunction getSubtreeLinks(gantt, rootId) {\n  var res = {};\n\n  if (gantt.isTaskExists(rootId)) {\n    copyLinkIds(gantt, gantt.getTask(rootId), res);\n  }\n\n  gantt.eachTask(function (child) {\n    copyLinkIds(gantt, child, res);\n  }, rootId);\n  return res;\n}\n\nfunction getSubtreeTasks(gantt, rootId) {\n  var res = {};\n  gantt.eachTask(function (child) {\n    res[child.id] = child;\n  }, rootId);\n  return res;\n}\n\nmodule.exports = {\n  getSubtreeLinks: getSubtreeLinks,\n  getSubtreeTasks: getSubtreeTasks\n};","var ScaleHelper = require(\"./ui/timeline/scales_ignore\");\n\nvar PrimaryScaleHelper = require(\"./ui/timeline/scales\");\n\nfunction resolveConfigRange(unit, gantt) {\n  var range = {\n    start_date: null,\n    end_date: null\n  };\n\n  if (gantt.config.start_date && gantt.config.end_date) {\n    range.start_date = gantt.date[unit + \"_start\"](new Date(gantt.config.start_date));\n    var end = new Date(gantt.config.end_date);\n    var start_interval = gantt.date[unit + \"_start\"](new Date(end));\n\n    if (+end != +start_interval) {\n      end = gantt.date.add(start_interval, 1, unit);\n    } else {\n      end = start_interval;\n    }\n\n    range.end_date = end;\n  }\n\n  return range;\n}\n\nfunction _scale_range_unit(gantt) {\n  var primaryScale = new PrimaryScaleHelper(gantt).primaryScale();\n  var unit = primaryScale.unit;\n  var step = primaryScale.step;\n\n  if (gantt.config.scale_offset_minimal) {\n    var helper = new ScaleHelper(gantt);\n    var scales = [helper.primaryScale()].concat(helper.getSubScales());\n    helper.sortScales(scales);\n    unit = scales[scales.length - 1].unit;\n    step = scales[scales.length - 1].step || 1;\n  }\n\n  return {\n    unit: unit,\n    step: step\n  };\n}\n\nfunction _init_tasks_range(gantt) {\n  var cfg = _scale_range_unit(gantt);\n\n  var unit = cfg.unit,\n      step = cfg.step;\n  var range = resolveConfigRange(unit, gantt); // GS-1544: Show correct date range if we have tasks or only projects\n\n  if (!(range.start_date && range.end_date)) {\n    var onlyProjectTasks = true;\n    var tasks = gantt.getTaskByTime();\n\n    for (var i = 0; i < tasks.length; i++) {\n      var task = tasks[i];\n\n      if (task.type !== gantt.config.types.project) {\n        onlyProjectTasks = false;\n        break;\n      }\n    }\n\n    if (tasks.length && onlyProjectTasks) {\n      var start_date = tasks[0].start_date;\n      var end_date = gantt.date.add(start_date, 1, gantt.config.duration_unit);\n      range = {\n        start_date: new Date(start_date),\n        end_date: new Date(end_date)\n      };\n    } else {\n      range = gantt.getSubtaskDates();\n    }\n\n    if (!range.start_date || !range.end_date) {\n      range = {\n        start_date: new Date(),\n        end_date: new Date()\n      };\n    }\n\n    range.start_date = gantt.date[unit + \"_start\"](range.start_date);\n    range.start_date = gantt.calculateEndDate({\n      start_date: gantt.date[unit + \"_start\"](range.start_date),\n      duration: -1,\n      unit: unit,\n      step: step\n    }); //one free column before first task\n\n    range.end_date = gantt.date[unit + \"_start\"](range.end_date);\n    range.end_date = gantt.calculateEndDate({\n      start_date: range.end_date,\n      duration: 2,\n      unit: unit,\n      step: step\n    }); //one free column after last task\n  }\n\n  gantt._min_date = range.start_date;\n  gantt._max_date = range.end_date;\n}\n\nfunction _adjust_scales(gantt) {\n  if (gantt.config.fit_tasks) {\n    var old_min = +gantt._min_date,\n        old_max = +gantt._max_date; //this._init_tasks_range();\n\n    if (+gantt._min_date != old_min || +gantt._max_date != old_max) {\n      gantt.render();\n      gantt.callEvent(\"onScaleAdjusted\", []);\n      return true;\n    }\n  }\n\n  return false;\n}\n\nmodule.exports = function updateTasksRange(gantt) {\n  _init_tasks_range(gantt);\n\n  _adjust_scales(gantt);\n};","var powerArray = require(\"./power_array\");\n\nvar utils = require(\"../../utils/utils\");\n\nvar helpers = require(\"../../utils/helpers\");\n\nvar DataStore = require(\"./datastore\");\n\nvar isPlaceholderTask = require(\"../../utils/placeholder_task\");\n\nvar _require = require(\"../../utils/helpers\"),\n    replaceValidZeroId = _require.replaceValidZeroId; // TODO: remove workaround for mixup with es5 and ts imports\n\n\nif (DataStore[\"default\"]) {\n  DataStore = DataStore[\"default\"];\n}\n\nvar TreeDataStore = function TreeDataStore(config) {\n  DataStore.apply(this, [config]);\n  this._branches = {};\n  this.pull = {}; //GS-761 Update existing item instead of adding it to the new position\n\n  this.$initItem = function (item) {\n    var loadedItem = item;\n\n    if (config.initItem) {\n      loadedItem = config.initItem(loadedItem);\n    }\n\n    var existingItem = this.getItem(item.id);\n\n    if (existingItem && existingItem.parent != loadedItem.parent) {\n      this.move(loadedItem.id, loadedItem.$index || -1, loadedItem.parent || this._ganttConfig.root_id);\n    }\n\n    return loadedItem;\n  };\n\n  this.$parentProperty = config.parentProperty || \"parent\";\n\n  if (typeof config.rootId !== \"function\") {\n    this.$getRootId = function (val) {\n      return function () {\n        return val;\n      };\n    }(config.rootId || 0);\n  } else {\n    this.$getRootId = config.rootId;\n  } // TODO: replace with live reference to gantt config\n\n\n  this.$openInitially = config.openInitially;\n  this.visibleOrder = powerArray.$create();\n  this.fullOrder = powerArray.$create();\n  this._searchVisibleOrder = {};\n  this._indexRangeCache = {};\n  this._eachItemMainRangeCache = null;\n  this._getItemsCache = null;\n  this._skip_refresh = false;\n  this._ganttConfig = null;\n\n  if (config.getConfig) {\n    this._ganttConfig = config.getConfig();\n  }\n\n  var splitParents = {};\n  var splitItems = {};\n  var taskOpenState = {};\n  var taskVisibility = {};\n  var haveSplitItems = false;\n\n  this._attachDataChange(function () {\n    this._indexRangeCache = {};\n    this._eachItemMainRangeCache = null;\n    this._getItemsCache = null;\n    return true;\n  });\n\n  this.attachEvent(\"onPreFilter\", function () {\n    this._indexRangeCache = {};\n    this._eachItemMainRangeCache = null;\n    splitParents = {};\n    splitItems = {};\n    taskOpenState = {};\n    taskVisibility = {};\n    haveSplitItems = false;\n    this.eachItem(function (item) {\n      var parent = this.getParent(item.id);\n\n      if (item.$open && taskOpenState[parent] !== false) {\n        taskOpenState[item.id] = true;\n      } else {\n        taskOpenState[item.id] = false;\n      }\n\n      if (this._isSplitItem(item)) {\n        haveSplitItems = true;\n        splitParents[item.id] = true;\n        splitItems[item.id] = true;\n      }\n\n      if (haveSplitItems && splitItems[parent]) {\n        splitItems[item.id] = true;\n      }\n\n      if (taskOpenState[parent] || taskOpenState[parent] === undefined) {\n        taskVisibility[item.id] = true;\n      } else {\n        taskVisibility[item.id] = false;\n      }\n    });\n  });\n  this.attachEvent(\"onFilterItem\", function (id, item) {\n    var canOpenSplitTasks = false;\n\n    if (this._ganttConfig) {\n      var canOpenSplitTasks = this._ganttConfig.open_split_tasks;\n    }\n\n    var open = taskVisibility[item.id];\n\n    if (haveSplitItems) {\n      if (open && splitItems[item.id] && !splitParents[item.id]) {\n        open = !!canOpenSplitTasks;\n      }\n\n      if (splitItems[item.id] && !splitParents[item.id]) {\n        item.$split_subtask = true;\n      }\n    }\n\n    item.$expanded_branch = !!taskVisibility[item.id];\n    return !!open;\n  });\n  this.attachEvent(\"onFilter\", function () {\n    splitParents = {};\n    splitItems = {};\n    taskOpenState = {};\n    taskVisibility = {};\n  });\n  return this;\n};\n\nTreeDataStore.prototype = utils.mixin({\n  _buildTree: function _buildTree(data) {\n    var item = null;\n    var rootId = this.$getRootId();\n\n    for (var i = 0, len = data.length; i < len; i++) {\n      item = data[i];\n      this.setParent(item, replaceValidZeroId(this.getParent(item), rootId) || rootId);\n    } // calculating $level for each item\n\n\n    for (var i = 0, len = data.length; i < len; i++) {\n      item = data[i];\n\n      this._add_branch(item);\n\n      item.$level = this.calculateItemLevel(item);\n      item.$local_index = this.getBranchIndex(item.id);\n\n      if (!utils.defined(item.$open)) {\n        item.$open = utils.defined(item.open) ? item.open : this.$openInitially();\n      }\n    }\n\n    this._updateOrder();\n  },\n  _isSplitItem: function _isSplitItem(item) {\n    return item.render == \"split\" && this.hasChild(item.id);\n  },\n  parse: function parse(data) {\n    if (!this._skip_refresh) {\n      this.callEvent(\"onBeforeParse\", [data]);\n    }\n\n    var loaded = this._parseInner(data);\n\n    this._buildTree(loaded);\n\n    this.filter();\n\n    if (!this._skip_refresh) {\n      this.callEvent(\"onParse\", [loaded]);\n    }\n  },\n  _addItemInner: function _addItemInner(item, index) {\n    var parent = this.getParent(item);\n\n    if (!utils.defined(parent)) {\n      parent = this.$getRootId();\n      this.setParent(item, parent);\n    }\n\n    var parentIndex = this.getIndexById(parent);\n    var targetIndex = parentIndex + Math.min(Math.max(index, 0), this.visibleOrder.length);\n\n    if (targetIndex * 1 !== targetIndex) {\n      targetIndex = undefined;\n    }\n\n    DataStore.prototype._addItemInner.call(this, item, targetIndex);\n\n    this.setParent(item, parent);\n\n    if (item.hasOwnProperty(\"$rendered_parent\")) {\n      this._move_branch(item, item.$rendered_parent);\n    }\n\n    this._add_branch(item, index);\n  },\n  _changeIdInner: function _changeIdInner(oldId, newId) {\n    var children = this.getChildren(oldId);\n    var visibleOrder = this._searchVisibleOrder[oldId];\n\n    DataStore.prototype._changeIdInner.call(this, oldId, newId);\n\n    var parent = this.getParent(newId);\n\n    this._replace_branch_child(parent, oldId, newId);\n\n    if (this._branches[oldId]) {\n      this._branches[newId] = this._branches[oldId];\n    }\n\n    for (var i = 0; i < children.length; i++) {\n      var child = this.getItem(children[i]);\n      child[this.$parentProperty] = newId;\n      child.$rendered_parent = newId;\n    }\n\n    this._searchVisibleOrder[newId] = visibleOrder;\n    delete this._branches[oldId];\n  },\n  _traverseBranches: function _traverseBranches(code, parent) {\n    if (!utils.defined(parent)) {\n      parent = this.$getRootId();\n    }\n\n    var branch = this._branches[parent];\n\n    if (branch) {\n      for (var i = 0; i < branch.length; i++) {\n        var itemId = branch[i];\n        code.call(this, itemId);\n        if (this._branches[itemId]) this._traverseBranches(code, itemId);\n      }\n    }\n  },\n  _updateOrder: function _updateOrder(code) {\n    this.fullOrder = powerArray.$create();\n\n    this._traverseBranches(function (taskId) {\n      this.fullOrder.push(taskId);\n    });\n\n    if (code) DataStore.prototype._updateOrder.call(this, code);\n  },\n  _removeItemInner: function _removeItemInner(id) {\n    var items = [];\n    this.eachItem(function (child) {\n      items.push(child);\n    }, id);\n    items.push(this.getItem(id));\n\n    for (var i = 0; i < items.length; i++) {\n      this._move_branch(items[i], this.getParent(items[i]), null);\n\n      DataStore.prototype._removeItemInner.call(this, items[i].id);\n\n      this._move_branch(items[i], this.getParent(items[i]), null);\n    }\n  },\n  move: function move(sid, tindex, parent) {\n    //target id as 4th parameter\n    var id = arguments[3];\n    var config = this._ganttConfig || {};\n    var root_id = config.root_id || 0;\n    id = replaceValidZeroId(id, root_id);\n\n    if (id) {\n      if (id === sid) return;\n      parent = this.getParent(id);\n      tindex = this.getBranchIndex(id);\n    }\n\n    if (sid == parent) {\n      return;\n    }\n\n    if (!utils.defined(parent)) {\n      parent = this.$getRootId();\n    }\n\n    var source = this.getItem(sid);\n    var source_pid = this.getParent(source.id);\n    var tbranch = this.getChildren(parent);\n    if (tindex == -1) tindex = tbranch.length + 1;\n\n    if (source_pid == parent) {\n      var sindex = this.getBranchIndex(sid);\n      if (sindex == tindex) return;\n    }\n\n    if (this.callEvent(\"onBeforeItemMove\", [sid, parent, tindex]) === false) return false;\n    var placeholderIds = [];\n\n    for (var i = 0; i < tbranch.length; i++) {\n      if (isPlaceholderTask(tbranch[i], null, this, this._ganttConfig)) {\n        placeholderIds.push(tbranch[i]);\n        tbranch.splice(i, 1);\n        i--;\n      }\n    }\n\n    this._replace_branch_child(source_pid, sid);\n\n    tbranch = this.getChildren(parent);\n    var tid = tbranch[tindex];\n    tid = replaceValidZeroId(tid, root_id);\n    if (!tid) //adding as last element\n      tbranch.push(sid);else tbranch = tbranch.slice(0, tindex).concat([sid]).concat(tbranch.slice(tindex));\n\n    if (placeholderIds.length) {\n      tbranch = tbranch.concat(placeholderIds);\n    }\n\n    this.setParent(source, parent);\n    this._branches[parent] = tbranch;\n    var diff = this.calculateItemLevel(source) - source.$level;\n    source.$level += diff;\n    this.eachItem(function (item) {\n      item.$level += diff;\n    }, source.id, this);\n\n    this._moveInner(this.getIndexById(sid), this.getIndexById(parent) + tindex);\n\n    this.callEvent(\"onAfterItemMove\", [sid, parent, tindex]);\n    this.refresh();\n  },\n  getBranchIndex: function getBranchIndex(id) {\n    var branch = this.getChildren(this.getParent(id));\n    var index = branch.indexOf(id + \"\");\n\n    if (index == -1) {\n      index = branch.indexOf(+id);\n    }\n\n    return index;\n  },\n  hasChild: function hasChild(id) {\n    var branch = this._branches[id];\n    return branch && branch.length;\n  },\n  getChildren: function getChildren(id) {\n    var branch = this._branches[id];\n    return branch ? branch : powerArray.$create();\n  },\n  isChildOf: function isChildOf(childId, parentId) {\n    if (!this.exists(childId)) return false;\n    if (parentId === this.$getRootId()) return true;\n    if (!this.hasChild(parentId)) return false;\n    var item = this.getItem(childId);\n    var pid = this.getParent(childId);\n    var parent = this.getItem(parentId);\n\n    if (parent.$level >= item.$level) {\n      return false;\n    }\n\n    while (item && this.exists(pid)) {\n      item = this.getItem(pid);\n      if (item && item.id == parentId) return true;\n      pid = this.getParent(item);\n    }\n\n    return false;\n  },\n  getSiblings: function getSiblings(id) {\n    if (!this.exists(id)) {\n      return powerArray.$create();\n    }\n\n    var parent = this.getParent(id);\n    return this.getChildren(parent);\n  },\n  getNextSibling: function getNextSibling(id) {\n    var siblings = this.getSiblings(id);\n\n    for (var i = 0, len = siblings.length; i < len; i++) {\n      if (siblings[i] == id) {\n        var nextSibling = siblings[i + 1];\n\n        if (nextSibling === 0 && i > 0) {\n          nextSibling = \"0\";\n        }\n\n        return nextSibling || null;\n      }\n    }\n\n    return null;\n  },\n  getPrevSibling: function getPrevSibling(id) {\n    var siblings = this.getSiblings(id);\n\n    for (var i = 0, len = siblings.length; i < len; i++) {\n      if (siblings[i] == id) {\n        var previousSibling = siblings[i - 1];\n\n        if (previousSibling === 0 && i > 0) {\n          previousSibling = \"0\";\n        }\n\n        return previousSibling || null;\n      }\n    }\n\n    return null;\n  },\n  getParent: function getParent(id) {\n    var item = null;\n\n    if (id.id !== undefined) {\n      item = id;\n    } else {\n      item = this.getItem(id);\n    }\n\n    var parent;\n\n    if (item) {\n      parent = item[this.$parentProperty];\n    } else {\n      parent = this.$getRootId();\n    }\n\n    return parent;\n  },\n  clearAll: function clearAll() {\n    this._branches = {};\n    DataStore.prototype.clearAll.call(this);\n  },\n  calculateItemLevel: function calculateItemLevel(item) {\n    var level = 0;\n    this.eachParent(function () {\n      level++;\n    }, item);\n    return level;\n  },\n  _setParentInner: function _setParentInner(item, new_pid, silent) {\n    if (!silent) {\n      if (item.hasOwnProperty(\"$rendered_parent\")) {\n        this._move_branch(item, item.$rendered_parent, new_pid);\n      } else {\n        this._move_branch(item, item[this.$parentProperty], new_pid);\n      }\n    }\n  },\n  setParent: function setParent(item, new_pid, silent) {\n    this._setParentInner(item, new_pid, silent);\n\n    item[this.$parentProperty] = new_pid;\n  },\n  _eachItemCached: function _eachItemCached(code, cache) {\n    for (var i = 0, len = cache.length; i < len; i++) {\n      code.call(this, cache[i]);\n    }\n  },\n  _eachItemIterate: function _eachItemIterate(code, startId, cache) {\n    var itemsStack = this.getChildren(startId);\n\n    if (itemsStack.length) {\n      itemsStack = itemsStack.slice().reverse();\n    }\n\n    while (itemsStack.length) {\n      var itemId = itemsStack.pop();\n      var item = this.getItem(itemId);\n      code.call(this, item);\n\n      if (cache) {\n        cache.push(item);\n      }\n\n      if (this.hasChild(item.id)) {\n        var children = this.getChildren(item.id);\n        var len = children.length;\n\n        for (var i = len - 1; i >= 0; i--) {\n          itemsStack.push(children[i]);\n        }\n      }\n    }\n  },\n  eachItem: function eachItem(code, parent) {\n    var rootId = this.$getRootId();\n\n    if (!utils.defined(parent)) {\n      parent = rootId;\n    }\n\n    var startId = replaceValidZeroId(parent, rootId) || rootId;\n    var useCache = false;\n    var buildCache = false;\n    var cache = null;\n\n    if (startId === rootId) {\n      if (this._eachItemMainRangeCache) {\n        useCache = true;\n        cache = this._eachItemMainRangeCache;\n      } else {\n        buildCache = true;\n        cache = this._eachItemMainRangeCache = [];\n      }\n    }\n\n    if (useCache) {\n      this._eachItemCached(code, cache);\n    } else {\n      this._eachItemIterate(code, startId, buildCache ? cache : null);\n    }\n  },\n  eachParent: function eachParent(code, startItem) {\n    var parentsHash = {};\n    var item = startItem;\n    var parent = this.getParent(item);\n\n    while (this.exists(parent)) {\n      if (parentsHash[parent]) {\n        throw new Error(\"Invalid tasks tree. Cyclic reference has been detected on task \" + parent);\n      }\n\n      parentsHash[parent] = true;\n      item = this.getItem(parent);\n      code.call(this, item);\n      parent = this.getParent(item);\n    }\n  },\n  _add_branch: function _add_branch(item, index, parent) {\n    var pid = parent === undefined ? this.getParent(item) : parent;\n    if (!this.hasChild(pid)) this._branches[pid] = powerArray.$create();\n    var branch = this.getChildren(pid);\n    var added_already = branch.indexOf(item.id + \"\") > -1 || branch.indexOf(+item.id) > -1;\n\n    if (!added_already) {\n      if (index * 1 == index) {\n        branch.splice(index, 0, item.id);\n      } else {\n        branch.push(item.id);\n      }\n\n      item.$rendered_parent = pid;\n    }\n  },\n  _move_branch: function _move_branch(item, old_parent, new_parent) {\n    this._eachItemMainRangeCache = null; //this.setParent(item, new_parent);\n    //this._sync_parent(task);\n\n    this._replace_branch_child(old_parent, item.id);\n\n    if (this.exists(new_parent) || new_parent == this.$getRootId()) {\n      this._add_branch(item, undefined, new_parent);\n    } else {\n      delete this._branches[item.id];\n    }\n\n    item.$level = this.calculateItemLevel(item);\n    this.eachItem(function (child) {\n      child.$level = this.calculateItemLevel(child);\n    }, item.id);\n  },\n  _replace_branch_child: function _replace_branch_child(node, old_id, new_id) {\n    var branch = this.getChildren(node);\n\n    if (branch && node !== undefined) {\n      var newbranch = powerArray.$create();\n      var index = branch.indexOf(old_id + \"\");\n\n      if (index == -1 && !isNaN(+old_id)) {\n        index = branch.indexOf(+old_id);\n      }\n\n      if (index > -1) {\n        if (new_id) {\n          branch.splice(index, 1, new_id);\n        } else {\n          branch.splice(index, 1);\n        }\n      }\n\n      newbranch = branch;\n      this._branches[node] = newbranch;\n    }\n  },\n  sort: function sort(field, desc, parent) {\n    if (!this.exists(parent)) {\n      parent = this.$getRootId();\n    }\n\n    if (!field) field = \"order\";\n    var criteria = typeof field == \"string\" ? function (a, b) {\n      if (a[field] == b[field] || helpers.isDate(a[field]) && helpers.isDate(b[field]) && a[field].valueOf() == b[field].valueOf()) {\n        return 0;\n      }\n\n      var result = a[field] > b[field];\n      return result ? 1 : -1;\n    } : field;\n\n    if (desc) {\n      var original_criteria = criteria;\n\n      criteria = function criteria(a, b) {\n        return original_criteria(b, a);\n      };\n    }\n\n    var els = this.getChildren(parent);\n\n    if (els) {\n      var temp = [];\n\n      for (var i = els.length - 1; i >= 0; i--) {\n        temp[i] = this.getItem(els[i]);\n      }\n\n      temp.sort(criteria);\n\n      for (var i = 0; i < temp.length; i++) {\n        els[i] = temp[i].id;\n        this.sort(field, desc, els[i]);\n      }\n    }\n  },\n  filter: function filter(rule) {\n    for (var i in this.pull) {\n      var renderedParent = this.pull[i].$rendered_parent;\n      var actualParent = this.getParent(this.pull[i]);\n\n      if (renderedParent !== actualParent) {\n        this._move_branch(this.pull[i], renderedParent, actualParent);\n      }\n    }\n\n    return DataStore.prototype.filter.apply(this, arguments);\n  },\n  open: function open(id) {\n    if (this.exists(id)) {\n      this.getItem(id).$open = true; // GS-2170. Do not recalculate the indexes and dates as they will be recalculated later\n\n      this._skipTaskRecalculation = true;\n      this.callEvent(\"onItemOpen\", [id]);\n    }\n  },\n  close: function close(id) {\n    if (this.exists(id)) {\n      this.getItem(id).$open = false; // GS-2170. Do not recalculate the indexes and dates as they will be recalculated later\n\n      this._skipTaskRecalculation = true;\n      this.callEvent(\"onItemClose\", [id]);\n    }\n  },\n  destructor: function destructor() {\n    DataStore.prototype.destructor.call(this);\n    this._branches = null;\n    this._indexRangeCache = {};\n    this._eachItemMainRangeCache = null;\n  }\n}, DataStore.prototype);\nmodule.exports = TreeDataStore;","var utils = require(\"../../utils/utils\");\n\nvar $powerArray = {\n  $create: function $create(array) {\n    return utils.mixin(array || [], this);\n  },\n  //remove element at specified position\n  $removeAt: function $removeAt(pos, len) {\n    if (pos >= 0) this.splice(pos, len || 1);\n  },\n  //find element in collection and remove it\n  $remove: function $remove(value) {\n    this.$removeAt(this.$find(value));\n  },\n  //add element to collection at specific position\n  $insertAt: function $insertAt(data, pos) {\n    if (!pos && pos !== 0) //add to the end by default\n      this.push(data);else {\n      var b = this.splice(pos, this.length - pos);\n      this[pos] = data;\n      this.push.apply(this, b); //reconstruct array without loosing this pointer\n    }\n  },\n  //return index of element, -1 if it doesn't exists\n  $find: function $find(data) {\n    for (var i = 0; i < this.length; i++) {\n      if (data == this[i]) return i;\n    }\n\n    return -1;\n  },\n  //execute some method for each element of array\n  $each: function $each(functor, master) {\n    for (var i = 0; i < this.length; i++) {\n      functor.call(master || this, this[i]);\n    }\n  },\n  //create new array from source, by using results of functor\n  $map: function $map(functor, master) {\n    for (var i = 0; i < this.length; i++) {\n      this[i] = functor.call(master || this, this[i]);\n    }\n\n    return this;\n  },\n  $filter: function $filter(functor, master) {\n    for (var i = 0; i < this.length; i++) {\n      if (!functor.call(master || this, this[i])) {\n        this.splice(i, 1);\n        i--;\n      }\n    }\n\n    return this;\n  }\n};\nmodule.exports = $powerArray;","var powerArray = require(\"./power_array\");\n\nvar utils = require(\"../../utils/utils\");\n\nvar eventable = require(\"../../utils/eventable\");\n\nvar isPlaceholderTask = require(\"../../utils/placeholder_task\");\n\nvar DataStore = function DataStore(config) {\n  this.pull = {};\n  this.$initItem = config.initItem;\n  this.visibleOrder = powerArray.$create();\n  this.fullOrder = powerArray.$create();\n  this._skip_refresh = false;\n  this._filterRule = null;\n  this._searchVisibleOrder = {};\n  this._indexRangeCache = {};\n  this._getItemsCache = null;\n  this.$config = config;\n  eventable(this);\n\n  this._attachDataChange(function () {\n    this._indexRangeCache = {};\n    this._getItemsCache = null;\n    return true;\n  });\n\n  return this;\n};\n\nDataStore.prototype = {\n  _attachDataChange: function _attachDataChange(callback) {\n    this.attachEvent(\"onClearAll\", callback);\n    this.attachEvent(\"onBeforeParse\", callback);\n    this.attachEvent(\"onBeforeUpdate\", callback);\n    this.attachEvent(\"onBeforeDelete\", callback);\n    this.attachEvent(\"onBeforeAdd\", callback);\n    this.attachEvent(\"onParse\", callback);\n    this.attachEvent(\"onBeforeFilter\", callback);\n  },\n  _parseInner: function _parseInner(data) {\n    var item = null,\n        loaded = [];\n\n    for (var i = 0, len = data.length; i < len; i++) {\n      item = data[i];\n\n      if (this.$initItem) {\n        if (this.$config.copyOnParse()) {\n          item = utils.copy(item);\n        }\n\n        item = this.$initItem(item);\n      }\n\n      if (this.callEvent(\"onItemLoading\", [item])) {\n        if (!this.pull.hasOwnProperty(item.id)) {\n          this.fullOrder.push(item.id);\n        }\n\n        loaded.push(item);\n        this.pull[item.id] = item;\n      }\n    }\n\n    return loaded;\n  },\n  parse: function parse(data) {\n    if (!this.isSilent()) {\n      this.callEvent(\"onBeforeParse\", [data]);\n    }\n\n    var loaded = this._parseInner(data);\n\n    if (!this.isSilent()) {\n      this.refresh();\n      this.callEvent(\"onParse\", [loaded]);\n    }\n  },\n  getItem: function getItem(id) {\n    return this.pull[id];\n  },\n  _updateOrder: function _updateOrder(code) {\n    code.call(this.visibleOrder);\n    code.call(this.fullOrder);\n  },\n  updateItem: function updateItem(id, item) {\n    if (!utils.defined(item)) item = this.getItem(id);\n\n    if (!this.isSilent()) {\n      if (this.callEvent(\"onBeforeUpdate\", [item.id, item]) === false) return false;\n    } // This is how it worked before updating the properties:\n    // this.pull[id]=item;\n\n\n    utils.mixin(this.pull[id], item, true);\n\n    if (!this.isSilent()) {\n      this.callEvent(\"onAfterUpdate\", [item.id, item]);\n      this.callEvent(\"onStoreUpdated\", [item.id, item, \"update\"]);\n    }\n  },\n  _removeItemInner: function _removeItemInner(id) {\n    //clear from collections\n    //this.visibleOrder.$remove(id);\n    this._updateOrder(function () {\n      this.$remove(id);\n    });\n\n    delete this.pull[id];\n  },\n  removeItem: function removeItem(id) {\n    //utils.assert(this.exists(id), \"Not existing ID in remove command\"+id);\n    var obj = this.getItem(id); //save for later event\n\n    if (!this.isSilent()) {\n      if (this.callEvent(\"onBeforeDelete\", [obj.id, obj]) === false) return false;\n    }\n\n    this.callEvent(\"onAfterDeleteConfirmed\", [obj.id, obj]);\n\n    this._removeItemInner(id);\n\n    if (!this.isSilent()) {\n      this.filter();\n      this.callEvent(\"onAfterDelete\", [obj.id, obj]); //repaint signal\n\n      this.callEvent(\"onStoreUpdated\", [obj.id, obj, \"delete\"]);\n    }\n  },\n  _addItemInner: function _addItemInner(item, index) {\n    //in case of treetable order is sent as 3rd parameter\n    //var order = index;\n    if (this.exists(item.id)) {\n      this.silent(function () {\n        this.updateItem(item.id, item);\n      });\n    } else {\n      var order = this.visibleOrder; //by default item is added to the end of the list\n\n      var data_size = order.length;\n      if (!utils.defined(index) || index < 0) index = data_size; //check to prevent too big indexes\n\n      if (index > data_size) {\n        //dhx.log(\"Warning\",\"DataStore:add\",\"Index of out of bounds\");\n        index = Math.min(order.length, index);\n      }\n    } //gantt.assert(!this.exists(id), \"Not unique ID\");\n\n\n    this.pull[item.id] = item;\n\n    if (!this.isSilent()) {\n      this._updateOrder(function () {\n        if (this.$find(item.id) === -1) this.$insertAt(item.id, index);\n      });\n    }\n\n    this.filter(); //order.$insertAt(item.id,index);\n  },\n  isVisible: function isVisible(id) {\n    return this.visibleOrder.$find(id) > -1;\n  },\n  getVisibleItems: function getVisibleItems() {\n    return this.getIndexRange();\n  },\n  addItem: function addItem(item, index) {\n    if (!utils.defined(item.id)) item.id = utils.uid();\n\n    if (this.$initItem) {\n      item = this.$initItem(item);\n    }\n\n    if (!this.isSilent()) {\n      if (this.callEvent(\"onBeforeAdd\", [item.id, item]) === false) return false;\n    }\n\n    this._addItemInner(item, index);\n\n    if (!this.isSilent()) {\n      this.callEvent(\"onAfterAdd\", [item.id, item]); //repaint signal\n\n      this.callEvent(\"onStoreUpdated\", [item.id, item, \"add\"]);\n    }\n\n    return item.id;\n  },\n  _changeIdInner: function _changeIdInner(oldId, newId) {\n    if (this.pull[oldId]) this.pull[newId] = this.pull[oldId];\n    var visibleOrder = this._searchVisibleOrder[oldId];\n    this.pull[newId].id = newId;\n\n    this._updateOrder(function () {\n      this[this.$find(oldId)] = newId;\n    });\n\n    this._searchVisibleOrder[newId] = visibleOrder;\n    delete this._searchVisibleOrder[oldId]; //this.visibleOrder[this.visibleOrder.$find(oldId)]=newId;\n\n    delete this.pull[oldId];\n  },\n  changeId: function changeId(oldId, newId) {\n    this._changeIdInner(oldId, newId);\n\n    this.callEvent(\"onIdChange\", [oldId, newId]);\n  },\n  exists: function exists(id) {\n    return !!this.pull[id];\n  },\n  _moveInner: function _moveInner(sindex, tindex) {\n    var id = this.getIdByIndex(sindex);\n\n    this._updateOrder(function () {\n      this.$removeAt(sindex);\n      this.$insertAt(id, Math.min(this.length, tindex));\n    }); //this.visibleOrder.$removeAt(sindex);\t//remove at old position\n    //if (sindex<tindex) tindex--;\t//correct shift, caused by element removing\n    //this.visibleOrder.$insertAt(id,Math.min(this.visibleOrder.length, tindex));\t//insert at new position\n\n  },\n  move: function move(sindex, tindex) {\n    //gantt.assert(sindex>=0 && tindex>=0, \"DataStore::move\",\"Incorrect indexes\");\n    var id = this.getIdByIndex(sindex);\n    var obj = this.getItem(id);\n\n    this._moveInner(sindex, tindex);\n\n    if (!this.isSilent()) {\n      //repaint signal\n      this.callEvent(\"onStoreUpdated\", [obj.id, obj, \"move\"]);\n    }\n  },\n  clearAll: function clearAll() {\n    if (this.$destroyed) {\n      return;\n    } // GS-956 We need to unselect the resource as its ID is cached\n\n\n    this.silent(function () {\n      this.unselect();\n    });\n    this.pull = {};\n    this.visibleOrder = powerArray.$create();\n    this.fullOrder = powerArray.$create();\n    if (this.isSilent()) return;\n    this.callEvent(\"onClearAll\", []);\n    this.refresh();\n  },\n  silent: function silent(code, master) {\n    var alreadySilent = false;\n\n    if (this.isSilent()) {\n      alreadySilent = true;\n    }\n\n    this._skip_refresh = true;\n    code.call(master || this);\n\n    if (!alreadySilent) {\n      this._skip_refresh = false;\n    }\n  },\n  isSilent: function isSilent() {\n    return !!this._skip_refresh;\n  },\n  arraysEqual: function arraysEqual(arr1, arr2) {\n    if (arr1.length !== arr2.length) return false;\n\n    for (var i = 0; i < arr1.length; i++) {\n      if (arr1[i] !== arr2[i]) return false;\n    }\n\n    return true;\n  },\n  refresh: function refresh(id, quick) {\n    if (this.isSilent()) return;\n    var item;\n\n    if (id) {\n      item = this.getItem(id);\n    }\n\n    var args;\n\n    if (id) {\n      args = [id, item, \"paint\"];\n    } else {\n      args = [null, null, null];\n    }\n\n    if (this.callEvent(\"onBeforeStoreUpdate\", args) === false) {\n      return;\n    }\n\n    var skipFilter = this._quick_refresh && !this._mark_recompute;\n    this._mark_recompute = false;\n\n    if (id) {\n      // if item changes visible order (e.g. expand-collapse branch) - do a complete repaint\n      if (!quick && !skipFilter) {\n        var oldOrder = this.visibleOrder;\n        this.filter();\n\n        if (!this.arraysEqual(oldOrder, this.visibleOrder)) {\n          id = undefined;\n        }\n      }\n    } else if (!skipFilter) {\n      this.filter();\n    }\n\n    if (id) {\n      args = [id, item, \"paint\"];\n    } else {\n      args = [null, null, null];\n    }\n\n    this.callEvent(\"onStoreUpdated\", args);\n  },\n  count: function count() {\n    return this.fullOrder.length;\n  },\n  countVisible: function countVisible() {\n    return this.visibleOrder.length;\n  },\n  sort: function sort(_sort) {},\n  serialize: function serialize() {},\n  eachItem: function eachItem(code) {\n    for (var i = 0; i < this.fullOrder.length; i++) {\n      var item = this.getItem(this.fullOrder[i]);\n      code.call(this, item);\n    }\n  },\n  find: function find(filter) {\n    var result = [];\n    this.eachItem(function (item) {\n      if (filter(item)) {\n        result.push(item);\n      }\n    });\n    return result;\n  },\n  filter: function filter(rule) {\n    if (!this.isSilent()) {\n      this.callEvent(\"onBeforeFilter\", []);\n    }\n\n    this.callEvent(\"onPreFilter\", []);\n    var filteredOrder = powerArray.$create();\n    var placeholderIds = [];\n    this.eachItem(function (item) {\n      if (this.callEvent(\"onFilterItem\", [item.id, item])) {\n        if (isPlaceholderTask(item.id, null, this, this._ganttConfig)) {\n          placeholderIds.push(item.id);\n        } else {\n          filteredOrder.push(item.id);\n        }\n      }\n    });\n\n    for (var i = 0; i < placeholderIds.length; i++) {\n      filteredOrder.push(placeholderIds[i]);\n    }\n\n    this.visibleOrder = filteredOrder;\n    this._searchVisibleOrder = {};\n\n    for (var i = 0; i < this.visibleOrder.length; i++) {\n      this._searchVisibleOrder[this.visibleOrder[i]] = i;\n    }\n\n    if (!this.isSilent()) {\n      this.callEvent(\"onFilter\", []);\n    }\n  },\n  getIndexRange: function getIndexRange(from, to) {\n    var max = Math.min(to || Infinity, this.countVisible() - 1);\n    var min = from || 0;\n    var cacheKey = min + '-' + max;\n\n    if (this._indexRangeCache[cacheKey]) {\n      return this._indexRangeCache[cacheKey].slice();\n    }\n\n    var ret = [];\n\n    for (var i = min; i <= max; i++) {\n      ret.push(this.getItem(this.visibleOrder[i]));\n    }\n\n    this._indexRangeCache[cacheKey] = ret.slice();\n    return ret;\n  },\n  getItems: function getItems() {\n    if (this._getItemsCache) {\n      return this._getItemsCache.slice();\n    }\n\n    var res = [];\n\n    for (var i in this.pull) {\n      res.push(this.pull[i]);\n    }\n\n    this._getItemsCache = res.slice();\n    return res;\n  },\n  getIdByIndex: function getIdByIndex(index) {\n    return this.visibleOrder[index];\n  },\n  getIndexById: function getIndexById(id) {\n    var res = this._searchVisibleOrder[id];\n\n    if (res === undefined) {\n      res = -1;\n    }\n\n    return res;\n  },\n  _getNullIfUndefined: function _getNullIfUndefined(value) {\n    if (value === undefined) {\n      return null;\n    } else {\n      return value;\n    }\n  },\n  getFirst: function getFirst() {\n    return this._getNullIfUndefined(this.visibleOrder[0]);\n  },\n  getLast: function getLast() {\n    return this._getNullIfUndefined(this.visibleOrder[this.visibleOrder.length - 1]);\n  },\n  getNext: function getNext(id) {\n    return this._getNullIfUndefined(this.visibleOrder[this.getIndexById(id) + 1]);\n  },\n  getPrev: function getPrev(id) {\n    return this._getNullIfUndefined(this.visibleOrder[this.getIndexById(id) - 1]);\n  },\n  destructor: function destructor() {\n    this.callEvent(\"onDestroy\", []);\n    this.detachAllEvents();\n    this.$destroyed = true;\n    this.pull = null;\n    this.$initItem = null;\n    this.visibleOrder = null;\n    this.fullOrder = null;\n    this._skip_refresh = null;\n    this._filterRule = null;\n    this._searchVisibleOrder = null;\n    this._indexRangeCache = {};\n  }\n};\nmodule.exports = DataStore;","function checkTimeout(host, updPerSecond) {\n  if (!updPerSecond) return true;\n  if (host._on_timeout) return false;\n  var timeout = Math.ceil(1000 / updPerSecond);\n  if (timeout < 2) return true;\n  setTimeout(function () {\n    delete host._on_timeout;\n  }, timeout);\n  host._on_timeout = true;\n  return true;\n}\n\nmodule.exports = checkTimeout;","var utils = require(\"../../../utils/utils\");\n\nfunction createScope(addEvent, removeEvent) {\n  addEvent = addEvent || utils.event;\n  removeEvent = removeEvent || utils.eventRemove;\n  var handlers = [];\n  var eventScope = {\n    attach: function attach(el, event, callback, capture) {\n      handlers.push({\n        element: el,\n        event: event,\n        callback: callback,\n        capture: capture\n      });\n      addEvent(el, event, callback, capture);\n    },\n    detach: function detach(el, event, callback, capture) {\n      removeEvent(el, event, callback, capture);\n\n      for (var i = 0; i < handlers.length; i++) {\n        var handler = handlers[i];\n\n        if (handler.element === el && handler.event === event && handler.callback === callback && handler.capture === capture) {\n          handlers.splice(i, 1);\n          i--;\n        }\n      }\n    },\n    detachAll: function detachAll() {\n      var staticArray = handlers.slice(); // original handlers array can be spliced on every iteration\n\n      for (var i = 0; i < staticArray.length; i++) {\n        var handler = staticArray[i];\n        eventScope.detach(handler.element, handler.event, handler.callback, handler.capture);\n        eventScope.detach(handler.element, handler.event, handler.callback, undefined);\n        eventScope.detach(handler.element, handler.event, handler.callback, false);\n        eventScope.detach(handler.element, handler.event, handler.callback, true);\n      }\n\n      handlers.splice(0, handlers.length);\n    },\n    extend: function extend() {\n      return createScope(this.event, this.eventRemove);\n    }\n  };\n  return eventScope;\n}\n\nmodule.exports = createScope;","function _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\n/* eslint-env browser */\nmodule.exports = (typeof self === \"undefined\" ? \"undefined\" : _typeof(self)) == 'object' ? self.FormData : window.FormData;","/* globals __webpack_amd_options__ */\r\nmodule.exports = __webpack_amd_options__;\r\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n'use strict';\n\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nvar punycode = require('punycode');\n\nvar util = require('./util');\n\nexports.parse = urlParse;\nexports.resolve = urlResolve;\nexports.resolveObject = urlResolveObject;\nexports.format = urlFormat;\nexports.Url = Url;\n\nfunction Url() {\n  this.protocol = null;\n  this.slashes = null;\n  this.auth = null;\n  this.host = null;\n  this.port = null;\n  this.hostname = null;\n  this.hash = null;\n  this.search = null;\n  this.query = null;\n  this.pathname = null;\n  this.path = null;\n  this.href = null;\n} // Reference: RFC 3986, RFC 1808, RFC 2396\n// define these here so at least they only have to be\n// compiled once on the first module load.\n\n\nvar protocolPattern = /^([a-z0-9.+-]+:)/i,\n    portPattern = /:[0-9]*$/,\n    // Special case for a simple path URL\nsimplePathPattern = /^(\\/\\/?(?!\\/)[^\\?\\s]*)(\\?[^\\s]*)?$/,\n    // RFC 2396: characters reserved for delimiting URLs.\n// We actually just auto-escape these.\ndelims = ['<', '>', '\"', '`', ' ', '\\r', '\\n', '\\t'],\n    // RFC 2396: characters not allowed for various reasons.\nunwise = ['{', '}', '|', '\\\\', '^', '`'].concat(delims),\n    // Allowed by RFCs, but cause of XSS attacks.  Always escape these.\nautoEscape = ['\\''].concat(unwise),\n    // Characters that are never ever allowed in a hostname.\n// Note that any invalid chars are also handled, but these\n// are the ones that are *expected* to be seen, so we fast-path\n// them.\nnonHostChars = ['%', '/', '?', ';', '#'].concat(autoEscape),\n    hostEndingChars = ['/', '?', '#'],\n    hostnameMaxLen = 255,\n    hostnamePartPattern = /^[+a-z0-9A-Z_-]{0,63}$/,\n    hostnamePartStart = /^([+a-z0-9A-Z_-]{0,63})(.*)$/,\n    // protocols that can allow \"unsafe\" and \"unwise\" chars.\nunsafeProtocol = {\n  'javascript': true,\n  'javascript:': true\n},\n    // protocols that never have a hostname.\nhostlessProtocol = {\n  'javascript': true,\n  'javascript:': true\n},\n    // protocols that always contain a // bit.\nslashedProtocol = {\n  'http': true,\n  'https': true,\n  'ftp': true,\n  'gopher': true,\n  'file': true,\n  'http:': true,\n  'https:': true,\n  'ftp:': true,\n  'gopher:': true,\n  'file:': true\n},\n    querystring = require('querystring');\n\nfunction urlParse(url, parseQueryString, slashesDenoteHost) {\n  if (url && util.isObject(url) && url instanceof Url) return url;\n  var u = new Url();\n  u.parse(url, parseQueryString, slashesDenoteHost);\n  return u;\n}\n\nUrl.prototype.parse = function (url, parseQueryString, slashesDenoteHost) {\n  if (!util.isString(url)) {\n    throw new TypeError(\"Parameter 'url' must be a string, not \" + _typeof(url));\n  } // Copy chrome, IE, opera backslash-handling behavior.\n  // Back slashes before the query string get converted to forward slashes\n  // See: https://code.google.com/p/chromium/issues/detail?id=25916\n\n\n  var queryIndex = url.indexOf('?'),\n      splitter = queryIndex !== -1 && queryIndex < url.indexOf('#') ? '?' : '#',\n      uSplit = url.split(splitter),\n      slashRegex = /\\\\/g;\n  uSplit[0] = uSplit[0].replace(slashRegex, '/');\n  url = uSplit.join(splitter);\n  var rest = url; // trim before proceeding.\n  // This is to support parse stuff like \"  http://foo.com  \\n\"\n\n  rest = rest.trim();\n\n  if (!slashesDenoteHost && url.split('#').length === 1) {\n    // Try fast path regexp\n    var simplePath = simplePathPattern.exec(rest);\n\n    if (simplePath) {\n      this.path = rest;\n      this.href = rest;\n      this.pathname = simplePath[1];\n\n      if (simplePath[2]) {\n        this.search = simplePath[2];\n\n        if (parseQueryString) {\n          this.query = querystring.parse(this.search.substr(1));\n        } else {\n          this.query = this.search.substr(1);\n        }\n      } else if (parseQueryString) {\n        this.search = '';\n        this.query = {};\n      }\n\n      return this;\n    }\n  }\n\n  var proto = protocolPattern.exec(rest);\n\n  if (proto) {\n    proto = proto[0];\n    var lowerProto = proto.toLowerCase();\n    this.protocol = lowerProto;\n    rest = rest.substr(proto.length);\n  } // figure out if it's got a host\n  // user@server is *always* interpreted as a hostname, and url\n  // resolution will treat //foo/bar as host=foo,path=bar because that's\n  // how the browser resolves relative URLs.\n\n\n  if (slashesDenoteHost || proto || rest.match(/^\\/\\/[^@\\/]+@[^@\\/]+/)) {\n    var slashes = rest.substr(0, 2) === '//';\n\n    if (slashes && !(proto && hostlessProtocol[proto])) {\n      rest = rest.substr(2);\n      this.slashes = true;\n    }\n  }\n\n  if (!hostlessProtocol[proto] && (slashes || proto && !slashedProtocol[proto])) {\n    // there's a hostname.\n    // the first instance of /, ?, ;, or # ends the host.\n    //\n    // If there is an @ in the hostname, then non-host chars *are* allowed\n    // to the left of the last @ sign, unless some host-ending character\n    // comes *before* the @-sign.\n    // URLs are obnoxious.\n    //\n    // ex:\n    // http://a@b@c/ => user:a@b host:c\n    // http://a@b?@c => user:a host:c path:/?@c\n    // v0.12 TODO(isaacs): This is not quite how Chrome does things.\n    // Review our test case against browsers more comprehensively.\n    // find the first instance of any hostEndingChars\n    var hostEnd = -1;\n\n    for (var i = 0; i < hostEndingChars.length; i++) {\n      var hec = rest.indexOf(hostEndingChars[i]);\n      if (hec !== -1 && (hostEnd === -1 || hec < hostEnd)) hostEnd = hec;\n    } // at this point, either we have an explicit point where the\n    // auth portion cannot go past, or the last @ char is the decider.\n\n\n    var auth, atSign;\n\n    if (hostEnd === -1) {\n      // atSign can be anywhere.\n      atSign = rest.lastIndexOf('@');\n    } else {\n      // atSign must be in auth portion.\n      // http://a@b/c@d => host:b auth:a path:/c@d\n      atSign = rest.lastIndexOf('@', hostEnd);\n    } // Now we have a portion which is definitely the auth.\n    // Pull that off.\n\n\n    if (atSign !== -1) {\n      auth = rest.slice(0, atSign);\n      rest = rest.slice(atSign + 1);\n      this.auth = decodeURIComponent(auth);\n    } // the host is the remaining to the left of the first non-host char\n\n\n    hostEnd = -1;\n\n    for (var i = 0; i < nonHostChars.length; i++) {\n      var hec = rest.indexOf(nonHostChars[i]);\n      if (hec !== -1 && (hostEnd === -1 || hec < hostEnd)) hostEnd = hec;\n    } // if we still have not hit it, then the entire thing is a host.\n\n\n    if (hostEnd === -1) hostEnd = rest.length;\n    this.host = rest.slice(0, hostEnd);\n    rest = rest.slice(hostEnd); // pull out port.\n\n    this.parseHost(); // we've indicated that there is a hostname,\n    // so even if it's empty, it has to be present.\n\n    this.hostname = this.hostname || ''; // if hostname begins with [ and ends with ]\n    // assume that it's an IPv6 address.\n\n    var ipv6Hostname = this.hostname[0] === '[' && this.hostname[this.hostname.length - 1] === ']'; // validate a little.\n\n    if (!ipv6Hostname) {\n      var hostparts = this.hostname.split(/\\./);\n\n      for (var i = 0, l = hostparts.length; i < l; i++) {\n        var part = hostparts[i];\n        if (!part) continue;\n\n        if (!part.match(hostnamePartPattern)) {\n          var newpart = '';\n\n          for (var j = 0, k = part.length; j < k; j++) {\n            if (part.charCodeAt(j) > 127) {\n              // we replace non-ASCII char with a temporary placeholder\n              // we need this to make sure size of hostname is not\n              // broken by replacing non-ASCII by nothing\n              newpart += 'x';\n            } else {\n              newpart += part[j];\n            }\n          } // we test again with ASCII char only\n\n\n          if (!newpart.match(hostnamePartPattern)) {\n            var validParts = hostparts.slice(0, i);\n            var notHost = hostparts.slice(i + 1);\n            var bit = part.match(hostnamePartStart);\n\n            if (bit) {\n              validParts.push(bit[1]);\n              notHost.unshift(bit[2]);\n            }\n\n            if (notHost.length) {\n              rest = '/' + notHost.join('.') + rest;\n            }\n\n            this.hostname = validParts.join('.');\n            break;\n          }\n        }\n      }\n    }\n\n    if (this.hostname.length > hostnameMaxLen) {\n      this.hostname = '';\n    } else {\n      // hostnames are always lower case.\n      this.hostname = this.hostname.toLowerCase();\n    }\n\n    if (!ipv6Hostname) {\n      // IDNA Support: Returns a punycoded representation of \"domain\".\n      // It only converts parts of the domain name that\n      // have non-ASCII characters, i.e. it doesn't matter if\n      // you call it with a domain that already is ASCII-only.\n      this.hostname = punycode.toASCII(this.hostname);\n    }\n\n    var p = this.port ? ':' + this.port : '';\n    var h = this.hostname || '';\n    this.host = h + p;\n    this.href += this.host; // strip [ and ] from the hostname\n    // the host field still retains them, though\n\n    if (ipv6Hostname) {\n      this.hostname = this.hostname.substr(1, this.hostname.length - 2);\n\n      if (rest[0] !== '/') {\n        rest = '/' + rest;\n      }\n    }\n  } // now rest is set to the post-host stuff.\n  // chop off any delim chars.\n\n\n  if (!unsafeProtocol[lowerProto]) {\n    // First, make 100% sure that any \"autoEscape\" chars get\n    // escaped, even if encodeURIComponent doesn't think they\n    // need to be.\n    for (var i = 0, l = autoEscape.length; i < l; i++) {\n      var ae = autoEscape[i];\n      if (rest.indexOf(ae) === -1) continue;\n      var esc = encodeURIComponent(ae);\n\n      if (esc === ae) {\n        esc = escape(ae);\n      }\n\n      rest = rest.split(ae).join(esc);\n    }\n  } // chop off from the tail first.\n\n\n  var hash = rest.indexOf('#');\n\n  if (hash !== -1) {\n    // got a fragment string.\n    this.hash = rest.substr(hash);\n    rest = rest.slice(0, hash);\n  }\n\n  var qm = rest.indexOf('?');\n\n  if (qm !== -1) {\n    this.search = rest.substr(qm);\n    this.query = rest.substr(qm + 1);\n\n    if (parseQueryString) {\n      this.query = querystring.parse(this.query);\n    }\n\n    rest = rest.slice(0, qm);\n  } else if (parseQueryString) {\n    // no query string, but parseQueryString still requested\n    this.search = '';\n    this.query = {};\n  }\n\n  if (rest) this.pathname = rest;\n\n  if (slashedProtocol[lowerProto] && this.hostname && !this.pathname) {\n    this.pathname = '/';\n  } //to support http.request\n\n\n  if (this.pathname || this.search) {\n    var p = this.pathname || '';\n    var s = this.search || '';\n    this.path = p + s;\n  } // finally, reconstruct the href based on what has been validated.\n\n\n  this.href = this.format();\n  return this;\n}; // format a parsed object into a url string\n\n\nfunction urlFormat(obj) {\n  // ensure it's an object, and not a string url.\n  // If it's an obj, this is a no-op.\n  // this way, you can call url_format() on strings\n  // to clean up potentially wonky urls.\n  if (util.isString(obj)) obj = urlParse(obj);\n  if (!(obj instanceof Url)) return Url.prototype.format.call(obj);\n  return obj.format();\n}\n\nUrl.prototype.format = function () {\n  var auth = this.auth || '';\n\n  if (auth) {\n    auth = encodeURIComponent(auth);\n    auth = auth.replace(/%3A/i, ':');\n    auth += '@';\n  }\n\n  var protocol = this.protocol || '',\n      pathname = this.pathname || '',\n      hash = this.hash || '',\n      host = false,\n      query = '';\n\n  if (this.host) {\n    host = auth + this.host;\n  } else if (this.hostname) {\n    host = auth + (this.hostname.indexOf(':') === -1 ? this.hostname : '[' + this.hostname + ']');\n\n    if (this.port) {\n      host += ':' + this.port;\n    }\n  }\n\n  if (this.query && util.isObject(this.query) && Object.keys(this.query).length) {\n    query = querystring.stringify(this.query);\n  }\n\n  var search = this.search || query && '?' + query || '';\n  if (protocol && protocol.substr(-1) !== ':') protocol += ':'; // only the slashedProtocols get the //.  Not mailto:, xmpp:, etc.\n  // unless they had them to begin with.\n\n  if (this.slashes || (!protocol || slashedProtocol[protocol]) && host !== false) {\n    host = '//' + (host || '');\n    if (pathname && pathname.charAt(0) !== '/') pathname = '/' + pathname;\n  } else if (!host) {\n    host = '';\n  }\n\n  if (hash && hash.charAt(0) !== '#') hash = '#' + hash;\n  if (search && search.charAt(0) !== '?') search = '?' + search;\n  pathname = pathname.replace(/[?#]/g, function (match) {\n    return encodeURIComponent(match);\n  });\n  search = search.replace('#', '%23');\n  return protocol + host + pathname + search + hash;\n};\n\nfunction urlResolve(source, relative) {\n  return urlParse(source, false, true).resolve(relative);\n}\n\nUrl.prototype.resolve = function (relative) {\n  return this.resolveObject(urlParse(relative, false, true)).format();\n};\n\nfunction urlResolveObject(source, relative) {\n  if (!source) return relative;\n  return urlParse(source, false, true).resolveObject(relative);\n}\n\nUrl.prototype.resolveObject = function (relative) {\n  if (util.isString(relative)) {\n    var rel = new Url();\n    rel.parse(relative, false, true);\n    relative = rel;\n  }\n\n  var result = new Url();\n  var tkeys = Object.keys(this);\n\n  for (var tk = 0; tk < tkeys.length; tk++) {\n    var tkey = tkeys[tk];\n    result[tkey] = this[tkey];\n  } // hash is always overridden, no matter what.\n  // even href=\"\" will remove it.\n\n\n  result.hash = relative.hash; // if the relative url is empty, then there's nothing left to do here.\n\n  if (relative.href === '') {\n    result.href = result.format();\n    return result;\n  } // hrefs like //foo/bar always cut to the protocol.\n\n\n  if (relative.slashes && !relative.protocol) {\n    // take everything except the protocol from relative\n    var rkeys = Object.keys(relative);\n\n    for (var rk = 0; rk < rkeys.length; rk++) {\n      var rkey = rkeys[rk];\n      if (rkey !== 'protocol') result[rkey] = relative[rkey];\n    } //urlParse appends trailing / to urls like http://www.example.com\n\n\n    if (slashedProtocol[result.protocol] && result.hostname && !result.pathname) {\n      result.path = result.pathname = '/';\n    }\n\n    result.href = result.format();\n    return result;\n  }\n\n  if (relative.protocol && relative.protocol !== result.protocol) {\n    // if it's a known url protocol, then changing\n    // the protocol does weird things\n    // first, if it's not file:, then we MUST have a host,\n    // and if there was a path\n    // to begin with, then we MUST have a path.\n    // if it is file:, then the host is dropped,\n    // because that's known to be hostless.\n    // anything else is assumed to be absolute.\n    if (!slashedProtocol[relative.protocol]) {\n      var keys = Object.keys(relative);\n\n      for (var v = 0; v < keys.length; v++) {\n        var k = keys[v];\n        result[k] = relative[k];\n      }\n\n      result.href = result.format();\n      return result;\n    }\n\n    result.protocol = relative.protocol;\n\n    if (!relative.host && !hostlessProtocol[relative.protocol]) {\n      var relPath = (relative.pathname || '').split('/');\n\n      while (relPath.length && !(relative.host = relPath.shift())) {\n        ;\n      }\n\n      if (!relative.host) relative.host = '';\n      if (!relative.hostname) relative.hostname = '';\n      if (relPath[0] !== '') relPath.unshift('');\n      if (relPath.length < 2) relPath.unshift('');\n      result.pathname = relPath.join('/');\n    } else {\n      result.pathname = relative.pathname;\n    }\n\n    result.search = relative.search;\n    result.query = relative.query;\n    result.host = relative.host || '';\n    result.auth = relative.auth;\n    result.hostname = relative.hostname || relative.host;\n    result.port = relative.port; // to support http.request\n\n    if (result.pathname || result.search) {\n      var p = result.pathname || '';\n      var s = result.search || '';\n      result.path = p + s;\n    }\n\n    result.slashes = result.slashes || relative.slashes;\n    result.href = result.format();\n    return result;\n  }\n\n  var isSourceAbs = result.pathname && result.pathname.charAt(0) === '/',\n      isRelAbs = relative.host || relative.pathname && relative.pathname.charAt(0) === '/',\n      mustEndAbs = isRelAbs || isSourceAbs || result.host && relative.pathname,\n      removeAllDots = mustEndAbs,\n      srcPath = result.pathname && result.pathname.split('/') || [],\n      relPath = relative.pathname && relative.pathname.split('/') || [],\n      psychotic = result.protocol && !slashedProtocol[result.protocol]; // if the url is a non-slashed url, then relative\n  // links like ../.. should be able\n  // to crawl up to the hostname, as well.  This is strange.\n  // result.protocol has already been set by now.\n  // Later on, put the first path part into the host field.\n\n  if (psychotic) {\n    result.hostname = '';\n    result.port = null;\n\n    if (result.host) {\n      if (srcPath[0] === '') srcPath[0] = result.host;else srcPath.unshift(result.host);\n    }\n\n    result.host = '';\n\n    if (relative.protocol) {\n      relative.hostname = null;\n      relative.port = null;\n\n      if (relative.host) {\n        if (relPath[0] === '') relPath[0] = relative.host;else relPath.unshift(relative.host);\n      }\n\n      relative.host = null;\n    }\n\n    mustEndAbs = mustEndAbs && (relPath[0] === '' || srcPath[0] === '');\n  }\n\n  if (isRelAbs) {\n    // it's absolute.\n    result.host = relative.host || relative.host === '' ? relative.host : result.host;\n    result.hostname = relative.hostname || relative.hostname === '' ? relative.hostname : result.hostname;\n    result.search = relative.search;\n    result.query = relative.query;\n    srcPath = relPath; // fall through to the dot-handling below.\n  } else if (relPath.length) {\n    // it's relative\n    // throw away the existing file, and take the new path instead.\n    if (!srcPath) srcPath = [];\n    srcPath.pop();\n    srcPath = srcPath.concat(relPath);\n    result.search = relative.search;\n    result.query = relative.query;\n  } else if (!util.isNullOrUndefined(relative.search)) {\n    // just pull out the search.\n    // like href='?foo'.\n    // Put this after the other two cases because it simplifies the booleans\n    if (psychotic) {\n      result.hostname = result.host = srcPath.shift(); //occationaly the auth can get stuck only in host\n      //this especially happens in cases like\n      //url.resolveObject('mailto:local1@domain1', 'local2@domain2')\n\n      var authInHost = result.host && result.host.indexOf('@') > 0 ? result.host.split('@') : false;\n\n      if (authInHost) {\n        result.auth = authInHost.shift();\n        result.host = result.hostname = authInHost.shift();\n      }\n    }\n\n    result.search = relative.search;\n    result.query = relative.query; //to support http.request\n\n    if (!util.isNull(result.pathname) || !util.isNull(result.search)) {\n      result.path = (result.pathname ? result.pathname : '') + (result.search ? result.search : '');\n    }\n\n    result.href = result.format();\n    return result;\n  }\n\n  if (!srcPath.length) {\n    // no path at all.  easy.\n    // we've already handled the other stuff above.\n    result.pathname = null; //to support http.request\n\n    if (result.search) {\n      result.path = '/' + result.search;\n    } else {\n      result.path = null;\n    }\n\n    result.href = result.format();\n    return result;\n  } // if a url ENDs in . or .., then it must get a trailing slash.\n  // however, if it ends in anything else non-slashy,\n  // then it must NOT get a trailing slash.\n\n\n  var last = srcPath.slice(-1)[0];\n  var hasTrailingSlash = (result.host || relative.host || srcPath.length > 1) && (last === '.' || last === '..') || last === ''; // strip single dots, resolve double dots to parent dir\n  // if the path tries to go above the root, `up` ends up > 0\n\n  var up = 0;\n\n  for (var i = srcPath.length; i >= 0; i--) {\n    last = srcPath[i];\n\n    if (last === '.') {\n      srcPath.splice(i, 1);\n    } else if (last === '..') {\n      srcPath.splice(i, 1);\n      up++;\n    } else if (up) {\n      srcPath.splice(i, 1);\n      up--;\n    }\n  } // if the path is allowed to go above the root, restore leading ..s\n\n\n  if (!mustEndAbs && !removeAllDots) {\n    for (; up--; up) {\n      srcPath.unshift('..');\n    }\n  }\n\n  if (mustEndAbs && srcPath[0] !== '' && (!srcPath[0] || srcPath[0].charAt(0) !== '/')) {\n    srcPath.unshift('');\n  }\n\n  if (hasTrailingSlash && srcPath.join('/').substr(-1) !== '/') {\n    srcPath.push('');\n  }\n\n  var isAbsolute = srcPath[0] === '' || srcPath[0] && srcPath[0].charAt(0) === '/'; // put the host back\n\n  if (psychotic) {\n    result.hostname = result.host = isAbsolute ? '' : srcPath.length ? srcPath.shift() : ''; //occationaly the auth can get stuck only in host\n    //this especially happens in cases like\n    //url.resolveObject('mailto:local1@domain1', 'local2@domain2')\n\n    var authInHost = result.host && result.host.indexOf('@') > 0 ? result.host.split('@') : false;\n\n    if (authInHost) {\n      result.auth = authInHost.shift();\n      result.host = result.hostname = authInHost.shift();\n    }\n  }\n\n  mustEndAbs = mustEndAbs || result.host && srcPath.length;\n\n  if (mustEndAbs && !isAbsolute) {\n    srcPath.unshift('');\n  }\n\n  if (!srcPath.length) {\n    result.pathname = null;\n    result.path = null;\n  } else {\n    result.pathname = srcPath.join('/');\n  } //to support request.http\n\n\n  if (!util.isNull(result.pathname) || !util.isNull(result.search)) {\n    result.path = (result.pathname ? result.pathname : '') + (result.search ? result.search : '');\n  }\n\n  result.auth = relative.auth || result.auth;\n  result.slashes = result.slashes || relative.slashes;\n  result.href = result.format();\n  return result;\n};\n\nUrl.prototype.parseHost = function () {\n  var host = this.host;\n  var port = portPattern.exec(host);\n\n  if (port) {\n    port = port[0];\n\n    if (port !== ':') {\n      this.port = port.substr(1);\n    }\n\n    host = host.substr(0, host.length - port.length);\n  }\n\n  if (host) this.hostname = host;\n};","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n// a transform stream is a readable/writable stream where you do\n// something with the data.  Sometimes it's called a \"filter\",\n// but that's not a great name for it, since that implies a thing where\n// some bits pass through, and others are simply ignored.  (That would\n// be a valid example of a transform, of course.)\n//\n// While the output is causally related to the input, it's not a\n// necessarily symmetric or synchronous transformation.  For example,\n// a zlib stream might take multiple plain-text writes(), and then\n// emit a single compressed chunk some time in the future.\n//\n// Here's how this works:\n//\n// The Transform stream has all the aspects of the readable and writable\n// stream classes.  When you write(chunk), that calls _write(chunk,cb)\n// internally, and returns false if there's a lot of pending writes\n// buffered up.  When you call read(), that calls _read(n) until\n// there's enough pending readable data buffered up.\n//\n// In a transform stream, the written data is placed in a buffer.  When\n// _read(n) is called, it transforms the queued up data, calling the\n// buffered _write cb's as it consumes chunks.  If consuming a single\n// written chunk would result in multiple output chunks, then the first\n// outputted bit calls the readcb, and subsequent chunks just go into\n// the read buffer, and will cause it to emit 'readable' if necessary.\n//\n// This way, back-pressure is actually determined by the reading side,\n// since _read has to be called to start processing a new chunk.  However,\n// a pathological inflate type of transform can cause excessive buffering\n// here.  For example, imagine a stream where every byte of input is\n// interpreted as an integer from 0-255, and then results in that many\n// bytes of output.  Writing the 4 bytes {ff,ff,ff,ff} would result in\n// 1kb of data being output.  In this case, you could write a very small\n// amount of input, and end up with a very large amount of output.  In\n// such a pathological inflating mechanism, there'd be no way to tell\n// the system to stop doing the transform.  A single 4MB write could\n// cause the system to run out of memory.\n//\n// However, even in such a pathological case, only a single written chunk\n// would be consumed, and then the rest would wait (un-transformed) until\n// the results of the previous transformed chunk were consumed.\n'use strict';\n\nmodule.exports = Transform;\n\nvar Duplex = require('./_stream_duplex');\n/*<replacement>*/\n\n\nvar util = require('core-util-is');\n\nutil.inherits = require('inherits');\n/*</replacement>*/\n\nutil.inherits(Transform, Duplex);\n\nfunction afterTransform(er, data) {\n  var ts = this._transformState;\n  ts.transforming = false;\n  var cb = ts.writecb;\n\n  if (!cb) {\n    return this.emit('error', new Error('write callback called multiple times'));\n  }\n\n  ts.writechunk = null;\n  ts.writecb = null;\n  if (data != null) // single equals check for both `null` and `undefined`\n    this.push(data);\n  cb(er);\n  var rs = this._readableState;\n  rs.reading = false;\n\n  if (rs.needReadable || rs.length < rs.highWaterMark) {\n    this._read(rs.highWaterMark);\n  }\n}\n\nfunction Transform(options) {\n  if (!(this instanceof Transform)) return new Transform(options);\n  Duplex.call(this, options);\n  this._transformState = {\n    afterTransform: afterTransform.bind(this),\n    needTransform: false,\n    transforming: false,\n    writecb: null,\n    writechunk: null,\n    writeencoding: null\n  }; // start out asking for a readable event once data is transformed.\n\n  this._readableState.needReadable = true; // we have implemented the _read method, and done the other things\n  // that Readable wants before the first _read call, so unset the\n  // sync guard flag.\n\n  this._readableState.sync = false;\n\n  if (options) {\n    if (typeof options.transform === 'function') this._transform = options.transform;\n    if (typeof options.flush === 'function') this._flush = options.flush;\n  } // When the writable side finishes, then flush out anything remaining.\n\n\n  this.on('prefinish', prefinish);\n}\n\nfunction prefinish() {\n  var _this = this;\n\n  if (typeof this._flush === 'function') {\n    this._flush(function (er, data) {\n      done(_this, er, data);\n    });\n  } else {\n    done(this, null, null);\n  }\n}\n\nTransform.prototype.push = function (chunk, encoding) {\n  this._transformState.needTransform = false;\n  return Duplex.prototype.push.call(this, chunk, encoding);\n}; // This is the part where you do stuff!\n// override this function in implementation classes.\n// 'chunk' is an input chunk.\n//\n// Call `push(newChunk)` to pass along transformed output\n// to the readable side.  You may call 'push' zero or more times.\n//\n// Call `cb(err)` when you are done with this chunk.  If you pass\n// an error, then that'll put the hurt on the whole operation.  If you\n// never call cb(), then you'll never get another chunk.\n\n\nTransform.prototype._transform = function (chunk, encoding, cb) {\n  throw new Error('_transform() is not implemented');\n};\n\nTransform.prototype._write = function (chunk, encoding, cb) {\n  var ts = this._transformState;\n  ts.writecb = cb;\n  ts.writechunk = chunk;\n  ts.writeencoding = encoding;\n\n  if (!ts.transforming) {\n    var rs = this._readableState;\n    if (ts.needTransform || rs.needReadable || rs.length < rs.highWaterMark) this._read(rs.highWaterMark);\n  }\n}; // Doesn't matter what the args are here.\n// _transform does all the work.\n// That we got here means that the readable side wants more data.\n\n\nTransform.prototype._read = function (n) {\n  var ts = this._transformState;\n\n  if (ts.writechunk !== null && ts.writecb && !ts.transforming) {\n    ts.transforming = true;\n\n    this._transform(ts.writechunk, ts.writeencoding, ts.afterTransform);\n  } else {\n    // mark that we need a transform, so that any data that comes in\n    // will get processed, now that we've asked for it.\n    ts.needTransform = true;\n  }\n};\n\nTransform.prototype._destroy = function (err, cb) {\n  var _this2 = this;\n\n  Duplex.prototype._destroy.call(this, err, function (err2) {\n    cb(err2);\n\n    _this2.emit('close');\n  });\n};\n\nfunction done(stream, er, data) {\n  if (er) return stream.emit('error', er);\n  if (data != null) // single equals check for both `null` and `undefined`\n    stream.push(data); // if there's nothing in the write buffer, then that means\n  // that nothing more will ever be provided\n\n  if (stream._writableState.length) throw new Error('Calling transform done when ws.length != 0');\n  if (stream._transformState.transforming) throw new Error('Calling transform done when still transforming');\n  return stream.push(null);\n}","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n'use strict';\n/*<replacement>*/\n\nvar Buffer = require('safe-buffer').Buffer;\n/*</replacement>*/\n\n\nvar isEncoding = Buffer.isEncoding || function (encoding) {\n  encoding = '' + encoding;\n\n  switch (encoding && encoding.toLowerCase()) {\n    case 'hex':\n    case 'utf8':\n    case 'utf-8':\n    case 'ascii':\n    case 'binary':\n    case 'base64':\n    case 'ucs2':\n    case 'ucs-2':\n    case 'utf16le':\n    case 'utf-16le':\n    case 'raw':\n      return true;\n\n    default:\n      return false;\n  }\n};\n\nfunction _normalizeEncoding(enc) {\n  if (!enc) return 'utf8';\n  var retried;\n\n  while (true) {\n    switch (enc) {\n      case 'utf8':\n      case 'utf-8':\n        return 'utf8';\n\n      case 'ucs2':\n      case 'ucs-2':\n      case 'utf16le':\n      case 'utf-16le':\n        return 'utf16le';\n\n      case 'latin1':\n      case 'binary':\n        return 'latin1';\n\n      case 'base64':\n      case 'ascii':\n      case 'hex':\n        return enc;\n\n      default:\n        if (retried) return; // undefined\n\n        enc = ('' + enc).toLowerCase();\n        retried = true;\n    }\n  }\n}\n\n; // Do not cache `Buffer.isEncoding` when checking encoding names as some\n// modules monkey-patch it to support additional encodings\n\nfunction normalizeEncoding(enc) {\n  var nenc = _normalizeEncoding(enc);\n\n  if (typeof nenc !== 'string' && (Buffer.isEncoding === isEncoding || !isEncoding(enc))) throw new Error('Unknown encoding: ' + enc);\n  return nenc || enc;\n} // StringDecoder provides an interface for efficiently splitting a series of\n// buffers into a series of JS strings without breaking apart multi-byte\n// characters.\n\n\nexports.StringDecoder = StringDecoder;\n\nfunction StringDecoder(encoding) {\n  this.encoding = normalizeEncoding(encoding);\n  var nb;\n\n  switch (this.encoding) {\n    case 'utf16le':\n      this.text = utf16Text;\n      this.end = utf16End;\n      nb = 4;\n      break;\n\n    case 'utf8':\n      this.fillLast = utf8FillLast;\n      nb = 4;\n      break;\n\n    case 'base64':\n      this.text = base64Text;\n      this.end = base64End;\n      nb = 3;\n      break;\n\n    default:\n      this.write = simpleWrite;\n      this.end = simpleEnd;\n      return;\n  }\n\n  this.lastNeed = 0;\n  this.lastTotal = 0;\n  this.lastChar = Buffer.allocUnsafe(nb);\n}\n\nStringDecoder.prototype.write = function (buf) {\n  if (buf.length === 0) return '';\n  var r;\n  var i;\n\n  if (this.lastNeed) {\n    r = this.fillLast(buf);\n    if (r === undefined) return '';\n    i = this.lastNeed;\n    this.lastNeed = 0;\n  } else {\n    i = 0;\n  }\n\n  if (i < buf.length) return r ? r + this.text(buf, i) : this.text(buf, i);\n  return r || '';\n};\n\nStringDecoder.prototype.end = utf8End; // Returns only complete characters in a Buffer\n\nStringDecoder.prototype.text = utf8Text; // Attempts to complete a partial non-UTF-8 character using bytes from a Buffer\n\nStringDecoder.prototype.fillLast = function (buf) {\n  if (this.lastNeed <= buf.length) {\n    buf.copy(this.lastChar, this.lastTotal - this.lastNeed, 0, this.lastNeed);\n    return this.lastChar.toString(this.encoding, 0, this.lastTotal);\n  }\n\n  buf.copy(this.lastChar, this.lastTotal - this.lastNeed, 0, buf.length);\n  this.lastNeed -= buf.length;\n}; // Checks the type of a UTF-8 byte, whether it's ASCII, a leading byte, or a\n// continuation byte. If an invalid byte is detected, -2 is returned.\n\n\nfunction utf8CheckByte(_byte) {\n  if (_byte <= 0x7F) return 0;else if (_byte >> 5 === 0x06) return 2;else if (_byte >> 4 === 0x0E) return 3;else if (_byte >> 3 === 0x1E) return 4;\n  return _byte >> 6 === 0x02 ? -1 : -2;\n} // Checks at most 3 bytes at the end of a Buffer in order to detect an\n// incomplete multi-byte UTF-8 character. The total number of bytes (2, 3, or 4)\n// needed to complete the UTF-8 character (if applicable) are returned.\n\n\nfunction utf8CheckIncomplete(self, buf, i) {\n  var j = buf.length - 1;\n  if (j < i) return 0;\n  var nb = utf8CheckByte(buf[j]);\n\n  if (nb >= 0) {\n    if (nb > 0) self.lastNeed = nb - 1;\n    return nb;\n  }\n\n  if (--j < i || nb === -2) return 0;\n  nb = utf8CheckByte(buf[j]);\n\n  if (nb >= 0) {\n    if (nb > 0) self.lastNeed = nb - 2;\n    return nb;\n  }\n\n  if (--j < i || nb === -2) return 0;\n  nb = utf8CheckByte(buf[j]);\n\n  if (nb >= 0) {\n    if (nb > 0) {\n      if (nb === 2) nb = 0;else self.lastNeed = nb - 3;\n    }\n\n    return nb;\n  }\n\n  return 0;\n} // Validates as many continuation bytes for a multi-byte UTF-8 character as\n// needed or are available. If we see a non-continuation byte where we expect\n// one, we \"replace\" the validated continuation bytes we've seen so far with\n// a single UTF-8 replacement character ('\\ufffd'), to match v8's UTF-8 decoding\n// behavior. The continuation byte check is included three times in the case\n// where all of the continuation bytes for a character exist in the same buffer.\n// It is also done this way as a slight performance increase instead of using a\n// loop.\n\n\nfunction utf8CheckExtraBytes(self, buf, p) {\n  if ((buf[0] & 0xC0) !== 0x80) {\n    self.lastNeed = 0;\n    return \"\\uFFFD\";\n  }\n\n  if (self.lastNeed > 1 && buf.length > 1) {\n    if ((buf[1] & 0xC0) !== 0x80) {\n      self.lastNeed = 1;\n      return \"\\uFFFD\";\n    }\n\n    if (self.lastNeed > 2 && buf.length > 2) {\n      if ((buf[2] & 0xC0) !== 0x80) {\n        self.lastNeed = 2;\n        return \"\\uFFFD\";\n      }\n    }\n  }\n} // Attempts to complete a multi-byte UTF-8 character using bytes from a Buffer.\n\n\nfunction utf8FillLast(buf) {\n  var p = this.lastTotal - this.lastNeed;\n  var r = utf8CheckExtraBytes(this, buf, p);\n  if (r !== undefined) return r;\n\n  if (this.lastNeed <= buf.length) {\n    buf.copy(this.lastChar, p, 0, this.lastNeed);\n    return this.lastChar.toString(this.encoding, 0, this.lastTotal);\n  }\n\n  buf.copy(this.lastChar, p, 0, buf.length);\n  this.lastNeed -= buf.length;\n} // Returns all complete UTF-8 characters in a Buffer. If the Buffer ended on a\n// partial character, the character's bytes are buffered until the required\n// number of bytes are available.\n\n\nfunction utf8Text(buf, i) {\n  var total = utf8CheckIncomplete(this, buf, i);\n  if (!this.lastNeed) return buf.toString('utf8', i);\n  this.lastTotal = total;\n  var end = buf.length - (total - this.lastNeed);\n  buf.copy(this.lastChar, 0, end);\n  return buf.toString('utf8', i, end);\n} // For UTF-8, a replacement character is added when ending on a partial\n// character.\n\n\nfunction utf8End(buf) {\n  var r = buf && buf.length ? this.write(buf) : '';\n  if (this.lastNeed) return r + \"\\uFFFD\";\n  return r;\n} // UTF-16LE typically needs two bytes per character, but even if we have an even\n// number of bytes available, we need to check if we end on a leading/high\n// surrogate. In that case, we need to wait for the next two bytes in order to\n// decode the last character properly.\n\n\nfunction utf16Text(buf, i) {\n  if ((buf.length - i) % 2 === 0) {\n    var r = buf.toString('utf16le', i);\n\n    if (r) {\n      var c = r.charCodeAt(r.length - 1);\n\n      if (c >= 0xD800 && c <= 0xDBFF) {\n        this.lastNeed = 2;\n        this.lastTotal = 4;\n        this.lastChar[0] = buf[buf.length - 2];\n        this.lastChar[1] = buf[buf.length - 1];\n        return r.slice(0, -1);\n      }\n    }\n\n    return r;\n  }\n\n  this.lastNeed = 1;\n  this.lastTotal = 2;\n  this.lastChar[0] = buf[buf.length - 1];\n  return buf.toString('utf16le', i, buf.length - 1);\n} // For UTF-16LE we do not explicitly append special replacement characters if we\n// end on a partial character, we simply let v8 handle that.\n\n\nfunction utf16End(buf) {\n  var r = buf && buf.length ? this.write(buf) : '';\n\n  if (this.lastNeed) {\n    var end = this.lastTotal - this.lastNeed;\n    return r + this.lastChar.toString('utf16le', 0, end);\n  }\n\n  return r;\n}\n\nfunction base64Text(buf, i) {\n  var n = (buf.length - i) % 3;\n  if (n === 0) return buf.toString('base64', i);\n  this.lastNeed = 3 - n;\n  this.lastTotal = 3;\n\n  if (n === 1) {\n    this.lastChar[0] = buf[buf.length - 1];\n  } else {\n    this.lastChar[0] = buf[buf.length - 2];\n    this.lastChar[1] = buf[buf.length - 1];\n  }\n\n  return buf.toString('base64', i, buf.length - n);\n}\n\nfunction base64End(buf) {\n  var r = buf && buf.length ? this.write(buf) : '';\n  if (this.lastNeed) return r + this.lastChar.toString('base64', 0, 3 - this.lastNeed);\n  return r;\n} // Pass bytes on through for single-byte encodings (e.g. ascii, latin1, hex)\n\n\nfunction simpleWrite(buf) {\n  return buf.toString(this.encoding);\n}\n\nfunction simpleEnd(buf) {\n  return buf && buf.length ? this.write(buf) : '';\n}","var scope = typeof global !== \"undefined\" && global || typeof self !== \"undefined\" && self || window;\nvar apply = Function.prototype.apply; // DOM APIs, for completeness\n\nexports.setTimeout = function () {\n  return new Timeout(apply.call(setTimeout, scope, arguments), clearTimeout);\n};\n\nexports.setInterval = function () {\n  return new Timeout(apply.call(setInterval, scope, arguments), clearInterval);\n};\n\nexports.clearTimeout = exports.clearInterval = function (timeout) {\n  if (timeout) {\n    timeout.close();\n  }\n};\n\nfunction Timeout(id, clearFn) {\n  this._id = id;\n  this._clearFn = clearFn;\n}\n\nTimeout.prototype.unref = Timeout.prototype.ref = function () {};\n\nTimeout.prototype.close = function () {\n  this._clearFn.call(scope, this._id);\n}; // Does not start the time, just sets up the members needed.\n\n\nexports.enroll = function (item, msecs) {\n  clearTimeout(item._idleTimeoutId);\n  item._idleTimeout = msecs;\n};\n\nexports.unenroll = function (item) {\n  clearTimeout(item._idleTimeoutId);\n  item._idleTimeout = -1;\n};\n\nexports._unrefActive = exports.active = function (item) {\n  clearTimeout(item._idleTimeoutId);\n  var msecs = item._idleTimeout;\n\n  if (msecs >= 0) {\n    item._idleTimeoutId = setTimeout(function onTimeout() {\n      if (item._onTimeout) item._onTimeout();\n    }, msecs);\n  }\n}; // setimmediate attaches itself to the global object\n\n\nrequire(\"setimmediate\"); // On some exotic environments, it's not clear which object `setimmediate` was\n// able to install onto.  Search each possibility in the same order as the\n// `setimmediate` library.\n\n\nexports.setImmediate = typeof self !== \"undefined\" && self.setImmediate || typeof global !== \"undefined\" && global.setImmediate || this && this.setImmediate;\nexports.clearImmediate = typeof self !== \"undefined\" && self.clearImmediate || typeof global !== \"undefined\" && global.clearImmediate || this && this.clearImmediate;","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n// A bit simpler than readable streams.\n// Implement an async ._write(chunk, encoding, cb), and it'll handle all\n// the drain event emission and buffering.\n'use strict';\n/*<replacement>*/\n\nvar pna = require('process-nextick-args');\n/*</replacement>*/\n\n\nmodule.exports = Writable;\n/* <replacement> */\n\nfunction WriteReq(chunk, encoding, cb) {\n  this.chunk = chunk;\n  this.encoding = encoding;\n  this.callback = cb;\n  this.next = null;\n} // It seems a linked list but it is not\n// there will be only 2 of these for each stream\n\n\nfunction CorkedRequest(state) {\n  var _this = this;\n\n  this.next = null;\n  this.entry = null;\n\n  this.finish = function () {\n    onCorkedFinish(_this, state);\n  };\n}\n/* </replacement> */\n\n/*<replacement>*/\n\n\nvar asyncWrite = !process.browser && ['v0.10', 'v0.9.'].indexOf(process.version.slice(0, 5)) > -1 ? setImmediate : pna.nextTick;\n/*</replacement>*/\n\n/*<replacement>*/\n\nvar Duplex;\n/*</replacement>*/\n\nWritable.WritableState = WritableState;\n/*<replacement>*/\n\nvar util = require('core-util-is');\n\nutil.inherits = require('inherits');\n/*</replacement>*/\n\n/*<replacement>*/\n\nvar internalUtil = {\n  deprecate: require('util-deprecate')\n};\n/*</replacement>*/\n\n/*<replacement>*/\n\nvar Stream = require('./internal/streams/stream');\n/*</replacement>*/\n\n/*<replacement>*/\n\n\nvar Buffer = require('safe-buffer').Buffer;\n\nvar OurUint8Array = global.Uint8Array || function () {};\n\nfunction _uint8ArrayToBuffer(chunk) {\n  return Buffer.from(chunk);\n}\n\nfunction _isUint8Array(obj) {\n  return Buffer.isBuffer(obj) || obj instanceof OurUint8Array;\n}\n/*</replacement>*/\n\n\nvar destroyImpl = require('./internal/streams/destroy');\n\nutil.inherits(Writable, Stream);\n\nfunction nop() {}\n\nfunction WritableState(options, stream) {\n  Duplex = Duplex || require('./_stream_duplex');\n  options = options || {}; // Duplex streams are both readable and writable, but share\n  // the same options object.\n  // However, some cases require setting options to different\n  // values for the readable and the writable sides of the duplex stream.\n  // These options can be provided separately as readableXXX and writableXXX.\n\n  var isDuplex = stream instanceof Duplex; // object stream flag to indicate whether or not this stream\n  // contains buffers or objects.\n\n  this.objectMode = !!options.objectMode;\n  if (isDuplex) this.objectMode = this.objectMode || !!options.writableObjectMode; // the point at which write() starts returning false\n  // Note: 0 is a valid value, means that we always return false if\n  // the entire buffer is not flushed immediately on write()\n\n  var hwm = options.highWaterMark;\n  var writableHwm = options.writableHighWaterMark;\n  var defaultHwm = this.objectMode ? 16 : 16 * 1024;\n  if (hwm || hwm === 0) this.highWaterMark = hwm;else if (isDuplex && (writableHwm || writableHwm === 0)) this.highWaterMark = writableHwm;else this.highWaterMark = defaultHwm; // cast to ints.\n\n  this.highWaterMark = Math.floor(this.highWaterMark); // if _final has been called\n\n  this.finalCalled = false; // drain event flag.\n\n  this.needDrain = false; // at the start of calling end()\n\n  this.ending = false; // when end() has been called, and returned\n\n  this.ended = false; // when 'finish' is emitted\n\n  this.finished = false; // has it been destroyed\n\n  this.destroyed = false; // should we decode strings into buffers before passing to _write?\n  // this is here so that some node-core streams can optimize string\n  // handling at a lower level.\n\n  var noDecode = options.decodeStrings === false;\n  this.decodeStrings = !noDecode; // Crypto is kind of old and crusty.  Historically, its default string\n  // encoding is 'binary' so we have to make this configurable.\n  // Everything else in the universe uses 'utf8', though.\n\n  this.defaultEncoding = options.defaultEncoding || 'utf8'; // not an actual buffer we keep track of, but a measurement\n  // of how much we're waiting to get pushed to some underlying\n  // socket or file.\n\n  this.length = 0; // a flag to see when we're in the middle of a write.\n\n  this.writing = false; // when true all writes will be buffered until .uncork() call\n\n  this.corked = 0; // a flag to be able to tell if the onwrite cb is called immediately,\n  // or on a later tick.  We set this to true at first, because any\n  // actions that shouldn't happen until \"later\" should generally also\n  // not happen before the first write call.\n\n  this.sync = true; // a flag to know if we're processing previously buffered items, which\n  // may call the _write() callback in the same tick, so that we don't\n  // end up in an overlapped onwrite situation.\n\n  this.bufferProcessing = false; // the callback that's passed to _write(chunk,cb)\n\n  this.onwrite = function (er) {\n    onwrite(stream, er);\n  }; // the callback that the user supplies to write(chunk,encoding,cb)\n\n\n  this.writecb = null; // the amount that is being written when _write is called.\n\n  this.writelen = 0;\n  this.bufferedRequest = null;\n  this.lastBufferedRequest = null; // number of pending user-supplied write callbacks\n  // this must be 0 before 'finish' can be emitted\n\n  this.pendingcb = 0; // emit prefinish if the only thing we're waiting for is _write cbs\n  // This is relevant for synchronous Transform streams\n\n  this.prefinished = false; // True if the error was already emitted and should not be thrown again\n\n  this.errorEmitted = false; // count buffered requests\n\n  this.bufferedRequestCount = 0; // allocate the first CorkedRequest, there is always\n  // one allocated and free to use, and we maintain at most two\n\n  this.corkedRequestsFree = new CorkedRequest(this);\n}\n\nWritableState.prototype.getBuffer = function getBuffer() {\n  var current = this.bufferedRequest;\n  var out = [];\n\n  while (current) {\n    out.push(current);\n    current = current.next;\n  }\n\n  return out;\n};\n\n(function () {\n  try {\n    Object.defineProperty(WritableState.prototype, 'buffer', {\n      get: internalUtil.deprecate(function () {\n        return this.getBuffer();\n      }, '_writableState.buffer is deprecated. Use _writableState.getBuffer ' + 'instead.', 'DEP0003')\n    });\n  } catch (_) {}\n})(); // Test _writableState for inheritance to account for Duplex streams,\n// whose prototype chain only points to Readable.\n\n\nvar realHasInstance;\n\nif (typeof Symbol === 'function' && Symbol.hasInstance && typeof Function.prototype[Symbol.hasInstance] === 'function') {\n  realHasInstance = Function.prototype[Symbol.hasInstance];\n  Object.defineProperty(Writable, Symbol.hasInstance, {\n    value: function value(object) {\n      if (realHasInstance.call(this, object)) return true;\n      if (this !== Writable) return false;\n      return object && object._writableState instanceof WritableState;\n    }\n  });\n} else {\n  realHasInstance = function realHasInstance(object) {\n    return object instanceof this;\n  };\n}\n\nfunction Writable(options) {\n  Duplex = Duplex || require('./_stream_duplex'); // Writable ctor is applied to Duplexes, too.\n  // `realHasInstance` is necessary because using plain `instanceof`\n  // would return false, as no `_writableState` property is attached.\n  // Trying to use the custom `instanceof` for Writable here will also break the\n  // Node.js LazyTransform implementation, which has a non-trivial getter for\n  // `_writableState` that would lead to infinite recursion.\n\n  if (!realHasInstance.call(Writable, this) && !(this instanceof Duplex)) {\n    return new Writable(options);\n  }\n\n  this._writableState = new WritableState(options, this); // legacy.\n\n  this.writable = true;\n\n  if (options) {\n    if (typeof options.write === 'function') this._write = options.write;\n    if (typeof options.writev === 'function') this._writev = options.writev;\n    if (typeof options.destroy === 'function') this._destroy = options.destroy;\n    if (typeof options[\"final\"] === 'function') this._final = options[\"final\"];\n  }\n\n  Stream.call(this);\n} // Otherwise people can pipe Writable streams, which is just wrong.\n\n\nWritable.prototype.pipe = function () {\n  this.emit('error', new Error('Cannot pipe, not readable'));\n};\n\nfunction writeAfterEnd(stream, cb) {\n  var er = new Error('write after end'); // TODO: defer error events consistently everywhere, not just the cb\n\n  stream.emit('error', er);\n  pna.nextTick(cb, er);\n} // Checks that a user-supplied chunk is valid, especially for the particular\n// mode the stream is in. Currently this means that `null` is never accepted\n// and undefined/non-string values are only allowed in object mode.\n\n\nfunction validChunk(stream, state, chunk, cb) {\n  var valid = true;\n  var er = false;\n\n  if (chunk === null) {\n    er = new TypeError('May not write null values to stream');\n  } else if (typeof chunk !== 'string' && chunk !== undefined && !state.objectMode) {\n    er = new TypeError('Invalid non-string/buffer chunk');\n  }\n\n  if (er) {\n    stream.emit('error', er);\n    pna.nextTick(cb, er);\n    valid = false;\n  }\n\n  return valid;\n}\n\nWritable.prototype.write = function (chunk, encoding, cb) {\n  var state = this._writableState;\n  var ret = false;\n\n  var isBuf = !state.objectMode && _isUint8Array(chunk);\n\n  if (isBuf && !Buffer.isBuffer(chunk)) {\n    chunk = _uint8ArrayToBuffer(chunk);\n  }\n\n  if (typeof encoding === 'function') {\n    cb = encoding;\n    encoding = null;\n  }\n\n  if (isBuf) encoding = 'buffer';else if (!encoding) encoding = state.defaultEncoding;\n  if (typeof cb !== 'function') cb = nop;\n  if (state.ended) writeAfterEnd(this, cb);else if (isBuf || validChunk(this, state, chunk, cb)) {\n    state.pendingcb++;\n    ret = writeOrBuffer(this, state, isBuf, chunk, encoding, cb);\n  }\n  return ret;\n};\n\nWritable.prototype.cork = function () {\n  var state = this._writableState;\n  state.corked++;\n};\n\nWritable.prototype.uncork = function () {\n  var state = this._writableState;\n\n  if (state.corked) {\n    state.corked--;\n    if (!state.writing && !state.corked && !state.finished && !state.bufferProcessing && state.bufferedRequest) clearBuffer(this, state);\n  }\n};\n\nWritable.prototype.setDefaultEncoding = function setDefaultEncoding(encoding) {\n  // node::ParseEncoding() requires lower case.\n  if (typeof encoding === 'string') encoding = encoding.toLowerCase();\n  if (!(['hex', 'utf8', 'utf-8', 'ascii', 'binary', 'base64', 'ucs2', 'ucs-2', 'utf16le', 'utf-16le', 'raw'].indexOf((encoding + '').toLowerCase()) > -1)) throw new TypeError('Unknown encoding: ' + encoding);\n  this._writableState.defaultEncoding = encoding;\n  return this;\n};\n\nfunction decodeChunk(state, chunk, encoding) {\n  if (!state.objectMode && state.decodeStrings !== false && typeof chunk === 'string') {\n    chunk = Buffer.from(chunk, encoding);\n  }\n\n  return chunk;\n}\n\nObject.defineProperty(Writable.prototype, 'writableHighWaterMark', {\n  // making it explicit this property is not enumerable\n  // because otherwise some prototype manipulation in\n  // userland will fail\n  enumerable: false,\n  get: function get() {\n    return this._writableState.highWaterMark;\n  }\n}); // if we're already writing something, then just put this\n// in the queue, and wait our turn.  Otherwise, call _write\n// If we return false, then we need a drain event, so set that flag.\n\nfunction writeOrBuffer(stream, state, isBuf, chunk, encoding, cb) {\n  if (!isBuf) {\n    var newChunk = decodeChunk(state, chunk, encoding);\n\n    if (chunk !== newChunk) {\n      isBuf = true;\n      encoding = 'buffer';\n      chunk = newChunk;\n    }\n  }\n\n  var len = state.objectMode ? 1 : chunk.length;\n  state.length += len;\n  var ret = state.length < state.highWaterMark; // we must ensure that previous needDrain will not be reset to false.\n\n  if (!ret) state.needDrain = true;\n\n  if (state.writing || state.corked) {\n    var last = state.lastBufferedRequest;\n    state.lastBufferedRequest = {\n      chunk: chunk,\n      encoding: encoding,\n      isBuf: isBuf,\n      callback: cb,\n      next: null\n    };\n\n    if (last) {\n      last.next = state.lastBufferedRequest;\n    } else {\n      state.bufferedRequest = state.lastBufferedRequest;\n    }\n\n    state.bufferedRequestCount += 1;\n  } else {\n    doWrite(stream, state, false, len, chunk, encoding, cb);\n  }\n\n  return ret;\n}\n\nfunction doWrite(stream, state, writev, len, chunk, encoding, cb) {\n  state.writelen = len;\n  state.writecb = cb;\n  state.writing = true;\n  state.sync = true;\n  if (writev) stream._writev(chunk, state.onwrite);else stream._write(chunk, encoding, state.onwrite);\n  state.sync = false;\n}\n\nfunction onwriteError(stream, state, sync, er, cb) {\n  --state.pendingcb;\n\n  if (sync) {\n    // defer the callback if we are being called synchronously\n    // to avoid piling up things on the stack\n    pna.nextTick(cb, er); // this can emit finish, and it will always happen\n    // after error\n\n    pna.nextTick(finishMaybe, stream, state);\n    stream._writableState.errorEmitted = true;\n    stream.emit('error', er);\n  } else {\n    // the caller expect this to happen before if\n    // it is async\n    cb(er);\n    stream._writableState.errorEmitted = true;\n    stream.emit('error', er); // this can emit finish, but finish must\n    // always follow error\n\n    finishMaybe(stream, state);\n  }\n}\n\nfunction onwriteStateUpdate(state) {\n  state.writing = false;\n  state.writecb = null;\n  state.length -= state.writelen;\n  state.writelen = 0;\n}\n\nfunction onwrite(stream, er) {\n  var state = stream._writableState;\n  var sync = state.sync;\n  var cb = state.writecb;\n  onwriteStateUpdate(state);\n  if (er) onwriteError(stream, state, sync, er, cb);else {\n    // Check if we're actually ready to finish, but don't emit yet\n    var finished = needFinish(state);\n\n    if (!finished && !state.corked && !state.bufferProcessing && state.bufferedRequest) {\n      clearBuffer(stream, state);\n    }\n\n    if (sync) {\n      /*<replacement>*/\n      asyncWrite(afterWrite, stream, state, finished, cb);\n      /*</replacement>*/\n    } else {\n      afterWrite(stream, state, finished, cb);\n    }\n  }\n}\n\nfunction afterWrite(stream, state, finished, cb) {\n  if (!finished) onwriteDrain(stream, state);\n  state.pendingcb--;\n  cb();\n  finishMaybe(stream, state);\n} // Must force callback to be called on nextTick, so that we don't\n// emit 'drain' before the write() consumer gets the 'false' return\n// value, and has a chance to attach a 'drain' listener.\n\n\nfunction onwriteDrain(stream, state) {\n  if (state.length === 0 && state.needDrain) {\n    state.needDrain = false;\n    stream.emit('drain');\n  }\n} // if there's something in the buffer waiting, then process it\n\n\nfunction clearBuffer(stream, state) {\n  state.bufferProcessing = true;\n  var entry = state.bufferedRequest;\n\n  if (stream._writev && entry && entry.next) {\n    // Fast case, write everything using _writev()\n    var l = state.bufferedRequestCount;\n    var buffer = new Array(l);\n    var holder = state.corkedRequestsFree;\n    holder.entry = entry;\n    var count = 0;\n    var allBuffers = true;\n\n    while (entry) {\n      buffer[count] = entry;\n      if (!entry.isBuf) allBuffers = false;\n      entry = entry.next;\n      count += 1;\n    }\n\n    buffer.allBuffers = allBuffers;\n    doWrite(stream, state, true, state.length, buffer, '', holder.finish); // doWrite is almost always async, defer these to save a bit of time\n    // as the hot path ends with doWrite\n\n    state.pendingcb++;\n    state.lastBufferedRequest = null;\n\n    if (holder.next) {\n      state.corkedRequestsFree = holder.next;\n      holder.next = null;\n    } else {\n      state.corkedRequestsFree = new CorkedRequest(state);\n    }\n\n    state.bufferedRequestCount = 0;\n  } else {\n    // Slow case, write chunks one-by-one\n    while (entry) {\n      var chunk = entry.chunk;\n      var encoding = entry.encoding;\n      var cb = entry.callback;\n      var len = state.objectMode ? 1 : chunk.length;\n      doWrite(stream, state, false, len, chunk, encoding, cb);\n      entry = entry.next;\n      state.bufferedRequestCount--; // if we didn't call the onwrite immediately, then\n      // it means that we need to wait until it does.\n      // also, that means that the chunk and cb are currently\n      // being processed, so move the buffer counter past them.\n\n      if (state.writing) {\n        break;\n      }\n    }\n\n    if (entry === null) state.lastBufferedRequest = null;\n  }\n\n  state.bufferedRequest = entry;\n  state.bufferProcessing = false;\n}\n\nWritable.prototype._write = function (chunk, encoding, cb) {\n  cb(new Error('_write() is not implemented'));\n};\n\nWritable.prototype._writev = null;\n\nWritable.prototype.end = function (chunk, encoding, cb) {\n  var state = this._writableState;\n\n  if (typeof chunk === 'function') {\n    cb = chunk;\n    chunk = null;\n    encoding = null;\n  } else if (typeof encoding === 'function') {\n    cb = encoding;\n    encoding = null;\n  }\n\n  if (chunk !== null && chunk !== undefined) this.write(chunk, encoding); // .end() fully uncorks\n\n  if (state.corked) {\n    state.corked = 1;\n    this.uncork();\n  } // ignore unnecessary end() calls.\n\n\n  if (!state.ending && !state.finished) endWritable(this, state, cb);\n};\n\nfunction needFinish(state) {\n  return state.ending && state.length === 0 && state.bufferedRequest === null && !state.finished && !state.writing;\n}\n\nfunction callFinal(stream, state) {\n  stream._final(function (err) {\n    state.pendingcb--;\n\n    if (err) {\n      stream.emit('error', err);\n    }\n\n    state.prefinished = true;\n    stream.emit('prefinish');\n    finishMaybe(stream, state);\n  });\n}\n\nfunction prefinish(stream, state) {\n  if (!state.prefinished && !state.finalCalled) {\n    if (typeof stream._final === 'function') {\n      state.pendingcb++;\n      state.finalCalled = true;\n      pna.nextTick(callFinal, stream, state);\n    } else {\n      state.prefinished = true;\n      stream.emit('prefinish');\n    }\n  }\n}\n\nfunction finishMaybe(stream, state) {\n  var need = needFinish(state);\n\n  if (need) {\n    prefinish(stream, state);\n\n    if (state.pendingcb === 0) {\n      state.finished = true;\n      stream.emit('finish');\n    }\n  }\n\n  return need;\n}\n\nfunction endWritable(stream, state, cb) {\n  state.ending = true;\n  finishMaybe(stream, state);\n\n  if (cb) {\n    if (state.finished) pna.nextTick(cb);else stream.once('finish', cb);\n  }\n\n  state.ended = true;\n  stream.writable = false;\n}\n\nfunction onCorkedFinish(corkReq, state, err) {\n  var entry = corkReq.entry;\n  corkReq.entry = null;\n\n  while (entry) {\n    var cb = entry.callback;\n    state.pendingcb--;\n    cb(err);\n    entry = entry.next;\n  }\n\n  if (state.corkedRequestsFree) {\n    state.corkedRequestsFree.next = corkReq;\n  } else {\n    state.corkedRequestsFree = corkReq;\n  }\n}\n\nObject.defineProperty(Writable.prototype, 'destroyed', {\n  get: function get() {\n    if (this._writableState === undefined) {\n      return false;\n    }\n\n    return this._writableState.destroyed;\n  },\n  set: function set(value) {\n    // we ignore the value if the stream\n    // has not been initialized yet\n    if (!this._writableState) {\n      return;\n    } // backward compatibility, the user is explicitly\n    // managing destroyed\n\n\n    this._writableState.destroyed = value;\n  }\n});\nWritable.prototype.destroy = destroyImpl.destroy;\nWritable.prototype._undestroy = destroyImpl.undestroy;\n\nWritable.prototype._destroy = function (err, cb) {\n  this.end();\n  cb(err);\n};","'use strict';\n/*<replacement>*/\n\nvar pna = require('process-nextick-args');\n/*</replacement>*/\n// undocumented cb() API, needed for core, not for public API\n\n\nfunction destroy(err, cb) {\n  var _this = this;\n\n  var readableDestroyed = this._readableState && this._readableState.destroyed;\n  var writableDestroyed = this._writableState && this._writableState.destroyed;\n\n  if (readableDestroyed || writableDestroyed) {\n    if (cb) {\n      cb(err);\n    } else if (err && (!this._writableState || !this._writableState.errorEmitted)) {\n      pna.nextTick(emitErrorNT, this, err);\n    }\n\n    return this;\n  } // we set destroyed to true before firing error callbacks in order\n  // to make it re-entrance safe in case destroy() is called within callbacks\n\n\n  if (this._readableState) {\n    this._readableState.destroyed = true;\n  } // if this is a duplex stream mark the writable part as destroyed as well\n\n\n  if (this._writableState) {\n    this._writableState.destroyed = true;\n  }\n\n  this._destroy(err || null, function (err) {\n    if (!cb && err) {\n      pna.nextTick(emitErrorNT, _this, err);\n\n      if (_this._writableState) {\n        _this._writableState.errorEmitted = true;\n      }\n    } else if (cb) {\n      cb(err);\n    }\n  });\n\n  return this;\n}\n\nfunction undestroy() {\n  if (this._readableState) {\n    this._readableState.destroyed = false;\n    this._readableState.reading = false;\n    this._readableState.ended = false;\n    this._readableState.endEmitted = false;\n  }\n\n  if (this._writableState) {\n    this._writableState.destroyed = false;\n    this._writableState.ended = false;\n    this._writableState.ending = false;\n    this._writableState.finished = false;\n    this._writableState.errorEmitted = false;\n  }\n}\n\nfunction emitErrorNT(self, err) {\n  self.emit('error', err);\n}\n\nmodule.exports = {\n  destroy: destroy,\n  undestroy: undestroy\n};","module.exports = require('events').EventEmitter;","function _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\n// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\nfunction EventEmitter() {\n  this._events = this._events || {};\n  this._maxListeners = this._maxListeners || undefined;\n}\n\nmodule.exports = EventEmitter; // Backwards-compat with node 0.10.x\n\nEventEmitter.EventEmitter = EventEmitter;\nEventEmitter.prototype._events = undefined;\nEventEmitter.prototype._maxListeners = undefined; // By default EventEmitters will print a warning if more than 10 listeners are\n// added to it. This is a useful default which helps finding memory leaks.\n\nEventEmitter.defaultMaxListeners = 10; // Obviously not all Emitters should be limited to 10. This function allows\n// that to be increased. Set to zero for unlimited.\n\nEventEmitter.prototype.setMaxListeners = function (n) {\n  if (!isNumber(n) || n < 0 || isNaN(n)) throw TypeError('n must be a positive number');\n  this._maxListeners = n;\n  return this;\n};\n\nEventEmitter.prototype.emit = function (type) {\n  var er, handler, len, args, i, listeners;\n  if (!this._events) this._events = {}; // If there is no 'error' event listener then throw.\n\n  if (type === 'error') {\n    if (!this._events.error || isObject(this._events.error) && !this._events.error.length) {\n      er = arguments[1];\n\n      if (er instanceof Error) {\n        throw er; // Unhandled 'error' event\n      } else {\n        // At least give some kind of context to the user\n        var err = new Error('Uncaught, unspecified \"error\" event. (' + er + ')');\n        err.context = er;\n        throw err;\n      }\n    }\n  }\n\n  handler = this._events[type];\n  if (isUndefined(handler)) return false;\n\n  if (isFunction(handler)) {\n    switch (arguments.length) {\n      // fast cases\n      case 1:\n        handler.call(this);\n        break;\n\n      case 2:\n        handler.call(this, arguments[1]);\n        break;\n\n      case 3:\n        handler.call(this, arguments[1], arguments[2]);\n        break;\n      // slower\n\n      default:\n        args = Array.prototype.slice.call(arguments, 1);\n        handler.apply(this, args);\n    }\n  } else if (isObject(handler)) {\n    args = Array.prototype.slice.call(arguments, 1);\n    listeners = handler.slice();\n    len = listeners.length;\n\n    for (i = 0; i < len; i++) {\n      listeners[i].apply(this, args);\n    }\n  }\n\n  return true;\n};\n\nEventEmitter.prototype.addListener = function (type, listener) {\n  var m;\n  if (!isFunction(listener)) throw TypeError('listener must be a function');\n  if (!this._events) this._events = {}; // To avoid recursion in the case that type === \"newListener\"! Before\n  // adding it to the listeners, first emit \"newListener\".\n\n  if (this._events.newListener) this.emit('newListener', type, isFunction(listener.listener) ? listener.listener : listener);\n  if (!this._events[type]) // Optimize the case of one listener. Don't need the extra array object.\n    this._events[type] = listener;else if (isObject(this._events[type])) // If we've already got an array, just append.\n    this._events[type].push(listener);else // Adding the second element, need to change to array.\n    this._events[type] = [this._events[type], listener]; // Check for listener leak\n\n  if (isObject(this._events[type]) && !this._events[type].warned) {\n    if (!isUndefined(this._maxListeners)) {\n      m = this._maxListeners;\n    } else {\n      m = EventEmitter.defaultMaxListeners;\n    }\n\n    if (m && m > 0 && this._events[type].length > m) {\n      this._events[type].warned = true;\n      console.error('(node) warning: possible EventEmitter memory ' + 'leak detected. %d listeners added. ' + 'Use emitter.setMaxListeners() to increase limit.', this._events[type].length);\n\n      if (typeof console.trace === 'function') {\n        // not supported in IE 10\n        console.trace();\n      }\n    }\n  }\n\n  return this;\n};\n\nEventEmitter.prototype.on = EventEmitter.prototype.addListener;\n\nEventEmitter.prototype.once = function (type, listener) {\n  if (!isFunction(listener)) throw TypeError('listener must be a function');\n  var fired = false;\n\n  function g() {\n    this.removeListener(type, g);\n\n    if (!fired) {\n      fired = true;\n      listener.apply(this, arguments);\n    }\n  }\n\n  g.listener = listener;\n  this.on(type, g);\n  return this;\n}; // emits a 'removeListener' event iff the listener was removed\n\n\nEventEmitter.prototype.removeListener = function (type, listener) {\n  var list, position, length, i;\n  if (!isFunction(listener)) throw TypeError('listener must be a function');\n  if (!this._events || !this._events[type]) return this;\n  list = this._events[type];\n  length = list.length;\n  position = -1;\n\n  if (list === listener || isFunction(list.listener) && list.listener === listener) {\n    delete this._events[type];\n    if (this._events.removeListener) this.emit('removeListener', type, listener);\n  } else if (isObject(list)) {\n    for (i = length; i-- > 0;) {\n      if (list[i] === listener || list[i].listener && list[i].listener === listener) {\n        position = i;\n        break;\n      }\n    }\n\n    if (position < 0) return this;\n\n    if (list.length === 1) {\n      list.length = 0;\n      delete this._events[type];\n    } else {\n      list.splice(position, 1);\n    }\n\n    if (this._events.removeListener) this.emit('removeListener', type, listener);\n  }\n\n  return this;\n};\n\nEventEmitter.prototype.removeAllListeners = function (type) {\n  var key, listeners;\n  if (!this._events) return this; // not listening for removeListener, no need to emit\n\n  if (!this._events.removeListener) {\n    if (arguments.length === 0) this._events = {};else if (this._events[type]) delete this._events[type];\n    return this;\n  } // emit removeListener for all listeners on all events\n\n\n  if (arguments.length === 0) {\n    for (key in this._events) {\n      if (key === 'removeListener') continue;\n      this.removeAllListeners(key);\n    }\n\n    this.removeAllListeners('removeListener');\n    this._events = {};\n    return this;\n  }\n\n  listeners = this._events[type];\n\n  if (isFunction(listeners)) {\n    this.removeListener(type, listeners);\n  } else if (listeners) {\n    // LIFO order\n    while (listeners.length) {\n      this.removeListener(type, listeners[listeners.length - 1]);\n    }\n  }\n\n  delete this._events[type];\n  return this;\n};\n\nEventEmitter.prototype.listeners = function (type) {\n  var ret;\n  if (!this._events || !this._events[type]) ret = [];else if (isFunction(this._events[type])) ret = [this._events[type]];else ret = this._events[type].slice();\n  return ret;\n};\n\nEventEmitter.prototype.listenerCount = function (type) {\n  if (this._events) {\n    var evlistener = this._events[type];\n    if (isFunction(evlistener)) return 1;else if (evlistener) return evlistener.length;\n  }\n\n  return 0;\n};\n\nEventEmitter.listenerCount = function (emitter, type) {\n  return emitter.listenerCount(type);\n};\n\nfunction isFunction(arg) {\n  return typeof arg === 'function';\n}\n\nfunction isNumber(arg) {\n  return typeof arg === 'number';\n}\n\nfunction isObject(arg) {\n  return _typeof(arg) === 'object' && arg !== null;\n}\n\nfunction isUndefined(arg) {\n  return arg === void 0;\n}","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n'use strict';\n/*<replacement>*/\n\nvar pna = require('process-nextick-args');\n/*</replacement>*/\n\n\nmodule.exports = Readable;\n/*<replacement>*/\n\nvar isArray = require('isarray');\n/*</replacement>*/\n\n/*<replacement>*/\n\n\nvar Duplex;\n/*</replacement>*/\n\nReadable.ReadableState = ReadableState;\n/*<replacement>*/\n\nvar EE = require('events').EventEmitter;\n\nvar EElistenerCount = function EElistenerCount(emitter, type) {\n  return emitter.listeners(type).length;\n};\n/*</replacement>*/\n\n/*<replacement>*/\n\n\nvar Stream = require('./internal/streams/stream');\n/*</replacement>*/\n\n/*<replacement>*/\n\n\nvar Buffer = require('safe-buffer').Buffer;\n\nvar OurUint8Array = global.Uint8Array || function () {};\n\nfunction _uint8ArrayToBuffer(chunk) {\n  return Buffer.from(chunk);\n}\n\nfunction _isUint8Array(obj) {\n  return Buffer.isBuffer(obj) || obj instanceof OurUint8Array;\n}\n/*</replacement>*/\n\n/*<replacement>*/\n\n\nvar util = require('core-util-is');\n\nutil.inherits = require('inherits');\n/*</replacement>*/\n\n/*<replacement>*/\n\nvar debugUtil = require('util');\n\nvar debug = void 0;\n\nif (debugUtil && debugUtil.debuglog) {\n  debug = debugUtil.debuglog('stream');\n} else {\n  debug = function debug() {};\n}\n/*</replacement>*/\n\n\nvar BufferList = require('./internal/streams/BufferList');\n\nvar destroyImpl = require('./internal/streams/destroy');\n\nvar StringDecoder;\nutil.inherits(Readable, Stream);\nvar kProxyEvents = ['error', 'close', 'destroy', 'pause', 'resume'];\n\nfunction prependListener(emitter, event, fn) {\n  // Sadly this is not cacheable as some libraries bundle their own\n  // event emitter implementation with them.\n  if (typeof emitter.prependListener === 'function') return emitter.prependListener(event, fn); // This is a hack to make sure that our error handler is attached before any\n  // userland ones.  NEVER DO THIS. This is here only because this code needs\n  // to continue to work with older versions of Node.js that do not include\n  // the prependListener() method. The goal is to eventually remove this hack.\n\n  if (!emitter._events || !emitter._events[event]) emitter.on(event, fn);else if (isArray(emitter._events[event])) emitter._events[event].unshift(fn);else emitter._events[event] = [fn, emitter._events[event]];\n}\n\nfunction ReadableState(options, stream) {\n  Duplex = Duplex || require('./_stream_duplex');\n  options = options || {}; // Duplex streams are both readable and writable, but share\n  // the same options object.\n  // However, some cases require setting options to different\n  // values for the readable and the writable sides of the duplex stream.\n  // These options can be provided separately as readableXXX and writableXXX.\n\n  var isDuplex = stream instanceof Duplex; // object stream flag. Used to make read(n) ignore n and to\n  // make all the buffer merging and length checks go away\n\n  this.objectMode = !!options.objectMode;\n  if (isDuplex) this.objectMode = this.objectMode || !!options.readableObjectMode; // the point at which it stops calling _read() to fill the buffer\n  // Note: 0 is a valid value, means \"don't call _read preemptively ever\"\n\n  var hwm = options.highWaterMark;\n  var readableHwm = options.readableHighWaterMark;\n  var defaultHwm = this.objectMode ? 16 : 16 * 1024;\n  if (hwm || hwm === 0) this.highWaterMark = hwm;else if (isDuplex && (readableHwm || readableHwm === 0)) this.highWaterMark = readableHwm;else this.highWaterMark = defaultHwm; // cast to ints.\n\n  this.highWaterMark = Math.floor(this.highWaterMark); // A linked list is used to store data chunks instead of an array because the\n  // linked list can remove elements from the beginning faster than\n  // array.shift()\n\n  this.buffer = new BufferList();\n  this.length = 0;\n  this.pipes = null;\n  this.pipesCount = 0;\n  this.flowing = null;\n  this.ended = false;\n  this.endEmitted = false;\n  this.reading = false; // a flag to be able to tell if the event 'readable'/'data' is emitted\n  // immediately, or on a later tick.  We set this to true at first, because\n  // any actions that shouldn't happen until \"later\" should generally also\n  // not happen before the first read call.\n\n  this.sync = true; // whenever we return null, then we set a flag to say\n  // that we're awaiting a 'readable' event emission.\n\n  this.needReadable = false;\n  this.emittedReadable = false;\n  this.readableListening = false;\n  this.resumeScheduled = false; // has it been destroyed\n\n  this.destroyed = false; // Crypto is kind of old and crusty.  Historically, its default string\n  // encoding is 'binary' so we have to make this configurable.\n  // Everything else in the universe uses 'utf8', though.\n\n  this.defaultEncoding = options.defaultEncoding || 'utf8'; // the number of writers that are awaiting a drain event in .pipe()s\n\n  this.awaitDrain = 0; // if true, a maybeReadMore has been scheduled\n\n  this.readingMore = false;\n  this.decoder = null;\n  this.encoding = null;\n\n  if (options.encoding) {\n    if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder;\n    this.decoder = new StringDecoder(options.encoding);\n    this.encoding = options.encoding;\n  }\n}\n\nfunction Readable(options) {\n  Duplex = Duplex || require('./_stream_duplex');\n  if (!(this instanceof Readable)) return new Readable(options);\n  this._readableState = new ReadableState(options, this); // legacy\n\n  this.readable = true;\n\n  if (options) {\n    if (typeof options.read === 'function') this._read = options.read;\n    if (typeof options.destroy === 'function') this._destroy = options.destroy;\n  }\n\n  Stream.call(this);\n}\n\nObject.defineProperty(Readable.prototype, 'destroyed', {\n  get: function get() {\n    if (this._readableState === undefined) {\n      return false;\n    }\n\n    return this._readableState.destroyed;\n  },\n  set: function set(value) {\n    // we ignore the value if the stream\n    // has not been initialized yet\n    if (!this._readableState) {\n      return;\n    } // backward compatibility, the user is explicitly\n    // managing destroyed\n\n\n    this._readableState.destroyed = value;\n  }\n});\nReadable.prototype.destroy = destroyImpl.destroy;\nReadable.prototype._undestroy = destroyImpl.undestroy;\n\nReadable.prototype._destroy = function (err, cb) {\n  this.push(null);\n  cb(err);\n}; // Manually shove something into the read() buffer.\n// This returns true if the highWaterMark has not been hit yet,\n// similar to how Writable.write() returns true if you should\n// write() some more.\n\n\nReadable.prototype.push = function (chunk, encoding) {\n  var state = this._readableState;\n  var skipChunkCheck;\n\n  if (!state.objectMode) {\n    if (typeof chunk === 'string') {\n      encoding = encoding || state.defaultEncoding;\n\n      if (encoding !== state.encoding) {\n        chunk = Buffer.from(chunk, encoding);\n        encoding = '';\n      }\n\n      skipChunkCheck = true;\n    }\n  } else {\n    skipChunkCheck = true;\n  }\n\n  return readableAddChunk(this, chunk, encoding, false, skipChunkCheck);\n}; // Unshift should *always* be something directly out of read()\n\n\nReadable.prototype.unshift = function (chunk) {\n  return readableAddChunk(this, chunk, null, true, false);\n};\n\nfunction readableAddChunk(stream, chunk, encoding, addToFront, skipChunkCheck) {\n  var state = stream._readableState;\n\n  if (chunk === null) {\n    state.reading = false;\n    onEofChunk(stream, state);\n  } else {\n    var er;\n    if (!skipChunkCheck) er = chunkInvalid(state, chunk);\n\n    if (er) {\n      stream.emit('error', er);\n    } else if (state.objectMode || chunk && chunk.length > 0) {\n      if (typeof chunk !== 'string' && !state.objectMode && Object.getPrototypeOf(chunk) !== Buffer.prototype) {\n        chunk = _uint8ArrayToBuffer(chunk);\n      }\n\n      if (addToFront) {\n        if (state.endEmitted) stream.emit('error', new Error('stream.unshift() after end event'));else addChunk(stream, state, chunk, true);\n      } else if (state.ended) {\n        stream.emit('error', new Error('stream.push() after EOF'));\n      } else {\n        state.reading = false;\n\n        if (state.decoder && !encoding) {\n          chunk = state.decoder.write(chunk);\n          if (state.objectMode || chunk.length !== 0) addChunk(stream, state, chunk, false);else maybeReadMore(stream, state);\n        } else {\n          addChunk(stream, state, chunk, false);\n        }\n      }\n    } else if (!addToFront) {\n      state.reading = false;\n    }\n  }\n\n  return needMoreData(state);\n}\n\nfunction addChunk(stream, state, chunk, addToFront) {\n  if (state.flowing && state.length === 0 && !state.sync) {\n    stream.emit('data', chunk);\n    stream.read(0);\n  } else {\n    // update the buffer info.\n    state.length += state.objectMode ? 1 : chunk.length;\n    if (addToFront) state.buffer.unshift(chunk);else state.buffer.push(chunk);\n    if (state.needReadable) emitReadable(stream);\n  }\n\n  maybeReadMore(stream, state);\n}\n\nfunction chunkInvalid(state, chunk) {\n  var er;\n\n  if (!_isUint8Array(chunk) && typeof chunk !== 'string' && chunk !== undefined && !state.objectMode) {\n    er = new TypeError('Invalid non-string/buffer chunk');\n  }\n\n  return er;\n} // if it's past the high water mark, we can push in some more.\n// Also, if we have no data yet, we can stand some\n// more bytes.  This is to work around cases where hwm=0,\n// such as the repl.  Also, if the push() triggered a\n// readable event, and the user called read(largeNumber) such that\n// needReadable was set, then we ought to push more, so that another\n// 'readable' event will be triggered.\n\n\nfunction needMoreData(state) {\n  return !state.ended && (state.needReadable || state.length < state.highWaterMark || state.length === 0);\n}\n\nReadable.prototype.isPaused = function () {\n  return this._readableState.flowing === false;\n}; // backwards compatibility.\n\n\nReadable.prototype.setEncoding = function (enc) {\n  if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder;\n  this._readableState.decoder = new StringDecoder(enc);\n  this._readableState.encoding = enc;\n  return this;\n}; // Don't raise the hwm > 8MB\n\n\nvar MAX_HWM = 0x800000;\n\nfunction computeNewHighWaterMark(n) {\n  if (n >= MAX_HWM) {\n    n = MAX_HWM;\n  } else {\n    // Get the next highest power of 2 to prevent increasing hwm excessively in\n    // tiny amounts\n    n--;\n    n |= n >>> 1;\n    n |= n >>> 2;\n    n |= n >>> 4;\n    n |= n >>> 8;\n    n |= n >>> 16;\n    n++;\n  }\n\n  return n;\n} // This function is designed to be inlinable, so please take care when making\n// changes to the function body.\n\n\nfunction howMuchToRead(n, state) {\n  if (n <= 0 || state.length === 0 && state.ended) return 0;\n  if (state.objectMode) return 1;\n\n  if (n !== n) {\n    // Only flow one buffer at a time\n    if (state.flowing && state.length) return state.buffer.head.data.length;else return state.length;\n  } // If we're asking for more than the current hwm, then raise the hwm.\n\n\n  if (n > state.highWaterMark) state.highWaterMark = computeNewHighWaterMark(n);\n  if (n <= state.length) return n; // Don't have enough\n\n  if (!state.ended) {\n    state.needReadable = true;\n    return 0;\n  }\n\n  return state.length;\n} // you can override either this method, or the async _read(n) below.\n\n\nReadable.prototype.read = function (n) {\n  debug('read', n);\n  n = parseInt(n, 10);\n  var state = this._readableState;\n  var nOrig = n;\n  if (n !== 0) state.emittedReadable = false; // if we're doing read(0) to trigger a readable event, but we\n  // already have a bunch of data in the buffer, then just trigger\n  // the 'readable' event and move on.\n\n  if (n === 0 && state.needReadable && (state.length >= state.highWaterMark || state.ended)) {\n    debug('read: emitReadable', state.length, state.ended);\n    if (state.length === 0 && state.ended) endReadable(this);else emitReadable(this);\n    return null;\n  }\n\n  n = howMuchToRead(n, state); // if we've ended, and we're now clear, then finish it up.\n\n  if (n === 0 && state.ended) {\n    if (state.length === 0) endReadable(this);\n    return null;\n  } // All the actual chunk generation logic needs to be\n  // *below* the call to _read.  The reason is that in certain\n  // synthetic stream cases, such as passthrough streams, _read\n  // may be a completely synchronous operation which may change\n  // the state of the read buffer, providing enough data when\n  // before there was *not* enough.\n  //\n  // So, the steps are:\n  // 1. Figure out what the state of things will be after we do\n  // a read from the buffer.\n  //\n  // 2. If that resulting state will trigger a _read, then call _read.\n  // Note that this may be asynchronous, or synchronous.  Yes, it is\n  // deeply ugly to write APIs this way, but that still doesn't mean\n  // that the Readable class should behave improperly, as streams are\n  // designed to be sync/async agnostic.\n  // Take note if the _read call is sync or async (ie, if the read call\n  // has returned yet), so that we know whether or not it's safe to emit\n  // 'readable' etc.\n  //\n  // 3. Actually pull the requested chunks out of the buffer and return.\n  // if we need a readable event, then we need to do some reading.\n\n\n  var doRead = state.needReadable;\n  debug('need readable', doRead); // if we currently have less than the highWaterMark, then also read some\n\n  if (state.length === 0 || state.length - n < state.highWaterMark) {\n    doRead = true;\n    debug('length less than watermark', doRead);\n  } // however, if we've ended, then there's no point, and if we're already\n  // reading, then it's unnecessary.\n\n\n  if (state.ended || state.reading) {\n    doRead = false;\n    debug('reading or ended', doRead);\n  } else if (doRead) {\n    debug('do read');\n    state.reading = true;\n    state.sync = true; // if the length is currently zero, then we *need* a readable event.\n\n    if (state.length === 0) state.needReadable = true; // call internal read method\n\n    this._read(state.highWaterMark);\n\n    state.sync = false; // If _read pushed data synchronously, then `reading` will be false,\n    // and we need to re-evaluate how much data we can return to the user.\n\n    if (!state.reading) n = howMuchToRead(nOrig, state);\n  }\n\n  var ret;\n  if (n > 0) ret = fromList(n, state);else ret = null;\n\n  if (ret === null) {\n    state.needReadable = true;\n    n = 0;\n  } else {\n    state.length -= n;\n  }\n\n  if (state.length === 0) {\n    // If we have nothing in the buffer, then we want to know\n    // as soon as we *do* get something into the buffer.\n    if (!state.ended) state.needReadable = true; // If we tried to read() past the EOF, then emit end on the next tick.\n\n    if (nOrig !== n && state.ended) endReadable(this);\n  }\n\n  if (ret !== null) this.emit('data', ret);\n  return ret;\n};\n\nfunction onEofChunk(stream, state) {\n  if (state.ended) return;\n\n  if (state.decoder) {\n    var chunk = state.decoder.end();\n\n    if (chunk && chunk.length) {\n      state.buffer.push(chunk);\n      state.length += state.objectMode ? 1 : chunk.length;\n    }\n  }\n\n  state.ended = true; // emit 'readable' now to make sure it gets picked up.\n\n  emitReadable(stream);\n} // Don't emit readable right away in sync mode, because this can trigger\n// another read() call => stack overflow.  This way, it might trigger\n// a nextTick recursion warning, but that's not so bad.\n\n\nfunction emitReadable(stream) {\n  var state = stream._readableState;\n  state.needReadable = false;\n\n  if (!state.emittedReadable) {\n    debug('emitReadable', state.flowing);\n    state.emittedReadable = true;\n    if (state.sync) pna.nextTick(emitReadable_, stream);else emitReadable_(stream);\n  }\n}\n\nfunction emitReadable_(stream) {\n  debug('emit readable');\n  stream.emit('readable');\n  flow(stream);\n} // at this point, the user has presumably seen the 'readable' event,\n// and called read() to consume some data.  that may have triggered\n// in turn another _read(n) call, in which case reading = true if\n// it's in progress.\n// However, if we're not ended, or reading, and the length < hwm,\n// then go ahead and try to read some more preemptively.\n\n\nfunction maybeReadMore(stream, state) {\n  if (!state.readingMore) {\n    state.readingMore = true;\n    pna.nextTick(maybeReadMore_, stream, state);\n  }\n}\n\nfunction maybeReadMore_(stream, state) {\n  var len = state.length;\n\n  while (!state.reading && !state.flowing && !state.ended && state.length < state.highWaterMark) {\n    debug('maybeReadMore read 0');\n    stream.read(0);\n    if (len === state.length) // didn't get any data, stop spinning.\n      break;else len = state.length;\n  }\n\n  state.readingMore = false;\n} // abstract method.  to be overridden in specific implementation classes.\n// call cb(er, data) where data is <= n in length.\n// for virtual (non-string, non-buffer) streams, \"length\" is somewhat\n// arbitrary, and perhaps not very meaningful.\n\n\nReadable.prototype._read = function (n) {\n  this.emit('error', new Error('_read() is not implemented'));\n};\n\nReadable.prototype.pipe = function (dest, pipeOpts) {\n  var src = this;\n  var state = this._readableState;\n\n  switch (state.pipesCount) {\n    case 0:\n      state.pipes = dest;\n      break;\n\n    case 1:\n      state.pipes = [state.pipes, dest];\n      break;\n\n    default:\n      state.pipes.push(dest);\n      break;\n  }\n\n  state.pipesCount += 1;\n  debug('pipe count=%d opts=%j', state.pipesCount, pipeOpts);\n  var doEnd = (!pipeOpts || pipeOpts.end !== false) && dest !== process.stdout && dest !== process.stderr;\n  var endFn = doEnd ? onend : unpipe;\n  if (state.endEmitted) pna.nextTick(endFn);else src.once('end', endFn);\n  dest.on('unpipe', onunpipe);\n\n  function onunpipe(readable, unpipeInfo) {\n    debug('onunpipe');\n\n    if (readable === src) {\n      if (unpipeInfo && unpipeInfo.hasUnpiped === false) {\n        unpipeInfo.hasUnpiped = true;\n        cleanup();\n      }\n    }\n  }\n\n  function onend() {\n    debug('onend');\n    dest.end();\n  } // when the dest drains, it reduces the awaitDrain counter\n  // on the source.  This would be more elegant with a .once()\n  // handler in flow(), but adding and removing repeatedly is\n  // too slow.\n\n\n  var ondrain = pipeOnDrain(src);\n  dest.on('drain', ondrain);\n  var cleanedUp = false;\n\n  function cleanup() {\n    debug('cleanup'); // cleanup event handlers once the pipe is broken\n\n    dest.removeListener('close', onclose);\n    dest.removeListener('finish', onfinish);\n    dest.removeListener('drain', ondrain);\n    dest.removeListener('error', onerror);\n    dest.removeListener('unpipe', onunpipe);\n    src.removeListener('end', onend);\n    src.removeListener('end', unpipe);\n    src.removeListener('data', ondata);\n    cleanedUp = true; // if the reader is waiting for a drain event from this\n    // specific writer, then it would cause it to never start\n    // flowing again.\n    // So, if this is awaiting a drain, then we just call it now.\n    // If we don't know, then assume that we are waiting for one.\n\n    if (state.awaitDrain && (!dest._writableState || dest._writableState.needDrain)) ondrain();\n  } // If the user pushes more data while we're writing to dest then we'll end up\n  // in ondata again. However, we only want to increase awaitDrain once because\n  // dest will only emit one 'drain' event for the multiple writes.\n  // => Introduce a guard on increasing awaitDrain.\n\n\n  var increasedAwaitDrain = false;\n  src.on('data', ondata);\n\n  function ondata(chunk) {\n    debug('ondata');\n    increasedAwaitDrain = false;\n    var ret = dest.write(chunk);\n\n    if (false === ret && !increasedAwaitDrain) {\n      // If the user unpiped during `dest.write()`, it is possible\n      // to get stuck in a permanently paused state if that write\n      // also returned false.\n      // => Check whether `dest` is still a piping destination.\n      if ((state.pipesCount === 1 && state.pipes === dest || state.pipesCount > 1 && indexOf(state.pipes, dest) !== -1) && !cleanedUp) {\n        debug('false write response, pause', src._readableState.awaitDrain);\n        src._readableState.awaitDrain++;\n        increasedAwaitDrain = true;\n      }\n\n      src.pause();\n    }\n  } // if the dest has an error, then stop piping into it.\n  // however, don't suppress the throwing behavior for this.\n\n\n  function onerror(er) {\n    debug('onerror', er);\n    unpipe();\n    dest.removeListener('error', onerror);\n    if (EElistenerCount(dest, 'error') === 0) dest.emit('error', er);\n  } // Make sure our error handler is attached before userland ones.\n\n\n  prependListener(dest, 'error', onerror); // Both close and finish should trigger unpipe, but only once.\n\n  function onclose() {\n    dest.removeListener('finish', onfinish);\n    unpipe();\n  }\n\n  dest.once('close', onclose);\n\n  function onfinish() {\n    debug('onfinish');\n    dest.removeListener('close', onclose);\n    unpipe();\n  }\n\n  dest.once('finish', onfinish);\n\n  function unpipe() {\n    debug('unpipe');\n    src.unpipe(dest);\n  } // tell the dest that it's being piped to\n\n\n  dest.emit('pipe', src); // start the flow if it hasn't been started already.\n\n  if (!state.flowing) {\n    debug('pipe resume');\n    src.resume();\n  }\n\n  return dest;\n};\n\nfunction pipeOnDrain(src) {\n  return function () {\n    var state = src._readableState;\n    debug('pipeOnDrain', state.awaitDrain);\n    if (state.awaitDrain) state.awaitDrain--;\n\n    if (state.awaitDrain === 0 && EElistenerCount(src, 'data')) {\n      state.flowing = true;\n      flow(src);\n    }\n  };\n}\n\nReadable.prototype.unpipe = function (dest) {\n  var state = this._readableState;\n  var unpipeInfo = {\n    hasUnpiped: false\n  }; // if we're not piping anywhere, then do nothing.\n\n  if (state.pipesCount === 0) return this; // just one destination.  most common case.\n\n  if (state.pipesCount === 1) {\n    // passed in one, but it's not the right one.\n    if (dest && dest !== state.pipes) return this;\n    if (!dest) dest = state.pipes; // got a match.\n\n    state.pipes = null;\n    state.pipesCount = 0;\n    state.flowing = false;\n    if (dest) dest.emit('unpipe', this, unpipeInfo);\n    return this;\n  } // slow case. multiple pipe destinations.\n\n\n  if (!dest) {\n    // remove all.\n    var dests = state.pipes;\n    var len = state.pipesCount;\n    state.pipes = null;\n    state.pipesCount = 0;\n    state.flowing = false;\n\n    for (var i = 0; i < len; i++) {\n      dests[i].emit('unpipe', this, unpipeInfo);\n    }\n\n    return this;\n  } // try to find the right one.\n\n\n  var index = indexOf(state.pipes, dest);\n  if (index === -1) return this;\n  state.pipes.splice(index, 1);\n  state.pipesCount -= 1;\n  if (state.pipesCount === 1) state.pipes = state.pipes[0];\n  dest.emit('unpipe', this, unpipeInfo);\n  return this;\n}; // set up data events if they are asked for\n// Ensure readable listeners eventually get something\n\n\nReadable.prototype.on = function (ev, fn) {\n  var res = Stream.prototype.on.call(this, ev, fn);\n\n  if (ev === 'data') {\n    // Start flowing on next tick if stream isn't explicitly paused\n    if (this._readableState.flowing !== false) this.resume();\n  } else if (ev === 'readable') {\n    var state = this._readableState;\n\n    if (!state.endEmitted && !state.readableListening) {\n      state.readableListening = state.needReadable = true;\n      state.emittedReadable = false;\n\n      if (!state.reading) {\n        pna.nextTick(nReadingNextTick, this);\n      } else if (state.length) {\n        emitReadable(this);\n      }\n    }\n  }\n\n  return res;\n};\n\nReadable.prototype.addListener = Readable.prototype.on;\n\nfunction nReadingNextTick(self) {\n  debug('readable nexttick read 0');\n  self.read(0);\n} // pause() and resume() are remnants of the legacy readable stream API\n// If the user uses them, then switch into old mode.\n\n\nReadable.prototype.resume = function () {\n  var state = this._readableState;\n\n  if (!state.flowing) {\n    debug('resume');\n    state.flowing = true;\n    resume(this, state);\n  }\n\n  return this;\n};\n\nfunction resume(stream, state) {\n  if (!state.resumeScheduled) {\n    state.resumeScheduled = true;\n    pna.nextTick(resume_, stream, state);\n  }\n}\n\nfunction resume_(stream, state) {\n  if (!state.reading) {\n    debug('resume read 0');\n    stream.read(0);\n  }\n\n  state.resumeScheduled = false;\n  state.awaitDrain = 0;\n  stream.emit('resume');\n  flow(stream);\n  if (state.flowing && !state.reading) stream.read(0);\n}\n\nReadable.prototype.pause = function () {\n  debug('call pause flowing=%j', this._readableState.flowing);\n\n  if (false !== this._readableState.flowing) {\n    debug('pause');\n    this._readableState.flowing = false;\n    this.emit('pause');\n  }\n\n  return this;\n};\n\nfunction flow(stream) {\n  var state = stream._readableState;\n  debug('flow', state.flowing);\n\n  while (state.flowing && stream.read() !== null) {}\n} // wrap an old-style stream as the async data source.\n// This is *not* part of the readable stream interface.\n// It is an ugly unfortunate mess of history.\n\n\nReadable.prototype.wrap = function (stream) {\n  var _this = this;\n\n  var state = this._readableState;\n  var paused = false;\n  stream.on('end', function () {\n    debug('wrapped end');\n\n    if (state.decoder && !state.ended) {\n      var chunk = state.decoder.end();\n      if (chunk && chunk.length) _this.push(chunk);\n    }\n\n    _this.push(null);\n  });\n  stream.on('data', function (chunk) {\n    debug('wrapped data');\n    if (state.decoder) chunk = state.decoder.write(chunk); // don't skip over falsy values in objectMode\n\n    if (state.objectMode && (chunk === null || chunk === undefined)) return;else if (!state.objectMode && (!chunk || !chunk.length)) return;\n\n    var ret = _this.push(chunk);\n\n    if (!ret) {\n      paused = true;\n      stream.pause();\n    }\n  }); // proxy all the other methods.\n  // important when wrapping filters and duplexes.\n\n  for (var i in stream) {\n    if (this[i] === undefined && typeof stream[i] === 'function') {\n      this[i] = function (method) {\n        return function () {\n          return stream[method].apply(stream, arguments);\n        };\n      }(i);\n    }\n  } // proxy certain important events.\n\n\n  for (var n = 0; n < kProxyEvents.length; n++) {\n    stream.on(kProxyEvents[n], this.emit.bind(this, kProxyEvents[n]));\n  } // when we try to consume some more bytes, simply unpause the\n  // underlying stream.\n\n\n  this._read = function (n) {\n    debug('wrapped _read', n);\n\n    if (paused) {\n      paused = false;\n      stream.resume();\n    }\n  };\n\n  return this;\n};\n\nObject.defineProperty(Readable.prototype, 'readableHighWaterMark', {\n  // making it explicit this property is not enumerable\n  // because otherwise some prototype manipulation in\n  // userland will fail\n  enumerable: false,\n  get: function get() {\n    return this._readableState.highWaterMark;\n  }\n}); // exposed for testing purposes only.\n\nReadable._fromList = fromList; // Pluck off n bytes from an array of buffers.\n// Length is the combined lengths of all the buffers in the list.\n// This function is designed to be inlinable, so please take care when making\n// changes to the function body.\n\nfunction fromList(n, state) {\n  // nothing buffered\n  if (state.length === 0) return null;\n  var ret;\n  if (state.objectMode) ret = state.buffer.shift();else if (!n || n >= state.length) {\n    // read it all, truncate the list\n    if (state.decoder) ret = state.buffer.join('');else if (state.buffer.length === 1) ret = state.buffer.head.data;else ret = state.buffer.concat(state.length);\n    state.buffer.clear();\n  } else {\n    // read part of list\n    ret = fromListPartial(n, state.buffer, state.decoder);\n  }\n  return ret;\n} // Extracts only enough buffered data to satisfy the amount requested.\n// This function is designed to be inlinable, so please take care when making\n// changes to the function body.\n\n\nfunction fromListPartial(n, list, hasStrings) {\n  var ret;\n\n  if (n < list.head.data.length) {\n    // slice is the same for buffers and strings\n    ret = list.head.data.slice(0, n);\n    list.head.data = list.head.data.slice(n);\n  } else if (n === list.head.data.length) {\n    // first chunk is a perfect match\n    ret = list.shift();\n  } else {\n    // result spans more than one buffer\n    ret = hasStrings ? copyFromBufferString(n, list) : copyFromBuffer(n, list);\n  }\n\n  return ret;\n} // Copies a specified amount of characters from the list of buffered data\n// chunks.\n// This function is designed to be inlinable, so please take care when making\n// changes to the function body.\n\n\nfunction copyFromBufferString(n, list) {\n  var p = list.head;\n  var c = 1;\n  var ret = p.data;\n  n -= ret.length;\n\n  while (p = p.next) {\n    var str = p.data;\n    var nb = n > str.length ? str.length : n;\n    if (nb === str.length) ret += str;else ret += str.slice(0, n);\n    n -= nb;\n\n    if (n === 0) {\n      if (nb === str.length) {\n        ++c;\n        if (p.next) list.head = p.next;else list.head = list.tail = null;\n      } else {\n        list.head = p;\n        p.data = str.slice(nb);\n      }\n\n      break;\n    }\n\n    ++c;\n  }\n\n  list.length -= c;\n  return ret;\n} // Copies a specified amount of bytes from the list of buffered data chunks.\n// This function is designed to be inlinable, so please take care when making\n// changes to the function body.\n\n\nfunction copyFromBuffer(n, list) {\n  var ret = Buffer.allocUnsafe(n);\n  var p = list.head;\n  var c = 1;\n  p.data.copy(ret);\n  n -= p.data.length;\n\n  while (p = p.next) {\n    var buf = p.data;\n    var nb = n > buf.length ? buf.length : n;\n    buf.copy(ret, ret.length - n, 0, nb);\n    n -= nb;\n\n    if (n === 0) {\n      if (nb === buf.length) {\n        ++c;\n        if (p.next) list.head = p.next;else list.head = list.tail = null;\n      } else {\n        list.head = p;\n        p.data = buf.slice(nb);\n      }\n\n      break;\n    }\n\n    ++c;\n  }\n\n  list.length -= c;\n  return ret;\n}\n\nfunction endReadable(stream) {\n  var state = stream._readableState; // If we get here before consuming all the bytes, then that is a\n  // bug in node.  Should never happen.\n\n  if (state.length > 0) throw new Error('\"endReadable()\" called on non-empty stream');\n\n  if (!state.endEmitted) {\n    state.ended = true;\n    pna.nextTick(endReadableNT, state, stream);\n  }\n}\n\nfunction endReadableNT(state, stream) {\n  // Check that we didn't get one last unshift.\n  if (!state.endEmitted && state.length === 0) {\n    state.endEmitted = true;\n    stream.readable = false;\n    stream.emit('end');\n  }\n}\n\nfunction indexOf(xs, x) {\n  for (var i = 0, l = xs.length; i < l; i++) {\n    if (xs[i] === x) return i;\n  }\n\n  return -1;\n}","exports = module.exports = require('./lib/_stream_readable.js');\nexports.Stream = exports;\nexports.Readable = exports;\nexports.Writable = require('./lib/_stream_writable.js');\nexports.Duplex = require('./lib/_stream_duplex.js');\nexports.Transform = require('./lib/_stream_transform.js');\nexports.PassThrough = require('./lib/_stream_passthrough.js');","var capability = require('./capability');\n\nvar inherits = require('inherits');\n\nvar stream = require('readable-stream');\n\nvar rStates = exports.readyStates = {\n  UNSENT: 0,\n  OPENED: 1,\n  HEADERS_RECEIVED: 2,\n  LOADING: 3,\n  DONE: 4\n};\n\nvar IncomingMessage = exports.IncomingMessage = function (xhr, response, mode, fetchTimer) {\n  var self = this;\n  stream.Readable.call(self);\n  self._mode = mode;\n  self.headers = {};\n  self.rawHeaders = [];\n  self.trailers = {};\n  self.rawTrailers = []; // Fake the 'close' event, but only once 'end' fires\n\n  self.on('end', function () {\n    // The nextTick is necessary to prevent the 'request' module from causing an infinite loop\n    process.nextTick(function () {\n      self.emit('close');\n    });\n  });\n\n  if (mode === 'fetch') {\n    var read = function read() {\n      reader.read().then(function (result) {\n        if (self._destroyed) return;\n\n        if (result.done) {\n          global.clearTimeout(fetchTimer);\n          self.push(null);\n          return;\n        }\n\n        self.push(new Buffer(result.value));\n        read();\n      })[\"catch\"](function (err) {\n        global.clearTimeout(fetchTimer);\n        if (!self._destroyed) self.emit('error', err);\n      });\n    };\n\n    self._fetchResponse = response;\n    self.url = response.url;\n    self.statusCode = response.status;\n    self.statusMessage = response.statusText;\n    response.headers.forEach(function (header, key) {\n      self.headers[key.toLowerCase()] = header;\n      self.rawHeaders.push(key, header);\n    });\n\n    if (capability.writableStream) {\n      var writable = new WritableStream({\n        write: function write(chunk) {\n          return new Promise(function (resolve, reject) {\n            if (self._destroyed) {\n              reject();\n            } else if (self.push(new Buffer(chunk))) {\n              resolve();\n            } else {\n              self._resumeFetch = resolve;\n            }\n          });\n        },\n        close: function close() {\n          global.clearTimeout(fetchTimer);\n          if (!self._destroyed) self.push(null);\n        },\n        abort: function abort(err) {\n          if (!self._destroyed) self.emit('error', err);\n        }\n      });\n\n      try {\n        response.body.pipeTo(writable)[\"catch\"](function (err) {\n          global.clearTimeout(fetchTimer);\n          if (!self._destroyed) self.emit('error', err);\n        });\n        return;\n      } catch (e) {} // pipeTo method isn't defined. Can't find a better way to feature test this\n\n    } // fallback for when writableStream or pipeTo aren't available\n\n\n    var reader = response.body.getReader();\n    read();\n  } else {\n    self._xhr = xhr;\n    self._pos = 0;\n    self.url = xhr.responseURL;\n    self.statusCode = xhr.status;\n    self.statusMessage = xhr.statusText;\n    var headers = xhr.getAllResponseHeaders().split(/\\r?\\n/);\n    headers.forEach(function (header) {\n      var matches = header.match(/^([^:]+):\\s*(.*)/);\n\n      if (matches) {\n        var key = matches[1].toLowerCase();\n\n        if (key === 'set-cookie') {\n          if (self.headers[key] === undefined) {\n            self.headers[key] = [];\n          }\n\n          self.headers[key].push(matches[2]);\n        } else if (self.headers[key] !== undefined) {\n          self.headers[key] += ', ' + matches[2];\n        } else {\n          self.headers[key] = matches[2];\n        }\n\n        self.rawHeaders.push(matches[1], matches[2]);\n      }\n    });\n    self._charset = 'x-user-defined';\n\n    if (!capability.overrideMimeType) {\n      var mimeType = self.rawHeaders['mime-type'];\n\n      if (mimeType) {\n        var charsetMatch = mimeType.match(/;\\s*charset=([^;])(;|$)/);\n\n        if (charsetMatch) {\n          self._charset = charsetMatch[1].toLowerCase();\n        }\n      }\n\n      if (!self._charset) self._charset = 'utf-8'; // best guess\n    }\n  }\n};\n\ninherits(IncomingMessage, stream.Readable);\n\nIncomingMessage.prototype._read = function () {\n  var self = this;\n  var resolve = self._resumeFetch;\n\n  if (resolve) {\n    self._resumeFetch = null;\n    resolve();\n  }\n};\n\nIncomingMessage.prototype._onXHRProgress = function () {\n  var self = this;\n  var xhr = self._xhr;\n  var response = null;\n\n  switch (self._mode) {\n    case 'text:vbarray':\n      // For IE9\n      if (xhr.readyState !== rStates.DONE) break;\n\n      try {\n        // This fails in IE8\n        response = new global.VBArray(xhr.responseBody).toArray();\n      } catch (e) {}\n\n      if (response !== null) {\n        self.push(new Buffer(response));\n        break;\n      }\n\n    // Falls through in IE8\t\n\n    case 'text':\n      try {\n        // This will fail when readyState = 3 in IE9. Switch mode and wait for readyState = 4\n        response = xhr.responseText;\n      } catch (e) {\n        self._mode = 'text:vbarray';\n        break;\n      }\n\n      if (response.length > self._pos) {\n        var newData = response.substr(self._pos);\n\n        if (self._charset === 'x-user-defined') {\n          var buffer = new Buffer(newData.length);\n\n          for (var i = 0; i < newData.length; i++) {\n            buffer[i] = newData.charCodeAt(i) & 0xff;\n          }\n\n          self.push(buffer);\n        } else {\n          self.push(newData, self._charset);\n        }\n\n        self._pos = response.length;\n      }\n\n      break;\n\n    case 'arraybuffer':\n      if (xhr.readyState !== rStates.DONE || !xhr.response) break;\n      response = xhr.response;\n      self.push(new Buffer(new Uint8Array(response)));\n      break;\n\n    case 'moz-chunked-arraybuffer':\n      // take whole\n      response = xhr.response;\n      if (xhr.readyState !== rStates.LOADING || !response) break;\n      self.push(new Buffer(new Uint8Array(response)));\n      break;\n\n    case 'ms-stream':\n      response = xhr.response;\n      if (xhr.readyState !== rStates.LOADING) break;\n      var reader = new global.MSStreamReader();\n\n      reader.onprogress = function () {\n        if (reader.result.byteLength > self._pos) {\n          self.push(new Buffer(new Uint8Array(reader.result.slice(self._pos))));\n          self._pos = reader.result.byteLength;\n        }\n      };\n\n      reader.onload = function () {\n        self.push(null);\n      }; // reader.onerror = ??? // TODO: this\n\n\n      reader.readAsArrayBuffer(response);\n      break;\n  } // The ms-stream case handles end separately in reader.onload()\n\n\n  if (self._xhr.readyState === rStates.DONE && self._mode !== 'ms-stream') {\n    self.push(null);\n  }\n};","exports.fetch = isFunction(global.fetch) && isFunction(global.ReadableStream);\nexports.writableStream = isFunction(global.WritableStream);\nexports.abortController = isFunction(global.AbortController);\nexports.blobConstructor = false;\n\ntry {\n  new Blob([new ArrayBuffer(1)]);\n  exports.blobConstructor = true;\n} catch (e) {} // The xhr request to example.com may violate some restrictive CSP configurations,\n// so if we're running in a browser that supports `fetch`, avoid calling getXHR()\n// and assume support for certain features below.\n\n\nvar xhr;\n\nfunction getXHR() {\n  // Cache the xhr value\n  if (xhr !== undefined) return xhr;\n\n  if (global.XMLHttpRequest) {\n    xhr = new global.XMLHttpRequest(); // If XDomainRequest is available (ie only, where xhr might not work\n    // cross domain), use the page location. Otherwise use example.com\n    // Note: this doesn't actually make an http request.\n\n    try {\n      xhr.open('GET', global.XDomainRequest ? '/' : 'https://example.com');\n    } catch (e) {\n      xhr = null;\n    }\n  } else {\n    // Service workers don't have XHR\n    xhr = null;\n  }\n\n  return xhr;\n}\n\nfunction checkTypeSupport(type) {\n  var xhr = getXHR();\n  if (!xhr) return false;\n\n  try {\n    xhr.responseType = type;\n    return xhr.responseType === type;\n  } catch (e) {}\n\n  return false;\n} // For some strange reason, Safari 7.0 reports typeof global.ArrayBuffer === 'object'.\n// Safari 7.1 appears to have fixed this bug.\n\n\nvar haveArrayBuffer = typeof global.ArrayBuffer !== 'undefined';\nvar haveSlice = haveArrayBuffer && isFunction(global.ArrayBuffer.prototype.slice); // If fetch is supported, then arraybuffer will be supported too. Skip calling\n// checkTypeSupport(), since that calls getXHR().\n\nexports.arraybuffer = exports.fetch || haveArrayBuffer && checkTypeSupport('arraybuffer'); // These next two tests unavoidably show warnings in Chrome. Since fetch will always\n// be used if it's available, just return false for these to avoid the warnings.\n\nexports.msstream = !exports.fetch && haveSlice && checkTypeSupport('ms-stream');\nexports.mozchunkedarraybuffer = !exports.fetch && haveArrayBuffer && checkTypeSupport('moz-chunked-arraybuffer'); // If fetch is supported, then overrideMimeType will be supported too. Skip calling\n// getXHR().\n\nexports.overrideMimeType = exports.fetch || (getXHR() ? isFunction(getXHR().overrideMimeType) : false);\nexports.vbArray = isFunction(global.VBArray);\n\nfunction isFunction(value) {\n  return typeof value === 'function';\n}\n\nxhr = null; // Help gc","var ClientRequest = require('./lib/request');\n\nvar response = require('./lib/response');\n\nvar extend = require('xtend');\n\nvar statusCodes = require('builtin-status-codes');\n\nvar url = require('url');\n\nvar http = exports;\n\nhttp.request = function (opts, cb) {\n  if (typeof opts === 'string') opts = url.parse(opts);else opts = extend(opts); // Normally, the page is loaded from http or https, so not specifying a protocol\n  // will result in a (valid) protocol-relative url. However, this won't work if\n  // the protocol is something else, like 'file:'\n\n  var defaultProtocol = global.location.protocol.search(/^https?:$/) === -1 ? 'http:' : '';\n  var protocol = opts.protocol || defaultProtocol;\n  var host = opts.hostname || opts.host;\n  var port = opts.port;\n  var path = opts.path || '/'; // Necessary for IPv6 addresses\n\n  if (host && host.indexOf(':') !== -1) host = '[' + host + ']'; // This may be a relative url. The browser should always be able to interpret it correctly.\n\n  opts.url = (host ? protocol + '//' + host : '') + (port ? ':' + port : '') + path;\n  opts.method = (opts.method || 'GET').toUpperCase();\n  opts.headers = opts.headers || {}; // Also valid opts.auth, opts.mode\n\n  var req = new ClientRequest(opts);\n  if (cb) req.on('response', cb);\n  return req;\n};\n\nhttp.get = function get(opts, cb) {\n  var req = http.request(opts, cb);\n  req.end();\n  return req;\n};\n\nhttp.ClientRequest = ClientRequest;\nhttp.IncomingMessage = response.IncomingMessage;\n\nhttp.Agent = function () {};\n\nhttp.Agent.defaultMaxSockets = 4;\nhttp.globalAgent = new http.Agent();\nhttp.STATUS_CODES = statusCodes;\nhttp.METHODS = ['CHECKOUT', 'CONNECT', 'COPY', 'DELETE', 'GET', 'HEAD', 'LOCK', 'M-SEARCH', 'MERGE', 'MKACTIVITY', 'MKCOL', 'MOVE', 'NOTIFY', 'OPTIONS', 'PATCH', 'POST', 'PROPFIND', 'PROPPATCH', 'PURGE', 'PUT', 'REPORT', 'SEARCH', 'SUBSCRIBE', 'TRACE', 'UNLOCK', 'UNSUBSCRIBE'];","var toString = {}.toString;\n\nmodule.exports = Array.isArray || function (arr) {\n  return toString.call(arr) == '[object Array]';\n};","module.exports = function (gantt) {\n  // TODO: why eslint fails on regexp?\n  // eslint-disable-next-line no-control-regex\n  var htmlTags = new RegExp(\"<(?:.|\\n)*?>\", \"gm\");\n  var extraSpaces = new RegExp(\" +\", \"gm\");\n\n  function stripHTMLLite(htmlText) {\n    return (htmlText + \"\").replace(htmlTags, \" \").replace(extraSpaces, \" \");\n  }\n\n  var singleQuotes = new RegExp(\"'\", \"gm\");\n\n  function escapeQuotes(text) {\n    return (text + \"\").replace(singleQuotes, \"&#39;\");\n  }\n\n  gantt._waiAria = {\n    getAttributeString: function getAttributeString(attr) {\n      var attributes = [\" \"];\n\n      for (var i in attr) {\n        var text = escapeQuotes(stripHTMLLite(attr[i]));\n        attributes.push(i + \"='\" + text + \"'\");\n      }\n\n      attributes.push(\" \");\n      return attributes.join(\" \");\n    },\n    getTimelineCellAttr: function getTimelineCellAttr(dateString) {\n      return gantt._waiAria.getAttributeString({\n        \"aria-label\": dateString\n      });\n    },\n    _taskCommonAttr: function _taskCommonAttr(task, div) {\n      if (!(task.start_date && task.end_date)) return;\n      div.setAttribute(\"aria-label\", stripHTMLLite(gantt.templates.tooltip_text(task.start_date, task.end_date, task)));\n\n      if (task.$dataprocessor_class) {\n        div.setAttribute(\"aria-busy\", true);\n      }\n    },\n    setTaskBarAttr: function setTaskBarAttr(task, div) {\n      this._taskCommonAttr(task, div); // task bars are complex elements that should be treated as a single element\n\n\n      div.setAttribute(\"role\", \"img\");\n\n      if (!gantt.isReadonly(task) && gantt.config.drag_move) {\n        if (task.id != gantt.getState(\"tasksDnd\").drag_id) {\n          div.setAttribute(\"aria-grabbed\", false);\n        } else {\n          div.setAttribute(\"aria-grabbed\", true);\n        }\n      }\n    },\n    taskRowAttr: function taskRowAttr(task, div) {\n      this._taskCommonAttr(task, div);\n\n      if (!gantt.isReadonly(task) && gantt.config.order_branch) {\n        div.setAttribute(\"aria-grabbed\", false);\n      }\n\n      div.setAttribute(\"role\", \"row\"); // selected attribute should be added only to the grid  because\n      // other parts don't have the keyboard navigation\n\n      div.setAttribute(\"aria-selected\", gantt.isSelectedTask(task.id) ? \"true\" : \"false\"); // allowed values start from 1, set 1 for non-tree datastores\n\n      div.setAttribute(\"aria-level\", task.$level + 1 || 1);\n\n      if (gantt.hasChild(task.id)) {\n        div.setAttribute(\"aria-expanded\", task.$open ? \"true\" : \"false\");\n      }\n    },\n    linkAttr: function linkAttr(link, div) {\n      var linkTypes = gantt.config.links;\n      var toStart = link.type == linkTypes.finish_to_start || link.type == linkTypes.start_to_start;\n      var fromStart = link.type == linkTypes.start_to_start || link.type == linkTypes.start_to_finish;\n      var content = gantt.locale.labels.link + \" \" + gantt.templates.drag_link(link.source, fromStart, link.target, toStart); // links are complex elements that should be treated as a single element\n\n      div.setAttribute(\"role\", \"img\");\n      div.setAttribute(\"aria-label\", stripHTMLLite(content));\n\n      if (gantt.isReadonly(link)) {\n        div.setAttribute(\"aria-readonly\", true);\n      }\n    },\n    gridSeparatorAttr: function gridSeparatorAttr(div) {\n      // the only valid role for the grid header\n      div.setAttribute(\"role\", \"columnheader\");\n    },\n    rowResizerAttr: function rowResizerAttr(div) {\n      // the only valid role for the grid header\n      div.setAttribute(\"role\", \"row\");\n    },\n    lightboxHiddenAttr: function lightboxHiddenAttr(div) {\n      div.setAttribute(\"aria-hidden\", \"true\");\n    },\n    lightboxVisibleAttr: function lightboxVisibleAttr(div) {\n      div.setAttribute(\"aria-hidden\", \"false\");\n    },\n    lightboxAttr: function lightboxAttr(div) {\n      div.setAttribute(\"role\", \"dialog\");\n      div.setAttribute(\"aria-hidden\", \"true\");\n      div.firstChild.setAttribute(\"role\", \"heading\");\n      div.firstChild.setAttribute(\"aria-level\", \"1\");\n    },\n    lightboxButtonAttrString: function lightboxButtonAttrString(buttonName) {\n      return this.getAttributeString({\n        \"role\": \"button\",\n        \"aria-label\": gantt.locale.labels[buttonName],\n        \"tabindex\": \"0\"\n      });\n    },\n    lightboxHeader: function lightboxHeader(div, headerText) {\n      div.setAttribute(\"aria-label\", headerText);\n    },\n    lightboxSelectAttrString: function lightboxSelectAttrString(time_option) {\n      var label = \"\";\n\n      switch (time_option) {\n        case \"%Y\":\n          label = gantt.locale.labels.years;\n          break;\n\n        case \"%m\":\n          label = gantt.locale.labels.months;\n          break;\n\n        case \"%d\":\n          label = gantt.locale.labels.days;\n          break;\n\n        case \"%H:%i\":\n          label = gantt.locale.labels.hours + gantt.locale.labels.minutes;\n          break;\n\n        default:\n          break;\n      }\n\n      return gantt._waiAria.getAttributeString({\n        \"aria-label\": label\n      });\n    },\n    lightboxDurationInputAttrString: function lightboxDurationInputAttrString(section) {\n      return this.getAttributeString({\n        \"aria-label\": gantt.locale.labels.column_duration,\n        \"aria-valuemin\": \"0\",\n        \"role\": \"spinbutton\"\n      });\n    },\n    inlineEditorAttr: function inlineEditorAttr(div) {\n      div.setAttribute(\"role\", \"row\");\n    },\n    gridAttrString: function gridAttrString() {\n      return [\" role='treegrid'\", gantt.config.multiselect ? \"aria-multiselectable='true'\" : \"aria-multiselectable='false'\", \" \"].join(\" \");\n    },\n    gridScaleRowAttrString: function gridScaleRowAttrString() {\n      return \"role='row'\";\n    },\n    gridScaleCellAttrString: function gridScaleCellAttrString(column, label) {\n      var attrs = \"\";\n\n      if (column.name == \"add\") {\n        // a more precise role is button, but it is not valid for the grid header\n        attrs = this.getAttributeString({\n          \"role\": \"columnheader\",\n          \"aria-label\": gantt.locale.labels.new_task\n        });\n      } else {\n        var attributes = {\n          \"role\": \"columnheader\",\n          \"aria-label\": label\n        };\n\n        if (gantt._sort && gantt._sort.name == column.name) {\n          if (gantt._sort.direction == \"asc\") {\n            attributes[\"aria-sort\"] = \"ascending\";\n          } else {\n            attributes[\"aria-sort\"] = \"descending\";\n          }\n        }\n\n        attrs = this.getAttributeString(attributes);\n      }\n\n      return attrs;\n    },\n    gridDataAttrString: function gridDataAttrString() {\n      return \"role='rowgroup'\";\n    },\n    reorderMarkerAttr: function reorderMarkerAttr(div) {\n      div.setAttribute(\"role\", \"grid\");\n      div.firstChild.removeAttribute(\"aria-level\");\n      div.firstChild.setAttribute(\"aria-grabbed\", \"true\");\n    },\n    gridCellAttrString: function gridCellAttrString(column, textValue, task) {\n      var attributes = {\n        \"role\": \"gridcell\",\n        \"aria-label\": textValue\n      };\n\n      if (!column.editor || gantt.isReadonly(task)) {\n        attributes[\"aria-readonly\"] = true;\n      }\n\n      return this.getAttributeString(attributes);\n    },\n    gridAddButtonAttrString: function gridAddButtonAttrString(column) {\n      return this.getAttributeString({\n        \"role\": \"button\",\n        \"aria-label\": gantt.locale.labels.new_task\n      });\n    },\n    messageButtonAttrString: function messageButtonAttrString(buttonLabel) {\n      return \"tabindex='0' role='button' aria-label='\" + buttonLabel + \"'\";\n    },\n    messageInfoAttr: function messageInfoAttr(div) {\n      div.setAttribute(\"role\", \"alert\"); //div.setAttribute(\"tabindex\", \"-1\");\n    },\n    messageModalAttr: function messageModalAttr(div, uid) {\n      div.setAttribute(\"role\", \"dialog\");\n\n      if (uid) {\n        div.setAttribute(\"aria-labelledby\", uid);\n      } //\tdiv.setAttribute(\"tabindex\", \"-1\");\n\n    },\n    quickInfoAttr: function quickInfoAttr(div) {\n      div.setAttribute(\"role\", \"dialog\");\n    },\n    quickInfoHeaderAttrString: function quickInfoHeaderAttrString() {\n      return \" role='heading' aria-level='1' \";\n    },\n    quickInfoHeader: function quickInfoHeader(div, header) {\n      div.setAttribute(\"aria-label\", header);\n    },\n    quickInfoButtonAttrString: function quickInfoButtonAttrString(label) {\n      return gantt._waiAria.getAttributeString({\n        \"role\": \"button\",\n        \"aria-label\": label,\n        \"tabindex\": \"0\"\n      });\n    },\n    tooltipAttr: function tooltipAttr(div) {\n      div.setAttribute(\"role\", \"tooltip\");\n    },\n    tooltipVisibleAttr: function tooltipVisibleAttr(div) {\n      div.setAttribute(\"aria-hidden\", \"false\");\n    },\n    tooltipHiddenAttr: function tooltipHiddenAttr(div) {\n      div.setAttribute(\"aria-hidden\", \"true\");\n    }\n  };\n\n  function isDisabled() {\n    return !gantt.config.wai_aria_attributes;\n  }\n\n  for (var i in gantt._waiAria) {\n    gantt._waiAria[i] = function (payload) {\n      return function () {\n        if (isDisabled()) {\n          return \"\";\n        }\n\n        return payload.apply(this, arguments);\n      };\n    }(gantt._waiAria[i]);\n  }\n};","module.exports = function (gantt) {\n  gantt._extend_to_optional = function (lightbox_block) {\n    var duration = lightbox_block;\n    var optional_time = {\n      render: duration.render,\n      focus: duration.focus,\n      set_value: function set_value(node, value, task, section) {\n        var mapping = gantt._resolve_default_mapping(section);\n\n        if (!task[mapping.start_date] || mapping.start_date == \"start_date\" && this._isAllowedUnscheduledTask(task)) {\n          optional_time.disable(node, section);\n          var val = {};\n\n          for (var i in mapping) {\n            //take default values from the time control from task start/end dates\n            val[mapping[i]] = task[i];\n          }\n\n          return duration.set_value.call(gantt, node, value, val, section); //set default value\n        } else {\n          optional_time.enable(node, section);\n          return duration.set_value.call(gantt, node, value, task, section);\n        }\n      },\n      get_value: function get_value(node, task, section) {\n        if (section.disabled) {\n          return {\n            start_date: null\n          };\n        } else {\n          return duration.get_value.call(gantt, node, task, section);\n        }\n      },\n      update_block: function update_block(node, section) {\n        gantt.callEvent(\"onSectionToggle\", [gantt._lightbox_id, section]);\n        node.style.display = section.disabled ? \"none\" : \"block\";\n\n        if (section.button) {\n          var button = node.previousSibling.querySelector(\".gantt_custom_button_label\"),\n              labels = gantt.locale.labels;\n          var button_text = section.disabled ? labels[section.name + \"_enable_button\"] : labels[section.name + \"_disable_button\"];\n          button.innerHTML = button_text;\n        }\n\n        gantt.resizeLightbox();\n      },\n      disable: function disable(node, section) {\n        section.disabled = true;\n        optional_time.update_block(node, section);\n      },\n      enable: function enable(node, section) {\n        section.disabled = false;\n        optional_time.update_block(node, section);\n      },\n      button_click: function button_click(index, el, section, container) {\n        if (gantt.callEvent(\"onSectionButton\", [gantt._lightbox_id, section]) === false) {\n          return;\n        }\n\n        var config = gantt._get_typed_lightbox_config()[index];\n\n        if (config.disabled) {\n          optional_time.enable(container, config);\n        } else {\n          optional_time.disable(container, config);\n        }\n      }\n    };\n    return optional_time;\n  };\n\n  gantt.form_blocks.duration_optional = gantt._extend_to_optional(gantt.form_blocks.duration);\n  gantt.form_blocks.time_optional = gantt._extend_to_optional(gantt.form_blocks.time);\n};","var __extends = require(\"../../../../utils/extends\");\n\nmodule.exports = function (gantt) {\n  var _super = require(\"./select_control\")(gantt);\n\n  function TypeselectControl() {\n    var self = _super.apply(this, arguments) || this;\n    return self;\n  }\n\n  __extends(TypeselectControl, _super);\n\n  TypeselectControl.prototype.render = function (sns) {\n    var types = gantt.config.types,\n        locale = gantt.locale.labels,\n        options = [];\n\n    var filter = sns.filter || function (typeKey, typeValue) {\n      if (!types.placeholder || typeValue !== types.placeholder) {\n        return true;\n      }\n\n      return false;\n    };\n\n    for (var i in types) {\n      if (!filter(i, types[i]) === false) {\n        options.push({\n          key: types[i],\n          label: locale[\"type_\" + i]\n        });\n      }\n    }\n\n    sns.options = options;\n    var oldOnChange = sns.onchange;\n\n    sns.onchange = function () {\n      gantt.changeLightboxType(this.value);\n\n      if (this.value === gantt.config.types.task) {\n        gantt._lightbox_new_type = \"task\";\n      }\n\n      if (typeof oldOnChange == 'function') {\n        oldOnChange.apply(this, arguments);\n      }\n    };\n\n    return _super.prototype.render.apply(this, arguments);\n  };\n\n  return TypeselectControl;\n};","var __extends = require(\"../../../../utils/extends\");\n\nvar htmlHelpers = require(\"../../utils/html_helpers\");\n\nmodule.exports = function (gantt) {\n  var _super = require(\"./base_control\")(gantt);\n\n  function ConstraintControl() {\n    var self = _super.apply(this, arguments) || this;\n    return self;\n  }\n\n  __extends(ConstraintControl, _super);\n\n  function isNonTimedConstraint(value) {\n    if (!value || value === gantt.config.constraint_types.ASAP || value === gantt.config.constraint_types.ALAP) {\n      return true;\n    } else {\n      return false;\n    }\n  }\n\n  function toggleTimeSelect(timeSelects, typeValue) {\n    var isNonTimed = isNonTimedConstraint(typeValue);\n\n    for (var i = 0; i < timeSelects.length; i++) {\n      timeSelects[i].disabled = isNonTimed;\n    }\n  }\n\n  ConstraintControl.prototype.render = function (sns) {\n    var height = (sns.height || 30) + \"px\";\n    var html = \"<div class='gantt_cal_ltext gantt_section_\" + sns.name + \"' style='height:\" + height + \";'>\";\n    var options = [];\n\n    for (var i in gantt.config.constraint_types) {\n      options.push({\n        key: gantt.config.constraint_types[i],\n        label: gantt.locale.labels[gantt.config.constraint_types[i]]\n      });\n    }\n\n    sns.options = sns.options || options;\n    html += \"<span data-constraint-type-select>\" + htmlHelpers.getHtmlSelect(sns.options, [{\n      key: \"data-type\",\n      value: \"constraint-type\"\n    }]) + \"</span>\";\n    var timeLabel = gantt.locale.labels[\"constraint_date\"] || \"Constraint date\";\n    html += \"<label data-constraint-time-select>\" + timeLabel + \": \" + gantt.form_blocks.getTimePicker.call(this, sns) + \"</label>\";\n    html += \"</div>\";\n    return html;\n  };\n\n  ConstraintControl.prototype.set_value = function (node, value, task, config) {\n    var typeSelect = node.querySelector(\"[data-constraint-type-select] select\");\n    var timeSelects = node.querySelectorAll(\"[data-constraint-time-select] select\");\n    var map = config._time_format_order;\n\n    var mapping = gantt._resolve_default_mapping(config);\n\n    if (!typeSelect._eventsInitialized) {\n      typeSelect.addEventListener(\"change\", function (e) {\n        toggleTimeSelect(timeSelects, e.target.value);\n      });\n      typeSelect._eventsInitialized = true;\n    }\n\n    var constraintDate = task[mapping.constraint_date] || new Date();\n\n    gantt.form_blocks._fill_lightbox_select(timeSelects, 0, constraintDate, map, config);\n\n    var constraintType = task[mapping.constraint_type] || gantt.getConstraintType(task);\n    typeSelect.value = constraintType;\n    toggleTimeSelect(timeSelects, constraintType);\n  };\n\n  ConstraintControl.prototype.get_value = function (node, task, config) {\n    var typeSelect = node.querySelector(\"[data-constraint-type-select] select\");\n    var timeSelects = node.querySelectorAll(\"[data-constraint-time-select] select\");\n    var constraintType = typeSelect.value;\n    var constraintDate = null;\n\n    if (!isNonTimedConstraint(constraintType)) {\n      constraintDate = gantt.form_blocks.getTimePickerValue(timeSelects, config);\n    }\n\n    return {\n      constraint_type: constraintType,\n      constraint_date: constraintDate\n    };\n  };\n\n  ConstraintControl.prototype.focus = function (node) {\n    gantt._focus(node.querySelector(\"select\"));\n  };\n\n  return ConstraintControl;\n};","var __extends = require(\"../../../../utils/extends\");\n\nmodule.exports = function (gantt) {\n  var _super = require(\"./select_control\")(gantt);\n\n  function ParentControl() {\n    var self = _super.apply(this, arguments) || this;\n    return self;\n  }\n\n  __extends(ParentControl, _super);\n\n  ParentControl.prototype.render = function (sns) {\n    return _display(sns, false);\n  };\n\n  ParentControl.prototype.set_value = function (node, value, ev, config) {\n    // GS-1051. If the value is `0`, the set_value function in the select control won't select \n    // the first child because (0 || '') = '';\n    if (value === 0) value = \"0\";\n    var tmpDom = document.createElement(\"div\");\n    tmpDom.innerHTML = _display(config, ev.id);\n    var newOptions = tmpDom.removeChild(tmpDom.firstChild);\n    node.onselect = null;\n    node.parentNode.replaceChild(newOptions, node);\n    return gantt.form_blocks.select.set_value.apply(gantt, [newOptions, value, ev, config]);\n  };\n\n  function _display(config, item_id) {\n    var tasks = [],\n        options = [];\n\n    if (item_id) {\n      tasks = gantt.getTaskByTime();\n\n      if (config.allow_root) {\n        tasks.unshift({\n          id: gantt.config.root_id,\n          text: config.root_label || \"\"\n        });\n      }\n\n      tasks = _filter(tasks, config, item_id);\n\n      if (config.sort) {\n        tasks.sort(config.sort);\n      }\n    }\n\n    var text = config.template || gantt.templates.task_text;\n\n    for (var i = 0; i < tasks.length; i++) {\n      var label = text.apply(gantt, [tasks[i].start_date, tasks[i].end_date, tasks[i]]);\n\n      if (label === undefined) {\n        label = \"\";\n      }\n\n      options.push({\n        key: tasks[i].id,\n        label: label\n      });\n    }\n\n    config.options = options;\n    config.map_to = config.map_to || \"parent\";\n    return gantt.form_blocks.select.render.apply(this, arguments);\n  }\n\n  function _filter(options, config, item_id) {\n    var filter = config.filter || function () {\n      return true;\n    };\n\n    options = options.slice(0);\n\n    for (var i = 0; i < options.length; i++) {\n      var task = options[i];\n\n      if (task.id == item_id || gantt.isChildOf(task.id, item_id) || filter(task.id, task) === false) {\n        options.splice(i, 1);\n        i--;\n      }\n    }\n\n    return options;\n  }\n\n  return ParentControl;\n};","var __extends = require(\"../../../../utils/extends\");\n\nvar DurationFormatterNumeric = require(\"../../../common/duration_formatter_numeric\")[\"default\"];\n\nmodule.exports = function (gantt) {\n  var _super = require(\"./base_control\")(gantt);\n\n  function DurationControl() {\n    var self = _super.apply(this, arguments) || this;\n    return self;\n  }\n\n  function getFormatter(config) {\n    return config.formatter || new DurationFormatterNumeric();\n  }\n\n  __extends(DurationControl, _super);\n\n  DurationControl.prototype.render = function (sns) {\n    var time = \"<div class='gantt_time_selects'>\" + gantt.form_blocks.getTimePicker.call(this, sns) + \"</div>\";\n    var label = \" \" + gantt.locale.labels[gantt.config.duration_unit + \"s\"] + \" \";\n    var singleDate = sns.single_date ? \" style='display:none'\" : \"\";\n    var readonly = sns.readonly ? \" disabled='disabled'\" : \"\";\n\n    var ariaAttr = gantt._waiAria.lightboxDurationInputAttrString(sns);\n\n    var durationInputClass = \"gantt_duration_value\";\n\n    if (sns.formatter) {\n      label = \"\";\n      durationInputClass += \" gantt_duration_value_formatted\";\n    }\n\n    var duration = \"<div class='gantt_duration' \" + singleDate + \">\" + \"<input type='button' class='gantt_duration_dec' value='−'\" + readonly + \">\" + \"<input type='text' value='5days' class='\" + durationInputClass + \"'\" + readonly + \" \" + ariaAttr + \">\" + \"<input type='button' class='gantt_duration_inc' value='+'\" + readonly + \">\" + label + \"<span></span>\" + \"</div>\";\n    var html = \"<div style='height:\" + (sns.height || 30) + \"px;padding-top:0px;font-size:inherit;' class='gantt_section_time'>\" + time + \" \" + duration + \"</div>\";\n    return html;\n  };\n\n  DurationControl.prototype.set_value = function (node, value, ev, config) {\n    var s = node.getElementsByTagName(\"select\");\n    var inps = node.getElementsByTagName(\"input\");\n    var duration = inps[1];\n    var btns = [inps[0], inps[2]];\n    var endspan = node.getElementsByTagName(\"span\")[0];\n    var map = config._time_format_order;\n    var mapping;\n    var start_date;\n    var end_date;\n    var duration_val;\n\n    function _calc_date() {\n      var start_date = _getStartDate.call(gantt, node, config);\n\n      var duration = _getDuration.call(gantt, node, config);\n\n      var end_date = gantt.calculateEndDate({\n        start_date: start_date,\n        duration: duration,\n        task: ev\n      });\n      var template = gantt.templates.task_end_date || gantt.templates.task_date;\n      endspan.innerHTML = template(end_date);\n    }\n\n    function _change_duration(step) {\n      var value = duration.value;\n      value = getFormatter(config).parse(value);\n      if (window.isNaN(value)) value = 0;\n      value += step;\n      if (value < 1) value = 1;\n      duration.value = getFormatter(config).format(value);\n\n      _calc_date();\n    }\n\n    btns[0].onclick = gantt.bind(function () {\n      _change_duration(-1 * gantt.config.duration_step);\n    }, this);\n    btns[1].onclick = gantt.bind(function () {\n      _change_duration(1 * gantt.config.duration_step);\n    }, this);\n    s[0].onchange = _calc_date;\n    s[1].onchange = _calc_date;\n    s[2].onchange = _calc_date;\n    if (s[3]) s[3].onchange = _calc_date;\n    duration.onkeydown = gantt.bind(function (e) {\n      var code;\n      e = e || window.event;\n      code = e.charCode || e.keyCode || e.which;\n\n      if (code == gantt.constants.KEY_CODES.DOWN) {\n        _change_duration(-1 * gantt.config.duration_step);\n\n        return false;\n      }\n\n      if (code == gantt.constants.KEY_CODES.UP) {\n        _change_duration(1 * gantt.config.duration_step);\n\n        return false;\n      }\n\n      window.setTimeout(_calc_date, 1);\n    }, this);\n    duration.onchange = gantt.bind(_calc_date, this);\n    mapping = gantt._resolve_default_mapping(config);\n    if (typeof mapping === \"string\") mapping = {\n      start_date: mapping\n    };\n    start_date = ev[mapping.start_date] || new Date();\n    end_date = ev[mapping.end_date] || gantt.calculateEndDate({\n      start_date: start_date,\n      duration: 1,\n      task: ev\n    });\n    duration_val = Math.round(ev[mapping.duration]) || gantt.calculateDuration({\n      start_date: start_date,\n      end_date: end_date,\n      task: ev\n    });\n    duration_val = getFormatter(config).format(duration_val);\n\n    gantt.form_blocks._fill_lightbox_select(s, 0, start_date, map, config);\n\n    duration.value = duration_val;\n\n    _calc_date();\n  };\n\n  DurationControl.prototype.get_value = function (node, ev, config) {\n    var startDate = _getStartDate(node, config);\n\n    var duration = _getDuration(node, config);\n\n    var endDate = gantt.calculateEndDate({\n      start_date: startDate,\n      duration: duration,\n      task: ev\n    });\n\n    if (typeof gantt._resolve_default_mapping(config) == \"string\") {\n      return startDate;\n    }\n\n    return {\n      start_date: startDate,\n      end_date: endDate,\n      duration: duration\n    };\n  };\n\n  DurationControl.prototype.focus = function (node) {\n    gantt._focus(node.getElementsByTagName(\"select\")[0]);\n  };\n\n  function _getStartDate(node, config) {\n    var s = node.getElementsByTagName(\"select\");\n    var map = config._time_format_order;\n    var hours = 0;\n    var minutes = 0;\n\n    if (gantt.defined(map[3])) {\n      var input = s[map[3]];\n      var time = parseInt(input.value, 10);\n\n      if (isNaN(time) && input.hasAttribute(\"data-value\")) {\n        time = parseInt(input.getAttribute(\"data-value\"), 10);\n      }\n\n      hours = Math.floor(time / 60);\n      minutes = time % 60;\n    }\n\n    return new Date(s[map[2]].value, s[map[1]].value, s[map[0]].value, hours, minutes);\n  }\n\n  function _getDuration(node, config) {\n    var duration = node.getElementsByTagName(\"input\")[1];\n    duration = getFormatter(config).parse(duration.value);\n    if (!duration || window.isNaN(duration)) duration = 1;\n    if (duration < 0) duration *= -1;\n    return duration;\n  }\n\n  return DurationControl;\n};","var __extends = require(\"../../../../utils/extends\");\n\nmodule.exports = function (gantt) {\n  var _super = require(\"./base_control\")(gantt);\n\n  function RadioControl() {\n    var self = _super.apply(this, arguments) || this;\n    return self;\n  }\n\n  __extends(RadioControl, _super);\n\n  RadioControl.prototype.render = function (sns) {\n    var height = (sns.height || \"23\") + \"px\";\n    var html = \"<div class='gantt_cal_ltext' style='height:\" + height + \";'>\";\n\n    if (sns.options && sns.options.length) {\n      for (var i = 0; i < sns.options.length; i++) {\n        html += \"<label><input type='radio' value='\" + sns.options[i].key + \"' name='\" + sns.name + \"'>\" + sns.options[i].label + \"</label>\";\n      }\n    }\n\n    html += \"</div>\";\n    return html;\n  };\n\n  RadioControl.prototype.set_value = function (node, value, ev, sns) {\n    var radio;\n    if (!sns.options || !sns.options.length) return;\n    radio = node.querySelector(\"input[type=radio][value='\" + value + \"']\") || node.querySelector(\"input[type=radio][value='\" + sns.default_value + \"']\");\n    if (!radio) return;\n\n    if (!node._dhx_onchange && sns.onchange) {\n      node.onchange = sns.onchange;\n      node._dhx_onchange = true;\n    }\n\n    radio.checked = true;\n  };\n\n  RadioControl.prototype.get_value = function (node, ev) {\n    var result = node.querySelector(\"input[type=radio]:checked\");\n    return result ? result.value : \"\";\n  };\n\n  RadioControl.prototype.focus = function (node) {\n    gantt._focus(node.querySelector(\"input[type=radio]\"));\n  };\n\n  return RadioControl;\n};","var helpers = require(\"../../../../utils/helpers\");\n\nvar __extends = require(\"../../../../utils/extends\");\n\nmodule.exports = function (gantt) {\n  var _super = require(\"./base_control\")(gantt);\n\n  function CheckboxControl() {\n    var self = _super.apply(this, arguments) || this;\n    return self;\n  }\n\n  __extends(CheckboxControl, _super);\n\n  CheckboxControl.prototype.render = function (sns) {\n    var height = (sns.height || \"23\") + \"px\";\n    var html = \"<div class='gantt_cal_ltext' style='height:\" + height + \";'>\";\n\n    if (sns.options && sns.options.length) {\n      for (var i = 0; i < sns.options.length; i++) {\n        html += \"<label><input type='checkbox' value='\" + sns.options[i].key + \"' name='\" + sns.name + \"'>\" + sns.options[i].label + \"</label>\";\n      }\n    } else {\n      sns.single_value = true;\n      html += \"<label><input type='checkbox' name='\" + sns.name + \"'></label>\";\n    }\n\n    html += \"</div>\";\n    return html;\n  };\n\n  CheckboxControl.prototype.set_value = function (node, value, ev, sns) {\n    var checkboxes = Array.prototype.slice.call(node.querySelectorAll(\"input[type=checkbox]\"));\n\n    if (!node._dhx_onchange && sns.onchange) {\n      node.onchange = sns.onchange;\n      node._dhx_onchange = true;\n    }\n\n    if (sns.single_value) {\n      var box = checkboxes[0];\n      box.checked = !!value;\n    } else {\n      helpers.forEach(checkboxes, function (entry) {\n        entry.checked = value ? value.indexOf(entry.value) >= 0 : false;\n      });\n    }\n  };\n\n  CheckboxControl.prototype.get_value = function (node, task, sns) {\n    if (sns.single_value) {\n      var box = node.querySelector(\"input[type=checkbox]\");\n      return box.checked;\n    } else {\n      return helpers.arrayMap(Array.prototype.slice.call(node.querySelectorAll(\"input[type=checkbox]:checked\")), function (entry) {\n        return entry.value;\n      });\n    }\n  };\n\n  CheckboxControl.prototype.focus = function (node) {\n    gantt._focus(node.querySelector(\"input[type=checkbox]\"));\n  };\n\n  return CheckboxControl;\n};","var __extends = require(\"../../../../utils/extends\");\n\nmodule.exports = function (gantt) {\n  var _super = require(\"./base_control\")(gantt);\n\n  function TimeControl() {\n    var self = _super.apply(this, arguments) || this;\n    return self;\n  }\n\n  __extends(TimeControl, _super);\n\n  TimeControl.prototype.render = function (sns) {\n    var time = gantt.form_blocks.getTimePicker.call(this, sns);\n    var html = \"<div style='height:\" + (sns.height || 30) + \"px;padding-top:0px;font-size:inherit;text-align:center;' class='gantt_section_time'>\";\n    html += time;\n\n    if (sns.single_date) {\n      time = gantt.form_blocks.getTimePicker.call(this, sns, true);\n      html += \"<span></span>\";\n    } else {\n      html += \"<span style='font-weight:normal; font-size:10pt;'> &nbsp;&ndash;&nbsp; </span>\";\n    }\n\n    html += time;\n    html += \"</div>\";\n    return html;\n  };\n\n  TimeControl.prototype.set_value = function (node, value, ev, config) {\n    var cfg = config;\n    var s = node.getElementsByTagName(\"select\");\n    var map = config._time_format_order;\n\n    if (cfg.auto_end_date) {\n      var _update_lightbox_select = function _update_lightbox_select() {\n        start_date = new Date(s[map[2]].value, s[map[1]].value, s[map[0]].value, 0, 0);\n        end_date = gantt.calculateEndDate({\n          start_date: start_date,\n          duration: 1,\n          task: ev\n        });\n\n        gantt.form_blocks._fill_lightbox_select(s, map.size, end_date, map, cfg);\n      };\n\n      for (var i = 0; i < 4; i++) {\n        s[i].onchange = _update_lightbox_select;\n      }\n    }\n\n    var mapping = gantt._resolve_default_mapping(config);\n\n    if (typeof mapping === \"string\") mapping = {\n      start_date: mapping\n    };\n    var start_date = ev[mapping.start_date] || new Date();\n    var end_date = ev[mapping.end_date] || gantt.calculateEndDate({\n      start_date: start_date,\n      duration: 1,\n      task: ev\n    });\n\n    gantt.form_blocks._fill_lightbox_select(s, 0, start_date, map, cfg);\n\n    gantt.form_blocks._fill_lightbox_select(s, map.size, end_date, map, cfg);\n  };\n\n  TimeControl.prototype.get_value = function (node, ev, config) {\n    var selects = node.getElementsByTagName(\"select\");\n    var startDate;\n    var map = config._time_format_order;\n\n    function _getEndDate(selects, map, startDate) {\n      var endDate = gantt.form_blocks.getTimePickerValue(selects, config, map.size); // GS-1010: We need to add a way to obtain exact end_date for validation\n\n      if (endDate <= startDate) {\n        // when end date seems wrong\n        if (config.autofix_end !== false || config.single_date) {\n          // auto correct it in two cases - when the auto correction is not disabled, or when we have 'single date' control and the user don't have the UI to specify the end date\n          return gantt.date.add(startDate, gantt._get_timepicker_step(), \"minute\");\n        }\n      }\n\n      return endDate;\n    }\n\n    startDate = gantt.form_blocks.getTimePickerValue(selects, config);\n\n    if (typeof gantt._resolve_default_mapping(config) === \"string\") {\n      return startDate;\n    }\n\n    return {\n      start_date: startDate,\n      end_date: _getEndDate(selects, map, startDate)\n    };\n  };\n\n  TimeControl.prototype.focus = function (node) {\n    gantt._focus(node.getElementsByTagName(\"select\")[0]);\n  };\n\n  return TimeControl;\n};","var __extends = require(\"../../../../utils/extends\");\n\nmodule.exports = function (gantt) {\n  var _super = require(\"./base_control\")(gantt);\n\n  function TextareaControl() {\n    var self = _super.apply(this, arguments) || this;\n    return self;\n  }\n\n  __extends(TextareaControl, _super);\n\n  TextareaControl.prototype.render = function (sns) {\n    var height = (sns.height || \"130\") + \"px\";\n    return \"<div class='gantt_cal_ltext' style='height:\" + height + \";'><textarea></textarea></div>\";\n  };\n\n  TextareaControl.prototype.set_value = function (node, value) {\n    gantt.form_blocks.textarea._get_input(node).value = value || \"\";\n  };\n\n  TextareaControl.prototype.get_value = function (node) {\n    return gantt.form_blocks.textarea._get_input(node).value;\n  };\n\n  TextareaControl.prototype.focus = function (node) {\n    var a = gantt.form_blocks.textarea._get_input(node);\n\n    gantt._focus(a, true);\n  };\n\n  TextareaControl.prototype._get_input = function (node) {\n    return node.querySelector(\"textarea\");\n  };\n\n  return TextareaControl;\n};","var __extends = require(\"../../../../utils/extends\");\n\nmodule.exports = function (gantt) {\n  var _super = require(\"./base_control\")(gantt);\n\n  function TemplateControl() {\n    var self = _super.apply(this, arguments) || this;\n    return self;\n  }\n\n  __extends(TemplateControl, _super);\n\n  TemplateControl.prototype.render = function (sns) {\n    var height = (sns.height || \"30\") + \"px\";\n    return \"<div class='gantt_cal_ltext gantt_cal_template' style='height:\" + height + \";'></div>\";\n  };\n\n  TemplateControl.prototype.set_value = function (node, value) {\n    node.innerHTML = value || \"\";\n  };\n\n  TemplateControl.prototype.get_value = function (node) {\n    return node.innerHTML || \"\";\n  };\n\n  TemplateControl.prototype.focus = function () {};\n\n  return TemplateControl;\n};","function _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nmodule.exports = function (gantt) {\n  var domHelpers = require(\"../utils/dom_helpers\");\n\n  var helpers = require(\"../../../utils/helpers\");\n\n  var TemplateControl = require(\"./controls/template_control\")(gantt);\n\n  var TextareaControl = require(\"./controls/textarea_control\")(gantt);\n\n  var TimeControl = require(\"./controls/time_control\")(gantt);\n\n  var SelectControl = require(\"./controls/select_control\")(gantt);\n\n  var CheckboxControl = require(\"./controls/checkbox_control\")(gantt);\n\n  var RadioControl = require(\"./controls/radio_control\")(gantt);\n\n  var DurationControl = require(\"./controls/duration_control\")(gantt);\n\n  var ParentControl = require(\"./controls/parent_control\")(gantt);\n\n  var ResourcesControl = require(\"./controls/resources_control\")(gantt);\n\n  var ConstraintControl = require(\"./controls/constraint_control\")(gantt);\n\n  var TypeselectControl = require(\"./controls/typeselect_control\")(gantt);\n\n  gantt._lightbox_methods = {};\n  gantt._lightbox_template = \"<div class='gantt_cal_ltitle'><span class='gantt_mark'>&nbsp;</span><span class='gantt_time'></span><span class='gantt_title'></span></div><div class='gantt_cal_larea'></div>\"; // GS-1952. Attaching the lightbox to the BODY element is not considered secure.\n  // Attach it to Gantt container for Salesforce and other secure environments\n\n  gantt._lightbox_root = gantt.$root;\n\n  function setParentNode() {\n    var cspEnvironment = gantt.config.csp === true;\n    var salesforceEnvironment = !!window[\"Sfdc\"] || !!window[\"$A\"] || window[\"Aura\"] || '$shadowResolver$' in document.body;\n\n    if (cspEnvironment || salesforceEnvironment) {\n      gantt._lightbox_root = gantt.$root;\n    } else {\n      gantt._lightbox_root = document.body;\n    }\n  } //TODO: gantt._lightbox_id is changed from data.js and accessed from autoscheduling, check if it can be removed from gantt object\n\n\n  var state = gantt.$services.getService(\"state\");\n  state.registerProvider(\"lightbox\", function () {\n    return {\n      lightbox: gantt._lightbox_id\n    };\n  });\n\n  gantt.showLightbox = function (id) {\n    if (!this.callEvent(\"onBeforeLightbox\", [id])) return;\n    var task = this.getTask(id);\n    var box = this.getLightbox(this.getTaskType(task.type));\n\n    this._center_lightbox(box);\n\n    this.showCover();\n\n    this._fill_lightbox(id, box);\n\n    this._waiAria.lightboxVisibleAttr(box);\n\n    this.callEvent(\"onLightbox\", [id]);\n  };\n\n  function _is_chart_visible(gantt) {\n    var timeline = gantt.$ui.getView(\"timeline\");\n\n    if (timeline && timeline.isVisible()) {\n      return true;\n    } else {\n      return false;\n    }\n  }\n\n  gantt._get_timepicker_step = function () {\n    if (this.config.round_dnd_dates) {\n      var step;\n\n      if (_is_chart_visible(this)) {\n        var scale = gantt.getScale();\n        step = helpers.getSecondsInUnit(scale.unit) * scale.step / 60; //timepicker step is measured in minutes\n      }\n\n      if (!step || step >= 60 * 24) {\n        step = this.config.time_step;\n      }\n\n      return step;\n    }\n\n    return this.config.time_step;\n  };\n\n  gantt.getLabel = function (property, key) {\n    var sections = this._get_typed_lightbox_config();\n\n    for (var i = 0; i < sections.length; i++) {\n      if (sections[i].map_to == property) {\n        var options = sections[i].options;\n\n        for (var j = 0; j < options.length; j++) {\n          if (options[j].key == key) {\n            return options[j].label;\n          }\n        }\n      }\n    }\n\n    return \"\";\n  };\n\n  gantt.updateCollection = function (list_name, collection) {\n    collection = collection.slice(0);\n    var list = gantt.serverList(list_name);\n    if (!list) return false;\n    list.splice(0, list.length);\n    list.push.apply(list, collection || []);\n    gantt.resetLightbox();\n  };\n\n  gantt.getLightboxType = function () {\n    return this.getTaskType(this._lightbox_type);\n  };\n\n  gantt.getLightbox = function (type) {\n    var lightboxDiv;\n    var fullWidth;\n    var html;\n    var sns;\n    var ds;\n    var classNames = \"\";\n    setParentNode();\n    if (type === undefined) type = this.getLightboxType();\n\n    if (!this._lightbox || this.getLightboxType() != this.getTaskType(type)) {\n      this._lightbox_type = this.getTaskType(type);\n      lightboxDiv = document.createElement(\"div\");\n      classNames = \"gantt_cal_light\";\n      fullWidth = this._is_lightbox_timepicker();\n      if (gantt.config.wide_form || fullWidth) classNames += \" gantt_cal_light_wide\";\n\n      if (fullWidth) {\n        gantt.config.wide_form = true;\n        classNames += \" gantt_cal_light_full\";\n      }\n\n      lightboxDiv.className = classNames;\n      lightboxDiv.style.visibility = \"hidden\";\n      html = this._lightbox_template;\n      html += getHtmlButtons(this.config.buttons_left);\n      html += getHtmlButtons(this.config.buttons_right, true);\n      lightboxDiv.innerHTML = html;\n\n      gantt._waiAria.lightboxAttr(lightboxDiv);\n\n      if (gantt.config.drag_lightbox) {\n        lightboxDiv.firstChild.onmousedown = gantt._ready_to_dnd;\n\n        lightboxDiv.firstChild.onselectstart = function () {\n          return false;\n        };\n\n        lightboxDiv.firstChild.style.cursor = \"pointer\";\n\n        gantt._init_dnd_events();\n      } // GS-1428: If there is lightbox node, we need to remove it from the DOM\n\n\n      if (this._lightbox) {\n        this.resetLightbox();\n      }\n\n      gantt._lightbox_root.insertBefore(lightboxDiv, gantt._lightbox_root.firstChild);\n\n      this._lightbox = lightboxDiv;\n      sns = this._get_typed_lightbox_config(type);\n      html = this._render_sections(sns);\n      ds = lightboxDiv.querySelector(\"div.gantt_cal_larea\"); //GS-1131. If gantt_cal_larea is displayed, Firefox renders buttons incorrectly;\n\n      var backup_overflow = ds.style.overflow;\n      ds.style.overflow = 'hidden';\n      ds.innerHTML = html;\n      bindLabelsToInputs(sns); //sizes\n\n      this.resizeLightbox();\n      ds.style.overflow = backup_overflow;\n\n      this._init_lightbox_events(this);\n\n      lightboxDiv.style.display = \"none\";\n      lightboxDiv.style.visibility = \"visible\";\n    }\n\n    return this._lightbox;\n  };\n\n  gantt._render_sections = function (sns) {\n    var html = \"\";\n\n    for (var i = 0; i < sns.length; i++) {\n      var block = this.form_blocks[sns[i].type];\n      if (!block) continue; //ignore incorrect blocks\n\n      sns[i].id = \"area_\" + this.uid();\n      var display = sns[i].hidden ? \" style='display:none'\" : \"\";\n      var button = \"\";\n\n      if (sns[i].button) {\n        button = \"<div class='gantt_custom_button' data-index='\" + i + \"'><div class='gantt_custom_button_\" + sns[i].button + \"'></div><div class='gantt_custom_button_label'>\" + this.locale.labels[\"button_\" + sns[i].button] + \"</div></div>\";\n      }\n\n      if (this.config.wide_form) {\n        html += \"<div class='gantt_wrap_section' \" + display + \">\";\n      }\n\n      html += \"<div id='\" + sns[i].id + \"' class='gantt_cal_lsection'><label>\" + button + this.locale.labels[\"section_\" + sns[i].name] + \"</label></div>\" + block.render.call(this, sns[i]);\n      html += \"</div>\";\n    }\n\n    return html;\n  };\n\n  gantt.resizeLightbox = function () {\n    if (!this._lightbox) return;\n\n    var con = this._lightbox.querySelector(\".gantt_cal_larea\");\n\n    con.style.height = \"0px\";\n    con.style.height = con.scrollHeight + \"px\";\n    this._lightbox.style.height = con.scrollHeight + this.config.lightbox_additional_height + \"px\";\n    con.style.height = con.scrollHeight + \"px\"; //it is incredible , how ugly IE can be\n  };\n\n  gantt._center_lightbox = function (box) {\n    if (box) {\n      box.style.display = \"block\";\n      var scroll_top = window.pageYOffset || gantt._lightbox_root.scrollTop || document.documentElement.scrollTop;\n      var scroll_left = window.pageXOffset || gantt._lightbox_root.scrollLeft || document.documentElement.scrollLeft;\n      var view_height = window.innerHeight || document.documentElement.clientHeight;\n      if (scroll_top) // if vertical scroll on window\n        box.style.top = Math.round(scroll_top + Math.max((view_height - box.offsetHeight) / 2, 0)) + \"px\";else // vertical scroll on body\n        box.style.top = Math.round(Math.max((view_height - box.offsetHeight) / 2, 0) + 9) + \"px\"; // +9 for compatibility with auto tests\n      // not quite accurate but used for compatibility reasons\n\n      if (document.documentElement.scrollWidth > gantt._lightbox_root.offsetWidth) // if horizontal scroll on the window\n        box.style.left = Math.round(scroll_left + (gantt._lightbox_root.offsetWidth - box.offsetWidth) / 2) + \"px\";else // horizontal scroll on the body\n        box.style.left = Math.round((gantt._lightbox_root.offsetWidth - box.offsetWidth) / 2) + \"px\";\n    }\n  };\n\n  gantt.showCover = function () {\n    if (this._cover) return;\n    this._cover = document.createElement(\"DIV\");\n    this._cover.className = \"gantt_cal_cover\";\n    var rootElement = gantt._lightbox_root || gantt.$root;\n    rootElement.appendChild(this._cover);\n  };\n\n  gantt.event(window, \"deviceorientation\", function () {\n    if (gantt.getState().lightbox) {\n      gantt._center_lightbox(gantt.getLightbox());\n    }\n  });\n\n  gantt._init_lightbox_events = function () {\n    gantt.lightbox_events = {};\n\n    gantt.lightbox_events.gantt_save_btn = function () {\n      gantt._save_lightbox();\n    };\n\n    gantt.lightbox_events.gantt_delete_btn = function () {\n      gantt._lightbox_new_type = null;\n      if (!gantt.callEvent(\"onLightboxDelete\", [gantt._lightbox_id])) return;\n\n      if (gantt.isTaskExists(gantt._lightbox_id)) {\n        gantt.$click.buttons[\"delete\"](gantt._lightbox_id);\n      } else {\n        gantt.hideLightbox();\n      }\n    };\n\n    gantt.lightbox_events.gantt_cancel_btn = function () {\n      gantt._cancel_lightbox();\n    };\n\n    gantt.lightbox_events[\"default\"] = function (e, src) {\n      if (src.getAttribute(\"data-dhx-button\")) {\n        gantt.callEvent(\"onLightboxButton\", [src.className, src, e]);\n      } else {\n        var index, block, sec;\n        var className = domHelpers.getClassName(src);\n\n        if (className.indexOf(\"gantt_custom_button\") != -1) {\n          if (className.indexOf(\"gantt_custom_button_\") != -1) {\n            index = src.parentNode.getAttribute(\"data-index\");\n            sec = src;\n\n            while (sec && domHelpers.getClassName(sec).indexOf(\"gantt_cal_lsection\") == -1) {\n              sec = sec.parentNode;\n            }\n          } else {\n            index = src.getAttribute(\"data-index\");\n            sec = src.parentNode;\n            src = src.firstChild;\n          }\n        }\n\n        var sections = gantt._get_typed_lightbox_config();\n\n        if (index) {\n          index = index * 1;\n          block = gantt.form_blocks[sections[index * 1].type];\n          block.button_click(index, src, sec, sec.nextSibling);\n        }\n      }\n    };\n\n    this.event(gantt.getLightbox(), \"click\", function (e) {\n      e = e || window.event;\n      var src = domHelpers.getTargetNode(e);\n      var className = domHelpers.getClassName(src);\n\n      if (!className) {\n        src = src.previousSibling;\n        className = domHelpers.getClassName(src);\n      }\n\n      if (src && className && className.indexOf(\"gantt_btn_set\") === 0) {\n        src = src.firstChild;\n        className = domHelpers.getClassName(src);\n      }\n\n      if (src && className) {\n        var func = gantt.defined(gantt.lightbox_events[src.className]) ? gantt.lightbox_events[src.className] : gantt.lightbox_events[\"default\"];\n        return func(e, src);\n      }\n\n      return false;\n    });\n\n    gantt.getLightbox().onkeydown = function (e) {\n      var event = e || window.event;\n      var target = e.target || e.srcElement;\n      var buttonTarget = domHelpers.getClassName(target).indexOf(\"gantt_btn_set\") > -1;\n\n      switch ((e || event).keyCode) {\n        case gantt.constants.KEY_CODES.SPACE:\n          {\n            if ((e || event).shiftKey) return;\n\n            if (buttonTarget && target.click) {\n              target.click();\n            }\n\n            break;\n          }\n\n        case gantt.keys.edit_save:\n          if ((e || event).shiftKey) return;\n\n          if (buttonTarget && target.click) {\n            target.click();\n          } else {\n            gantt._save_lightbox();\n          }\n\n          break;\n\n        case gantt.keys.edit_cancel:\n          gantt._cancel_lightbox();\n\n          break;\n\n        default:\n          break;\n      }\n    };\n  };\n\n  gantt._cancel_lightbox = function () {\n    var task = this.getLightboxValues();\n    this.callEvent(\"onLightboxCancel\", [this._lightbox_id, task.$new]);\n\n    if (gantt.isTaskExists(task.id) && task.$new) {\n      this.silent(function () {\n        gantt.$data.tasksStore.removeItem(task.id);\n\n        gantt._update_flags(task.id, null);\n      });\n      this.refreshData();\n    }\n\n    this.hideLightbox();\n  };\n\n  gantt._save_lightbox = function () {\n    var task = this.getLightboxValues();\n    if (!this.callEvent(\"onLightboxSave\", [this._lightbox_id, task, !!task.$new])) return; // GS-2170. Do not recalculate the indexes and dates of other tasks\n    // as they will be recalculated in the `refreshData`\n\n    gantt.$data.tasksStore._skipTaskRecalculation = \"lightbox\";\n\n    if (task.$new) {\n      delete task.$new;\n      this.addTask(task, task.parent, this.getTaskIndex(task.id));\n    } else if (this.isTaskExists(task.id)) {\n      this.mixin(this.getTask(task.id), task, true);\n      this.refreshTask(task.id);\n      this.updateTask(task.id);\n    }\n\n    gantt.$data.tasksStore._skipTaskRecalculation = false;\n    this.refreshData(); // TODO: do we need any blockable events here to prevent closing lightbox?\n\n    this.hideLightbox();\n  };\n\n  gantt._resolve_default_mapping = function (section) {\n    var mapping = section.map_to;\n    var time_controls = {\n      \"time\": true,\n      \"time_optional\": true,\n      \"duration\": true,\n      \"duration_optional\": true\n    };\n\n    if (time_controls[section.type]) {\n      if (section.map_to == \"auto\") {\n        mapping = {\n          start_date: \"start_date\",\n          end_date: \"end_date\",\n          duration: \"duration\"\n        };\n      } else if (typeof section.map_to === \"string\") {\n        mapping = {\n          start_date: section.map_to\n        };\n      }\n    } else if (section.type === \"constraint\") {\n      if (!section.map_to || typeof section.map_to === \"string\") {\n        mapping = {\n          constraint_type: \"constraint_type\",\n          constraint_date: \"constraint_date\"\n        };\n      }\n    }\n\n    return mapping;\n  };\n\n  gantt.getLightboxValues = function () {\n    var task = {};\n\n    if (gantt.isTaskExists(this._lightbox_id)) {\n      task = this.mixin({}, this.getTask(this._lightbox_id));\n    }\n\n    var sns = this._get_typed_lightbox_config();\n\n    for (var i = 0; i < sns.length; i++) {\n      var node = gantt._lightbox_root.querySelector(\"#\" + sns[i].id);\n\n      node = node ? node.nextSibling : node;\n      var block = this.form_blocks[sns[i].type];\n      if (!block) continue;\n      var res = block.get_value.call(this, node, task, sns[i]);\n\n      var map_to = gantt._resolve_default_mapping(sns[i]);\n\n      if (typeof map_to == \"string\" && map_to != \"auto\") {\n        task[map_to] = res;\n      } else if (_typeof(map_to) == \"object\") {\n        for (var property in map_to) {\n          if (map_to[property]) task[map_to[property]] = res[property];\n        }\n      }\n    } // GS-1282 We need to preserve the task type even if the lightbox doesn't have the typeselect section\n\n\n    if (gantt._lightbox_new_type == \"task\") {\n      task.type = gantt.config.types.task;\n      gantt._lightbox_new_type = null;\n    }\n\n    return task;\n  };\n\n  gantt.hideLightbox = function () {\n    var box = this.getLightbox();\n    if (box) box.style.display = \"none\";\n\n    this._waiAria.lightboxHiddenAttr(box);\n\n    this._lightbox_id = null;\n    this.hideCover();\n    this.callEvent(\"onAfterLightbox\", []);\n  };\n\n  gantt.hideCover = function () {\n    if (this._cover) this._cover.parentNode.removeChild(this._cover);\n    this._cover = null;\n  };\n\n  gantt.resetLightbox = function () {\n    if (gantt._lightbox && !gantt._custom_lightbox) gantt._lightbox.parentNode.removeChild(gantt._lightbox);\n    gantt._lightbox = null;\n    gantt.hideCover();\n  };\n\n  gantt._set_lightbox_values = function (data, box) {\n    var task = data;\n    var s = box.getElementsByTagName(\"span\");\n    var lightboxHeader = [];\n\n    if (gantt.templates.lightbox_header) {\n      lightboxHeader.push(\"\");\n      lightboxHeader.push(gantt.templates.lightbox_header(task.start_date, task.end_date, task));\n      s[1].innerHTML = \"\";\n      s[2].innerHTML = gantt.templates.lightbox_header(task.start_date, task.end_date, task);\n    } else {\n      lightboxHeader.push(this.templates.task_time(task.start_date, task.end_date, task));\n      lightboxHeader.push(String(this.templates.task_text(task.start_date, task.end_date, task) || \"\").substr(0, 70)); //IE6 fix\n\n      s[1].innerHTML = this.templates.task_time(task.start_date, task.end_date, task);\n      s[2].innerHTML = String(this.templates.task_text(task.start_date, task.end_date, task) || \"\").substr(0, 70); //IE6 fix\n    }\n\n    s[1].innerHTML = lightboxHeader[0];\n    s[2].innerHTML = lightboxHeader[1];\n\n    gantt._waiAria.lightboxHeader(box, lightboxHeader.join(\" \"));\n\n    var sns = this._get_typed_lightbox_config(this.getLightboxType());\n\n    for (var i = 0; i < sns.length; i++) {\n      var section = sns[i];\n\n      if (!this.form_blocks[section.type]) {\n        continue; //skip incorrect sections, same check is done during rendering\n      }\n\n      var node = gantt._lightbox_root.querySelector(\"#\" + section.id).nextSibling;\n\n      var block = this.form_blocks[section.type];\n\n      var map_to = gantt._resolve_default_mapping(sns[i]);\n\n      var value = this.defined(task[map_to]) ? task[map_to] : section.default_value;\n      block.set_value.call(gantt, node, value, task, section);\n      if (section.focus) block.focus.call(gantt, node);\n    }\n\n    if (gantt.isTaskExists(data.id)) {\n      gantt._lightbox_id = data.id;\n    }\n  };\n\n  gantt._fill_lightbox = function (id, box) {\n    var task = this.getTask(id);\n\n    this._set_lightbox_values(task, box);\n  };\n\n  gantt.getLightboxSection = function (name) {\n    var config = this._get_typed_lightbox_config();\n\n    var i = 0;\n\n    for (i; i < config.length; i++) {\n      if (config[i].name == name) break;\n    }\n\n    var section = config[i];\n    if (!section) return null;\n    if (!this._lightbox) this.getLightbox();\n\n    var header = gantt._lightbox_root.querySelector(\"#\" + section.id);\n\n    var node = header.nextSibling;\n    var result = {\n      section: section,\n      header: header,\n      node: node,\n      getValue: function getValue(ev) {\n        return gantt.form_blocks[section.type].get_value.call(gantt, node, ev || {}, section);\n      },\n      setValue: function setValue(value, ev) {\n        return gantt.form_blocks[section.type].set_value.call(gantt, node, value, ev || {}, section);\n      }\n    };\n    var handler = this._lightbox_methods[\"get_\" + section.type + \"_control\"];\n    return handler ? handler(result) : result;\n  };\n\n  gantt._lightbox_methods.get_template_control = function (result) {\n    result.control = result.node;\n    return result;\n  };\n\n  gantt._lightbox_methods.get_select_control = function (result) {\n    result.control = result.node.getElementsByTagName(\"select\")[0];\n    return result;\n  };\n\n  gantt._lightbox_methods.get_textarea_control = function (result) {\n    result.control = result.node.getElementsByTagName(\"textarea\")[0];\n    return result;\n  };\n\n  gantt._lightbox_methods.get_time_control = function (result) {\n    result.control = result.node.getElementsByTagName(\"select\"); // array\n\n    return result;\n  };\n\n  gantt._init_dnd_events = function () {\n    var eventElement = gantt._lightbox_root;\n    this.event(eventElement, \"mousemove\", gantt._move_while_dnd);\n    this.event(eventElement, \"mouseup\", gantt._finish_dnd); // GS-1952: In Salesforce environment, the lightbox is attached to the Gantt container. \n    // So when Gantt is reinitialized, the events are no longer attached to the Gantt container.\n    // gantt._init_dnd_events = function () {\n    // };\n  };\n\n  gantt._move_while_dnd = function (event) {\n    if (gantt._dnd_start_lb) {\n      if (!document.gantt_unselectable) {\n        gantt._lightbox_root.className += \" gantt_unselectable\";\n        document.gantt_unselectable = true;\n      }\n\n      var lb = gantt.getLightbox();\n      var now = [event.pageX, event.pageY];\n      lb.style.top = gantt._lb_start[1] + now[1] - gantt._dnd_start_lb[1] + \"px\";\n      lb.style.left = gantt._lb_start[0] + now[0] - gantt._dnd_start_lb[0] + \"px\";\n    }\n  };\n\n  gantt._ready_to_dnd = function (event) {\n    var lb = gantt.getLightbox();\n    gantt._lb_start = [parseInt(lb.style.left, 10), parseInt(lb.style.top, 10)];\n    gantt._dnd_start_lb = [event.pageX, event.pageY];\n  };\n\n  gantt._finish_dnd = function () {\n    if (gantt._lb_start) {\n      gantt._lb_start = gantt._dnd_start_lb = false;\n      gantt._lightbox_root.className = gantt._lightbox_root.className.replace(\" gantt_unselectable\", \"\");\n      document.gantt_unselectable = false;\n    }\n  };\n\n  gantt._focus = function (node, select) {\n    if (node && node.focus) {\n      if (gantt.config.touch) {//do not focus editor, to prevent auto-zoom\n      } else {\n        try {\n          if (select && node.select) node.select();\n          node.focus();\n        } catch (e) {// silent errors\n        }\n      }\n    }\n  };\n\n  gantt.form_blocks = {\n    getTimePicker: function getTimePicker(sns, hidden) {\n      var html = \"\";\n      var cfg = this.config;\n      var i;\n      var options;\n      var ariaAttrs;\n      var readonly;\n      var display;\n      var settings = {\n        first: 0,\n        last: 24 * 60,\n        date: this.date.date_part(new Date(gantt._min_date.valueOf())),\n        timeFormat: getTimeFormat(sns)\n      }; // map: default order => real one\n\n      sns._time_format_order = {\n        size: 0\n      };\n\n      if (gantt.config.limit_time_select) {\n        settings.first = 60 * cfg.first_hour;\n        settings.last = 60 * cfg.last_hour + 1;\n        settings.date.setHours(cfg.first_hour);\n      }\n\n      for (i = 0; i < settings.timeFormat.length; i++) {\n        // adding spaces between selects\n        if (i > 0) {\n          html += \" \";\n        }\n\n        options = getHtmlTimePickerOptions(sns, i, settings);\n\n        if (options) {\n          ariaAttrs = gantt._waiAria.lightboxSelectAttrString(settings.timeFormat[i]);\n          readonly = sns.readonly ? \"disabled='disabled'\" : \"\";\n          display = hidden ? \" style='display:none' \" : \"\";\n          html += \"<select \" + readonly + display + ariaAttrs + \">\" + options + \"</select>\";\n        }\n      }\n\n      return html;\n    },\n    getTimePickerValue: function getTimePickerValue(selects, config, offset) {\n      var map = config._time_format_order;\n      var needSetTime = gantt.defined(map[3]);\n      var time;\n      var hours = 0;\n      var minutes = 0;\n      var mapOffset = offset || 0;\n\n      if (needSetTime) {\n        time = parseInt(selects[map[3] + mapOffset].value, 10);\n        hours = Math.floor(time / 60);\n        minutes = time % 60;\n      }\n\n      return new Date(selects[map[2] + mapOffset].value, selects[map[1] + mapOffset].value, selects[map[0] + mapOffset].value, hours, minutes);\n    },\n    _fill_lightbox_select: function _fill_lightbox_select(s, i, d, map) {\n      s[i + map[0]].value = d.getDate();\n      s[i + map[1]].value = d.getMonth();\n      s[i + map[2]].value = d.getFullYear();\n\n      if (gantt.defined(map[3])) {\n        var v = d.getHours() * 60 + d.getMinutes();\n        v = Math.round(v / gantt._get_timepicker_step()) * gantt._get_timepicker_step();\n        var input = s[i + map[3]];\n        input.value = v; //in case option not shown\n\n        input.setAttribute(\"data-value\", v);\n      }\n    },\n    template: new TemplateControl(),\n    textarea: new TextareaControl(),\n    select: new SelectControl(),\n    time: new TimeControl(),\n    duration: new DurationControl(),\n    parent: new ParentControl(),\n    radio: new RadioControl(),\n    checkbox: new CheckboxControl(),\n    resources: new ResourcesControl(),\n    constraint: new ConstraintControl(),\n    typeselect: new TypeselectControl()\n  };\n\n  gantt._is_lightbox_timepicker = function () {\n    var s = this._get_typed_lightbox_config();\n\n    for (var i = 0; i < s.length; i++) {\n      if (s[i].name == \"time\" && s[i].type == \"time\") return true;\n    }\n\n    return false;\n  };\n\n  gantt._simple_confirm = function (message, title, callback, ok) {\n    if (!message) return callback();\n    var opts = {\n      text: message\n    };\n    if (title) opts.title = title;\n\n    if (ok) {\n      opts.ok = ok;\n    }\n\n    if (callback) {\n      opts.callback = function (result) {\n        if (result) callback();\n      };\n    }\n\n    gantt.confirm(opts);\n  };\n\n  function _get_type_name(type_value) {\n    for (var i in this.config.types) {\n      if (this.config.types[i] == type_value) {\n        return i;\n      }\n    }\n\n    return \"task\";\n  }\n\n  gantt._get_typed_lightbox_config = function (type) {\n    if (type === undefined) {\n      type = this.getLightboxType();\n    }\n\n    var field = _get_type_name.call(this, type);\n\n    if (gantt.config.lightbox[field + \"_sections\"]) {\n      return gantt.config.lightbox[field + \"_sections\"];\n    } else {\n      return gantt.config.lightbox.sections;\n    }\n  };\n\n  gantt._silent_redraw_lightbox = function (type) {\n    var oldType = this.getLightboxType();\n\n    if (this.getState().lightbox) {\n      var taskId = this.getState().lightbox;\n      var formData = this.getLightboxValues(),\n          task = this.copy(this.getTask(taskId));\n      this.resetLightbox();\n      var updTask = this.mixin(task, formData, true);\n      var box = this.getLightbox(type ? type : undefined);\n\n      this._center_lightbox(this.getLightbox());\n\n      this._set_lightbox_values(updTask, box);\n\n      this.showCover();\n    } else {\n      this.resetLightbox();\n      this.getLightbox(type ? type : undefined);\n    }\n\n    this.callEvent(\"onLightboxChange\", [oldType, this.getLightboxType()]);\n  };\n\n  function bindLabelsToInputs(sns) {\n    var section;\n    var label;\n    var labelBlock;\n    var inputBlock;\n    var input;\n    var i;\n\n    for (i = 0; i < sns.length; i++) {\n      section = sns[i];\n      labelBlock = gantt._lightbox_root.querySelector(\"#\" + section.id);\n      if (!section.id || !labelBlock) continue;\n      label = labelBlock.querySelector(\"label\");\n      inputBlock = labelBlock.nextSibling;\n      if (!inputBlock) continue;\n      input = inputBlock.querySelector(\"input, select, textarea\");\n\n      if (input) {\n        input.id = input.id || \"input_\" + gantt.uid();\n        section.inputId = input.id;\n        label.setAttribute(\"for\", section.inputId);\n      }\n    }\n  }\n\n  function getHtmlButtons(buttons, floatRight) {\n    var button;\n    var ariaAttr;\n    var html = \"\";\n    var i;\n\n    for (i = 0; i < buttons.length; i++) {\n      // needed to migrate from 'dhx_something' to 'gantt_something' naming in a lightbox\n      button = gantt.config._migrate_buttons[buttons[i]] ? gantt.config._migrate_buttons[buttons[i]] : buttons[i];\n      ariaAttr = gantt._waiAria.lightboxButtonAttrString(button);\n      html += \"<div \" + ariaAttr + \" class='gantt_btn_set gantt_left_btn_set \" + button + \"_set'\" + (floatRight ? \" style='float:right;'\" : \"\") + \"><div dhx_button='1' data-dhx-button='1' class='\" + button + \"'></div><div>\" + gantt.locale.labels[button] + \"</div></div>\";\n    }\n\n    return html;\n  }\n\n  function getTimeFormat(sns) {\n    var scale;\n    var unit;\n    var result;\n    if (sns.time_format) return sns.time_format; // default order\n\n    result = [\"%d\", \"%m\", \"%Y\"];\n    scale = gantt.getScale();\n    unit = scale ? scale.unit : gantt.config.duration_unit;\n\n    if (helpers.getSecondsInUnit(unit) < helpers.getSecondsInUnit(\"day\")) {\n      result.push(\"%H:%i\");\n    }\n\n    return result;\n  }\n\n  function getHtmlTimePickerOptions(sns, index, settings) {\n    var range;\n    var offset;\n    var start_year;\n    var end_year;\n    var i;\n    var time;\n    var diff;\n    var tdate;\n    var html = \"\";\n\n    switch (settings.timeFormat[index]) {\n      case \"%Y\":\n        sns._time_format_order[2] = index;\n        sns._time_format_order.size++; //year\n\n        if (sns.year_range) {\n          if (!isNaN(sns.year_range)) {\n            range = sns.year_range;\n          } else if (sns.year_range.push) {\n            // if\n            start_year = sns.year_range[0];\n            end_year = sns.year_range[1];\n          }\n        }\n\n        range = range || 10;\n        offset = offset || Math.floor(range / 2);\n        start_year = start_year || settings.date.getFullYear() - offset;\n        end_year = end_year || gantt.getState().max_date.getFullYear() + offset;\n\n        for (i = start_year; i < end_year; i++) {\n          html += \"<option value='\" + i + \"'>\" + i + \"</option>\";\n        }\n\n        break;\n\n      case \"%m\":\n        sns._time_format_order[1] = index;\n        sns._time_format_order.size++; //month\n\n        for (i = 0; i < 12; i++) {\n          html += \"<option value='\" + i + \"'>\" + gantt.locale.date.month_full[i] + \"</option>\";\n        }\n\n        break;\n\n      case \"%d\":\n        sns._time_format_order[0] = index;\n        sns._time_format_order.size++; //days\n\n        for (i = 1; i < 32; i++) {\n          html += \"<option value='\" + i + \"'>\" + i + \"</option>\";\n        }\n\n        break;\n\n      case \"%H:%i\":\n        //  var last = 24*60, first = 0;\n        sns._time_format_order[3] = index;\n        sns._time_format_order.size++; //hours\n\n        i = settings.first;\n        tdate = settings.date.getDate();\n        sns._time_values = [];\n\n        while (i < settings.last) {\n          time = gantt.templates.time_picker(settings.date);\n          html += \"<option value='\" + i + \"'>\" + time + \"</option>\";\n\n          sns._time_values.push(i);\n\n          settings.date.setTime(settings.date.valueOf() + gantt._get_timepicker_step() * 60 * 1000);\n          diff = settings.date.getDate() != tdate ? 1 : 0; // moved or not to the next day\n\n          i = diff * 24 * 60 + settings.date.getHours() * 60 + settings.date.getMinutes();\n        }\n\n        break;\n\n      default:\n        break;\n    }\n\n    return html;\n  }\n};","module.exports = function (gantt) {\n  gantt.config.touch_drag = 500; //nearly immediate dnd\n\n  gantt.config.touch = true;\n  gantt.config.touch_feedback = true;\n  gantt.config.touch_feedback_duration = 1;\n  gantt._prevent_touch_scroll = false;\n\n  gantt._touch_feedback = function () {\n    if (gantt.config.touch_feedback) {\n      if (navigator.vibrate) navigator.vibrate(gantt.config.touch_feedback_duration);\n    }\n  };\n\n  gantt.attachEvent(\"onGanttReady\", gantt.bind(function () {\n    if (this.config.touch != \"force\") this.config.touch = this.config.touch && (navigator.userAgent.indexOf(\"Mobile\") != -1 || navigator.userAgent.indexOf(\"iPad\") != -1 || navigator.userAgent.indexOf(\"Android\") != -1 || navigator.userAgent.indexOf(\"Touch\") != -1) || navigator.platform === 'MacIntel' && navigator.maxTouchPoints > 1;\n\n    if (this.config.touch) {\n      var touchEventsSupported = true;\n\n      try {\n        document.createEvent(\"TouchEvent\");\n      } catch (e) {\n        touchEventsSupported = false;\n      }\n\n      if (touchEventsSupported) {\n        this._touch_events([\"touchmove\", \"touchstart\", \"touchend\"], function (ev) {\n          if (ev.touches && ev.touches.length > 1) return null;\n          if (ev.touches[0]) return {\n            target: ev.target,\n            pageX: ev.touches[0].pageX,\n            pageY: ev.touches[0].pageY,\n            clientX: ev.touches[0].clientX,\n            clientY: ev.touches[0].clientY\n          };else return ev;\n        }, function () {\n          return false;\n        });\n      } else if (window.navigator.pointerEnabled) {\n        this._touch_events([\"pointermove\", \"pointerdown\", \"pointerup\"], function (ev) {\n          if (ev.pointerType == \"mouse\") return null;\n          return ev;\n        }, function (ev) {\n          return !ev || ev.pointerType == \"mouse\";\n        });\n      } else if (window.navigator.msPointerEnabled) {\n        this._touch_events([\"MSPointerMove\", \"MSPointerDown\", \"MSPointerUp\"], function (ev) {\n          if (ev.pointerType == ev.MSPOINTER_TYPE_MOUSE) return null;\n          return ev;\n        }, function (ev) {\n          return !ev || ev.pointerType == ev.MSPOINTER_TYPE_MOUSE;\n        });\n      }\n    }\n  }, gantt));\n\n  function findTargetView(event) {\n    var allViews = gantt.$layout.getCellsByType(\"viewCell\");\n\n    for (var i = 0; i < allViews.length; i++) {\n      var box = allViews[i].$view.getBoundingClientRect();\n\n      if (event.clientX >= box.left && event.clientX <= box.right && event.clientY <= box.bottom && event.clientY >= box.top) {\n        return allViews[i];\n      }\n    }\n  }\n\n  function getScrollState(view) {\n    var scrollX = view.$config.scrollX ? gantt.$ui.getView(view.$config.scrollX) : null;\n    var scrollY = view.$config.scrollY ? gantt.$ui.getView(view.$config.scrollY) : null;\n    var scrollState = {\n      x: null,\n      y: null\n    };\n\n    if (scrollX) {\n      var state = scrollX.getScrollState();\n\n      if (state.visible) {\n        scrollState.x = scrollX.$view.scrollLeft;\n      }\n    }\n\n    if (scrollY) {\n      var state = scrollY.getScrollState();\n\n      if (state.visible) {\n        scrollState.y = scrollY.$view.scrollTop;\n      }\n    }\n\n    return scrollState;\n  }\n\n  function scrollView(view, left, top) {\n    var scrollX = view.$config.scrollX ? gantt.$ui.getView(view.$config.scrollX) : null;\n    var scrollY = view.$config.scrollY ? gantt.$ui.getView(view.$config.scrollY) : null;\n\n    if (scrollX) {\n      scrollX.scrollTo(left, null);\n    }\n\n    if (scrollY) {\n      scrollY.scrollTo(null, top);\n    }\n  }\n\n  function getTaskDND() {\n    var tasksDnD;\n\n    if (gantt.$ui.getView(\"timeline\")) {\n      tasksDnD = gantt.$ui.getView(\"timeline\")._tasks_dnd;\n    }\n\n    return tasksDnD;\n  }\n\n  var touchHandlers = []; //we can't use native scrolling, as we need to sync momentum between different parts\n  //so we will block native scroll and use the custom one\n  //in future we can add custom momentum\n\n  gantt._touch_events = function (names, accessor, ignore) {\n    //webkit on android need to be handled separately\n    var dblclicktime = 0;\n    var actionMode = false;\n    var scrollMode = false;\n    var actionStart = null;\n    var scrollState;\n    var longTapTimer = null;\n    var currentDndId = null;\n    var dndNodes = [];\n    var targetView = null;\n\n    for (var i = 0; i < touchHandlers.length; i++) {\n      gantt.eventRemove(touchHandlers[i][0], touchHandlers[i][1], touchHandlers[i][2]);\n    }\n\n    touchHandlers = []; //touch move\n\n    touchHandlers.push([gantt.$container, names[0], function (e) {\n      var tasksDnD = getTaskDND();\n      if (ignore(e)) return; //ignore common and scrolling moves\n\n      if (!actionMode) return;\n      if (longTapTimer) clearTimeout(longTapTimer);\n      var source = accessor(e);\n\n      if (tasksDnD && (tasksDnD.drag.id || tasksDnD.drag.start_drag)) {\n        tasksDnD.on_mouse_move(source);\n        if (e.preventDefault) e.preventDefault();\n        e.cancelBubble = true;\n        return false;\n      }\n\n      if (!gantt._prevent_touch_scroll) {\n        if (source && actionStart) {\n          var dx = actionStart.pageX - source.pageX;\n          var dy = actionStart.pageY - source.pageY;\n\n          if (!scrollMode && (Math.abs(dx) > 5 || Math.abs(dy) > 5)) {\n            scrollMode = true; //gantt._touch_scroll_active = scroll_mode = true;\n\n            dblclicktime = 0;\n\n            if (targetView) {\n              scrollState = getScrollState(targetView);\n            } else {\n              scrollState = gantt.getScrollState();\n            }\n          }\n\n          if (scrollMode) {\n            var newScrollState;\n            var scrollX = scrollState.x + dx;\n            var scrollY = scrollState.y + dy;\n\n            if (targetView) {\n              scrollView(targetView, scrollX, scrollY);\n              newScrollState = getScrollState(targetView);\n            } else {\n              gantt.scrollTo(scrollX, scrollY);\n              newScrollState = gantt.getScrollState();\n            }\n\n            if (scrollState.x != newScrollState.x && dy > 2 * dx || scrollState.y != newScrollState.y && dx > 2 * dy) {\n              return block_action(e);\n            }\n          }\n        }\n\n        return block_action(e);\n      }\n\n      return true;\n    }]); //block touch context menu in IE10\n\n    touchHandlers.push([this.$container, \"contextmenu\", function (e) {\n      if (actionMode) return block_action(e);\n    }]); //touch start\n\n    touchHandlers.push([this.$container, names[1], function (e) {\n      // block pull-to-refresh\n      if (document && document.body) {\n        document.body.classList.add(\"gantt_touch_active\");\n      }\n\n      if (ignore(e)) return;\n\n      if (e.touches && e.touches.length > 1) {\n        actionMode = false;\n        return;\n      }\n\n      actionStart = accessor(e);\n      targetView = findTargetView(actionStart);\n\n      if (!gantt._locate_css(actionStart, \"gantt_hor_scroll\") && !gantt._locate_css(actionStart, \"gantt_ver_scroll\")) {\n        actionMode = true;\n      }\n\n      var tasksDnD = getTaskDND(); //long tap\n\n      longTapTimer = setTimeout(function () {\n        var taskId = gantt.locate(actionStart);\n\n        if (tasksDnD && taskId && !gantt._locate_css(actionStart, \"gantt_link_control\") && !gantt._locate_css(actionStart, \"gantt_grid_data\")) {\n          tasksDnD.on_mouse_down(actionStart);\n\n          if (tasksDnD.drag && tasksDnD.drag.start_drag) {\n            cloneTaskRendered(taskId);\n\n            tasksDnD._start_dnd(actionStart);\n\n            gantt._touch_drag = true;\n            gantt.refreshTask(taskId);\n\n            gantt._touch_feedback();\n          }\n        }\n\n        longTapTimer = null;\n      }, gantt.config.touch_drag);\n    }]); //touch end\n\n    touchHandlers.push([this.$container, names[2], function (e) {\n      if (document && document.body) {\n        document.body.classList.remove(\"gantt_touch_active\");\n      }\n\n      if (ignore(e)) return;\n      if (longTapTimer) clearTimeout(longTapTimer);\n      gantt._touch_drag = false;\n      actionMode = false;\n      var source = accessor(e);\n      var tasksDnD = getTaskDND();\n      if (tasksDnD) tasksDnD.on_mouse_up(source);\n\n      if (currentDndId && gantt.isTaskExists(currentDndId)) {\n        gantt.refreshTask(currentDndId);\n\n        if (dndNodes.length) {\n          dndNodes.forEach(function (node) {\n            if (node.parentNode) {\n              node.parentNode.removeChild(node);\n            }\n          });\n\n          gantt._touch_feedback();\n        }\n      } //gantt._touch_scroll_active = action_mode = scroll_mode = false;\n\n\n      actionMode = scrollMode = false;\n      dndNodes = [];\n      currentDndId = null; //dbl-tap handling\n\n      if (actionStart && dblclicktime) {\n        var now = new Date();\n\n        if (now - dblclicktime < 500) {\n          var mouseEvents = gantt.$services.getService(\"mouseEvents\");\n          mouseEvents.onDoubleClick(actionStart);\n          block_action(e);\n        } else dblclicktime = now;\n      } else {\n        dblclicktime = new Date();\n      }\n    }]);\n\n    for (var i = 0; i < touchHandlers.length; i++) {\n      gantt.event(touchHandlers[i][0], touchHandlers[i][1], touchHandlers[i][2]);\n    } //common helper, prevents event\n\n\n    function block_action(e) {\n      if (e && e.preventDefault) {\n        e.preventDefault();\n      }\n\n      e.cancelBubble = true;\n      return false;\n    }\n\n    function cloneTaskRendered(taskId) {\n      var renders = gantt._getTaskLayers();\n\n      var task = gantt.getTask(taskId);\n\n      if (task && gantt.isTaskVisible(taskId)) {\n        currentDndId = taskId;\n\n        for (var i = 0; i < renders.length; i++) {\n          task = renders[i].rendered[taskId];\n\n          if (task && task.getAttribute(gantt.config.task_attribute) && task.getAttribute(gantt.config.task_attribute) == taskId) {\n            var copy = task.cloneNode(true);\n            dndNodes.push(task);\n            renders[i].rendered[taskId] = copy;\n            task.style.display = \"none\";\n            copy.className += \" gantt_drag_move \";\n            task.parentNode.appendChild(copy); //return copy;\n          }\n        }\n      }\n    }\n  };\n};","import * as env from \"../../../utils/env\";\r\nimport * as eventable from \"../../../utils/eventable\";\r\nimport { IScale, TModifierKeys } from \"../../common/config\";\r\n\r\ninterface ITimelineZoomConfig {\r\n\thandler?: (e: Event) => {};\r\n\tstartDate?: Date;\r\n\tendDate?: Date;\r\n\tlevels: IZoomLevel[];\r\n\tactiveLevelIndex?: number;\r\n\twidthStep?: number;\r\n\tminColumnWidth?: number;\r\n\tmaxColumnWidth?: number;\r\n\tuseKey?: \"ctrlKey\" | \"altKey\" | \"shiftKey\";\r\n\ttrigger?: \"wheel\" | null | undefined;\r\n\telement?: Element | (() => Element);\r\n}\r\n\r\nconst USE_KEY = [\"ctrlKey\", \"altKey\", \"shiftKey\", \"metaKey\"];\r\n\r\ninterface IZoomLevel {\r\n\tname?: string;\r\n\tscale_height?: number;\r\n\tmin_column_width: number;\r\n\tscales: IScale[];\r\n}\r\n\r\nconst _defaultScales = [\r\n\t[\r\n\t\t{\r\n\t\t\tunit: \"month\",\r\n\t\t\tdate: \"%M\",\r\n\t\t\tstep: 1\r\n\t\t},\r\n\t\t{\r\n\t\t\tunit: \"day\",\r\n\t\t\tdate: \"%d\",\r\n\t\t\tstep: 1\r\n\t\t}\r\n\t],\r\n\t[\r\n\t\t{\r\n\t\t\tunit: \"day\",\r\n\t\t\tdate: \"%d %M\",\r\n\t\t\tstep: 1\r\n\t\t}\r\n\t],\r\n\t[\r\n\t\t{\r\n\t\t\tunit: \"day\",\r\n\t\t\tdate: \"%d %M\",\r\n\t\t\tstep: 1\r\n\t\t},\r\n\t\t{\r\n\t\t\tunit: \"hour\",\r\n\t\t\tdate: \"%H:00\",\r\n\t\t\tstep: 8\r\n\t\t},\r\n\t],\r\n\t[\r\n\t\t{\r\n\t\t\tunit: \"day\",\r\n\t\t\tdate: \"%d %M\",\r\n\t\t\tstep: 1\r\n\t\t},\r\n\t\t{\r\n\t\t\tunit: \"hour\",\r\n\t\t\tdate: \"%H:00\",\r\n\t\t\tstep: 1\r\n\t\t},\r\n\t],\r\n];\r\n\r\nexport default class TimelineZoom {\r\n\tpublic attachEvent: (eventName: string, handler: () => void) => string;\r\n\tpublic callEvent: (eventName: string, args: any[]) => any;\r\n\tpublic detachEvent: (eventName: string) => any;\r\n\tprotected _initialStartDate: Date;\r\n\tprotected _initialEndDate: Date;\r\n\tprotected _activeLevelIndex: number;\r\n\tprotected _levels: IZoomLevel[];\r\n\tprotected _handler: (e: any) => void;\r\n\tprotected $gantt;\r\n\tprotected _widthStep: number;\r\n\tprotected _minColumnWidth: number;\r\n\tprotected _maxColumnWidth: number;\r\n\tprotected _useKey: TModifierKeys;\r\n\tprotected _visibleDate: Date;\r\n\tprotected _initialized: boolean;\r\n\tprotected _domEvents: any;\r\n\r\n\tconstructor(gantt) {\r\n\t\tthis.$gantt = gantt;\r\n\t\tthis._domEvents = this.$gantt._createDomEventScope();\r\n\t}\r\n\r\n\tpublic init(config: ITimelineZoomConfig) {\r\n\t\t// GS-1354 and GS-1318. If we check the headless mode using the function,\r\n\t\t// it will return false when Gantt is not initialized, but we may want to do it later\r\n\t\tif(this.$gantt.env.isNode){\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tthis._initialStartDate = config.startDate;\r\n\t\tthis._initialEndDate = config.endDate;\r\n\t\tthis._activeLevelIndex = config.activeLevelIndex ? config.activeLevelIndex : 0;\r\n\t\tthis._levels = this._mapScales(config.levels || _defaultScales);\r\n\t\tthis._handler = config.handler || this._defaultHandler;\r\n\t\tthis._minColumnWidth = config.minColumnWidth || 60;\r\n\t\tthis._maxColumnWidth = config.maxColumnWidth || 240;\r\n\t\tthis._widthStep = config.widthStep || 3/8 * config.minColumnWidth;\r\n\t\tthis._useKey = config.useKey;\r\n\r\n\t\tif(!this._initialized){\r\n\t\t\teventable(this);\r\n\t\t\tthis.$gantt.attachEvent(\"onGanttScroll\", () => {\r\n\t\t\t\tthis._getVisibleDate();\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tthis._domEvents.detachAll();\r\n\r\n\t\tif(config.trigger === \"wheel\"){\r\n\t\t\tif(this.$gantt.$root){\r\n\t\t\t\tthis._attachWheelEvent(config);\r\n\t\t\t}else{\r\n\t\t\t\tthis.$gantt.attachEvent(\"onGanttReady\", () => {\r\n\t\t\t\t\tthis._attachWheelEvent(config);\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis._initialized = true;\r\n\t\tthis.setLevel(this._activeLevelIndex);\r\n\t}\r\n\r\n\tpublic zoomIn = () => {\r\n\t\tconst index = this.getCurrentLevel() - 1;\r\n\t\tif(index < 0){\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tthis.setLevel(index);\r\n\t}\r\n\r\n\tpublic zoomOut = () => {\r\n\t\tconst index = this.getCurrentLevel() + 1;\r\n\t\tif(index > this._levels.length - 1){\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tthis.setLevel(index);\r\n\t}\r\n\r\n\tpublic getCurrentLevel = () => {\r\n\t\treturn this._activeLevelIndex;\r\n\t}\r\n\r\n\tpublic getLevels = () => {\r\n\t\treturn this._levels;\r\n\t}\r\n\r\n\tpublic setLevel = (level: number|string) => {\r\n\t\tconst zoomLevel = this._getZoomIndexByName(level);\r\n\r\n\t\tif(zoomLevel === -1){\r\n\t\t\tthis.$gantt.assert(zoomLevel !== -1, \"Invalid zoom level for gantt.ext.zoom.setLevel. \" + level + \" is not an expected value.\");\r\n\t\t}\r\n\t\tthis._setLevel(zoomLevel, 0);\r\n\t}\r\n\r\n\tprotected _getZoomIndexByName = (levelName: number|string) => {\r\n\t\tlet zoomLevel:number = -1;\r\n\t\tif(typeof levelName === \"string\"){\r\n\t\t\tif(!isNaN(Number(levelName)) &&  this._levels[Number(levelName)]){\r\n\t\t\t\tzoomLevel = Number(levelName);\r\n\t\t\t}else{\r\n\t\t\t\tfor(let i = 0; i < this._levels.length; i++){\r\n\t\t\t\t\tif(this._levels[i].name === levelName){\r\n\t\t\t\t\t\tzoomLevel = i;\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\tzoomLevel = levelName;\r\n\t\t}\r\n\t\treturn zoomLevel;\r\n\t}\r\n\r\n\tprotected _mapScales(levels: IScale[][] | any): IZoomLevel[]{\r\n\t\treturn levels.map((l) => {\r\n\t\t\tif(Array.isArray(l)){\r\n\t\t\t\treturn {\r\n\t\t\t\t\tscales: l\r\n\t\t\t\t};\r\n\t\t\t}else{\r\n\t\t\t\treturn l;\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\tprotected _getVisibleDate = () => {\r\n\t\t// GS-1450. Don't try to get the visible date if there is no timeline\r\n\t\tif (!this.$gantt.$task){\r\n\t\t\treturn null;\r\n\t\t}\r\n\t\tconst scrollPos = this.$gantt.getScrollState().x;\r\n\t\tconst viewPort = this.$gantt.$task.offsetWidth;\r\n\t\tthis._visibleDate = this.$gantt.dateFromPos(scrollPos + viewPort/2);\r\n\t}\r\n\r\n\tprotected _setLevel = (level: number, cursorOffset: number) => {\r\n\t\tthis._activeLevelIndex = level;\r\n\r\n\t\tconst gantt = this.$gantt;\r\n\t\tconst nextConfig = gantt.copy(this._levels[this._activeLevelIndex]);\r\n\t\tconst chartConfig = gantt.copy(nextConfig);\r\n\t\tdelete chartConfig.name;\r\n\r\n\t\tgantt.mixin(gantt.config, chartConfig, true);\r\n\r\n\t\tconst isRendered = !!gantt.$root && !!gantt.$task;\r\n\r\n\t\tif(isRendered){\r\n\t\t\tif(cursorOffset){\r\n\t\t\t\tconst cursorDate = this.$gantt.dateFromPos(cursorOffset + this.$gantt.getScrollState().x);\r\n\t\t\t\tthis.$gantt.render();\r\n\t\t\t\tconst newPosition = this.$gantt.posFromDate(cursorDate);\r\n\t\t\t\tthis.$gantt.scrollTo(newPosition - cursorOffset);\r\n\t\t\t}else{\r\n\t\t\t\tconst viewPort = this.$gantt.$task.offsetWidth;\r\n\t\t\t\tif(!this._visibleDate){\r\n\t\t\t\t\tthis._getVisibleDate();\r\n\t\t\t\t}\r\n\t\t\t\tconst middleDate = this._visibleDate;\r\n\t\t\t\tthis.$gantt.render();\r\n\t\t\t\tconst newPosition = this.$gantt.posFromDate(middleDate);\r\n\t\t\t\tthis.$gantt.scrollTo(newPosition - viewPort/2);\r\n\t\t\t}\r\n\r\n\t\t\tthis.callEvent(\"onAfterZoom\", [this._activeLevelIndex, nextConfig]);\r\n\t\t}\r\n\t}\r\n\r\n\tprivate _attachWheelEvent = (config) => {\r\n\t\tconst event = env.isFF ? \"wheel\" : \"mousewheel\";\r\n\t\tlet el: Element;\r\n\t\tif(typeof config.element === \"function\"){\r\n\t\t\tel = config.element();\r\n\t\t}else{\r\n\t\t\tel = config.element as Element;\r\n\t\t}\r\n\t\tif (!el){\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis._domEvents.attach(el, event, this.$gantt.bind(function(e) {\r\n\t\t\tif (this._useKey) {\r\n\t\t\t\tif (USE_KEY.indexOf(this._useKey) < 0) {\r\n\t\t\t\t\treturn false;\r\n\t\t\t\t}\r\n\t\t\t\tif (!e[this._useKey]) {\r\n\t\t\t\t\treturn false;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tif (typeof this._handler === \"function\") {\r\n\t\t\t\tthis._handler.apply(this, [e]);\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t}, this), {passive: false});\r\n\t}\r\n\r\n\tprivate _defaultHandler = (e: any):void => {\r\n\t\tconst timelineOffset = this.$gantt.$task.getBoundingClientRect().x;\r\n\t\tconst cursorOffset = e.clientX - timelineOffset;\r\n\t\tconst wheelY = this.$gantt.env.isFF ? (e.deltaY*-40) : e.wheelDelta;\r\n\t\tlet wheelUp = false;\r\n\t\tif (wheelY > 0) {\r\n\t\t\twheelUp = true;\r\n\t\t}\r\n\t\te.preventDefault();\r\n\t\te.stopPropagation();\r\n\t\tthis._setScaleSettings(wheelUp, cursorOffset);\r\n\t}\r\n\r\n\tprivate _setScaleSettings(wheelUp: boolean, cursorOffset: number) {\r\n\t\tif (wheelUp) {\r\n\t\t\tthis._stepUp(cursorOffset);\r\n\t\t} else {\r\n\t\t\tthis._stepDown(cursorOffset);\r\n\t\t}\r\n\t}\r\n\r\n\tprivate _setScaleDates = () => {\r\n\t\tif(this._initialStartDate && this._initialEndDate){\r\n\t\t\tthis.$gantt.config.start_date = this._initialStartDate;\r\n\t\t\tthis.$gantt.config.end_date = this._initialEndDate;\r\n\t\t}\r\n\t}\r\n\r\n\tprivate _stepUp(cursorOffset) {\r\n\t\tif (this._activeLevelIndex >= this._levels.length - 1) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tlet nextLevel = this._activeLevelIndex;\r\n\t\tthis._setScaleDates();\r\n\r\n\t\tif(this._widthStep){\r\n\t\t\tlet newColumnWidth = this.$gantt.config.min_column_width + this._widthStep;\r\n\t\t\tif (newColumnWidth > this._maxColumnWidth) {\r\n\t\t\t\tnewColumnWidth = this._minColumnWidth;\r\n\t\t\t\tnextLevel++;\r\n\t\t\t}\r\n\r\n\t\t\tthis.$gantt.config.min_column_width = newColumnWidth;\r\n\t\t}else{\r\n\t\t\tnextLevel++;\r\n\t\t}\r\n\t\tthis._setLevel(nextLevel, cursorOffset);\r\n\t}\r\n\tprivate _stepDown(cursorOffset) {\r\n\t\tif (this._activeLevelIndex < 1) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tlet nextLevel = this._activeLevelIndex;\r\n\t\tthis._setScaleDates();\r\n\r\n\t\tif(this._widthStep){\r\n\t\t\tlet newColumnWidth = this.$gantt.config.min_column_width - this._widthStep;\r\n\t\t\tif (newColumnWidth < this._minColumnWidth) {\r\n\t\t\t\tnewColumnWidth = this._maxColumnWidth;\r\n\t\t\t\tnextLevel--;\r\n\t\t\t}\r\n\t\t\tthis.$gantt.config.min_column_width = newColumnWidth;\r\n\t\t}else{\r\n\t\t\tnextLevel--;\r\n\t\t}\r\n\t\tthis._setLevel(nextLevel, cursorOffset);\r\n\t}\r\n}","if (window.dhtmlx) {\n  if (!window.dhtmlx.attaches) window.dhtmlx.attaches = {};\n\n  window.dhtmlx.attaches.attachGantt = function (start, end, gantt) {\n    var obj = document.createElement(\"DIV\");\n    gantt = gantt || window.gantt;\n    obj.id = \"gantt_\" + gantt.uid();\n    obj.style.width = \"100%\";\n    obj.style.height = \"100%\";\n    obj.cmp = \"grid\";\n    document.body.appendChild(obj);\n    this.attachObject(obj.id);\n    this.dataType = \"gantt\";\n    this.dataObj = gantt;\n    var that = this.vs[this.av];\n    that.grid = gantt;\n    gantt.init(obj.id, start, end);\n    obj.firstChild.style.border = \"none\";\n    that.gridId = obj.id;\n    that.gridObj = obj;\n    var method_name = \"_viewRestore\";\n    return this.vs[this[method_name]()].grid;\n  };\n}\n\nif (typeof window.dhtmlXCellObject != \"undefined\") {\n  window.dhtmlXCellObject.prototype.attachGantt = function (start, end, gantt) {\n    gantt = gantt || window.gantt;\n    var obj = document.createElement(\"DIV\");\n    obj.id = \"gantt_\" + gantt.uid();\n    obj.style.width = \"100%\";\n    obj.style.height = \"100%\";\n    obj.cmp = \"grid\";\n    document.body.appendChild(obj);\n    this.attachObject(obj.id);\n    this.dataType = \"gantt\";\n    this.dataObj = gantt;\n    gantt.init(obj.id, start, end);\n    obj.firstChild.style.border = \"none\";\n    obj = null;\n    this.callEvent(\"_onContentAttach\", []);\n    return this.dataObj;\n  };\n}\n\nmodule.exports = null;","function _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nif (window.jQuery) {\n  (function ($) {\n    var methods = [];\n\n    $.fn.dhx_gantt = function (config) {\n      config = config || {};\n\n      if (typeof config === 'string') {\n        if (methods[config]) {\n          return methods[config].apply(this, []);\n        } else {\n          $.error('Method ' + config + ' does not exist on jQuery.dhx_gantt');\n        }\n      } else {\n        var views = [];\n        this.each(function () {\n          if (this && this.getAttribute) {\n            if (!this.gantt && !(window.gantt.$root == this)) {\n              var newgantt = window.gantt.$container && window.Gantt ? window.Gantt.getGanttInstance() : window.gantt;\n\n              for (var key in config) {\n                if (key != \"data\") newgantt.config[key] = config[key];\n              }\n\n              newgantt.init(this);\n              if (config.data) newgantt.parse(config.data);\n              views.push(newgantt);\n            } else views.push(_typeof(this.gantt) == \"object\" ? this.gantt : window.gantt);\n          }\n        });\n        if (views.length === 1) return views[0];\n        return views;\n      }\n    };\n  })(window.jQuery);\n}\n\nmodule.exports = null;","var domHelpers = require(\"../utils/dom_helpers\");\n\nvar isHeadless = require(\"../../../utils/is_headless\");\n\nmodule.exports = function (gantt) {\n  var scrollRange = 50,\n      scrollStep = 30,\n      scrollDelay = 10,\n      scrollSpeed = 50;\n  var interval = null,\n      isMove = false,\n      delayTimeout = null,\n      startPos = {\n    started: false\n  },\n      eventPos = {};\n\n  function isDisplayed(element) {\n    return element && domHelpers.isChildOf(element, gantt.$root) && element.offsetHeight;\n  }\n\n  function getAutoscrollContainer() {\n    var element;\n\n    if (isDisplayed(gantt.$task)) {\n      element = gantt.$task;\n    } else if (isDisplayed(gantt.$grid)) {\n      element = gantt.$grid;\n    } else {\n      element = gantt.$root;\n    }\n\n    return element;\n  }\n\n  function isScrollState() {\n    var dragMarker = !!document.querySelector(\".gantt_drag_marker\");\n    var isResize = !!document.querySelector(\".gantt_drag_marker.gantt_grid_resize_area\") || !!document.querySelector(\".gantt_drag_marker.gantt_row_grid_resize_area\");\n    var isLink = !!document.querySelector(\".gantt_link_direction\");\n    var state = gantt.getState();\n    var isClickDrag = state.autoscroll;\n    isMove = dragMarker && !isResize && !isLink;\n    return !(!state.drag_mode && !dragMarker || isResize) || isClickDrag;\n  }\n\n  function defineDelayTimeout(state) {\n    if (delayTimeout) {\n      clearTimeout(delayTimeout);\n      delayTimeout = null;\n    }\n\n    if (state) {\n      var speed = gantt.config.autoscroll_speed;\n      if (speed && speed < 10) // limit speed value to 10\n        speed = 10;\n      delayTimeout = setTimeout(function () {\n        interval = setInterval(tick, speed || scrollSpeed);\n      }, gantt.config.autoscroll_delay || scrollDelay);\n    }\n  }\n\n  function defineScrollInterval(state) {\n    if (state) {\n      defineDelayTimeout(true);\n\n      if (!startPos.started) {\n        startPos.x = eventPos.x;\n        startPos.y = eventPos.y;\n        startPos.started = true;\n      }\n    } else {\n      if (interval) {\n        clearInterval(interval);\n        interval = null;\n      }\n\n      defineDelayTimeout(false);\n      startPos.started = false;\n    }\n  }\n\n  function autoscrollInterval(event) {\n    var isScroll = isScrollState();\n\n    if ((interval || delayTimeout) && !isScroll) {\n      defineScrollInterval(false);\n    }\n\n    if (!gantt.config.autoscroll || !isScroll) {\n      return false;\n    }\n\n    eventPos = {\n      x: event.clientX,\n      y: event.clientY\n    }; // if it is a mobile device, we need to detect the touch event coords\n\n    if (event.type == \"touchmove\") {\n      eventPos.x = event.targetTouches[0].clientX;\n      eventPos.y = event.targetTouches[0].clientY;\n    }\n\n    if (!interval && isScroll) {\n      defineScrollInterval(true);\n    }\n  }\n\n  function tick() {\n    if (!isScrollState()) {\n      defineScrollInterval(false);\n      return false;\n    }\n\n    var container = getAutoscrollContainer();\n\n    if (!container) {\n      return;\n    } // GS-1150: if we reorder or resize something in the grid, we should obtain the grid container\n\n\n    var gridDrag = false;\n    var gridMarkers = [\".gantt_drag_marker.gantt_grid_resize_area\", \".gantt_drag_marker .gantt_row.gantt_row_task\", \".gantt_drag_marker.gantt_grid_dnd_marker\"];\n    gridMarkers.forEach(function (selector) {\n      gridDrag = gridDrag || !!document.querySelector(selector);\n    });\n\n    if (gridDrag) {\n      container = gantt.$grid;\n    }\n\n    var box = domHelpers.getNodePosition(container);\n    var posX = eventPos.x - box.x;\n    var posY = eventPos.y - box.y + window.scrollY; // GS-1315: window.scrollY here and below for the elements above Gantt\n\n    var scrollLeft = isMove ? 0 : need_scroll(posX, box.width, startPos.x - box.x);\n    var scrollTop = need_scroll(posY, box.height, startPos.y - box.y + window.scrollY);\n    var scrollState = gantt.getScrollState();\n    var currentScrollTop = scrollState.y,\n        scrollOuterHeight = scrollState.inner_height,\n        scrollInnerHeight = scrollState.height,\n        currentScrollLeft = scrollState.x,\n        scrollOuterWidth = scrollState.inner_width,\n        scrollInnerWidth = scrollState.width; // do scrolling only if we have scrollable area to do so\n\n    if (scrollTop && !scrollOuterHeight) {\n      scrollTop = 0;\n    } else if (scrollTop < 0 && !currentScrollTop) {\n      scrollTop = 0;\n    } else if (scrollTop > 0 && currentScrollTop + scrollOuterHeight >= scrollInnerHeight + 2) {\n      scrollTop = 0;\n    }\n\n    if (scrollLeft && !scrollOuterWidth) {\n      scrollLeft = 0;\n    } else if (scrollLeft < 0 && !currentScrollLeft) {\n      scrollLeft = 0;\n    } else if (scrollLeft > 0 && currentScrollLeft + scrollOuterWidth >= scrollInnerWidth) {\n      scrollLeft = 0;\n    }\n\n    var step = gantt.config.autoscroll_step;\n    if (step && step < 2) // limit step value to 2\n      step = 2;\n    scrollLeft = scrollLeft * (step || scrollStep);\n    scrollTop = scrollTop * (step || scrollStep);\n\n    if (scrollLeft || scrollTop) {\n      scroll(scrollLeft, scrollTop);\n    }\n  }\n\n  function need_scroll(pos, boxSize, startCoord) {\n    if (pos - scrollRange < 0 && pos < startCoord) return -1;else if (pos > boxSize - scrollRange && pos > startCoord) return 1;\n    return 0;\n  }\n\n  function scroll(left, top) {\n    var scrollState = gantt.getScrollState();\n    var scrollLeft = null,\n        scrollTop = null;\n\n    if (left) {\n      scrollLeft = scrollState.x + left;\n      scrollLeft = Math.min(scrollState.width, scrollLeft);\n      scrollLeft = Math.max(0, scrollLeft);\n    }\n\n    if (top) {\n      scrollTop = scrollState.y + top;\n      scrollTop = Math.min(scrollState.height, scrollTop);\n      scrollTop = Math.max(0, scrollTop);\n    }\n\n    gantt.scrollTo(scrollLeft, scrollTop);\n  }\n\n  gantt.attachEvent(\"onGanttReady\", function () {\n    if (!isHeadless(gantt)) {\n      var eventElement = domHelpers.getRootNode(gantt.$root) || document.body;\n      gantt.eventRemove(eventElement, \"mousemove\", autoscrollInterval);\n      gantt.event(eventElement, \"mousemove\", autoscrollInterval);\n      gantt.eventRemove(eventElement, \"touchmove\", autoscrollInterval);\n      gantt.event(eventElement, \"touchmove\", autoscrollInterval);\n      gantt.eventRemove(eventElement, \"pointermove\", autoscrollInterval);\n      gantt.event(eventElement, \"pointermove\", autoscrollInterval);\n    }\n  });\n  gantt.attachEvent(\"onDestroy\", function () {\n    defineScrollInterval(false);\n  });\n};","module.exports = function (gantt) {\n  if (!gantt.ext) {\n    gantt.ext = {};\n  }\n\n  var modules = [require(\"./autoscroll\"), require(\"./jquery_hooks\"), require(\"./dhtmlx_hooks\")];\n\n  for (var i = 0; i < modules.length; i++) {\n    if (modules[i]) modules[i](gantt);\n  }\n\n  var TimelineZoom = require(\"./timeline_zoom\")[\"default\"];\n\n  gantt.ext.zoom = new TimelineZoom(gantt);\n};","module.exports = function (gantt) {\n  gantt.skins[\"contrast_white\"] = {\n    config: {\n      grid_width: 360,\n      row_height: 35,\n      scale_height: 35,\n      link_line_width: 2,\n      link_arrow_size: 6,\n      lightbox_additional_height: 75\n    },\n    _second_column_width: 100,\n    _third_column_width: 80\n  };\n};","module.exports = function (gantt) {\n  gantt.skins[\"contrast_black\"] = {\n    config: {\n      grid_width: 360,\n      row_height: 35,\n      scale_height: 35,\n      link_line_width: 2,\n      link_arrow_size: 6,\n      lightbox_additional_height: 75\n    },\n    _second_column_width: 100,\n    _third_column_width: 80\n  };\n};","module.exports = function (gantt) {\n  gantt.skins.material = {\n    config: {\n      grid_width: 411,\n      row_height: 34,\n      task_height_offset: 6,\n      scale_height: 36,\n      link_line_width: 2,\n      link_arrow_size: 6,\n      lightbox_additional_height: 80\n    },\n    _second_column_width: 110,\n    _third_column_width: 75,\n    _redefine_lightbox_buttons: {\n      \"buttons_left\": [\"dhx_delete_btn\"],\n      \"buttons_right\": [\"dhx_save_btn\", \"dhx_cancel_btn\"]\n    }\n  };\n  gantt.attachEvent(\"onAfterTaskDrag\", function (id) {\n    var t = gantt.getTaskNode(id);\n\n    if (t) {\n      t.className += \" gantt_drag_animation\";\n      setTimeout(function () {\n        var indx = t.className.indexOf(\" gantt_drag_animation\");\n\n        if (indx > -1) {\n          t.className = t.className.slice(0, indx);\n        }\n      }, 200);\n    }\n  });\n};","module.exports = function (gantt) {\n  gantt.skins.broadway = {\n    config: {\n      grid_width: 360,\n      row_height: 35,\n      scale_height: 35,\n      link_line_width: 1,\n      link_arrow_size: 7,\n      lightbox_additional_height: 86\n    },\n    _second_column_width: 90,\n    _third_column_width: 80,\n    _lightbox_template: \"<div class='gantt_cal_ltitle'><span class='gantt_mark'>&nbsp;</span><span class='gantt_time'></span><span class='gantt_title'></span><div class='gantt_cancel_btn'></div></div><div class='gantt_cal_larea'></div>\",\n    _config_buttons_left: {},\n    _config_buttons_right: {\n      \"gantt_delete_btn\": \"icon_delete\",\n      \"gantt_save_btn\": \"icon_save\"\n    }\n  };\n};","module.exports = function (gantt) {\n  gantt.skins.terrace = {\n    config: {\n      grid_width: 360,\n      row_height: 35,\n      scale_height: 35,\n      link_line_width: 2,\n      link_arrow_size: 6,\n      lightbox_additional_height: 75\n    },\n    _second_column_width: 90,\n    _third_column_width: 70\n  };\n};","module.exports = function (gantt) {\n  gantt.skins.meadow = {\n    config: {\n      grid_width: 350,\n      row_height: 27,\n      scale_height: 30,\n      link_line_width: 2,\n      link_arrow_size: 6,\n      lightbox_additional_height: 72\n    },\n    _second_column_width: 95,\n    _third_column_width: 80\n  };\n};","module.exports = function (gantt) {\n  gantt.skins.skyblue = {\n    config: {\n      grid_width: 350,\n      row_height: 27,\n      scale_height: 27,\n      link_line_width: 1,\n      link_arrow_size: 8,\n      lightbox_additional_height: 75\n    },\n    _second_column_width: 95,\n    _third_column_width: 80\n  };\n};","function _configure(col, data, force) {\n  for (var key in data) {\n    if (typeof col[key] == \"undefined\" || force) col[key] = data[key];\n  }\n}\n\nfunction _get_skin(force, gantt) {\n  var skin = gantt.skin;\n\n  if (!skin || force) {\n    var links = document.getElementsByTagName(\"link\");\n\n    for (var i = 0; i < links.length; i++) {\n      var res = links[i].href.match(\"dhtmlxgantt_([a-z_]+).css\");\n\n      if (res) {\n        if (gantt.skins[res[1]] || !skin) {\n          skin = res[1];\n          break;\n        }\n      }\n    }\n  }\n\n  gantt.skin = skin || \"terrace\";\n  var skinset = gantt.skins[gantt.skin] || gantt.skins[\"terrace\"]; //apply skin related settings\n\n  _configure(gantt.config, skinset.config, force);\n\n  var config = gantt.getGridColumns();\n  if (config[1] && !gantt.defined(config[1].width)) config[1].width = skinset._second_column_width;\n  if (config[2] && !gantt.defined(config[2].width)) config[2].width = skinset._third_column_width;\n\n  for (var i = 0; i < config.length; i++) {\n    var column = config[i];\n\n    if (column.name == \"add\") {\n      if (!column.width) {\n        column.width = 44;\n      }\n\n      if (!(gantt.defined(column.min_width) && gantt.defined(column.max_width))) {\n        column.min_width = column.min_width || column.width;\n        column.max_width = column.max_width || column.width;\n      }\n\n      if (column.min_width) column.min_width = +column.min_width;\n      if (column.max_width) column.max_width = +column.max_width;\n\n      if (column.width) {\n        column.width = +column.width;\n        column.width = column.min_width && column.min_width > column.width ? column.min_width : column.width;\n        column.width = column.max_width && column.max_width < column.width ? column.max_width : column.width;\n      }\n    }\n  }\n\n  if (skinset.config.task_height) {\n    gantt.config.task_height = skinset.config.task_height || \"full\";\n  }\n\n  if (skinset.config.bar_height) {\n    gantt.config.bar_height = skinset.config.bar_height || \"full\";\n  }\n\n  if (skinset._lightbox_template) gantt._lightbox_template = skinset._lightbox_template;\n\n  if (skinset._redefine_lightbox_buttons) {\n    gantt.config.buttons_right = skinset._redefine_lightbox_buttons[\"buttons_right\"];\n    gantt.config.buttons_left = skinset._redefine_lightbox_buttons[\"buttons_left\"];\n  }\n\n  gantt.resetLightbox();\n}\n\nmodule.exports = function (gantt) {\n  if (!gantt.resetSkin) {\n    gantt.resetSkin = function () {\n      this.skin = \"\";\n\n      _get_skin(true, this);\n    };\n\n    gantt.skins = {};\n    gantt.attachEvent(\"onGanttLayoutReady\", function () {\n      _get_skin(false, this);\n    });\n  }\n};","function createLayoutFacade() {\n  function getTimeline(gantt) {\n    return gantt.$ui.getView(\"timeline\");\n  }\n\n  function getGrid(gantt) {\n    return gantt.$ui.getView(\"grid\");\n  }\n\n  function getBaseCell(gantt) {\n    var timeline = getTimeline(gantt);\n\n    if (timeline && !timeline.$config.hidden) {\n      return timeline;\n    } else {\n      var grid = getGrid(gantt);\n\n      if (grid && !grid.$config.hidden) {\n        return grid;\n      } else {\n        return null;\n      }\n    }\n  }\n\n  function getVerticalScrollbar(gantt) {\n    var baseCell = null; // GS-1150: if we reorder or resize something in the grid, we should obtain the grid container\n\n    var gridDrag = false;\n    var gridMarkers = [\".gantt_drag_marker.gantt_grid_resize_area\", \".gantt_drag_marker .gantt_row.gantt_row_task\", \".gantt_drag_marker.gantt_grid_dnd_marker\"];\n    gridMarkers.forEach(function (selector) {\n      gridDrag = gridDrag || !!document.querySelector(selector);\n    });\n\n    if (gridDrag) {\n      baseCell = getGrid(gantt);\n    } else {\n      baseCell = getBaseCell(gantt);\n    } // GS-1827. If there is no grid and timeline, there is no scrollbar for them\n\n\n    if (!baseCell) {\n      return null;\n    }\n\n    var verticalScrollbar = getAttachedScrollbar(gantt, baseCell, \"scrollY\");\n    return verticalScrollbar;\n  }\n\n  function getHorizontalScrollbar(gantt) {\n    var baseCell = getBaseCell(gantt);\n\n    if (!baseCell || baseCell.id == \"grid\") {\n      return null; // if the timeline is not displayed, do not return the scrollbar\n    }\n\n    var horizontalScrollbar = getAttachedScrollbar(gantt, baseCell, \"scrollX\");\n    return horizontalScrollbar;\n  }\n\n  function getAttachedScrollbar(gantt, cell, type) {\n    var attachedScrollbar = cell.$config[type];\n    var scrollbarView = gantt.$ui.getView(attachedScrollbar);\n    return scrollbarView;\n  }\n\n  var DEFAULT_VALUE = \"DEFAULT_VALUE\";\n\n  function tryCall(getView, method, args, fallback) {\n    var view = getView(this);\n\n    if (!(view && view.isVisible())) {\n      if (fallback) {\n        return fallback();\n      } else {\n        return DEFAULT_VALUE;\n      }\n    } else {\n      return view[method].apply(view, args);\n    }\n  }\n\n  return {\n    getColumnIndex: function getColumnIndex(name) {\n      var res = tryCall.call(this, getGrid, \"getColumnIndex\", [name]);\n\n      if (res === DEFAULT_VALUE) {\n        return 0;\n      } else {\n        return res;\n      }\n    },\n    dateFromPos: function dateFromPos(x) {\n      var res = tryCall.call(this, getTimeline, \"dateFromPos\", Array.prototype.slice.call(arguments));\n\n      if (res === DEFAULT_VALUE) {\n        return this.getState().min_date;\n      } else {\n        return res;\n      }\n    },\n    posFromDate: function posFromDate(date) {\n      var res = tryCall.call(this, getTimeline, \"posFromDate\", [date]);\n\n      if (res === DEFAULT_VALUE) {\n        return 0;\n      } else {\n        return res;\n      }\n    },\n    getRowTop: function getRowTop(index) {\n      var self = this;\n      var res = tryCall.call(self, getTimeline, \"getRowTop\", [index], function () {\n        return tryCall.call(self, getGrid, \"getRowTop\", [index]);\n      });\n\n      if (res === DEFAULT_VALUE) {\n        return 0;\n      } else {\n        return res;\n      }\n    },\n    getTaskTop: function getTaskTop(id) {\n      var self = this;\n      var res = tryCall.call(self, getTimeline, \"getItemTop\", [id], function () {\n        return tryCall.call(self, getGrid, \"getItemTop\", [id]);\n      });\n\n      if (res === DEFAULT_VALUE) {\n        return 0;\n      } else {\n        return res;\n      }\n    },\n    getTaskPosition: function getTaskPosition(task, start_date, end_date) {\n      var res = tryCall.call(this, getTimeline, \"getItemPosition\", [task, start_date, end_date]);\n\n      if (res === DEFAULT_VALUE) {\n        var top = this.getTaskTop(task.id);\n        var height = this.getTaskBarHeight(task.id);\n        return {\n          left: 0,\n          top: top,\n          height: height,\n          width: 0\n        };\n      } else {\n        return res;\n      }\n    },\n    getTaskBarHeight: function getTaskBarHeight(taskId, isMilestoneRender) {\n      var self = this;\n      var res = tryCall.call(self, getTimeline, \"getBarHeight\", [taskId, isMilestoneRender], function () {\n        return tryCall.call(self, getGrid, \"getItemHeight\", [taskId]);\n      });\n\n      if (res === DEFAULT_VALUE) {\n        return 0;\n      } else {\n        return res;\n      }\n    },\n    getTaskHeight: function getTaskHeight(taskId) {\n      var self = this;\n      var res = tryCall.call(self, getTimeline, \"getItemHeight\", [taskId], function () {\n        return tryCall.call(self, getGrid, \"getItemHeight\", [taskId]);\n      });\n\n      if (res === DEFAULT_VALUE) {\n        return 0;\n      } else {\n        return res;\n      }\n    },\n    columnIndexByDate: function columnIndexByDate(date) {\n      var res = tryCall.call(this, getTimeline, \"columnIndexByDate\", [date]);\n\n      if (res === DEFAULT_VALUE) {\n        return 0;\n      } else {\n        return res;\n      }\n    },\n    roundTaskDates: function roundTaskDates() {\n      tryCall.call(this, getTimeline, \"roundTaskDates\", []);\n    },\n    getScale: function getScale() {\n      var res = tryCall.call(this, getTimeline, \"getScale\", []);\n\n      if (res === DEFAULT_VALUE) {\n        return null;\n      } else {\n        return res;\n      }\n    },\n    getTaskNode: function getTaskNode(id) {\n      var timeline = getTimeline(this);\n\n      if (!timeline || !timeline.isVisible()) {\n        return null;\n      } else {\n        var node = timeline._taskRenderer.rendered[id];\n\n        if (!node) {\n          var domAttr = timeline.$config.item_attribute;\n          node = timeline.$task_bars.querySelector(\"[\" + domAttr + \"='\" + id + \"']\");\n        }\n\n        return node || null;\n      }\n    },\n    getLinkNode: function getLinkNode(id) {\n      var timeline = getTimeline(this);\n\n      if (!timeline.isVisible()) {\n        return null;\n      } else {\n        return timeline._linkRenderer.rendered[id];\n      }\n    },\n    scrollTo: function scrollTo(left, top) {\n      var vertical = getVerticalScrollbar(this);\n      var horizontal = getHorizontalScrollbar(this);\n      var oldH = {\n        position: 0\n      },\n          oldV = {\n        position: 0\n      };\n\n      if (vertical) {\n        oldV = vertical.getScrollState();\n      }\n\n      if (horizontal) {\n        oldH = horizontal.getScrollState();\n      }\n\n      var scrollHorizontal = horizontal && left * 1 == left;\n      var scrollVertical = vertical && top * 1 == top;\n      var scrollBoth = scrollHorizontal && scrollVertical;\n\n      if (scrollBoth) {\n        // some views will be scrolled both horizontally and vertically and smart rendering can be called twice\n        // set flag in order not to invoke smart rendering at the horizontal scroll stage\n        // so it will repaint only once when the scroll is completed\n        var verticalViews = vertical._getLinkedViews();\n\n        var horizontalViews = horizontal._getLinkedViews();\n\n        var commonViews = [];\n\n        for (var i = 0; i < verticalViews.length; i++) {\n          for (var j = 0; j < horizontalViews.length; j++) {\n            if (verticalViews[i].$config.id && horizontalViews[j].$config.id && verticalViews[i].$config.id === horizontalViews[j].$config.id) {\n              commonViews.push(verticalViews[i].$config.id);\n            }\n          }\n        }\n      }\n\n      if (scrollHorizontal) {\n        if (commonViews) {\n          commonViews.forEach(function (viewId) {\n            this.$ui.getView(viewId).$config.$skipSmartRenderOnScroll = true;\n          }.bind(this));\n        }\n\n        horizontal.scroll(left);\n\n        if (commonViews) {\n          commonViews.forEach(function (viewId) {\n            this.$ui.getView(viewId).$config.$skipSmartRenderOnScroll = false;\n          }.bind(this));\n        }\n      }\n\n      if (scrollVertical) {\n        vertical.scroll(top);\n      }\n\n      var newV = {\n        position: 0\n      },\n          newH = {\n        position: 0\n      };\n\n      if (vertical) {\n        newV = vertical.getScrollState();\n      }\n\n      if (horizontal) {\n        newH = horizontal.getScrollState();\n      }\n\n      this.callEvent(\"onGanttScroll\", [oldH.position, oldV.position, newH.position, newV.position]);\n    },\n    showDate: function showDate(date) {\n      var date_x = this.posFromDate(date);\n      var scroll_to = Math.max(date_x - this.config.task_scroll_offset, 0);\n      this.scrollTo(scroll_to);\n    },\n    showTask: function showTask(id) {\n      var pos = this.getTaskPosition(this.getTask(id)); // GS-1261: we need to show the start_date even in the RTL mode\n\n      var leftPos = pos.left;\n      if (this.config.rtl) leftPos = pos.left + pos.width;\n      var left = Math.max(leftPos - this.config.task_scroll_offset, 0);\n\n      var dataHeight = this._scroll_state().y;\n\n      var top;\n\n      if (!dataHeight) {\n        top = pos.top;\n      } else {\n        top = pos.top - (dataHeight - this.getTaskBarHeight(id)) / 2;\n      }\n\n      this.scrollTo(left, top); // GS-1150: if the grid and timeline have different scrollbars, we need to scroll thegrid to show the task\n\n      var gridCell = getGrid(this);\n      var timelineCell = getTimeline(this);\n\n      if (gridCell && timelineCell && gridCell.$config.scrollY != timelineCell.$config.scrollY) {\n        var gridScrollbar = getAttachedScrollbar(this, gridCell, \"scrollY\");\n        gridScrollbar.scrollTo(null, top);\n      }\n    },\n    _scroll_state: function _scroll_state() {\n      var result = {\n        x: false,\n        y: false,\n        x_pos: 0,\n        y_pos: 0,\n        scroll_size: this.config.scroll_size + 1,\n        //1px for inner content\n        x_inner: 0,\n        y_inner: 0\n      };\n      var scrollVer = getVerticalScrollbar(this),\n          scrollHor = getHorizontalScrollbar(this);\n\n      if (scrollHor) {\n        var horState = scrollHor.getScrollState();\n\n        if (horState.visible) {\n          result.x = horState.size;\n          result.x_inner = horState.scrollSize;\n        }\n\n        result.x_pos = horState.position || 0;\n      }\n\n      if (scrollVer) {\n        var verState = scrollVer.getScrollState();\n\n        if (verState.visible) {\n          result.y = verState.size;\n          result.y_inner = verState.scrollSize;\n        }\n\n        result.y_pos = verState.position || 0;\n      }\n\n      return result;\n    },\n    getScrollState: function getScrollState() {\n      var state = this._scroll_state();\n\n      return {\n        x: state.x_pos,\n        y: state.y_pos,\n        inner_width: state.x,\n        inner_height: state.y,\n        width: state.x_inner,\n        height: state.y_inner\n      };\n    },\n    getLayoutView: function getLayoutView(cellName) {\n      return this.$ui.getView(cellName);\n    },\n    scrollLayoutCell: function scrollLayoutCell(cellName, left, top) {\n      var cell = this.$ui.getView(cellName);\n\n      if (!cell) {\n        return false;\n      }\n\n      if (left !== null) {\n        var horizontalScroll = this.$ui.getView(cell.$config.scrollX);\n\n        if (horizontalScroll) {\n          horizontalScroll.scrollTo(left, null);\n        }\n      }\n\n      if (top !== null) {\n        var verticalScroll = this.$ui.getView(cell.$config.scrollY);\n\n        if (verticalScroll) {\n          verticalScroll.scrollTo(null, top);\n        }\n      }\n    }\n  };\n}\n\nmodule.exports = createLayoutFacade;","module.exports = function (gantt) {\n  delete gantt.addTaskLayer;\n  delete gantt.addLinkLayer;\n};","var domHelpers = require(\"./utils/dom_helpers\");\n\nvar initializer = function () {\n  return function (gantt) {\n    return {\n      getVerticalScrollbar: function getVerticalScrollbar() {\n        return gantt.$ui.getView(\"scrollVer\");\n      },\n      getHorizontalScrollbar: function getHorizontalScrollbar() {\n        return gantt.$ui.getView(\"scrollHor\");\n      },\n      _legacyGridResizerClass: function _legacyGridResizerClass(layout) {\n        var resizers = layout.getCellsByType(\"resizer\");\n\n        for (var i = 0; i < resizers.length; i++) {\n          var r = resizers[i];\n          var gridResizer = false;\n          var prev = r.$parent.getPrevSibling(r.$id);\n\n          if (prev && prev.$config && prev.$config.id === \"grid\") {\n            gridResizer = true;\n          } else {\n            var next = r.$parent.getNextSibling(r.$id);\n\n            if (next && next.$config && next.$config.id === \"grid\") {\n              gridResizer = true;\n            }\n          }\n\n          if (gridResizer) {\n            r.$config.css = (r.$config.css ? r.$config.css + \" \" : \"\") + \"gantt_grid_resize_wrap\";\n          }\n        }\n      },\n      onCreated: function onCreated(layout) {\n        var first = true;\n\n        this._legacyGridResizerClass(layout);\n\n        layout.attachEvent(\"onBeforeResize\", function () {\n          var mainTimeline = gantt.$ui.getView(\"timeline\");\n          if (mainTimeline) mainTimeline.$config.hidden = mainTimeline.$parent.$config.hidden = !gantt.config.show_chart;\n          var mainGrid = gantt.$ui.getView(\"grid\");\n          if (!mainGrid) return;\n\n          var colsWidth = mainGrid._getColsTotalWidth();\n\n          var hideGrid = !gantt.config.show_grid || !gantt.config.grid_width || colsWidth === 0;\n\n          if (first && !hideGrid && colsWidth !== false) {\n            gantt.config.grid_width = colsWidth;\n          }\n\n          mainGrid.$config.hidden = mainGrid.$parent.$config.hidden = hideGrid;\n\n          if (!mainGrid.$config.hidden) {\n            /* restrict grid width due to min_width, max_width, min_grid_column_width */\n            var grid_limits = mainGrid._getGridWidthLimits();\n\n            if (grid_limits[0] && gantt.config.grid_width < grid_limits[0]) gantt.config.grid_width = grid_limits[0];\n            if (grid_limits[1] && gantt.config.grid_width > grid_limits[1]) gantt.config.grid_width = grid_limits[1];\n\n            if (mainTimeline && gantt.config.show_chart) {\n              mainGrid.$config.width = gantt.config.grid_width - 1; // GS-1314: Don't let the non-scrollable grid to be larger than the container with the correct width\n\n              if (!mainGrid.$config.scrollable && mainGrid.$config.scrollY && gantt.$root.offsetWidth) {\n                var ganttContainerWidth = mainGrid.$gantt.$layout.$container.offsetWidth;\n                var verticalScrollbar = gantt.$ui.getView(mainGrid.$config.scrollY);\n                var verticalScrollbarWidth = verticalScrollbar.$config.width;\n                var gridOverflow = ganttContainerWidth - (mainGrid.$config.width + verticalScrollbarWidth);\n\n                if (gridOverflow < 0) {\n                  mainGrid.$config.width += gridOverflow;\n                  gantt.config.grid_width += gridOverflow;\n                }\n              }\n\n              if (!first) {\n                if (mainTimeline && !domHelpers.isChildOf(mainTimeline.$task, layout.$view)) {\n                  // timeline is being displayed after being not visible, reset grid with from full screen\n                  if (!mainGrid.$config.original_grid_width) {\n                    var skinSettings = gantt.skins[gantt.skin];\n\n                    if (skinSettings && skinSettings.config && skinSettings.config.grid_width) {\n                      mainGrid.$config.original_grid_width = skinSettings.config.grid_width;\n                    } else {\n                      mainGrid.$config.original_grid_width = 0;\n                    }\n                  }\n\n                  gantt.config.grid_width = mainGrid.$config.original_grid_width;\n                  mainGrid.$parent.$config.width = gantt.config.grid_width;\n                } else {\n                  mainGrid.$parent._setContentSize(mainGrid.$config.width, null);\n\n                  gantt.$layout._syncCellSizes(mainGrid.$parent.$config.group, {\n                    value: gantt.config.grid_width,\n                    isGravity: false\n                  });\n                }\n              } else {\n                mainGrid.$parent.$config.width = gantt.config.grid_width;\n\n                if (mainGrid.$parent.$config.group) {\n                  gantt.$layout._syncCellSizes(mainGrid.$parent.$config.group, {\n                    value: mainGrid.$parent.$config.width,\n                    isGravity: false\n                  });\n                }\n              }\n            } else {\n              if (mainTimeline && domHelpers.isChildOf(mainTimeline.$task, layout.$view)) {\n                // hiding timeline, remember grid with to restore it when timeline is displayed again\n                mainGrid.$config.original_grid_width = gantt.config.grid_width;\n              }\n\n              if (!first) {\n                mainGrid.$parent.$config.width = 0;\n              }\n            }\n          }\n\n          first = false;\n        });\n\n        this._initScrollStateEvents(layout);\n      },\n      _initScrollStateEvents: function _initScrollStateEvents(layout) {\n        gantt._getVerticalScrollbar = this.getVerticalScrollbar;\n        gantt._getHorizontalScrollbar = this.getHorizontalScrollbar;\n        var vertical = this.getVerticalScrollbar();\n        var horizontal = this.getHorizontalScrollbar();\n\n        if (vertical) {\n          vertical.attachEvent(\"onScroll\", function (oldPos, newPos, dir) {\n            var scrollState = gantt.getScrollState();\n            gantt.callEvent(\"onGanttScroll\", [scrollState.x, oldPos, scrollState.x, newPos]);\n          });\n        }\n\n        if (horizontal) {\n          horizontal.attachEvent(\"onScroll\", function (oldPos, newPos, dir) {\n            var scrollState = gantt.getScrollState();\n            gantt.callEvent(\"onGanttScroll\", [oldPos, scrollState.y, newPos, scrollState.y]); // if the grid doesn't fit the width, scroll the row container\n\n            var grid = gantt.$ui.getView(\"grid\");\n\n            if (grid && grid.$grid_data && !grid.$config.scrollable) {\n              grid.$grid_data.style.left = grid.$grid.scrollLeft + \"px\";\n              grid.$grid_data.scrollLeft = grid.$grid.scrollLeft;\n            }\n          });\n        }\n\n        layout.attachEvent(\"onResize\", function () {\n          if (vertical && !gantt.$scroll_ver) {\n            gantt.$scroll_ver = vertical.$scroll_ver;\n          }\n\n          if (horizontal && !gantt.$scroll_hor) {\n            gantt.$scroll_hor = horizontal.$scroll_hor;\n          }\n        });\n      },\n      _findGridResizer: function _findGridResizer(layout, grid) {\n        var resizers = layout.getCellsByType(\"resizer\");\n        var gridFirst = true;\n        var gridResizer;\n\n        for (var i = 0; i < resizers.length; i++) {\n          var res = resizers[i];\n\n          res._getSiblings();\n\n          var prev = res._behind;\n          var next = res._front;\n\n          if (prev && prev.$content === grid || prev.isChild && prev.isChild(grid)) {\n            gridResizer = res;\n            gridFirst = true;\n            break;\n          } else if (next && next.$content === grid || next.isChild && next.isChild(grid)) {\n            gridResizer = res;\n            gridFirst = false;\n            break;\n          }\n        }\n\n        return {\n          resizer: gridResizer,\n          gridFirst: gridFirst\n        };\n      },\n      onInitialized: function onInitialized(layout) {\n        var grid = gantt.$ui.getView(\"grid\");\n\n        var resizeInfo = this._findGridResizer(layout, grid); // expose grid resize events\n\n\n        if (resizeInfo.resizer) {\n          var gridFirst = resizeInfo.gridFirst,\n              next = resizeInfo.resizer;\n\n          if (next.$config.mode !== \"x\") {\n            return; // track only horizontal resize\n          }\n\n          var initialWidth;\n          next.attachEvent(\"onResizeStart\", function (prevCellWidth, nextCellWidth) {\n            var grid = gantt.$ui.getView(\"grid\");\n            var viewCell = grid ? grid.$parent : null;\n\n            if (viewCell) {\n              var limits = grid._getGridWidthLimits(); // min grid width is defined by min widths of its columns, unless grid has horizontal scroll\n\n\n              if (!grid.$config.scrollable) viewCell.$config.minWidth = limits[0];\n              viewCell.$config.maxWidth = limits[1];\n            }\n\n            initialWidth = gridFirst ? prevCellWidth : nextCellWidth;\n            return gantt.callEvent(\"onGridResizeStart\", [initialWidth]);\n          });\n          next.attachEvent(\"onResize\", function (newBehindSize, newFrontSize) {\n            var newSize = gridFirst ? newBehindSize : newFrontSize;\n            return gantt.callEvent(\"onGridResize\", [initialWidth, newSize]);\n          });\n          next.attachEvent(\"onResizeEnd\", function (oldBackSize, oldFrontSize, newBackSize, newFrontSize) {\n            var oldSize = gridFirst ? oldBackSize : oldFrontSize;\n            var newSize = gridFirst ? newBackSize : newFrontSize;\n            var grid = gantt.$ui.getView(\"grid\");\n            var viewCell = grid ? grid.$parent : null;\n\n            if (viewCell) {\n              viewCell.$config.minWidth = undefined;\n            }\n\n            var res = gantt.callEvent(\"onGridResizeEnd\", [oldSize, newSize]);\n\n            if (res && newSize !== 0) {\n              // new size may be numeric zero when cell size is defined by 'gravity', actual size will be calculated by layout later\n              gantt.config.grid_width = newSize;\n            }\n\n            return res;\n          });\n        }\n      },\n      onDestroyed: function onDestroyed(timeline) {}\n    };\n  };\n}();\n\nmodule.exports = initializer;","var domHelpers = require(\"../utils/dom_helpers\");\n\nvar initLinksDND = function initLinksDND(timeline, gantt) {\n  var _link_landing,\n      _link_target_task,\n      _link_target_task_start,\n      _link_source_task,\n      _link_source_task_start,\n      markerDefaultOffset = 10,\n      scrollDefaultSize = 18;\n\n  function getVisibleMilestoneWidth(taskId) {\n    var origWidth = timeline.getBarHeight(taskId, true); //m-s have square shape\n\n    return Math.round(Math.sqrt(2 * origWidth * origWidth)) - 2;\n  }\n\n  function isMilestone(task) {\n    return gantt.getTaskType(task.type) == gantt.config.types.milestone;\n  }\n\n  function getDndState() {\n    return {\n      link_source_id: _link_source_task,\n      link_target_id: _link_target_task,\n      link_from_start: _link_source_task_start,\n      link_to_start: _link_target_task_start,\n      link_landing_area: _link_landing\n    };\n  }\n\n  var services = gantt.$services;\n  var state = services.getService(\"state\");\n  var DnD = services.getService(\"dnd\");\n  state.registerProvider(\"linksDnD\", getDndState);\n  var start_marker = \"task_start_date\",\n      end_marker = \"task_end_date\",\n      link_edge_marker = \"gantt_link_point\",\n      link_landing_hover_area = \"gantt_link_control\";\n  var dnd = new DnD(timeline.$task_bars, {\n    sensitivity: 0,\n    updates_per_second: 60,\n    mousemoveContainer: gantt.$root,\n    selector: \".\" + link_edge_marker,\n    preventDefault: true\n  });\n  dnd.attachEvent(\"onBeforeDragStart\", gantt.bind(function (obj, e) {\n    var target = e.target || e.srcElement;\n    resetDndState();\n    if (gantt.getState(\"tasksDnd\").drag_id) return false;\n\n    if (domHelpers.locateClassName(target, link_edge_marker)) {\n      if (domHelpers.locateClassName(target, start_marker)) _link_source_task_start = true;\n      var sid = gantt.locate(e);\n      _link_source_task = sid;\n      var t = gantt.getTask(sid);\n\n      if (gantt.isReadonly(t)) {\n        resetDndState();\n        return false;\n      }\n\n      var shift = 0;\n      this._dir_start = getLinePos(t, !!_link_source_task_start, shift, timeline.$getConfig(), true);\n      return true;\n    } else {\n      return false;\n    }\n  }, this));\n  dnd.attachEvent(\"onAfterDragStart\", gantt.bind(function (obj, e) {\n    if (gantt.config.touch) {\n      gantt.refreshData();\n    }\n\n    updateMarkedHtml(dnd.config.marker);\n  }, this));\n\n  function getLinePos(task, to_start, shift, cfg, isStart) {\n    var taskPos = getMilestonePosition(task, function (task) {\n      return gantt.getTaskPosition(task);\n    }, cfg);\n    var pos = {\n      x: taskPos.x,\n      y: taskPos.y\n    };\n\n    if (!to_start) {\n      pos.x = taskPos.xEnd;\n    } //var pos = gantt._get_task_pos(task, !!to_start);\n\n\n    pos.y += gantt.getTaskHeight(task.id) / 2;\n    var offset = isMilestone(task) && isStart ? 2 : 0;\n    shift = shift || 0;\n    if (cfg.rtl) shift = shift * -1;\n    pos.x += (to_start ? -1 : 1) * shift - offset;\n    return pos;\n  }\n\n  function getMilestonePosition(task, getTaskPosition, cfg) {\n    var pos = getTaskPosition(task);\n    var res = {\n      x: pos.left,\n      y: pos.top,\n      width: pos.width,\n      height: pos.height\n    };\n\n    if (cfg.rtl) {\n      res.xEnd = res.x;\n      res.x = res.xEnd + res.width;\n    } else {\n      res.xEnd = res.x + res.width;\n    }\n\n    res.yEnd = res.y + res.height;\n\n    if (gantt.getTaskType(task.type) == gantt.config.types.milestone) {\n      var milestoneWidth = getVisibleMilestoneWidth(task.id);\n      res.x += (!cfg.rtl ? -1 : 1) * (milestoneWidth / 2);\n      res.xEnd += (!cfg.rtl ? 1 : -1) * (milestoneWidth / 2); //pos.x -= milestoneWidth / 2;\n      //pos.xEnd += milestoneWidth / 2;\n\n      res.width = pos.xEnd - pos.x;\n    }\n\n    return res;\n  }\n\n  function getVieportSize() {\n    var root = gantt.$root;\n    return {\n      right: root.offsetWidth,\n      bottom: root.offsetHeight\n    };\n  }\n\n  function getMarkerSize(marker) {\n    var width = 0,\n        height = 0;\n\n    if (marker) {\n      width = marker.offsetWidth || 0;\n      height = marker.offsetHeight || 0;\n    }\n\n    return {\n      width: width,\n      height: height\n    };\n  }\n\n  function getPosition(e, marker) {\n    var oldPos = dnd.getPosition(e);\n    var markerSize = getMarkerSize(marker);\n    var viewportSize = getVieportSize();\n    var offsetX = gantt.config.tooltip_offset_x || markerDefaultOffset;\n    var offsetY = gantt.config.tooltip_offset_y || markerDefaultOffset;\n    var scrollSize = gantt.config.scroll_size || scrollDefaultSize; // GS-1315: Add offset if there are elements above Gantt\n\n    var ganttOffsetY = gantt.$container.getBoundingClientRect().y + window.scrollY;\n    var position = {\n      y: oldPos.y + offsetY,\n      x: oldPos.x + offsetX,\n      bottom: oldPos.y + markerSize.height + offsetY + scrollSize,\n      right: oldPos.x + markerSize.width + offsetX + scrollSize\n    };\n\n    if (position.bottom > viewportSize.bottom + ganttOffsetY) {\n      position.y = viewportSize.bottom + ganttOffsetY - markerSize.height - offsetY;\n    }\n\n    if (position.right > viewportSize.right) {\n      position.x = viewportSize.right - markerSize.width - offsetX;\n    }\n\n    return position;\n  }\n\n  dnd.attachEvent(\"onDragMove\", gantt.bind(function (obj, e) {\n    var dd = dnd.config;\n    var pos = getPosition(e, dd.marker);\n    advanceMarker(dd.marker, pos);\n    var landing = !!domHelpers.locateClassName(e, link_landing_hover_area);\n    var prevTarget = _link_target_task;\n    var prevLanding = _link_landing;\n    var prevToStart = _link_target_task_start;\n    var targ = gantt.locate(e),\n        to_start = true; // can drag and drop link to another gantt on the page, such links are not supported\n\n    var eventTarget = domHelpers.getTargetNode(e);\n    var sameGantt = domHelpers.isChildOf(eventTarget, gantt.$root);\n\n    if (!sameGantt) {\n      landing = false;\n      targ = null;\n    }\n\n    if (landing) {\n      //refreshTask\n      to_start = !domHelpers.locateClassName(e, end_marker);\n      landing = !!targ;\n    }\n\n    _link_target_task = targ;\n    _link_landing = landing;\n    _link_target_task_start = to_start;\n\n    if (landing) {\n      var t = gantt.getTask(targ);\n      var config = timeline.$getConfig();\n      var node = domHelpers.locateClassName(e, link_landing_hover_area);\n      var shift = 0;\n\n      if (node) {\n        shift = Math.floor(node.offsetWidth / 2);\n      }\n\n      this._dir_end = getLinePos(t, !!_link_target_task_start, shift, config);\n    } else {\n      this._dir_end = domHelpers.getRelativeEventPosition(e, timeline.$task_data);\n\n      if (gantt.env.isEdge) {\n        // to fix margin collapsing\n        this._dir_end.y += window.scrollY;\n      }\n    }\n\n    var targetChanged = !(prevLanding == landing && prevTarget == targ && prevToStart == to_start);\n\n    if (targetChanged) {\n      if (prevTarget) gantt.refreshTask(prevTarget, false);\n      if (targ) gantt.refreshTask(targ, false);\n    }\n\n    if (targetChanged) {\n      updateMarkedHtml(dd.marker);\n    }\n\n    showDirectingLine(this._dir_start.x, this._dir_start.y, this._dir_end.x, this._dir_end.y);\n    return true;\n  }, this));\n  dnd.attachEvent(\"onDragEnd\", gantt.bind(function () {\n    var drag = getDndState();\n\n    if (drag.link_source_id && drag.link_target_id && drag.link_source_id != drag.link_target_id) {\n      var type = gantt._get_link_type(drag.link_from_start, drag.link_to_start);\n\n      var link = {\n        source: drag.link_source_id,\n        target: drag.link_target_id,\n        type: type\n      };\n\n      if (link.type && gantt.isLinkAllowed(link)) {\n        if (gantt.callEvent(\"onLinkCreated\", [link])) {\n          gantt.addLink(link);\n        }\n      }\n    }\n\n    resetDndState();\n\n    if (gantt.config.touch) {\n      gantt.refreshData();\n    } else {\n      if (drag.link_source_id) gantt.refreshTask(drag.link_source_id, false);\n      if (drag.link_target_id) gantt.refreshTask(drag.link_target_id, false);\n    }\n\n    removeDirectionLine();\n  }, this));\n\n  function updateMarkedHtml(marker) {\n    var link = getDndState();\n    var css = [\"gantt_link_tooltip\"];\n\n    if (link.link_source_id && link.link_target_id) {\n      if (gantt.isLinkAllowed(link.link_source_id, link.link_target_id, link.link_from_start, link.link_to_start)) {\n        css.push(\"gantt_allowed_link\");\n      } else {\n        css.push(\"gantt_invalid_link\");\n      }\n    }\n\n    var className = gantt.templates.drag_link_class(link.link_source_id, link.link_from_start, link.link_target_id, link.link_to_start);\n    if (className) css.push(className);\n    var html = \"<div class='\" + className + \"'>\" + gantt.templates.drag_link(link.link_source_id, link.link_from_start, link.link_target_id, link.link_to_start) + \"</div>\";\n    marker.innerHTML = html;\n  }\n\n  function advanceMarker(marker, pos) {\n    marker.style.left = pos.x + \"px\";\n    marker.style.top = pos.y + \"px\";\n  }\n\n  function resetDndState() {\n    _link_source_task = _link_source_task_start = _link_target_task = null;\n    _link_target_task_start = true;\n  }\n\n  function showDirectingLine(s_x, s_y, e_x, e_y) {\n    var div = getDirectionLine();\n    var link = getDndState();\n    var css = [\"gantt_link_direction\"];\n\n    if (gantt.templates.link_direction_class) {\n      css.push(gantt.templates.link_direction_class(link.link_source_id, link.link_from_start, link.link_target_id, link.link_to_start));\n    }\n\n    var dist = Math.sqrt(Math.pow(e_x - s_x, 2) + Math.pow(e_y - s_y, 2));\n    dist = Math.max(0, dist - 3);\n    if (!dist) return;\n    div.className = css.join(\" \");\n    var tan = (e_y - s_y) / (e_x - s_x),\n        angle = Math.atan(tan);\n\n    if (coordinateCircleQuarter(s_x, e_x, s_y, e_y) == 2) {\n      angle += Math.PI;\n    } else if (coordinateCircleQuarter(s_x, e_x, s_y, e_y) == 3) {\n      angle -= Math.PI;\n    }\n\n    var sin = Math.sin(angle),\n        cos = Math.cos(angle),\n        top = Math.round(s_y),\n        left = Math.round(s_x);\n    var style = [\"-webkit-transform: rotate(\" + angle + \"rad)\", \"-moz-transform: rotate(\" + angle + \"rad)\", \"-ms-transform: rotate(\" + angle + \"rad)\", \"-o-transform: rotate(\" + angle + \"rad)\", \"transform: rotate(\" + angle + \"rad)\", \"width:\" + Math.round(dist) + \"px\"];\n\n    if (window.navigator.userAgent.indexOf(\"MSIE 8.0\") != -1) {\n      //ms-filter breaks styles in ie9, so add it only for 8th\n      style.push(\"-ms-filter: \\\"\" + ieTransform(sin, cos) + \"\\\"\");\n      var shiftLeft = Math.abs(Math.round(s_x - e_x)),\n          shiftTop = Math.abs(Math.round(e_y - s_y)); //fix rotation axis\n\n      switch (coordinateCircleQuarter(s_x, e_x, s_y, e_y)) {\n        case 1:\n          top -= shiftTop;\n          break;\n\n        case 2:\n          left -= shiftLeft;\n          top -= shiftTop;\n          break;\n\n        case 3:\n          left -= shiftLeft;\n          break;\n\n        default:\n          break;\n      }\n    }\n\n    style.push(\"top:\" + top + \"px\");\n    style.push(\"left:\" + left + \"px\");\n    div.style.cssText = style.join(\";\");\n  }\n\n  function ieTransform(sin, cos) {\n    return \"progid:DXImageTransform.Microsoft.Matrix(\" + \"M11 = \" + cos + \",\" + \"M12 = -\" + sin + \",\" + \"M21 = \" + sin + \",\" + \"M22 = \" + cos + \",\" + \"SizingMethod = 'auto expand'\" + \")\";\n  }\n\n  function coordinateCircleQuarter(sX, eX, sY, eY) {\n    if (eX >= sX) {\n      if (eY <= sY) {\n        return 1;\n      } else {\n        return 4;\n      }\n    } else {\n      if (eY <= sY) {\n        return 2;\n      } else {\n        return 3;\n      }\n    }\n  }\n\n  function getDirectionLine() {\n    if (!dnd._direction || !dnd._direction.parentNode) {\n      dnd._direction = document.createElement(\"div\");\n      timeline.$task_links.appendChild(dnd._direction);\n    }\n\n    return dnd._direction;\n  }\n\n  function removeDirectionLine() {\n    if (dnd._direction) {\n      if (dnd._direction.parentNode) //the event line can be detached because of data refresh\n        dnd._direction.parentNode.removeChild(dnd._direction);\n      dnd._direction = null;\n    }\n  }\n\n  gantt.attachEvent(\"onGanttRender\", gantt.bind(function () {\n    if (dnd._direction) {\n      showDirectingLine(this._dir_start.x, this._dir_start.y, this._dir_end.x, this._dir_end.y);\n    }\n  }, this));\n};\n\nmodule.exports = {\n  createLinkDND: function createLinkDND() {\n    return {\n      init: initLinksDND\n    };\n  }\n};","var domHelpers = require(\"../utils/dom_helpers\");\n\nvar utils = require(\"../../../utils/utils\");\n\nvar timeout = require(\"../../../utils/timeout\");\n\nvar helpers = require(\"../../../utils/helpers\");\n\nfunction createTaskDND(timeline, gantt) {\n  var services = gantt.$services;\n  return {\n    drag: null,\n    dragMultiple: {},\n    _events: {\n      before_start: {},\n      before_finish: {},\n      after_finish: {}\n    },\n    _handlers: {},\n    init: function init() {\n      this._domEvents = gantt._createDomEventScope();\n      this.clear_drag_state();\n      var drag = gantt.config.drag_mode;\n      this.set_actions();\n      var stateService = services.getService(\"state\");\n      stateService.registerProvider(\"tasksDnd\", utils.bind(function () {\n        return {\n          drag_id: this.drag ? this.drag.id : undefined,\n          drag_mode: this.drag ? this.drag.mode : undefined,\n          drag_from_start: this.drag ? this.drag.left : undefined\n        };\n      }, this));\n      var evs = {\n        \"before_start\": \"onBeforeTaskDrag\",\n        \"before_finish\": \"onBeforeTaskChanged\",\n        \"after_finish\": \"onAfterTaskDrag\"\n      }; //for now, all drag operations will trigger the same events\n\n      for (var stage in this._events) {\n        for (var mode in drag) {\n          this._events[stage][mode] = evs[stage];\n        }\n      }\n\n      this._handlers[drag.move] = this._move;\n      this._handlers[drag.resize] = this._resize;\n      this._handlers[drag.progress] = this._resize_progress;\n    },\n    set_actions: function set_actions() {\n      var data = timeline.$task_data;\n\n      this._domEvents.attach(data, \"mousemove\", gantt.bind(function (e) {\n        this.on_mouse_move(e);\n      }, this));\n\n      this._domEvents.attach(data, \"mousedown\", gantt.bind(function (e) {\n        this.on_mouse_down(e);\n      }, this));\n\n      this._domEvents.attach(document.body, \"mouseup\", gantt.bind(function (e) {\n        this.on_mouse_up(e);\n      }, this));\n    },\n    clear_drag_state: function clear_drag_state() {\n      this.drag = {\n        id: null,\n        mode: null,\n        pos: null,\n        start_x: null,\n        start_y: null,\n        obj: null,\n        left: null\n      };\n      this.dragMultiple = {};\n    },\n    _resize: function _resize(task, shift, drag) {\n      var cfg = timeline.$getConfig();\n\n      var coords_x = this._drag_task_coords(task, drag);\n\n      if (drag.left) {\n        task.start_date = gantt.dateFromPos(coords_x.start + shift);\n\n        if (!task.start_date) {\n          task.start_date = new Date(gantt.getState().min_date);\n        }\n      } else {\n        task.end_date = gantt.dateFromPos(coords_x.end + shift);\n\n        if (!task.end_date) {\n          task.end_date = new Date(gantt.getState().max_date);\n        }\n      }\n\n      var minDurationInUnits = this._calculateMinDuration(cfg.min_duration, cfg.duration_unit);\n\n      if (task.end_date - task.start_date < cfg.min_duration) {\n        if (drag.left) task.start_date = gantt.calculateEndDate(task.end_date, -minDurationInUnits, cfg.duration_unit, task);else task.end_date = gantt.calculateEndDate(task.start_date, minDurationInUnits, cfg.duration_unit, task);\n      }\n\n      gantt._init_task_timing(task);\n    },\n    _calculateMinDuration: function _calculateMinDuration(duration, unit) {\n      var inMs = {\n        \"minute\": 60000,\n        \"hour\": 3600000,\n        \"day\": 86400000,\n        \"week\": 604800000,\n        \"month\": 2419200000,\n        \"year\": 31356000000\n      };\n      return Math.ceil(duration / inMs[unit]);\n    },\n    _resize_progress: function _resize_progress(task, shift, drag) {\n      var coords_x = this._drag_task_coords(task, drag);\n\n      var config = timeline.$getConfig();\n      var diffValue = !config.rtl ? drag.pos.x - coords_x.start : coords_x.start - drag.pos.x;\n      var diff = Math.max(0, diffValue);\n      task.progress = Math.min(1, diff / Math.abs(coords_x.end - coords_x.start));\n    },\n    _find_max_shift: function _find_max_shift(dragItems, shift) {\n      var correctShift;\n\n      for (var i in dragItems) {\n        var drag = dragItems[i];\n        var task = gantt.getTask(drag.id);\n\n        var coords_x = this._drag_task_coords(task, drag);\n\n        var minX = gantt.posFromDate(new Date(gantt.getState().min_date));\n        var maxX = gantt.posFromDate(new Date(gantt.getState().max_date));\n\n        if (coords_x.end + shift > maxX) {\n          var maxShift = maxX - coords_x.end;\n\n          if (maxShift < correctShift || correctShift === undefined) {\n            correctShift = maxShift;\n          }\n        } else if (coords_x.start + shift < minX) {\n          var minShift = minX - coords_x.start;\n\n          if (minShift > correctShift || correctShift === undefined) {\n            correctShift = minShift;\n          }\n        }\n      }\n\n      return correctShift;\n    },\n    _move: function _move(task, shift, drag, multipleDragShift) {\n      var coords_x = this._drag_task_coords(task, drag);\n\n      var new_start = null,\n          new_end = null; // GS-454: If we drag multiple tasks, rely on the dates instead of timeline coordinates\n\n      if (multipleDragShift) {\n        new_start = new Date(+drag.obj.start_date + multipleDragShift), new_end = new Date(+drag.obj.end_date + multipleDragShift);\n      } else {\n        new_start = gantt.dateFromPos(coords_x.start + shift), new_end = gantt.dateFromPos(coords_x.end + shift);\n      }\n\n      if (!new_start) {\n        task.start_date = new Date(gantt.getState().min_date);\n        task.end_date = gantt.dateFromPos(gantt.posFromDate(task.start_date) + (coords_x.end - coords_x.start));\n      } else if (!new_end) {\n        task.end_date = new Date(gantt.getState().max_date);\n        task.start_date = gantt.dateFromPos(gantt.posFromDate(task.end_date) - (coords_x.end - coords_x.start));\n      } else {\n        task.start_date = new_start;\n        task.end_date = new_end;\n      }\n    },\n    _drag_task_coords: function _drag_task_coords(t, drag) {\n      var start = drag.obj_s_x = drag.obj_s_x || gantt.posFromDate(t.start_date);\n      var end = drag.obj_e_x = drag.obj_e_x || gantt.posFromDate(t.end_date);\n      return {\n        start: start,\n        end: end\n      };\n    },\n    _mouse_position_change: function _mouse_position_change(oldPos, newPos) {\n      var dx = oldPos.x - newPos.x,\n          dy = oldPos.y - newPos.y;\n      return Math.sqrt(dx * dx + dy * dy);\n    },\n    _is_number: function _is_number(n) {\n      return !isNaN(parseFloat(n)) && isFinite(n);\n    },\n    on_mouse_move: function on_mouse_move(e) {\n      if (this.drag.start_drag) {\n        var pos = domHelpers.getRelativeEventPosition(e, gantt.$task_data);\n        var sX = this.drag.start_drag.start_x,\n            sY = this.drag.start_drag.start_y;\n\n        if (Date.now() - this.drag.timestamp > 50 || this._is_number(sX) && this._is_number(sY) && this._mouse_position_change({\n          x: sX,\n          y: sY\n        }, pos) > 20) {\n          this._start_dnd(e);\n        }\n      }\n\n      var drag = this.drag;\n\n      if (drag.mode) {\n        if (!timeout(this, 40)) //limit update frequency\n          return;\n\n        this._update_on_move(e);\n      }\n    },\n    _update_item_on_move: function _update_item_on_move(shift, id, mode, drag, e, multipleDragShift) {\n      var task = gantt.getTask(id);\n      var original = gantt.mixin({}, task);\n      var copy = gantt.mixin({}, task);\n\n      this._handlers[mode].apply(this, [copy, shift, drag, multipleDragShift]);\n\n      gantt.mixin(task, copy, true); //gantt._update_parents(drag.id, true);\n\n      gantt.callEvent(\"onTaskDrag\", [task.id, mode, copy, original, e]);\n      gantt.mixin(task, copy, true);\n      gantt.refreshTask(id);\n    },\n    _update_on_move: function _update_on_move(e) {\n      var drag = this.drag;\n      var config = timeline.$getConfig();\n\n      if (drag.mode) {\n        var pos = domHelpers.getRelativeEventPosition(e, timeline.$task_data);\n        if (drag.pos && drag.pos.x == pos.x) return;\n        drag.pos = pos;\n        var curr_date = gantt.dateFromPos(pos.x);\n        if (!curr_date || isNaN(curr_date.getTime())) return;\n        var shift = pos.x - drag.start_x;\n        var task = gantt.getTask(drag.id);\n\n        if (this._handlers[drag.mode]) {\n          if (drag.mode === config.drag_mode.move) {\n            var dragHash = {};\n\n            if (this._isMultiselect()) {\n              var selectedTasksIds = gantt.getSelectedTasks();\n\n              if (selectedTasksIds.indexOf(drag.id) >= 0) {\n                dragHash = this.dragMultiple;\n              }\n            }\n\n            var dragProject = false;\n\n            if (gantt.isSummaryTask(task) && gantt.config.drag_project) {\n              var initialDrag = {};\n              initialDrag[drag.id] = utils.copy(drag);\n              dragProject = true;\n              dragHash = utils.mixin(initialDrag, this.dragMultiple);\n            }\n\n            var maxShift = this._find_max_shift(dragHash, shift);\n\n            if (maxShift !== undefined) {\n              shift = maxShift;\n            }\n\n            this._update_item_on_move(shift, drag.id, drag.mode, drag, e);\n\n            for (var i in dragHash) {\n              var childDrag = dragHash[i];\n\n              if (dragProject && childDrag.id != drag.id) {\n                gantt._bulk_dnd = true;\n              } // GS-454: Calculate the date shift in milliseconds instead of pixels\n\n\n              if (maxShift === undefined && (dragProject || Object.keys(dragHash).length > 1)) {\n                var shiftDate = gantt.dateFromPos(drag.start_x);\n                var multipleDragShift = curr_date - shiftDate;\n              }\n\n              this._update_item_on_move(shift, childDrag.id, childDrag.mode, childDrag, e, multipleDragShift);\n            }\n\n            gantt._bulk_dnd = false;\n          } else {\n            // for resize and progress\n            this._update_item_on_move(shift, drag.id, drag.mode, drag, e);\n          }\n\n          gantt._update_parents(drag.id);\n        }\n      }\n    },\n    on_mouse_down: function on_mouse_down(e, src) {\n      // on Mac we do not get onmouseup event when clicking right mouse button leaving us in dnd state\n      // let's ignore right mouse button then\n      if (e.button == 2 && e.button !== undefined) return;\n      var config = timeline.$getConfig();\n      var id = gantt.locate(e);\n      var task = null;\n\n      if (gantt.isTaskExists(id)) {\n        task = gantt.getTask(id);\n      }\n\n      if (gantt.isReadonly(task) || this.drag.mode) return;\n      this.clear_drag_state();\n      src = src || e.target || e.srcElement;\n      var className = domHelpers.getClassName(src);\n\n      var drag = this._get_drag_mode(className, src);\n\n      if (!className || !drag) {\n        if (src.parentNode) return this.on_mouse_down(e, src.parentNode);else return;\n      }\n\n      if (!drag) {\n        if (gantt.checkEvent(\"onMouseDown\") && gantt.callEvent(\"onMouseDown\", [className.split(\" \")[0]])) {\n          if (src.parentNode) return this.on_mouse_down(e, src.parentNode);\n        }\n      } else {\n        if (drag.mode && drag.mode != config.drag_mode.ignore && config[\"drag_\" + drag.mode]) {\n          id = gantt.locate(src);\n          task = gantt.copy(gantt.getTask(id) || {});\n\n          if (gantt.isReadonly(task)) {\n            this.clear_drag_state();\n            return false;\n          }\n\n          if (gantt.isSummaryTask(task) && !config.drag_project && drag.mode != config.drag_mode.progress) {\n            //only progress drag is allowed for tasks with flexible duration\n            this.clear_drag_state();\n            return;\n          }\n\n          drag.id = id;\n          var pos = domHelpers.getRelativeEventPosition(e, gantt.$task_data);\n          drag.start_x = pos.x;\n          drag.start_y = pos.y;\n          drag.obj = task;\n          this.drag.start_drag = drag;\n          this.drag.timestamp = Date.now();\n        } else this.clear_drag_state();\n      }\n    },\n    _fix_dnd_scale_time: function _fix_dnd_scale_time(task, drag) {\n      var config = timeline.$getConfig();\n      var unit = gantt.getScale().unit,\n          step = gantt.getScale().step;\n\n      if (!config.round_dnd_dates) {\n        unit = 'minute';\n        step = config.time_step;\n      }\n\n      function fixStart(task) {\n        if (!gantt.config.correct_work_time) return;\n        var config = timeline.$getConfig();\n        if (!gantt.isWorkTime(task.start_date, undefined, task)) task.start_date = gantt.calculateEndDate({\n          start_date: task.start_date,\n          duration: -1,\n          unit: config.duration_unit,\n          task: task\n        });\n      }\n\n      function fixEnd(task) {\n        if (!gantt.config.correct_work_time) return;\n        var config = timeline.$getConfig();\n        if (!gantt.isWorkTime(new Date(task.end_date - 1), undefined, task)) task.end_date = gantt.calculateEndDate({\n          start_date: task.end_date,\n          duration: 1,\n          unit: config.duration_unit,\n          task: task\n        });\n      }\n\n      if (drag.mode == config.drag_mode.resize) {\n        if (drag.left) {\n          task.start_date = gantt.roundDate({\n            date: task.start_date,\n            unit: unit,\n            step: step\n          });\n          fixStart(task);\n        } else {\n          task.end_date = gantt.roundDate({\n            date: task.end_date,\n            unit: unit,\n            step: step\n          });\n          fixEnd(task);\n        }\n      } else if (drag.mode == config.drag_mode.move) {\n        task.start_date = gantt.roundDate({\n          date: task.start_date,\n          unit: unit,\n          step: step\n        });\n        fixStart(task);\n        task.end_date = gantt.calculateEndDate(task);\n      }\n    },\n    _fix_working_times: function _fix_working_times(task, drag) {\n      var config = timeline.$getConfig();\n      var drag = drag || {\n        mode: config.drag_mode.move\n      };\n\n      if (drag.mode == config.drag_mode.resize) {\n        if (drag.left) {\n          task.start_date = gantt.getClosestWorkTime({\n            date: task.start_date,\n            dir: 'future',\n            task: task\n          });\n        } else {\n          task.end_date = gantt.getClosestWorkTime({\n            date: task.end_date,\n            dir: 'past',\n            task: task\n          });\n        }\n      } else if (drag.mode == config.drag_mode.move) {\n        gantt.correctTaskWorkTime(task);\n      }\n    },\n    _finalize_mouse_up: function _finalize_mouse_up(taskId, config, drag, e) {\n      var task = gantt.getTask(taskId);\n\n      if (config.work_time && config.correct_work_time) {\n        this._fix_working_times(task, drag);\n      }\n\n      this._fix_dnd_scale_time(task, drag);\n\n      if (!this._fireEvent(\"before_finish\", drag.mode, [taskId, drag.mode, gantt.copy(drag.obj), e])) {\n        //drag.obj._dhx_changed = false;\n        this.clear_drag_state();\n\n        if (taskId == drag.id) {\n          drag.obj._dhx_changed = false;\n          gantt.mixin(task, drag.obj, true);\n        }\n\n        gantt.refreshTask(task.id);\n      } else {\n        var drag_id = taskId;\n\n        gantt._init_task_timing(task);\n\n        this.clear_drag_state();\n        gantt.updateTask(task.id);\n\n        this._fireEvent(\"after_finish\", drag.mode, [drag_id, drag.mode, e]);\n      }\n    },\n    on_mouse_up: function on_mouse_up(e) {\n      var drag = this.drag;\n\n      if (drag.mode && drag.id) {\n        var config = timeline.$getConfig(); //drop\n\n        var task = gantt.getTask(drag.id);\n        var dragMultiple = this.dragMultiple;\n        var finalizingBulkMove = false;\n        var moveCount = 0;\n\n        if (drag.mode === config.drag_mode.move) {\n          if (gantt.isSummaryTask(task) && config.drag_project || this._isMultiselect()) {\n            finalizingBulkMove = true;\n            moveCount = Object.keys(dragMultiple).length;\n          }\n        }\n\n        var doFinalize = function doFinalize() {\n          if (finalizingBulkMove) {\n            for (var i in dragMultiple) {\n              this._finalize_mouse_up(dragMultiple[i].id, config, dragMultiple[i], e);\n            }\n          }\n\n          this._finalize_mouse_up(drag.id, config, drag, e);\n        };\n\n        if (finalizingBulkMove && moveCount > 10) {\n          // 10 - arbitrary threshold for bulk dnd at which we start doing complete repaint to refresh\n          gantt.batchUpdate(function () {\n            doFinalize.call(this);\n          }.bind(this));\n        } else {\n          doFinalize.call(this);\n        }\n      }\n\n      this.clear_drag_state();\n    },\n    _get_drag_mode: function _get_drag_mode(className, el) {\n      var config = timeline.$getConfig();\n      var modes = config.drag_mode;\n      var classes = (className || \"\").split(\" \");\n      var classname = classes[0];\n      var drag = {\n        mode: null,\n        left: null\n      };\n\n      switch (classname) {\n        case \"gantt_task_line\":\n        case \"gantt_task_content\":\n          drag.mode = modes.move;\n          break;\n\n        case \"gantt_task_drag\":\n          drag.mode = modes.resize;\n          var dragProperty = el.getAttribute(\"data-bind-property\");\n\n          if (dragProperty == \"start_date\") {\n            drag.left = true;\n          } else {\n            drag.left = false;\n          }\n\n          break;\n\n        case \"gantt_task_progress_drag\":\n          drag.mode = modes.progress;\n          break;\n\n        case \"gantt_link_control\":\n        case \"gantt_link_point\":\n          drag.mode = modes.ignore;\n          break;\n\n        default:\n          drag = null;\n          break;\n      }\n\n      return drag;\n    },\n    _start_dnd: function _start_dnd(e) {\n      var drag = this.drag = this.drag.start_drag;\n      delete drag.start_drag;\n      var cfg = timeline.$getConfig();\n      var id = drag.id;\n\n      if (!cfg[\"drag_\" + drag.mode] || !gantt.callEvent(\"onBeforeDrag\", [id, drag.mode, e]) || !this._fireEvent(\"before_start\", drag.mode, [id, drag.mode, e])) {\n        this.clear_drag_state();\n      } else {\n        delete drag.start_drag;\n        var task = gantt.getTask(id);\n\n        if (gantt.isReadonly(task)) {\n          this.clear_drag_state();\n          return;\n        }\n\n        if (this._isMultiselect()) {\n          // for don't move selected tasks when drag unselected task\n          var selectedTasksIds = gantt.getSelectedTasks();\n\n          if (selectedTasksIds.indexOf(drag.id) >= 0) {\n            helpers.forEach(selectedTasksIds, gantt.bind(function (taskId) {\n              var selectedTask = gantt.getTask(taskId);\n\n              if (gantt.isSummaryTask(selectedTask) && gantt.config.drag_project && drag.mode == cfg.drag_mode.move) {\n                this._addSubtasksToDragMultiple(selectedTask.id);\n              }\n\n              this.dragMultiple[taskId] = gantt.mixin({\n                id: selectedTask.id,\n                obj: gantt.copy(selectedTask)\n              }, this.drag);\n            }, this));\n          }\n        } // for move unselected summary\n\n\n        if (gantt.isSummaryTask(task) && gantt.config.drag_project && drag.mode == cfg.drag_mode.move) {\n          this._addSubtasksToDragMultiple(task.id);\n        }\n\n        gantt.callEvent(\"onTaskDragStart\", []);\n      }\n    },\n    _fireEvent: function _fireEvent(stage, mode, params) {\n      gantt.assert(this._events[stage], \"Invalid stage:{\" + stage + \"}\");\n      var trigger = this._events[stage][mode];\n      gantt.assert(trigger, \"Unknown after drop mode:{\" + mode + \"}\");\n      gantt.assert(params, \"Invalid event arguments\");\n      if (!gantt.checkEvent(trigger)) return true;\n      return gantt.callEvent(trigger, params);\n    },\n    round_task_dates: function round_task_dates(task) {\n      var drag_state = this.drag;\n      var config = timeline.$getConfig();\n\n      if (!drag_state) {\n        drag_state = {\n          mode: config.drag_mode.move\n        };\n      }\n\n      this._fix_dnd_scale_time(task, drag_state);\n    },\n    destructor: function destructor() {\n      this._domEvents.detachAll();\n    },\n    _isMultiselect: function _isMultiselect() {\n      return gantt.config.drag_multiple && !!(gantt.getSelectedTasks && gantt.getSelectedTasks().length > 0);\n    },\n    _addSubtasksToDragMultiple: function _addSubtasksToDragMultiple(summaryId) {\n      gantt.eachTask(function (child) {\n        this.dragMultiple[child.id] = gantt.mixin({\n          id: child.id,\n          obj: gantt.copy(child)\n        }, this.drag);\n      }, summaryId, this);\n    }\n  };\n}\n\nfunction initTaskDND() {\n  var _tasks_dnd;\n\n  return {\n    extend: function extend(timeline) {\n      timeline.roundTaskDates = function (task) {\n        _tasks_dnd.round_task_dates(task);\n      };\n    },\n    init: function init(timeline, gantt) {\n      _tasks_dnd = createTaskDND(timeline, gantt); // TODO: entry point for touch handlers, move touch to timeline\n\n      timeline._tasks_dnd = _tasks_dnd;\n      return _tasks_dnd.init(gantt);\n    },\n    destructor: function destructor() {\n      if (_tasks_dnd) {\n        _tasks_dnd.destructor();\n\n        _tasks_dnd = null;\n      }\n    }\n  };\n}\n\nmodule.exports = {\n  createTaskDND: initTaskDND\n};","var utils = require(\"../../../utils/utils\"),\n    taskDnD = require(\"./tasks_dnd\"),\n    linkDnD = require(\"./links_dnd\"),\n    domHelpers = require(\"../utils/dom_helpers\");\n\nvar initializer = function () {\n  return function (gantt) {\n    var services = gantt.$services;\n    return {\n      onCreated: function onCreated(timeline) {\n        var config = timeline.$config;\n        config.bind = utils.defined(config.bind) ? config.bind : \"task\";\n        config.bindLinks = utils.defined(config.bindLinks) ? config.bindLinks : \"link\";\n        timeline._linksDnD = linkDnD.createLinkDND();\n        timeline._tasksDnD = taskDnD.createTaskDND();\n\n        timeline._tasksDnD.extend(timeline);\n\n        this._mouseDelegates = require(\"../mouse_event_container\")(gantt);\n      },\n      onInitialized: function onInitialized(timeline) {\n        this._attachDomEvents(gantt);\n\n        this._attachStateProvider(gantt, timeline);\n\n        timeline._tasksDnD.init(timeline, gantt);\n\n        timeline._linksDnD.init(timeline, gantt);\n\n        if (timeline.$config.id == \"timeline\") {\n          this.extendDom(timeline);\n        }\n      },\n      onDestroyed: function onDestroyed(timeline) {\n        this._clearDomEvents(gantt);\n\n        this._clearStateProvider(gantt);\n\n        if (timeline._tasksDnD) {\n          timeline._tasksDnD.destructor();\n        }\n      },\n      extendDom: function extendDom(timeline) {\n        gantt.$task = timeline.$task;\n        gantt.$task_scale = timeline.$task_scale;\n        gantt.$task_data = timeline.$task_data;\n        gantt.$task_bg = timeline.$task_bg;\n        gantt.$task_links = timeline.$task_links;\n        gantt.$task_bars = timeline.$task_bars;\n      },\n      _clearDomEvents: function _clearDomEvents() {\n        this._mouseDelegates.destructor();\n\n        this._mouseDelegates = null;\n      },\n      _attachDomEvents: function _attachDomEvents(gantt) {\n        function _delete_link_handler(id, e) {\n          if (id && this.callEvent(\"onLinkDblClick\", [id, e])) {\n            var link = this.getLink(id);\n            if (this.isReadonly(link)) return;\n            var title = \"\";\n            var question = this.locale.labels.link + \" \" + this.templates.link_description(this.getLink(id)) + \" \" + this.locale.labels.confirm_link_deleting;\n            window.setTimeout(function () {\n              gantt._simple_confirm(question, title, function () {\n                gantt.deleteLink(id);\n              });\n            }, this.config.touch ? 300 : 1);\n          }\n        }\n\n        this._mouseDelegates.delegate(\"click\", \"gantt_task_link\", gantt.bind(function (e, trg) {\n          var id = this.locate(e, this.config.link_attribute);\n\n          if (id) {\n            this.callEvent(\"onLinkClick\", [id, e]);\n          }\n        }, gantt), this.$task);\n\n        this._mouseDelegates.delegate(\"click\", \"gantt_scale_cell\", gantt.bind(function (e, trg) {\n          var pos = domHelpers.getRelativeEventPosition(e, gantt.$task_data);\n          var date = gantt.dateFromPos(pos.x);\n          var coll = Math.floor(gantt.columnIndexByDate(date));\n          var coll_date = gantt.getScale().trace_x[coll];\n          gantt.callEvent(\"onScaleClick\", [e, coll_date]);\n        }, gantt), this.$task);\n\n        this._mouseDelegates.delegate(\"doubleclick\", \"gantt_task_link\", gantt.bind(function (e, id, trg) {\n          var id = this.locate(e, gantt.config.link_attribute);\n\n          _delete_link_handler.call(this, id, e);\n        }, gantt), this.$task);\n\n        this._mouseDelegates.delegate(\"doubleclick\", \"gantt_link_point\", gantt.bind(function (e, id, trg) {\n          var id = this.locate(e),\n              task = this.getTask(id);\n          var link = null;\n\n          if (trg.parentNode && domHelpers.getClassName(trg.parentNode)) {\n            if (domHelpers.getClassName(trg.parentNode).indexOf(\"_left\") > -1) {\n              link = task.$target[0];\n            } else {\n              link = task.$source[0];\n            }\n          }\n\n          if (link) _delete_link_handler.call(this, link, e);\n          return false;\n        }, gantt), this.$task);\n      },\n      _attachStateProvider: function _attachStateProvider(gantt, timeline) {\n        var self = timeline;\n        var state = services.getService(\"state\");\n        state.registerProvider(\"tasksTimeline\", function () {\n          return {\n            scale_unit: self._tasks ? self._tasks.unit : undefined,\n            scale_step: self._tasks ? self._tasks.step : undefined\n          };\n        });\n      },\n      _clearStateProvider: function _clearStateProvider() {\n        var state = services.getService(\"state\");\n        state.unregisterProvider(\"tasksTimeline\");\n      }\n    };\n  };\n}();\n\nmodule.exports = initializer;","var domHelpers = require(\"../../utils/dom_helpers\");\n/**\r\n * methods for highlighting current drag and drop position\r\n */\n\n\nfunction highlightPosition(target, root, grid) {\n  var markerPos = getTaskMarkerPosition(target, grid); // setting position of row\n\n  root.marker.style.left = markerPos.x + 9 + \"px\";\n  root.marker.style.width = markerPos.width + \"px\";\n  root.marker.style.overflow = \"hidden\";\n  var markerLine = root.markerLine;\n\n  if (!markerLine) {\n    markerLine = document.createElement(\"div\");\n    markerLine.className = \"gantt_drag_marker gantt_grid_dnd_marker\";\n    markerLine.innerHTML = \"<div class='gantt_grid_dnd_marker_line'></div>\";\n    markerLine.style.pointerEvents = \"none\";\n  }\n\n  if (target.child) {\n    highlightFolder(target, markerLine, grid);\n  } else {\n    highlightRow(target, markerLine, grid);\n  }\n\n  if (!root.markerLine) {\n    document.body.appendChild(markerLine);\n    root.markerLine = markerLine;\n  }\n}\n\nfunction removeLineHighlight(root) {\n  if (root.markerLine && root.markerLine.parentNode) {\n    root.markerLine.parentNode.removeChild(root.markerLine);\n  }\n\n  root.markerLine = null;\n}\n\nfunction highlightRow(target, markerLine, grid) {\n  var linePos = getLineMarkerPosition(target, grid);\n  var maxBottom = grid.$grid_data.getBoundingClientRect().bottom + window.scrollY;\n  markerLine.innerHTML = \"<div class='gantt_grid_dnd_marker_line'></div>\";\n  markerLine.style.left = linePos.x + \"px\";\n  markerLine.style.height = \"4px\";\n  var markerLineTop = linePos.y - 2;\n  markerLine.style.top = markerLineTop + \"px\";\n  markerLine.style.width = linePos.width + \"px\";\n\n  if (markerLineTop > maxBottom) {\n    markerLine.style.top = maxBottom + 'px';\n  }\n\n  return markerLine;\n}\n\nfunction highlightFolder(target, markerFolder, grid) {\n  var id = target.targetParent;\n  var pos = gridToPageCoordinates({\n    x: 0,\n    y: grid.getItemTop(id)\n  }, grid);\n  var maxBottom = grid.$grid_data.getBoundingClientRect().bottom + window.scrollY;\n  var folderHighlightWidth = setWidthWithinContainer(grid.$gantt, grid.$grid_data.offsetWidth);\n  markerFolder.innerHTML = \"<div class='gantt_grid_dnd_marker_folder'></div>\";\n  markerFolder.style.width = folderHighlightWidth + \"px\";\n  markerFolder.style.top = pos.y + \"px\";\n  markerFolder.style.left = pos.x + \"px\";\n  markerFolder.style.height = grid.getItemHeight(id) + \"px\";\n\n  if (pos.y > maxBottom) {\n    markerFolder.style.top = maxBottom + 'px';\n  }\n\n  return markerFolder;\n}\n\nfunction getLineMarkerPosition(target, grid) {\n  var store = grid.$config.rowStore;\n  var pos = {\n    x: 0,\n    y: 0\n  };\n  var indentNode = grid.$grid_data.querySelector(\".gantt_tree_indent\");\n  var indent = 15;\n  var level = 0;\n\n  if (indentNode) {\n    indent = indentNode.offsetWidth;\n  }\n\n  var iconWidth = 40;\n\n  if (target.targetId !== store.$getRootId()) {\n    var itemTop = grid.getItemTop(target.targetId);\n    var itemHeight = grid.getItemHeight(target.targetId);\n    level = store.exists(target.targetId) ? store.calculateItemLevel(store.getItem(target.targetId)) : 0;\n\n    if (target.prevSibling) {\n      pos.y = itemTop;\n    } else if (target.nextSibling) {\n      var childCount = 0;\n      store.eachItem(function (child) {\n        if (store.getIndexById(child.id) !== -1) childCount++;\n      }, target.targetId);\n      pos.y = itemTop + itemHeight + childCount * itemHeight;\n    } else {\n      pos.y = itemTop + itemHeight;\n      level += 1;\n    }\n  }\n\n  pos.x = iconWidth + level * indent;\n  pos.width = setWidthWithinContainer(grid.$gantt, Math.max(grid.$grid_data.offsetWidth - pos.x, 0), pos.x);\n  return gridToPageCoordinates(pos, grid);\n}\n\nfunction gridToPageCoordinates(pos, grid) {\n  var gridPos = domHelpers.getNodePosition(grid.$grid_data);\n  pos.x += gridPos.x + grid.$grid.scrollLeft;\n  pos.y += gridPos.y - grid.$grid_data.scrollTop;\n  return pos;\n}\n\nfunction getTaskMarkerPosition(e, grid) {\n  var pos = domHelpers.getNodePosition(grid.$grid_data);\n  var ePos = domHelpers.getRelativeEventPosition(e, grid.$grid_data); // row offset\n\n  var x = pos.x + grid.$grid.scrollLeft;\n  var y = ePos.y - 10;\n  var rowHeight = grid.getItemHeight(e.targetId); // prevent moving row out of grid_data container\n\n  if (y < pos.y) y = pos.y;\n  var gridHeight = grid.getTotalHeight();\n  if (y > pos.y + gridHeight - rowHeight) y = pos.y + gridHeight - rowHeight;\n  pos.x = x;\n  pos.y = y;\n  pos.width = setWidthWithinContainer(grid.$gantt, pos.width, 9);\n  return pos;\n}\n\nfunction setWidthWithinContainer(gantt, width) {\n  var offset = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0;\n  var containerSize = domHelpers.getNodePosition(gantt.$root);\n\n  if (width > containerSize.width) {\n    width = containerSize.width - offset - 2;\n  }\n\n  return width;\n}\n\nmodule.exports = {\n  removeLineHighlight: removeLineHighlight,\n  highlightPosition: highlightPosition\n};","/**\r\n * resolve dnd position of the task when gantt.config.order_branch_free = true\r\n */\nvar dropTarget = require(\"./drop_target\");\n\nmodule.exports = function getMultiLevelDropPosition(dndTaskId, targetTaskId, relTargetPos, eventTop, store) {\n  var result;\n\n  if (targetTaskId !== store.$getRootId()) {\n    if (relTargetPos < 0.25) {\n      result = dropTarget.prevSiblingTarget(dndTaskId, targetTaskId, store);\n    } else if (relTargetPos > 0.60 && !(store.hasChild(targetTaskId) && store.getItem(targetTaskId).$open)) {\n      result = dropTarget.nextSiblingTarget(dndTaskId, targetTaskId, store);\n    } else {\n      result = dropTarget.firstChildTarget(dndTaskId, targetTaskId, store);\n    }\n  } else {\n    var rootId = store.$getRootId();\n\n    if (store.hasChild(rootId) && eventTop >= 0) {\n      result = dropTarget.lastChildTarget(dndTaskId, rootId, store);\n    } else {\n      result = dropTarget.firstChildTarget(dndTaskId, rootId, store);\n    }\n  }\n\n  return result;\n};","/**\r\n * resolve dnd position of the task when gantt.config.order_branch_free = false\r\n */\nvar dropTarget = require(\"./drop_target\");\n\nfunction getLast(store) {\n  var current = store.getNext();\n\n  while (store.exists(current)) {\n    var next = store.getNext(current);\n\n    if (!store.exists(next)) {\n      return current;\n    } else {\n      current = next;\n    }\n  }\n\n  return null;\n}\n\nfunction findClosesTarget(dndTaskId, taskId, allowedLevel, store, up) {\n  var prev = taskId;\n\n  while (store.exists(prev)) {\n    var targetLevel = store.calculateItemLevel(store.getItem(prev));\n\n    if ((targetLevel === allowedLevel || targetLevel === allowedLevel - 1) && store.getBranchIndex(prev) > -1) {\n      break;\n    } else {\n      prev = up ? store.getPrev(prev) : store.getNext(prev);\n    }\n  }\n\n  if (store.exists(prev)) {\n    if (store.calculateItemLevel(store.getItem(prev)) === allowedLevel) {\n      return up ? dropTarget.nextSiblingTarget(dndTaskId, prev, store) : dropTarget.prevSiblingTarget(dndTaskId, prev, store);\n    } else {\n      return dropTarget.firstChildTarget(dndTaskId, prev, store);\n    }\n  }\n\n  return null;\n}\n\nfunction findTargetAbove(dndTaskId, taskId, allowedLevel, store) {\n  return findClosesTarget(dndTaskId, taskId, allowedLevel, store, true);\n}\n\nfunction findTargetBelow(dndTaskId, taskId, allowedLevel, store) {\n  return findClosesTarget(dndTaskId, taskId, allowedLevel, store, false);\n}\n\nmodule.exports = function getSameLevelDropPosition(dndTaskId, targetTaskId, relTargetPos, eventTop, store, level) {\n  var result;\n\n  if (targetTaskId !== store.$getRootId()) {\n    var targetTask = store.getItem(targetTaskId);\n    var targetLevel = store.calculateItemLevel(targetTask);\n\n    if (targetLevel === level) {\n      var prevSibling = store.getPrevSibling(targetTaskId);\n\n      if (relTargetPos < 0.5 && !prevSibling) {\n        result = dropTarget.prevSiblingTarget(dndTaskId, targetTaskId, store);\n      } else {\n        if (relTargetPos < 0.5) {\n          targetTaskId = prevSibling;\n        }\n\n        result = dropTarget.nextSiblingTarget(dndTaskId, targetTaskId, store);\n      }\n    } else if (targetLevel > level) {\n      store.eachParent(function (parent) {\n        if (store.calculateItemLevel(parent) === level) {\n          targetTaskId = parent.id;\n        }\n      }, targetTask);\n      result = findTargetAbove(dndTaskId, targetTaskId, level, store);\n    } else {\n      var targetAbove = findTargetAbove(dndTaskId, targetTaskId, level, store);\n      var targetBelow = findTargetBelow(dndTaskId, targetTaskId, level, store);\n      result = relTargetPos < 0.5 ? targetAbove : targetBelow;\n    }\n  } else {\n    var rootId = store.$getRootId();\n    var rootLevel = store.getChildren(rootId);\n    result = dropTarget.createDropTargetObject();\n\n    if (rootLevel.length && eventTop >= 0) {\n      result = findTargetAbove(dndTaskId, getLast(store), level, store);\n    } else {\n      result = findTargetBelow(dndTaskId, rootId, level, store);\n    }\n  }\n\n  return result;\n};","var domHelpers = require(\"../utils/dom_helpers\");\n\nvar dropTarget = require(\"./tasks_grid_dnd_marker_helpers/drop_target\");\n\nvar getLockedLevelTarget = require(\"./tasks_grid_dnd_marker_helpers/locked_level\");\n\nvar getMultiLevelTarget = require(\"./tasks_grid_dnd_marker_helpers/multi_level\");\n\nvar higlighter = require(\"./tasks_grid_dnd_marker_helpers/highlight\");\n\nvar isPlaceholderTask = require(\"../../../utils/placeholder_task\");\n\nfunction _init_dnd(gantt, grid) {\n  var DnD = gantt.$services.getService(\"dnd\");\n\n  if (!grid.$config.bind || !gantt.getDatastore(grid.$config.bind)) {\n    return;\n  }\n\n  function locate(e) {\n    return domHelpers.locateAttribute(e, grid.$config.item_attribute);\n  }\n\n  function getStore() {\n    return gantt.getDatastore(grid.$config.bind);\n  }\n\n  function checkPlaceholderTask(id) {\n    return isPlaceholderTask(id, gantt, getStore());\n  }\n\n  var dnd = new DnD(grid.$grid_data, {\n    updates_per_second: 60\n  });\n  if (gantt.defined(grid.$getConfig().dnd_sensitivity)) dnd.config.sensitivity = grid.$getConfig().dnd_sensitivity;\n  dnd.attachEvent(\"onBeforeDragStart\", gantt.bind(function (obj, e) {\n    var el = locate(e);\n    if (!el) return false;\n    if (gantt.hideQuickInfo) gantt._hideQuickInfo();\n\n    if (domHelpers.closest(e.target, \".gantt_grid_editor_placeholder\")) {\n      return false;\n    }\n\n    var id = el.getAttribute(grid.$config.item_attribute);\n    var datastore = grid.$config.rowStore;\n    var task = datastore.getItem(id);\n    if (gantt.isReadonly(task) || checkPlaceholderTask(id)) return false;\n    dnd.config.initial_open_state = task.$open;\n\n    if (!gantt.callEvent(\"onRowDragStart\", [id, e.target || e.srcElement, e])) {\n      return false;\n    }\n  }, gantt));\n  dnd.attachEvent(\"onAfterDragStart\", gantt.bind(function (obj, e) {\n    var el = locate(e);\n    dnd.config.marker.innerHTML = el.outerHTML;\n    var element = dnd.config.marker.firstChild;\n\n    if (element) {\n      dnd.config.marker.style.opacity = 0.4;\n      element.style.position = \"static\";\n      element.style.pointerEvents = \"none\";\n    }\n\n    dnd.config.id = el.getAttribute(grid.$config.item_attribute);\n    var store = grid.$config.rowStore;\n    var task = store.getItem(dnd.config.id);\n    dnd.config.level = store.calculateItemLevel(task);\n    dnd.config.drop_target = dropTarget.createDropTargetObject({\n      targetParent: store.getParent(task.id),\n      targetIndex: store.getBranchIndex(task.id),\n      targetId: task.id,\n      nextSibling: true\n    });\n    task.$open = false;\n    task.$transparent = true;\n    this.refreshData();\n  }, gantt));\n\n  function getTargetTaskId(e) {\n    var y = domHelpers.getRelativeEventPosition(e, grid.$grid_data).y;\n    var store = grid.$config.rowStore;\n\n    if (!document.doctype) {\n      y += window.scrollY;\n    }\n\n    y = y || 0; // limits for the marker according to the layout layer\n\n    var scrollPos = grid.$state.scrollTop || 0;\n    var maxBottom = gantt.$grid_data.getBoundingClientRect().height + scrollPos + window.scrollY;\n    var minTop = scrollPos;\n    var firstVisibleTaskIndex = grid.getItemIndexByTopPosition(grid.$state.scrollTop);\n\n    if (!store.exists(firstVisibleTaskIndex)) {\n      firstVisibleTaskIndex = store.countVisible() - 1;\n    }\n\n    if (firstVisibleTaskIndex < 0) {\n      return store.$getRootId();\n    }\n\n    var firstVisibleTaskId = store.getIdByIndex(firstVisibleTaskIndex);\n    var firstVisibleTaskPos = grid.$state.scrollTop / grid.getItemHeight(firstVisibleTaskId);\n    var hiddenTaskPart = firstVisibleTaskPos - Math.floor(firstVisibleTaskPos);\n\n    if (hiddenTaskPart > 0.1 && hiddenTaskPart < 0.9) {\n      maxBottom = maxBottom - grid.getItemHeight(firstVisibleTaskId) * hiddenTaskPart;\n      minTop = minTop + grid.getItemHeight(firstVisibleTaskId) * (1 - hiddenTaskPart);\n    } // GS-715. The placeholder task row shouldn't be draggable below the Gantt container\n\n\n    var gridPosition = domHelpers.getNodePosition(grid.$grid_data);\n    var gridBottom = gridPosition.y + gridPosition.height;\n    var placeholderRowHeight = dnd.config.marker.offsetHeight;\n\n    if (y + placeholderRowHeight + window.scrollY >= maxBottom) {\n      dnd.config.marker.style.top = gridBottom - placeholderRowHeight + \"px\";\n    }\n\n    if (y >= maxBottom) {\n      y = maxBottom;\n    } else if (y <= minTop) {\n      y = minTop;\n      dnd.config.marker.style.top = gridPosition.y + \"px\";\n    }\n\n    var index = grid.getItemIndexByTopPosition(y);\n\n    if (index > store.countVisible() - 1 || index < 0) {\n      return store.$getRootId();\n    }\n\n    var targetId = store.getIdByIndex(index);\n\n    if (checkPlaceholderTask(targetId)) {\n      return store.getPrevSibling(targetId);\n    }\n\n    return store.getIdByIndex(index);\n  }\n\n  function getDropPosition(e) {\n    var targetTaskId = getTargetTaskId(e);\n    var relTargetPos = null;\n    var store = grid.$config.rowStore;\n    var config = grid.$getConfig();\n    var lockLevel = !config.order_branch_free;\n    var eventTop = domHelpers.getRelativeEventPosition(e, grid.$grid_data).y;\n\n    if (!document.doctype) {\n      eventTop += window.scrollY;\n    }\n\n    if (targetTaskId !== store.$getRootId()) {\n      var rowTop = grid.getItemTop(targetTaskId);\n      var rowHeight = grid.getItemHeight(targetTaskId);\n      relTargetPos = (eventTop - rowTop) / rowHeight;\n    }\n\n    var result;\n\n    if (!lockLevel) {\n      result = getMultiLevelTarget(dnd.config.id, targetTaskId, relTargetPos, eventTop, store);\n    } else {\n      result = getLockedLevelTarget(dnd.config.id, targetTaskId, relTargetPos, eventTop, store, dnd.config.level);\n\n      if (result && result.targetParent && checkPlaceholderTask(result.targetParent)) {\n        targetTaskId = store.getPrevSibling(result.targetParent);\n        result = getLockedLevelTarget(dnd.config.id, targetTaskId, relTargetPos, eventTop, store, dnd.config.level);\n      }\n    }\n\n    return result;\n  }\n\n  dnd.attachEvent(\"onDragMove\", gantt.bind(function (obj, e) {\n    var target = getDropPosition(e);\n\n    if (!target || gantt.callEvent(\"onBeforeRowDragMove\", [dnd.config.id, target.targetParent, target.targetIndex]) === false) {\n      target = dropTarget.createDropTargetObject(dnd.config.drop_target);\n    }\n\n    higlighter.highlightPosition(target, dnd.config, grid);\n    dnd.config.drop_target = target;\n\n    gantt._waiAria.reorderMarkerAttr(dnd.config.marker);\n\n    this.callEvent(\"onRowDragMove\", [dnd.config.id, target.targetParent, target.targetIndex]);\n    return true;\n  }, gantt));\n  dnd.attachEvent(\"onDragEnd\", gantt.bind(function () {\n    var store = grid.$config.rowStore;\n    var task = store.getItem(dnd.config.id);\n    higlighter.removeLineHighlight(dnd.config);\n    task.$transparent = false;\n    task.$open = dnd.config.initial_open_state;\n    var target = dnd.config.drop_target;\n\n    if (this.callEvent(\"onBeforeRowDragEnd\", [dnd.config.id, target.targetParent, target.targetIndex]) === false) {\n      task.$drop_target = null;\n    } else {\n      store.move(dnd.config.id, target.targetIndex, target.targetParent);\n      gantt.render();\n      this.callEvent(\"onRowDragEnd\", [dnd.config.id, target.targetParent, target.targetIndex]);\n    }\n\n    store.refresh(task.id);\n  }, gantt));\n}\n\nmodule.exports = {\n  init: _init_dnd\n};","var domHelpers = require(\"../utils/dom_helpers\");\n\nvar isPlaceholderTask = require(\"../../../utils/placeholder_task\");\n\nfunction _init_dnd(gantt, grid) {\n  var DnD = gantt.$services.getService(\"dnd\");\n\n  if (!grid.$config.bind || !gantt.getDatastore(grid.$config.bind)) {\n    return;\n  }\n\n  function locate(e) {\n    return domHelpers.locateAttribute(e, grid.$config.item_attribute);\n  }\n\n  function getStore() {\n    return gantt.getDatastore(grid.$config.bind);\n  }\n\n  function checkPlaceholderTask(id) {\n    return isPlaceholderTask(id, gantt, getStore());\n  }\n\n  var dnd = new DnD(grid.$grid_data, {\n    updates_per_second: 60\n  });\n  if (gantt.defined(grid.$getConfig().dnd_sensitivity)) dnd.config.sensitivity = grid.$getConfig().dnd_sensitivity;\n  dnd.attachEvent(\"onBeforeDragStart\", gantt.bind(function (obj, e) {\n    var el = locate(e);\n    if (!el) return false;\n    if (gantt.hideQuickInfo) gantt._hideQuickInfo();\n\n    if (domHelpers.closest(e.target, \".gantt_grid_editor_placeholder\")) {\n      return false;\n    }\n\n    var id = el.getAttribute(grid.$config.item_attribute);\n    if (checkPlaceholderTask(id)) return false;\n    var datastore = getStore();\n    var task = datastore.getItem(id);\n    if (gantt.isReadonly(task)) return false;\n    dnd.config.initial_open_state = task.$open;\n\n    if (!gantt.callEvent(\"onRowDragStart\", [id, e.target || e.srcElement, e])) {\n      return false;\n    }\n  }, gantt));\n  dnd.attachEvent(\"onAfterDragStart\", gantt.bind(function (obj, e) {\n    var el = locate(e);\n    dnd.config.marker.innerHTML = el.outerHTML;\n    var element = dnd.config.marker.firstChild;\n\n    if (element) {\n      element.style.position = \"static\";\n    }\n\n    dnd.config.id = el.getAttribute(grid.$config.item_attribute);\n    var store = getStore();\n    var task = store.getItem(dnd.config.id);\n    dnd.config.index = store.getBranchIndex(dnd.config.id);\n    dnd.config.parent = task.parent;\n    task.$open = false;\n    task.$transparent = true;\n    this.refreshData();\n  }, gantt));\n\n  dnd.lastTaskOfLevel = function (level) {\n    var last_item = null;\n    var store = getStore();\n    var tasks = store.getItems();\n\n    for (var i = 0, len = tasks.length; i < len; i++) {\n      if (tasks[i].$level == level) {\n        last_item = tasks[i];\n      }\n    }\n\n    return last_item ? last_item.id : null;\n  };\n\n  dnd._getGridPos = gantt.bind(function (e) {\n    var pos = domHelpers.getNodePosition(grid.$grid_data); // row offset\n\n    var x = pos.x + grid.$grid.scrollLeft;\n    var y = e.pos.y - 10;\n    var rowHeight = grid.getItemHeight(dnd.config.id); // prevent moving row out of grid_data container\n\n    if (y < pos.y) y = pos.y;\n    var gridHeight = grid.getTotalHeight();\n    if (y > pos.y + gridHeight - rowHeight) y = pos.y + gridHeight - rowHeight;\n    var maxBottom = pos.y + pos.height;\n\n    if (y > maxBottom - rowHeight) {\n      y = maxBottom - rowHeight;\n    }\n\n    pos.x = x;\n    pos.y = y;\n    return pos;\n  }, gantt);\n  dnd._getTargetY = gantt.bind(function (e) {\n    var pos = domHelpers.getNodePosition(grid.$grid_data);\n    var scrollPos = grid.$state.scrollTop || 0;\n    var maxBottom = gantt.$grid_data.getBoundingClientRect().height + scrollPos;\n    var y = e.pageY - pos.y + scrollPos;\n\n    if (y > maxBottom) {\n      y = maxBottom;\n    } else if (y < scrollPos) {\n      y = scrollPos;\n    }\n\n    return y;\n  }, gantt);\n  dnd._getTaskByY = gantt.bind(function (y, dropIndex) {\n    var store = getStore();\n    y = y || 0;\n    var index = grid.getItemIndexByTopPosition(y);\n    index = dropIndex < index ? index - 1 : index;\n    if (index > store.countVisible() - 1) return null;\n    return store.getIdByIndex(index);\n  }, gantt);\n  dnd.attachEvent(\"onDragMove\", gantt.bind(function (obj, e) {\n    var gridDataSizes = gantt.$grid_data.getBoundingClientRect();\n    var maxBottom = gridDataSizes.height + gridDataSizes.y + (grid.$state.scrollTop || 0) + window.scrollY;\n    var dd = dnd.config;\n\n    var pos = dnd._getGridPos(e);\n\n    gantt._waiAria.reorderMarkerAttr(dd.marker);\n\n    var config = grid.$getConfig(),\n        store = getStore(); // setting position of row\n\n    if (pos.y < maxBottom) {\n      dd.marker.style.top = pos.y + \"px\";\n    } else {\n      dd.marker.style.top = maxBottom + \"px\";\n    }\n\n    dd.marker.style.left = pos.x + 10 + \"px\";\n    var containerSize = domHelpers.getNodePosition(gantt.$root);\n\n    if (pos.width > containerSize.width) {\n      dd.marker.style.width = containerSize.width - 10 - 2 + \"px\";\n      dd.marker.style.overflow = \"hidden\";\n    } // highlight row when mouseover\n\n\n    var item = store.getItem(dnd.config.id);\n\n    var targetY = dnd._getTargetY(e);\n\n    var el = dnd._getTaskByY(targetY, store.getIndexById(item.id));\n\n    if (!store.exists(el)) {\n      el = dnd.lastTaskOfLevel(config.order_branch_free ? item.$level : 0);\n\n      if (el == dnd.config.id) {\n        el = null;\n      }\n    }\n\n    function allowedLevel(next, item) {\n      return !store.isChildOf(over.id, item.id) && (next.$level == item.$level || config.order_branch_free);\n    }\n\n    if (store.exists(el)) {\n      var over = store.getItem(el);\n      var itemTop = grid.getItemTop(over.id);\n      var itemHeight = grid.getItemHeight(over.id);\n\n      if (itemTop + itemHeight / 2 < targetY) {\n        //hovering over bottom part of item, check can be drop to bottom\n        var index = store.getIndexById(over.id);\n        var nextId = store.getNext(over.id); //adds +1 when hovering over placeholder\n\n        var next = store.getItem(nextId);\n\n        if (checkPlaceholderTask(nextId)) {\n          var prevId = store.getPrev(next.id);\n          next = store.getItem(prevId);\n        }\n\n        if (next) {\n          if (next.id != item.id) {\n            over = next; //there is a valid target\n          } else {\n            if (config.order_branch_free) {\n              if (!(store.isChildOf(item.id, over.id) && store.getChildren(over.id).length == 1)) return;else {\n                store.move(item.id, store.getBranchIndex(over.id) + 1, store.getParent(over.id));\n                return;\n              }\n            } else {\n              return;\n            }\n          }\n        } else {\n          //we at end of the list, check and drop at the end of list\n          nextId = store.getIdByIndex(index);\n          next = store.getItem(nextId);\n\n          if (checkPlaceholderTask(nextId)) {\n            var prevId = store.getPrev(next.id);\n            next = store.getItem(prevId);\n          }\n\n          if (allowedLevel(next, item) && next.id != item.id) {\n            store.move(item.id, -1, store.getParent(next.id));\n            return;\n          }\n        }\n      } else if (config.order_branch_free) {\n        if (over.id != item.id && allowedLevel(over, item) && !checkPlaceholderTask(over.id)) {\n          if (!store.hasChild(over.id)) {\n            over.$open = true;\n            store.move(item.id, -1, over.id);\n            return;\n          }\n\n          if (store.getIndexById(over.id) || itemHeight / 3 < targetY) return;\n        }\n      } //if item is on different level, check the one before it\n\n\n      var index = store.getIndexById(over.id),\n          prevId = store.getIdByIndex(index - 1);\n      var prev = store.getItem(prevId);\n      var shift = 1;\n\n      while ((!prev || prev.id == over.id) && index - shift >= 0) {\n        prevId = store.getIdByIndex(index - shift);\n        prev = store.getItem(prevId);\n        shift++;\n      }\n\n      if (item.id == over.id || checkPlaceholderTask(over.id)) return; //replacing item under cursor\n\n      if (allowedLevel(over, item) && item.id != over.id) {\n        store.move(item.id, 0, 0, over.id);\n      } else if (over.$level == item.$level - 1 && !store.getChildren(over.id).length) {\n        store.move(item.id, 0, over.id);\n      } else if (prev && allowedLevel(prev, item) && item.id != prev.id) {\n        store.move(item.id, -1, store.getParent(prev.id));\n      }\n    }\n\n    return true;\n  }, gantt));\n  dnd.attachEvent(\"onDragEnd\", gantt.bind(function () {\n    var store = getStore();\n    var task = store.getItem(dnd.config.id);\n    task.$transparent = false;\n    task.$open = dnd.config.initial_open_state;\n\n    if (this.callEvent(\"onBeforeRowDragEnd\", [dnd.config.id, dnd.config.parent, dnd.config.index]) === false) {\n      store.move(dnd.config.id, dnd.config.index, dnd.config.parent);\n      task.$drop_target = null;\n    } else {\n      this.callEvent(\"onRowDragEnd\", [dnd.config.id, task.$drop_target]);\n    }\n\n    gantt.render();\n    this.refreshData();\n  }, gantt));\n}\n\nmodule.exports = {\n  init: _init_dnd\n};","var utils = require(\"../../../utils/utils\");\n\nvar rowDnd = require(\"./tasks_grid_dnd\");\n\nvar rowDndMarker = require(\"./tasks_grid_dnd_marker\");\n\nvar initializer = function () {\n  return function (gantt) {\n    return {\n      onCreated: function onCreated(grid) {\n        grid.$config = utils.mixin(grid.$config, {\n          bind: \"task\"\n        });\n\n        if (grid.$config.id == \"grid\") {\n          this.extendGantt(grid);\n          gantt.ext.inlineEditors = gantt.ext._inlineEditors.createEditors(grid);\n          gantt.ext.inlineEditors.init();\n        }\n\n        this._mouseDelegates = require(\"../mouse_event_container\")(gantt);\n      },\n      onInitialized: function onInitialized(grid) {\n        var config = grid.$getConfig();\n\n        if (config.order_branch) {\n          if (config.order_branch == \"marker\") {\n            rowDndMarker.init(grid.$gantt, grid);\n          } else {\n            rowDnd.init(grid.$gantt, grid);\n          }\n        }\n\n        this.initEvents(grid, gantt);\n\n        if (grid.$config.id == \"grid\") {\n          this.extendDom(grid);\n        }\n      },\n      onDestroyed: function onDestroyed(grid) {\n        if (grid.$config.id == \"grid\") {\n          gantt.ext.inlineEditors.destructor();\n        }\n\n        this.clearEvents(grid, gantt);\n      },\n      initEvents: function initEvents(grid, gantt) {\n        this._mouseDelegates.delegate(\"click\", \"gantt_row\", gantt.bind(function (e, id, trg) {\n          var config = grid.$getConfig();\n\n          if (id !== null) {\n            var task = this.getTask(id);\n            if (config.scroll_on_click && !gantt._is_icon_open_click(e)) this.showDate(task.start_date);\n            gantt.callEvent(\"onTaskRowClick\", [id, trg]);\n          }\n        }, gantt), grid.$grid);\n\n        this._mouseDelegates.delegate(\"click\", \"gantt_grid_head_cell\", gantt.bind(function (e, id, trg) {\n          var column = trg.getAttribute(\"data-column-id\");\n          if (!gantt.callEvent(\"onGridHeaderClick\", [column, e])) return;\n          var config = grid.$getConfig();\n\n          if (column == \"add\") {\n            var mouseEvents = gantt.$services.getService(\"mouseEvents\");\n            mouseEvents.callHandler(\"click\", \"gantt_add\", grid.$grid, [e, config.root_id]);\n            return;\n          }\n\n          if (config.sort && column) {\n            // GS-929: if there is no column name, we cannot sort the column\n            var sorting_method = column,\n                conf;\n\n            for (var i = 0; i < config.columns.length; i++) {\n              if (config.columns[i].name == column) {\n                conf = config.columns[i];\n                break;\n              }\n            }\n\n            if (conf && conf.sort !== undefined && conf.sort !== true) {\n              sorting_method = conf.sort;\n\n              if (!sorting_method) {\n                // column sort property 'false', no sorting\n                return;\n              }\n            }\n\n            var sort = this._sort && this._sort.direction && this._sort.name == column ? this._sort.direction : \"desc\"; // invert sort direction\n\n            sort = sort == \"desc\" ? \"asc\" : \"desc\";\n            this._sort = {\n              name: column,\n              direction: sort\n            };\n            this.sort(sorting_method, sort == \"desc\");\n          }\n        }, gantt), grid.$grid);\n\n        this._mouseDelegates.delegate(\"click\", \"gantt_add\", gantt.bind(function (e, id, trg) {\n          var config = grid.$getConfig();\n          if (config.readonly) return;\n          var item = {};\n          this.createTask(item, id ? id : gantt.config.root_id);\n          return false;\n        }, gantt), grid.$grid);\n      },\n      clearEvents: function clearEvents(grid, gantt) {\n        this._mouseDelegates.destructor();\n\n        this._mouseDelegates = null;\n      },\n      extendDom: function extendDom(grid) {\n        gantt.$grid = grid.$grid;\n        gantt.$grid_scale = grid.$grid_scale;\n        gantt.$grid_data = grid.$grid_data;\n      },\n      extendGantt: function extendGantt(grid) {\n        gantt.getGridColumns = gantt.bind(grid.getGridColumns, grid);\n        grid.attachEvent(\"onColumnResizeStart\", function () {\n          return gantt.callEvent(\"onColumnResizeStart\", arguments);\n        });\n        grid.attachEvent(\"onColumnResize\", function () {\n          return gantt.callEvent(\"onColumnResize\", arguments);\n        });\n        grid.attachEvent(\"onColumnResizeEnd\", function () {\n          return gantt.callEvent(\"onColumnResizeEnd\", arguments);\n        });\n        grid.attachEvent(\"onColumnResizeComplete\", function (columns, totalWidth) {\n          gantt.config.grid_width = totalWidth;\n        });\n        grid.attachEvent(\"onBeforeRowResize\", function () {\n          return gantt.callEvent(\"onBeforeRowResize\", arguments);\n        });\n        grid.attachEvent(\"onRowResize\", function () {\n          return gantt.callEvent(\"onRowResize\", arguments);\n        });\n        grid.attachEvent(\"onBeforeRowResizeEnd\", function () {\n          return gantt.callEvent(\"onBeforeRowResizeEnd\", arguments);\n        });\n        grid.attachEvent(\"onAfterRowResize\", function () {\n          return gantt.callEvent(\"onAfterRowResize\", arguments);\n        });\n      }\n    };\n  };\n}();\n\nmodule.exports = initializer;","var getRowRectangle = require(\"./viewport/get_grid_row_rectangle\");\n\nvar getVisibleRange = require(\"./viewport/get_visible_bars_range\");\n\nfunction createGridTaskRowResizerRender(gantt) {\n  function _render_grid_item(item, view, viewport) {\n    var config = view.$getConfig();\n    var resize_el = document.createElement(\"div\");\n    resize_el.className = \"gantt_task_grid_row_resize_wrap\";\n    resize_el.style.top = view.getItemTop(item.id) + view.getItemHeight(item.id) + \"px\";\n    resize_el.innerHTML = \"<div class='gantt_task_grid_row_resize' role='cell'></div>\";\n    resize_el.setAttribute(config.task_grid_row_resizer_attribute, item.id);\n\n    gantt._waiAria.rowResizerAttr(resize_el);\n\n    return resize_el;\n  }\n\n  return {\n    render: _render_grid_item,\n    update: null,\n    getRectangle: getRowRectangle,\n    getVisibleRange: getVisibleRange\n  };\n}\n\nmodule.exports = createGridTaskRowResizerRender;","var getRectangle = require(\"./viewport/get_bg_row_rectangle\");\n\nvar getVisibleRange = require(\"./viewport/get_visible_bars_range\");\n\nvar getVisibleCellsRange = require(\"./viewport/get_visible_cells_range\");\n\nvar isColumnVisible = require(\"./viewport/is_column_visible\");\n\nvar resourceTimetable = require(\"../../resource_timetable_builder\");\n\nfunction renderBar(level, start, end, timeline) {\n  var top = (1 - (level * 1 || 0)) * 100;\n  var left = timeline.posFromDate(start);\n  var right = timeline.posFromDate(end);\n  var element = document.createElement(\"div\");\n  element.className = \"gantt_histogram_hor_bar\";\n  element.style.top = top + '%';\n  element.style.left = left + \"px\";\n  element.style.width = right - left + 1 + \"px\";\n  return element;\n}\n\nfunction renderConnection(prevLevel, nextLevel, left) {\n  if (prevLevel === nextLevel) {\n    return null;\n  }\n\n  var top = 1 - Math.max(prevLevel, nextLevel);\n  var height = Math.abs(prevLevel - nextLevel);\n  var element = document.createElement(\"div\");\n  element.className = \"gantt_histogram_vert_bar\";\n  element.style.top = top * 100 + \"%\";\n  element.style.height = height * 100 + \"%\";\n  element.style.left = left + \"px\";\n  return element;\n}\n\nfunction generateRenderResourceHistogram(gantt) {\n  var getResourceLoad = resourceTimetable(gantt);\n  var renderedHistogramCells = {};\n  var renderedHistogramRows = {};\n  var renderedHistogramCapacity = {};\n\n  function detachRenderedHistogramCell(id, index) {\n    var renderedRow = renderedHistogramCells[id];\n\n    if (renderedRow && renderedRow[index] && renderedRow[index].parentNode) {\n      renderedRow[index].parentNode.removeChild(renderedRow[index]);\n    }\n  }\n\n  function renderHistogramLine(capacity, timeline, maxCapacity, viewport) {\n    var scale = timeline.getScale();\n    var el = document.createElement(\"div\");\n    var range = getVisibleCellsRange(scale, viewport);\n\n    for (var i = range.start; i <= range.end; i++) {\n      var colStart = scale.trace_x[i];\n      var colEnd = scale.trace_x[i + 1] || gantt.date.add(colStart, scale.step, scale.unit);\n      var col = scale.trace_x[i].valueOf();\n      var level = Math.min(capacity[col] / maxCapacity, 1) || 0; // do not render histogram for lines with below zero capacity, as it's reserved for folders\n\n      if (level < 0) {\n        return null;\n      }\n\n      var nextLevel = Math.min(capacity[colEnd.valueOf()] / maxCapacity, 1) || 0;\n      var bar = renderBar(level, colStart, colEnd, timeline);\n\n      if (bar) {\n        el.appendChild(bar);\n      }\n\n      var connection = renderConnection(level, nextLevel, timeline.posFromDate(colEnd));\n\n      if (connection) {\n        el.appendChild(connection);\n      }\n    }\n\n    return el;\n  }\n\n  function renderCapacityElement(resource, sizes, capacityMatrix, config, timeline, maxCapacity, viewport) {\n    var renderedElement = renderedHistogramCapacity[resource.id];\n\n    if (renderedElement && renderedElement.parentNode) {\n      renderedElement.parentNode.removeChild(renderedElement);\n    }\n\n    var capacityElement = renderHistogramLine(capacityMatrix, timeline, maxCapacity, viewport);\n\n    if (capacityElement && sizes) {\n      capacityElement.setAttribute(\"data-resource-id\", resource.id);\n      capacityElement.setAttribute(timeline.$config.item_attribute, resource.id);\n      capacityElement.style.position = \"absolute\";\n      capacityElement.style.top = sizes.top + 1 + \"px\";\n      capacityElement.style.height = timeline.getItemHeight(resource.id) - 1 + \"px\";\n      capacityElement.style.left = 0;\n    }\n\n    return capacityElement;\n  }\n\n  function renderHistogramCell(resource, sizes, maxCapacity, config, templates, day, timeline) {\n    var css = templates.histogram_cell_class(day.start_date, day.end_date, resource, day.tasks, day.assignments);\n    var content = templates.histogram_cell_label(day.start_date, day.end_date, resource, day.tasks, day.assignments);\n    var fill = templates.histogram_cell_allocated(day.start_date, day.end_date, resource, day.tasks, day.assignments);\n    var height = timeline.getItemHeight(resource.id) - 1;\n\n    if (css || content) {\n      var el = document.createElement('div');\n      el.className = [\"gantt_histogram_cell\", css].join(\" \");\n      el.setAttribute(timeline.$config.item_attribute, resource.id);\n      el.style.cssText = ['left:' + sizes.left + 'px', 'width:' + sizes.width + 'px', 'height:' + height + 'px', 'line-height:' + height + 'px', 'top:' + (sizes.top + 1) + 'px'].join(\";\");\n\n      if (content) {\n        content = \"<div class='gantt_histogram_label'>\" + content + \"</div>\";\n      }\n\n      if (fill) {\n        content = \"<div class='gantt_histogram_fill' style='height:\" + Math.min(fill / maxCapacity || 0, 1) * 100 + \"%;'></div>\" + content;\n      }\n\n      if (content) {\n        el.innerHTML = content;\n      }\n\n      return el;\n    }\n\n    return null;\n  }\n\n  function renderResourceHistogram(resource, timeline, config, viewport) {\n    var templates = timeline.$getTemplates();\n    var scale = timeline.getScale();\n    var timetable = getResourceLoad(resource, config.resource_property, scale, timeline);\n    var cells = [];\n    var capacityMatrix = {};\n    var maxCapacity = resource.capacity || timeline.$config.capacity || 24;\n    renderedHistogramCells[resource.id] = {};\n    renderedHistogramRows[resource.id] = null;\n    renderedHistogramCapacity[resource.id] = null;\n    var smartRendering = !!viewport; //no viewport means smart rendering is disabled\n\n    var range = getVisibleCellsRange(scale, viewport);\n\n    for (var columnIndex = range.start; columnIndex <= range.end; columnIndex++) {\n      var day = timetable[columnIndex];\n\n      if (!day) {\n        continue;\n      }\n\n      if (smartRendering && !isColumnVisible(columnIndex, scale, viewport, gantt)) {\n        continue;\n      }\n\n      var capacity = templates.histogram_cell_capacity(day.start_date, day.end_date, resource, day.tasks, day.assignments);\n      capacityMatrix[day.start_date.valueOf()] = capacity || 0;\n      var sizes = timeline.getItemPosition(resource, day.start_date, day.end_date);\n      var el = renderHistogramCell(resource, sizes, maxCapacity, config, templates, day, timeline);\n\n      if (el) {\n        cells.push(el);\n        renderedHistogramCells[resource.id][columnIndex] = el;\n      }\n    }\n\n    var row = null;\n\n    if (cells.length) {\n      row = document.createElement(\"div\");\n\n      for (var i = 0; i < cells.length; i++) {\n        row.appendChild(cells[i]);\n      }\n\n      var capacityElement = renderCapacityElement(resource, sizes, capacityMatrix, config, timeline, maxCapacity, viewport);\n\n      if (capacityElement) {\n        row.appendChild(capacityElement);\n        renderedHistogramCapacity[resource.id] = capacityElement;\n      }\n\n      renderedHistogramRows[resource.id] = row;\n    }\n\n    return row;\n  }\n\n  function updateResourceHistogram(resource, node, timeline, config, viewport) {\n    var templates = timeline.$getTemplates();\n    var scale = timeline.getScale();\n    var timetable = getResourceLoad(resource, config.resource_property, scale, timeline);\n    var maxCapacity = resource.capacity || timeline.$config.capacity || 24;\n    var capacityMatrix = {};\n    var smartRendering = !!viewport; //no viewport means smart rendering is disabled\n\n    var range = getVisibleCellsRange(scale, viewport);\n    var checkedColumns = {};\n\n    if (renderedHistogramCells && renderedHistogramCells[resource.id]) {\n      for (var i in renderedHistogramCells[resource.id]) {\n        checkedColumns[i] = i;\n      }\n    }\n\n    for (var columnIndex = range.start; columnIndex <= range.end; columnIndex++) {\n      var day = timetable[columnIndex];\n      checkedColumns[columnIndex] = false;\n\n      if (!day) {\n        continue;\n      }\n\n      var capacity = templates.histogram_cell_capacity(day.start_date, day.end_date, resource, day.tasks, day.assignments);\n      capacityMatrix[day.start_date.valueOf()] = capacity || 0;\n      var sizes = timeline.getItemPosition(resource, day.start_date, day.end_date);\n\n      if (smartRendering && !isColumnVisible(columnIndex, scale, viewport, gantt)) {\n        detachRenderedHistogramCell(resource.id, columnIndex);\n        continue;\n      }\n\n      var renderedCell = renderedHistogramCells[resource.id];\n\n      if (!renderedCell || !renderedCell[columnIndex]) {\n        var el = renderHistogramCell(resource, sizes, maxCapacity, config, templates, day, timeline);\n\n        if (el) {\n          node.appendChild(el);\n          renderedHistogramCells[resource.id][columnIndex] = el;\n        }\n      } else if (renderedCell && renderedCell[columnIndex] && !renderedCell[columnIndex].parentNode) {\n        node.appendChild(renderedCell[columnIndex]);\n      }\n    }\n\n    for (var i in checkedColumns) {\n      if (checkedColumns[i] !== false) {\n        detachRenderedHistogramCell(resource.id, i);\n      }\n    }\n\n    var capacityElement = renderCapacityElement(resource, sizes, capacityMatrix, config, timeline, maxCapacity, viewport);\n\n    if (capacityElement) {\n      node.appendChild(capacityElement);\n      renderedHistogramCapacity[resource.id] = capacityElement;\n    }\n  }\n\n  return {\n    render: renderResourceHistogram,\n    update: updateResourceHistogram,\n    getRectangle: getRectangle,\n    getVisibleRange: getVisibleRange\n  };\n}\n\nmodule.exports = generateRenderResourceHistogram;","var getRectangle = require(\"./viewport/get_bg_row_rectangle\");\n\nvar getVisibleRange = require(\"./viewport/get_visible_bars_range\");\n\nvar getVisibleCellsRange = require(\"./viewport/get_visible_cells_range\");\n\nvar isColumnVisible = require(\"./viewport/is_column_visible\");\n\nvar resourceTimetable = require(\"../../resource_timetable_builder\");\n\nfunction generateRenderResourceLine(gantt) {\n  var getResourceLoad = resourceTimetable(gantt);\n  var renderedResourceLines = {};\n\n  function renderResourceLineCell(resource, day, templates, config, timeline) {\n    var css = templates.resource_cell_class(day.start_date, day.end_date, resource, day.tasks, day.assignments);\n    var content = templates.resource_cell_value(day.start_date, day.end_date, resource, day.tasks, day.assignments);\n    var height = timeline.getItemHeight(resource.id) - 1;\n\n    if (css || content) {\n      var sizes = timeline.getItemPosition(resource, day.start_date, day.end_date);\n      var el = document.createElement('div');\n      el.setAttribute(timeline.$config.item_attribute, resource.id);\n      el.className = [\"gantt_resource_marker\", css].join(\" \");\n      el.style.cssText = ['left:' + sizes.left + 'px', 'width:' + sizes.width + 'px', 'height:' + height + 'px', 'line-height:' + height + 'px', 'top:' + sizes.top + 'px'].join(\";\");\n      if (content) el.innerHTML = content;\n      return el;\n    }\n\n    return null;\n  }\n\n  function detachRenderedResourceLine(id, index) {\n    if (renderedResourceLines[id] && renderedResourceLines[id][index] && renderedResourceLines[id][index].parentNode) {\n      renderedResourceLines[id][index].parentNode.removeChild(renderedResourceLines[id][index]);\n    }\n  }\n\n  function renderResourceLine(resource, timeline, config, viewport) {\n    var templates = timeline.$getTemplates();\n    var scale = timeline.getScale();\n    var timetable = getResourceLoad(resource, config.resource_property, timeline.getScale(), timeline);\n    var smartRendering = !!viewport; //no viewport means smart rendering is disabled\n\n    var cells = [];\n    renderedResourceLines[resource.id] = {};\n    var range = getVisibleCellsRange(scale, viewport);\n\n    for (var columnIndex = range.start; columnIndex <= range.end; columnIndex++) {\n      var day = timetable[columnIndex];\n\n      if (!day) {\n        continue;\n      }\n\n      if (smartRendering && !isColumnVisible(columnIndex, scale, viewport, gantt)) {\n        continue;\n      }\n\n      var cell = renderResourceLineCell(resource, day, templates, config, timeline);\n\n      if (cell) {\n        cells.push(cell);\n        renderedResourceLines[resource.id][columnIndex] = cell;\n      }\n    }\n\n    var row = null;\n\n    if (cells.length) {\n      row = document.createElement(\"div\");\n\n      for (var i = 0; i < cells.length; i++) {\n        row.appendChild(cells[i]);\n      }\n    }\n\n    return row;\n  }\n\n  function updateResourceLine(resource, node, timeline, config, viewport) {\n    var templates = timeline.$getTemplates();\n    var scale = timeline.getScale();\n    var timetable = getResourceLoad(resource, config.resource_property, timeline.getScale(), timeline);\n    var range = getVisibleCellsRange(scale, viewport);\n    var checkedColumns = {};\n\n    if (renderedResourceLines && renderedResourceLines[resource.id]) {\n      for (var i in renderedResourceLines[resource.id]) {\n        checkedColumns[i] = i;\n      }\n    }\n\n    for (var columnIndex = range.start; columnIndex <= range.end; columnIndex++) {\n      var day = timetable[columnIndex];\n      checkedColumns[columnIndex] = false;\n\n      if (!day) {\n        continue;\n      }\n\n      if (!isColumnVisible(columnIndex, scale, viewport, gantt)) {\n        detachRenderedResourceLine(resource.id, columnIndex);\n        continue;\n      }\n\n      if (!renderedResourceLines[resource.id] || !renderedResourceLines[resource.id][columnIndex]) {\n        var cell = renderResourceLineCell(resource, day, templates, config, timeline);\n\n        if (cell) {\n          node.appendChild(cell);\n          renderedResourceLines[resource.id][columnIndex] = cell;\n        }\n      } else if (renderedResourceLines[resource.id] && renderedResourceLines[resource.id][columnIndex] && !renderedResourceLines[resource.id][columnIndex].parentNode) {\n        node.appendChild(renderedResourceLines[resource.id][columnIndex]);\n      }\n    }\n\n    for (var i in checkedColumns) {\n      if (checkedColumns[i] !== false) {\n        detachRenderedResourceLine(resource.id, i);\n      }\n    }\n  }\n\n  return {\n    render: renderResourceLine,\n    update: updateResourceLine,\n    getRectangle: getRectangle,\n    getVisibleRange: getVisibleRange\n  };\n}\n\nmodule.exports = generateRenderResourceLine;","function _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nvar helpers = require(\"../../../utils/helpers\");\n\nvar getRowRectangle = require(\"./viewport/get_grid_row_rectangle\");\n\nvar getVisibleRange = require(\"./viewport/get_visible_bars_range\");\n\nfunction createGridLineRender(gantt) {\n  function _render_grid_item(item, view, config, viewport) {\n    var columns = view.getGridColumns();\n    var templates = view.$getTemplates();\n    var store = view.$config.rowStore;\n    var cells = [];\n    var has_child;\n\n    for (var i = 0; i < columns.length; i++) {\n      var last = i == columns.length - 1;\n      var col = columns[i];\n      var cell;\n      var value;\n      var textValue;\n\n      if (col.name == \"add\") {\n        var aria = gantt._waiAria.gridAddButtonAttrString(col);\n\n        value = \"<div \" + aria + \" class='gantt_add'></div>\";\n        textValue = \"\";\n      } else {\n        if (col.template) value = col.template(item);else value = item[col.name];\n\n        if (helpers.isDate(value)) {\n          value = templates.date_grid(value, item, col.name);\n        }\n\n        if (value === null || value === undefined) {\n          value = \"\";\n        }\n\n        textValue = value;\n        value = \"<div class='gantt_tree_content'>\" + value + \"</div>\";\n      }\n\n      var css = \"gantt_cell\" + (last ? \" gantt_last_cell\" : \"\");\n      var tree = [];\n\n      if (col.tree) {\n        css += \" gantt_cell_tree\";\n\n        for (var j = 0; j < item.$level; j++) {\n          tree.push(templates.grid_indent(item));\n        }\n\n        has_child = store.hasChild(item.id) && !(gantt.isSplitTask(item) && !gantt.config.open_split_tasks);\n\n        if (has_child) {\n          tree.push(templates.grid_open(item));\n          tree.push(templates.grid_folder(item));\n        } else {\n          tree.push(templates.grid_blank(item));\n          tree.push(templates.grid_file(item));\n        }\n      }\n\n      var style = \"width:\" + (col.width - (last ? 1 : 0)) + \"px;\";\n\n      if (this.defined(col.align)) {\n        var flexAlign = {\n          right: \"flex-end\",\n          left: \"flex-start\",\n          center: \"center\"\n        };\n        var justifyContent = flexAlign[col.align];\n        style += \"text-align:\" + col.align + \";justify-content:\" + justifyContent + \";\";\n      }\n\n      var aria = gantt._waiAria.gridCellAttrString(col, textValue, item);\n\n      tree.push(value);\n      cell = \"<div class='\" + css + \"' data-column-index='\" + i + \"' data-column-name='\" + col.name + \"' style='\" + style + \"' \" + aria + \">\" + tree.join(\"\") + \"</div>\";\n      cells.push(cell);\n    } // GS-291. The odd class should be assigned correctly\n\n\n    css = \"\";\n    var storeName = store.$config.name;\n\n    switch (storeName) {\n      case \"task\":\n        css = gantt.getGlobalTaskIndex(item.id) % 2 === 0 ? \"\" : \" odd\";\n        break;\n\n      case \"resource\":\n        css = store.visibleOrder.indexOf(item.id) % 2 === 0 ? \"\" : \" odd\";\n        break;\n    }\n\n    css += item.$transparent ? \" gantt_transparent\" : \"\";\n    css += item.$dataprocessor_class ? \" \" + item.$dataprocessor_class : \"\";\n\n    if (templates.grid_row_class) {\n      var css_template = templates.grid_row_class.call(gantt, item.start_date, item.end_date, item);\n      if (css_template) css += \" \" + css_template;\n    }\n\n    if (store.isSelected(item.id)) {\n      css += \" gantt_selected\";\n    }\n\n    var el = document.createElement(\"div\");\n    el.className = \"gantt_row\" + css + \" gantt_row_\" + gantt.getTaskType(item.type);\n    var height = view.getItemHeight(item.id);\n    el.style.height = height + \"px\";\n    el.style.lineHeight = height + \"px\";\n\n    if (config.smart_rendering) {\n      el.style.position = \"absolute\";\n      el.style.left = \"0px\";\n      el.style.top = view.getItemTop(item.id) + \"px\";\n    }\n\n    if (view.$config.item_attribute) {\n      el.setAttribute(view.$config.item_attribute, item.id);\n      el.setAttribute(view.$config.bind + \"_id\", item.id); // 'task_id'/'resource_id' for backward compatibility\n    }\n\n    gantt._waiAria.taskRowAttr(item, el);\n\n    el.innerHTML = cells.join(\"\");\n    return el;\n  }\n\n  function onrender(item, rowNode, view) {\n    var columns = view.getGridColumns();\n\n    for (var i = 0; i < columns.length; i++) {\n      var column = columns[i];\n\n      if (column.onrender) {\n        // find cell node for current column\n        var cellNode = rowNode.querySelector(\"[data-column-name=\" + column.name + \"]\");\n\n        if (cellNode) {\n          var content = column.onrender(item, cellNode);\n\n          if (content && typeof content === \"string\") {\n            cellNode.innerHTML = content;\n          } else if (content && _typeof(content) === \"object\") {\n            // render object to node using additional functionality\n            if (gantt.config.external_render) {\n              var adapter = gantt.config.external_render;\n\n              if (adapter.isElement(content)) {\n                adapter.renderElement(content, cellNode);\n              }\n            }\n          }\n        }\n      }\n    }\n  }\n\n  return {\n    render: _render_grid_item,\n    update: null,\n    getRectangle: getRowRectangle,\n    getVisibleRange: getVisibleRange,\n    onrender: onrender\n  };\n}\n\nmodule.exports = createGridLineRender;","var isInViewPort = require(\"./viewport/is_link_in_viewport\");\n\nvar getVisibleRange = require(\"./viewport/factory/get_visible_link_range\");\n\nfunction createLinkRender(gantt) {\n  function _render_link_element(link, view, config) {\n    var source = gantt.getTask(link.source);\n\n    if (source.hide_bar) {\n      return;\n    }\n\n    var target = gantt.getTask(link.target);\n\n    if (target.hide_bar) {\n      return;\n    }\n\n    var pt = path_builder.get_endpoint(link, view, source, target);\n    var dy = pt.e_y - pt.y;\n    var dx = pt.e_x - pt.x;\n\n    if (!dx && !dy) {\n      return null;\n    }\n\n    var dots = path_builder.get_points(link, view, source, target);\n    var lines = drawer.get_lines(dots, view);\n    var div = document.createElement(\"div\");\n    var css = \"gantt_task_link\";\n\n    if (link.color) {\n      css += \" gantt_link_inline_color\";\n    }\n\n    var cssTemplate = gantt.templates.link_class ? gantt.templates.link_class(link) : \"\";\n\n    if (cssTemplate) {\n      css += \" \" + cssTemplate;\n    }\n\n    if (config.highlight_critical_path && gantt.isCriticalLink) {\n      if (gantt.isCriticalLink(link)) css += \" gantt_critical_link\";\n    }\n\n    div.className = css;\n\n    if (view.$config.link_attribute) {\n      div.setAttribute(view.$config.link_attribute, link.id);\n      div.setAttribute(\"link_id\", link.id);\n    }\n\n    for (var i = 0; i < lines.length; i++) {\n      if (i == lines.length - 1) {\n        lines[i].size -= config.link_arrow_size;\n      }\n\n      var el = drawer.render_line(lines[i], lines[i + 1], view, link.source);\n\n      if (link.color) {\n        el.firstChild.style.backgroundColor = link.color;\n      }\n\n      div.appendChild(el);\n    }\n\n    var direction = lines[lines.length - 1].direction;\n\n    var endpoint = _render_link_arrow(dots[dots.length - 1], direction, view, link.source);\n\n    if (link.color) {\n      endpoint.style.borderColor = link.color;\n    }\n\n    div.appendChild(endpoint);\n\n    gantt._waiAria.linkAttr(link, div);\n\n    return div;\n  }\n\n  function _render_link_arrow(point, direction, view, targetId) {\n    var config = view.$getConfig();\n    var div = document.createElement(\"div\");\n    var top = point.y;\n    var left = point.x;\n    var size = config.link_arrow_size;\n    var className = \"gantt_link_arrow gantt_link_arrow_\" + direction;\n\n    switch (direction) {\n      case drawer.dirs.right:\n        top -= size / 2;\n        left -= size;\n        break;\n\n      case drawer.dirs.left:\n        top -= size / 2;\n        break;\n\n      case drawer.dirs.up:\n        left -= size;\n        break;\n\n      case drawer.dirs.down:\n        top += size * 2;\n        left -= size;\n        break;\n\n      default:\n        break;\n    }\n\n    div.style.cssText = [\"top:\" + top + \"px\", \"left:\" + left + 'px'].join(';');\n    div.className = className;\n    return div;\n  }\n\n  var drawer = {\n    current_pos: null,\n    dirs: {\n      \"left\": 'left',\n      \"right\": 'right',\n      \"up\": 'up',\n      \"down\": 'down'\n    },\n    path: [],\n    clear: function clear() {\n      this.current_pos = null;\n      this.path = [];\n    },\n    point: function point(pos) {\n      this.current_pos = gantt.copy(pos);\n    },\n    get_lines: function get_lines(dots) {\n      this.clear();\n      this.point(dots[0]);\n\n      for (var i = 1; i < dots.length; i++) {\n        this.line_to(dots[i]);\n      }\n\n      return this.get_path();\n    },\n    line_to: function line_to(pos) {\n      var next = gantt.copy(pos);\n      var prev = this.current_pos;\n\n      var line = this._get_line(prev, next);\n\n      this.path.push(line);\n      this.current_pos = next;\n    },\n    get_path: function get_path() {\n      return this.path;\n    },\n    get_wrapper_sizes: function get_wrapper_sizes(v, view, itemId) {\n      var config = view.$getConfig();\n      var res,\n          wrapper_size = config.link_wrapper_width,\n          y = v.y - wrapper_size / 2;\n\n      switch (v.direction) {\n        case this.dirs.left:\n          res = {\n            top: y,\n            height: wrapper_size,\n            lineHeight: wrapper_size,\n            left: v.x - v.size - wrapper_size / 2,\n            width: v.size + wrapper_size\n          };\n          break;\n\n        case this.dirs.right:\n          res = {\n            top: y,\n            lineHeight: wrapper_size,\n            height: wrapper_size,\n            left: v.x - wrapper_size / 2,\n            width: v.size + wrapper_size\n          };\n          break;\n\n        case this.dirs.up:\n          res = {\n            top: y - v.size,\n            lineHeight: v.size + wrapper_size,\n            height: v.size + wrapper_size,\n            left: v.x - wrapper_size / 2,\n            width: wrapper_size\n          };\n          break;\n\n        case this.dirs.down:\n          res = {\n            top: y\n            /*- wrapper_size/2*/\n            ,\n            lineHeight: v.size + wrapper_size,\n            height: v.size + wrapper_size,\n            left: v.x - wrapper_size / 2,\n            width: wrapper_size\n          };\n          break;\n\n        default:\n          break;\n      }\n\n      return res;\n    },\n    get_line_sizes: function get_line_sizes(v, view) {\n      var config = view.$getConfig();\n      var res,\n          line_size = config.link_line_width,\n          wrapper_size = config.link_wrapper_width,\n          size = v.size + line_size;\n\n      switch (v.direction) {\n        case this.dirs.left:\n        case this.dirs.right:\n          res = {\n            height: line_size,\n            width: size,\n            marginTop: (wrapper_size - line_size) / 2,\n            marginLeft: (wrapper_size - line_size) / 2\n          };\n          break;\n\n        case this.dirs.up:\n        case this.dirs.down:\n          res = {\n            height: size,\n            width: line_size,\n            marginTop: (wrapper_size - line_size) / 2,\n            marginLeft: (wrapper_size - line_size) / 2\n          };\n          break;\n\n        default:\n          break;\n      }\n\n      return res;\n    },\n    render_line: function render_line(v, end, view, itemId) {\n      var pos = this.get_wrapper_sizes(v, view, itemId);\n      var wrapper = document.createElement(\"div\");\n      wrapper.style.cssText = [\"top:\" + pos.top + \"px\", \"left:\" + pos.left + \"px\", \"height:\" + pos.height + \"px\", \"width:\" + pos.width + \"px\"].join(';');\n      wrapper.className = \"gantt_line_wrapper\";\n      var innerPos = this.get_line_sizes(v, view);\n      var inner = document.createElement(\"div\");\n      inner.style.cssText = [\"height:\" + innerPos.height + \"px\", \"width:\" + innerPos.width + \"px\", \"margin-top:\" + innerPos.marginTop + \"px\", \"margin-left:\" + innerPos.marginLeft + \"px\"].join(\";\");\n      inner.className = \"gantt_link_line_\" + v.direction;\n      wrapper.appendChild(inner);\n      return wrapper;\n    },\n    _get_line: function _get_line(from, to) {\n      var direction = this.get_direction(from, to);\n      var vect = {\n        x: from.x,\n        y: from.y,\n        direction: this.get_direction(from, to)\n      };\n\n      if (direction == this.dirs.left || direction == this.dirs.right) {\n        vect.size = Math.abs(from.x - to.x);\n      } else {\n        vect.size = Math.abs(from.y - to.y);\n      }\n\n      return vect;\n    },\n    get_direction: function get_direction(from, to) {\n      var direction = 0;\n\n      if (to.x < from.x) {\n        direction = this.dirs.left;\n      } else if (to.x > from.x) {\n        direction = this.dirs.right;\n      } else if (to.y > from.y) {\n        direction = this.dirs.down;\n      } else {\n        direction = this.dirs.up;\n      }\n\n      return direction;\n    }\n  };\n  var path_builder = {\n    path: [],\n    clear: function clear() {\n      this.path = [];\n    },\n    current: function current() {\n      return this.path[this.path.length - 1];\n    },\n    point: function point(next) {\n      if (!next) return this.current();\n      this.path.push(gantt.copy(next));\n      return next;\n    },\n    point_to: function point_to(direction, diff, point) {\n      if (!point) point = gantt.copy(this.point());else point = {\n        x: point.x,\n        y: point.y\n      };\n      var dir = drawer.dirs;\n\n      switch (direction) {\n        case dir.left:\n          point.x -= diff;\n          break;\n\n        case dir.right:\n          point.x += diff;\n          break;\n\n        case dir.up:\n          point.y -= diff;\n          break;\n\n        case dir.down:\n          point.y += diff;\n          break;\n\n        default:\n          break;\n      }\n\n      return this.point(point);\n    },\n    get_points: function get_points(link, view, source, target) {\n      var pt = this.get_endpoint(link, view, source, target);\n      var xy = gantt.config;\n      var dy = pt.e_y - pt.y;\n      var dx = pt.e_x - pt.x;\n      var dir = drawer.dirs;\n      var rowHeight = view.getItemHeight(link.source);\n      this.clear();\n      this.point({\n        x: pt.x,\n        y: pt.y\n      });\n      var shiftX = 2 * xy.link_arrow_size; //just random size for first line\n\n      var lineType = this.get_line_type(link, view.$getConfig());\n      var forward = pt.e_x > pt.x;\n\n      if (lineType.from_start && lineType.to_start) {\n        this.point_to(dir.left, shiftX);\n\n        if (forward) {\n          this.point_to(dir.down, dy);\n          this.point_to(dir.right, dx);\n        } else {\n          this.point_to(dir.right, dx);\n          this.point_to(dir.down, dy);\n        }\n\n        this.point_to(dir.right, shiftX);\n      } else if (!lineType.from_start && lineType.to_start) {\n        forward = pt.e_x > pt.x + 2 * shiftX;\n        this.point_to(dir.right, shiftX);\n\n        if (forward) {\n          dx -= shiftX;\n          this.point_to(dir.down, dy);\n          this.point_to(dir.right, dx);\n        } else {\n          dx -= 2 * shiftX;\n          var sign = dy > 0 ? 1 : -1;\n          this.point_to(dir.down, sign * (rowHeight / 2));\n          this.point_to(dir.right, dx);\n          this.point_to(dir.down, sign * (Math.abs(dy) - rowHeight / 2));\n          this.point_to(dir.right, shiftX);\n        }\n      } else if (!lineType.from_start && !lineType.to_start) {\n        this.point_to(dir.right, shiftX);\n\n        if (forward) {\n          this.point_to(dir.right, dx);\n          this.point_to(dir.down, dy);\n        } else {\n          this.point_to(dir.down, dy);\n          this.point_to(dir.right, dx);\n        }\n\n        this.point_to(dir.left, shiftX);\n      } else if (lineType.from_start && !lineType.to_start) {\n        forward = pt.e_x > pt.x - 2 * shiftX;\n        this.point_to(dir.left, shiftX);\n\n        if (!forward) {\n          dx += shiftX;\n          this.point_to(dir.down, dy);\n          this.point_to(dir.right, dx);\n        } else {\n          dx += 2 * shiftX;\n          var sign = dy > 0 ? 1 : -1;\n          this.point_to(dir.down, sign * (rowHeight / 2));\n          this.point_to(dir.right, dx);\n          this.point_to(dir.down, sign * (Math.abs(dy) - rowHeight / 2));\n          this.point_to(dir.left, shiftX);\n        }\n      }\n\n      return this.path;\n    },\n    get_line_type: function get_line_type(link, config) {\n      var types = config.links;\n      var from_start = false,\n          to_start = false;\n\n      if (link.type == types.start_to_start) {\n        from_start = to_start = true;\n      } else if (link.type == types.finish_to_finish) {\n        from_start = to_start = false;\n      } else if (link.type == types.finish_to_start) {\n        from_start = false;\n        to_start = true;\n      } else if (link.type == types.start_to_finish) {\n        from_start = true;\n        to_start = false;\n      } else {\n        gantt.assert(false, \"Invalid link type\");\n      }\n\n      if (config.rtl) {\n        from_start = !from_start;\n        to_start = !to_start;\n      }\n\n      return {\n        from_start: from_start,\n        to_start: to_start\n      };\n    },\n    get_endpoint: function get_endpoint(link, view, source, target) {\n      var config = view.$getConfig();\n      var lineType = this.get_line_type(link, config);\n      var from_start = lineType.from_start,\n          to_start = lineType.to_start;\n      var from = getMilestonePosition(source, view, config),\n          to = getMilestonePosition(target, view, config);\n      return {\n        x: from_start ? from.left : from.left + from.width,\n        e_x: to_start ? to.left : to.left + to.width,\n        y: from.top + from.rowHeight / 2 - 1,\n        e_y: to.top + to.rowHeight / 2 - 1\n      };\n    }\n  };\n\n  function getMilestonePosition(task, view, config) {\n    var pos = view.getItemPosition(task);\n\n    if (gantt.getTaskType(task.type) == config.types.milestone) {\n      var milestoneHeight = view.getBarHeight(task.id, true);\n      var milestoneWidth = Math.sqrt(2 * milestoneHeight * milestoneHeight);\n      pos.left -= milestoneWidth / 2;\n      pos.width = milestoneWidth;\n    }\n\n    return pos;\n  }\n\n  return {\n    render: _render_link_element,\n    update: null,\n    //getRectangle: getLinkRectangle\n    isInViewPort: isInViewPort,\n    getVisibleRange: getVisibleRange()\n  };\n}\n\nmodule.exports = createLinkRender;","module.exports = function (items, gantt) {\n  var placeholderConfig = gantt.config.timeline_placeholder;\n  items = items || [];\n\n  if (placeholderConfig && items.filter(function (e) {\n    return e.id === 'timeline_placeholder_task';\n  }).length === 0) {\n    var state = gantt.getState();\n    var lastTaskId = null;\n    var start_date = state.min_date;\n    var end_date = state.max_date;\n\n    if (items.length) {\n      lastTaskId = items[items.length - 1].id;\n    }\n\n    var placeholderTask = {\n      start_date: start_date,\n      end_date: end_date,\n      row_height: placeholderConfig.height || 0,\n      id: \"timeline_placeholder_task\",\n      unscheduled: true,\n      lastTaskId: lastTaskId,\n      calendar_id: placeholderConfig.calendar || \"global\",\n      $source: [],\n      $target: []\n    };\n    items.push(placeholderTask);\n  }\n};","var getRowRectangle = require(\"./viewport/get_bg_row_rectangle\");\n\nvar isLegacyRender = require(\"./is_legacy_smart_render\");\n\nvar getVisibleRange = require(\"./viewport/get_visible_bars_range\");\n\nvar getVisibleCellsRange = require(\"./viewport/get_visible_cells_range\");\n\nvar isColumnVisible = require(\"./viewport/is_column_visible\");\n\nvar bgPlaceholder = require(\"./prerender/task_bg_placeholder\");\n\nfunction createTaskBgRender(gantt) {\n  var renderedCells = {};\n  var visibleCells = {};\n\n  function isRendered(item, columnIndex) {\n    if (renderedCells[item.id][columnIndex] && renderedCells[item.id][columnIndex].parentNode) {\n      return true;\n    } else {\n      return false;\n    }\n  }\n\n  function detachRenderedCell(itemId, columnIndex) {\n    if (renderedCells[itemId] && renderedCells[itemId][columnIndex] && renderedCells[itemId][columnIndex].parentNode) {\n      renderedCells[itemId][columnIndex].parentNode.removeChild(renderedCells[itemId][columnIndex]);\n    }\n  }\n\n  function getCellClassTemplate(view) {\n    var templates = view.$getTemplates();\n    var cssTemplate;\n\n    if (typeof templates.task_cell_class !== \"undefined\") {\n      cssTemplate = templates.task_cell_class; // eslint-disable-next-line no-console\n\n      var log = console.warn || console.log;\n      log('gantt.templates.task_cell_class template is deprecated and will be removed soon. Please use gantt.templates.timeline_cell_class instead.');\n    } else {\n      cssTemplate = templates.timeline_cell_class;\n    }\n\n    return cssTemplate;\n  }\n\n  function getCellContentTemplate(view) {\n    var templates = view.$getTemplates();\n    var contentTemplate = templates.timeline_cell_content;\n    return contentTemplate;\n  }\n\n  function renderCells(item, node, view, config, viewPort) {\n    var cfg = view.getScale();\n    var count = cfg.count;\n    var cssTemplate = getCellClassTemplate(view);\n    var contentTemplate = getCellContentTemplate(view);\n\n    if (config.show_task_cells) {\n      if (!renderedCells[item.id]) {\n        renderedCells[item.id] = {};\n      }\n\n      if (!visibleCells[item.id]) {\n        visibleCells[item.id] = {};\n      }\n\n      var range = getVisibleCellsRange(cfg, viewPort);\n\n      for (var i in visibleCells[item.id]) {\n        var index = visibleCells[item.id][i];\n\n        if (Number(index) < range.start || Number(index) > range.end) {\n          detachRenderedCell(item.id, index);\n        }\n      }\n\n      visibleCells[item.id] = {}; // TODO: do not iterate all cell, only ones in the viewport and once that are already rendered\n\n      for (var columnIndex = range.start; columnIndex <= range.end; columnIndex++) {\n        var cell = renderOneCell(cfg, columnIndex, item, viewPort, count, cssTemplate, contentTemplate, config);\n\n        if (!cell && isRendered(item, columnIndex)) {\n          detachRenderedCell(item.id, columnIndex);\n        } else if (cell && !cell.parentNode) {\n          node.appendChild(cell);\n        }\n      }\n    }\n  }\n\n  function renderOneCell(scale, columnIndex, item, viewPort, count, cssTemplate, contentTemplate, config) {\n    var width = scale.width[columnIndex],\n        cssclass = \"\";\n\n    if (isColumnVisible(columnIndex, scale, viewPort, gantt)) {\n      //do not render skipped columns\n      var cssTemplateContent = cssTemplate(item, scale.trace_x[columnIndex]);\n      var htmlTemplateContent = \"\";\n\n      if (contentTemplate) {\n        // for backward compatibility, contentTemplate was added in 7.2.0+, will be undefined if someone used copy of old config/template object\n        htmlTemplateContent = contentTemplate(item, scale.trace_x[columnIndex]);\n      }\n\n      if (config.static_background) {\n        // if cell render in static background is not allowed, or if it's a blank cell\n        var customCell = !!(cssTemplateContent || htmlTemplateContent);\n\n        if (!(config.static_background_cells && customCell)) {\n          return null;\n        }\n      }\n\n      if (renderedCells[item.id][columnIndex]) {\n        visibleCells[item.id][columnIndex] = columnIndex;\n        return renderedCells[item.id][columnIndex];\n      }\n\n      var cell = document.createElement(\"div\");\n      cell.style.width = width + \"px\";\n      cssclass = \"gantt_task_cell\" + (columnIndex == count - 1 ? \" gantt_last_cell\" : \"\");\n\n      if (cssTemplateContent) {\n        cssclass += \" \" + cssTemplateContent;\n      }\n\n      cell.className = cssclass;\n\n      if (htmlTemplateContent) {\n        cell.innerHTML = htmlTemplateContent;\n      }\n\n      cell.style.position = \"absolute\";\n      cell.style.left = scale.left[columnIndex] + \"px\";\n      renderedCells[item.id][columnIndex] = cell;\n      visibleCells[item.id][columnIndex] = columnIndex;\n      return cell;\n    }\n\n    return null;\n  }\n\n  function _render_bg_line(item, view, config, viewPort) {\n    var templates = view.$getTemplates();\n    var cfg = view.getScale();\n    var count = cfg.count;\n\n    if (config.static_background && !config.static_background_cells) {\n      return null;\n    }\n\n    var row = document.createElement(\"div\");\n    var cellCssTemplate = getCellClassTemplate(view);\n    var cellHtmlTemplate = getCellContentTemplate(view);\n    var range;\n\n    if (!viewPort || !config.smart_rendering || isLegacyRender(gantt)) {\n      range = {\n        start: 0,\n        end: count - 1\n      };\n    } else {\n      range = getVisibleCellsRange(cfg, viewPort.x);\n    }\n\n    if (config.show_task_cells) {\n      renderedCells[item.id] = {};\n      visibleCells[item.id] = {};\n\n      for (var columnIndex = range.start; columnIndex <= range.end; columnIndex++) {\n        var cell = renderOneCell(cfg, columnIndex, item, viewPort, count, cellCssTemplate, cellHtmlTemplate, config);\n\n        if (cell) {\n          row.appendChild(cell);\n        }\n      }\n    } // GS-291. The odd class should be assigned correctly\n\n\n    var store = view.$config.rowStore;\n    var odd = store.getIndexById(item.id) % 2 !== 0;\n    var cssTemplate = templates.task_row_class(item.start_date, item.end_date, item);\n    var css = \"gantt_task_row\" + (odd ? \" odd\" : \"\") + (cssTemplate ? ' ' + cssTemplate : '');\n\n    if (store.isSelected(item.id)) {\n      css += \" gantt_selected\";\n    }\n\n    row.className = css;\n\n    if (config.smart_rendering) {\n      row.style.position = \"absolute\";\n      row.style.top = view.getItemTop(item.id) + \"px\";\n      row.style.width = \"100%\";\n    } else {\n      row.style.position = \"relative\";\n    }\n\n    row.style.height = view.getItemHeight(item.id) + \"px\";\n\n    if (item.id == \"timeline_placeholder_task\") {\n      var placeholderTop = 0;\n\n      if (item.lastTaskId) {\n        var lastTaskTop = view.getItemTop(item.lastTaskId);\n        var lastTaskHeight = view.getItemHeight(item.lastTaskId);\n        placeholderTop = lastTaskTop + lastTaskHeight;\n      }\n\n      var maxHeight = item.row_height || view.$task_data.offsetHeight;\n      var placeholderHeight = maxHeight - placeholderTop; // So that it won't exceed the placeholder timeline height\n\n      if (placeholderHeight < 0) {\n        placeholderHeight = 0;\n      }\n\n      if (config.smart_rendering) {\n        row.style.top = placeholderTop + \"px\";\n      }\n\n      row.style.height = placeholderHeight + \"px\";\n    }\n\n    if (view.$config.item_attribute) {\n      row.setAttribute(view.$config.item_attribute, item.id);\n      row.setAttribute(view.$config.bind + \"_id\", item.id); // 'task_id'/'resource_id' for backward compatibility\n    }\n\n    return row;\n  }\n\n  return {\n    render: _render_bg_line,\n    update: renderCells,\n    getRectangle: getRowRectangle,\n    getVisibleRange: getVisibleRange,\n    prepareData: bgPlaceholder\n  };\n}\n\nmodule.exports = createTaskBgRender;","var createBaseBarRender = require(\"./task_bar_render\");\n\nvar isInViewPort = require(\"./viewport/is_bar_in_viewport\");\n\nvar getVisibleRange = require(\"./viewport/get_visible_bars_range\");\n\nfunction createTaskRenderer(gantt) {\n  var defaultRender = createBaseBarRender(gantt);\n  var renderedNodes = {};\n\n  function checkVisibility(child, viewPort, timeline, config, gantt) {\n    var isVisible = true; // GS-2123. Don't render rollup tasks that are outside the viewport\n\n    if (config.smart_rendering) {\n      isVisible = isInViewPort(child, viewPort, timeline, config, gantt);\n    }\n\n    return isVisible;\n  }\n\n  function generateChildElement(task, child, timeline, sizes) {\n    var childCopy = gantt.copy(gantt.getTask(child.id));\n    childCopy.$rendered_at = task.id; // a way to filter rollup tasks:\n\n    var displayRollup = gantt.callEvent(\"onBeforeRollupTaskDisplay\", [childCopy.id, childCopy, task.id]);\n\n    if (displayRollup === false) {\n      return;\n    }\n\n    var element = defaultRender(childCopy, timeline);\n\n    if (!element) {\n      return;\n    }\n\n    var height = timeline.getBarHeight(task.id, child.type == gantt.config.types.milestone);\n    var padding = Math.floor((timeline.getItemHeight(task.id) - height) / 2);\n    element.style.top = sizes.top + padding + \"px\";\n    element.classList.add(\"gantt_rollup_child\");\n    element.setAttribute(\"data-rollup-parent-id\", task.id);\n    return element;\n  }\n\n  function getKey(childId, renderParentId) {\n    return childId + \"_\" + renderParentId;\n  }\n\n  function renderRollupTask(task, timeline, config, viewPort) {\n    if (task.rollup !== false && task.$rollup && task.$rollup.length) {\n      var el = document.createElement('div'),\n          sizes = gantt.getTaskPosition(task); // vertical position is not important for the rollup tasks as long as the parent is rendered\n\n      viewPort.y = 0;\n      viewPort.y_end = gantt.$task_bg.scrollHeight;\n      task.$rollup.forEach(function (itemId) {\n        if (!gantt.isTaskExists(itemId)) {\n          return;\n        }\n\n        var child = gantt.getTask(itemId);\n        var isVisible = checkVisibility(child, viewPort, timeline, config, gantt);\n\n        if (!isVisible) {\n          return;\n        }\n\n        var element = generateChildElement(task, child, timeline, sizes);\n\n        if (element) {\n          renderedNodes[getKey(child.id, task.id)] = element;\n          el.appendChild(element);\n        } else {\n          renderedNodes[getKey(child.id, task.id)] = false;\n        }\n      });\n      return el;\n    }\n\n    return false;\n  }\n\n  function repaintRollupTask(task, itemNode, timeline, config, viewPort) {\n    var el = document.createElement(\"div\"),\n        sizes = gantt.getTaskPosition(task); // vertical position is not important for the rollup tasks as long as the parent is rendered\n\n    viewPort.y = 0;\n    viewPort.y_end = gantt.$task_bg.scrollHeight;\n    task.$rollup.forEach(function (itemId) {\n      var child = gantt.getTask(itemId);\n      var rollupKey = getKey(child.id, task.id);\n      var isVisible = checkVisibility(child, viewPort, timeline, config, gantt);\n\n      if (isVisible !== !!renderedNodes[rollupKey]) {\n        if (isVisible) {\n          var element = generateChildElement(task, child, timeline, sizes);\n          renderedNodes[rollupKey] = element || false;\n        } else {\n          renderedNodes[rollupKey] = false;\n        }\n      }\n\n      if (!!renderedNodes[rollupKey]) {\n        el.appendChild(renderedNodes[rollupKey]);\n      }\n\n      itemNode.innerHTML = \"\";\n      itemNode.appendChild(el);\n    });\n  }\n\n  return {\n    render: renderRollupTask,\n    update: repaintRollupTask,\n    //getRectangle: getBarRectangle\n    isInViewPort: isInViewPort,\n    getVisibleRange: getVisibleRange\n  };\n}\n\nmodule.exports = createTaskRenderer;","var isBarInViewport = require(\"./is_bar_in_viewport\");\n\nmodule.exports = function isSplitTaskInViewport(item, viewport, view, config, gantt) {\n  if (!gantt.isSplitTask(item)) {\n    return false;\n  }\n\n  var range = gantt.getSubtaskDates(item.id);\n  return isBarInViewport({\n    id: item.id,\n    start_date: range.start_date,\n    end_date: range.end_date,\n    parent: item.parent\n  }, viewport, view, gantt);\n};","var createBaseBarRender = require(\"./task_bar_render\"); //const isInViewPort = require(\"./viewport/is_split_task_in_viewport\");\n\n\nvar getVisibleRange = require(\"./viewport/get_visible_bars_range\");\n\nvar isInViewPortParent = require(\"./viewport/is_split_task_in_viewport\");\n\nvar isInViewPortChild = require(\"./viewport/is_bar_in_viewport\");\n\nfunction createTaskRenderer(gantt) {\n  var defaultRender = createBaseBarRender(gantt);\n  var renderedNodes = {};\n\n  function checkVisibility(child, viewPort, timeline, config, gantt) {\n    var isVisible = !child.hide_bar; // GS-1195. Don't render split tasks that are outside the viewport\n\n    if (config.smart_rendering && isVisible) {\n      isVisible = isInViewPortChild(child, viewPort, timeline, config, gantt);\n    }\n\n    return isVisible;\n  }\n\n  function generateChildElement(task, child, timeline, sizes) {\n    if (child.hide_bar) {\n      return;\n    }\n\n    var isProject = gantt.isSummaryTask(child);\n\n    if (isProject) {\n      gantt.resetProjectDates(child);\n    }\n\n    var childCopy = gantt.copy(gantt.getTask(child.id));\n    childCopy.$rendered_at = task.id; // a way to filter split tasks:\n\n    var showSplitTask = gantt.callEvent(\"onBeforeSplitTaskDisplay\", [childCopy.id, childCopy, task.id]);\n\n    if (showSplitTask === false) {\n      return;\n    }\n\n    var element = defaultRender(childCopy, timeline);\n    if (!element) return;\n    var height = timeline.getBarHeight(task.id, child.type == gantt.config.types.milestone);\n    var padding = Math.floor((timeline.getItemHeight(task.id) - height) / 2);\n    element.style.top = sizes.top + padding + \"px\";\n    element.classList.add(\"gantt_split_child\");\n\n    if (isProject) {\n      element.classList.add(\"gantt_split_subproject\");\n    }\n\n    return element;\n  }\n\n  function getKey(childId, renderParentId) {\n    return childId + \"_\" + renderParentId;\n  }\n\n  function shouldUseSplitRendering(task, config) {\n    return gantt.isSplitTask(task) && (config.open_split_tasks && !task.$open || !config.open_split_tasks) && gantt.hasChild(task.id);\n  }\n\n  function renderSplitTask(task, timeline, config, viewPort) {\n    if (shouldUseSplitRendering(task, config)) {\n      var el = document.createElement('div'),\n          sizes = gantt.getTaskPosition(task);\n\n      if (gantt.hasChild(task.id)) {\n        gantt.eachTask(function (child) {\n          var isVisible = checkVisibility(child, viewPort, timeline, config, gantt);\n\n          if (!isVisible) {\n            return;\n          }\n\n          var element = generateChildElement(task, child, timeline, sizes);\n\n          if (element) {\n            renderedNodes[getKey(child.id, task.id)] = element;\n            el.appendChild(element);\n          } else {\n            renderedNodes[getKey(child.id, task.id)] = false;\n          }\n        }, task.id);\n      }\n\n      return el;\n    }\n\n    return false;\n  }\n\n  function repaintSplitTask(task, itemNode, timeline, config, viewPort) {\n    if (shouldUseSplitRendering(task, config)) {\n      var el = document.createElement(\"div\"),\n          sizes = gantt.getTaskPosition(task);\n      gantt.eachTask(function (child) {\n        var splitKey = getKey(child.id, task.id);\n        var isVisible = checkVisibility(child, viewPort, timeline, config, gantt);\n\n        if (isVisible !== !!renderedNodes[splitKey]) {\n          if (isVisible) {\n            var element = generateChildElement(task, child, timeline, sizes);\n            renderedNodes[splitKey] = element || false;\n          } else {\n            renderedNodes[splitKey] = false;\n          }\n        }\n\n        if (!!renderedNodes[splitKey]) {\n          el.appendChild(renderedNodes[splitKey]);\n        }\n\n        itemNode.innerHTML = \"\";\n        itemNode.appendChild(el);\n      }, task.id);\n    }\n  }\n\n  return {\n    render: renderSplitTask,\n    update: repaintSplitTask,\n    isInViewPort: isInViewPortParent,\n    getVisibleRange: getVisibleRange\n  };\n}\n\nmodule.exports = createTaskRenderer;","var isInViewPort = require(\"./viewport/is_bar_in_viewport\");\n\nvar getVisibleRange = require(\"./viewport/get_visible_bars_range\");\n\nvar createBaseBarRender = require(\"./task_bar_render\");\n\nmodule.exports = function createTaskRenderer(gantt) {\n  var defaultRender = createBaseBarRender(gantt);\n  return {\n    render: defaultRender,\n    update: null,\n    //getRectangle: getBarRectangle\n    isInViewPort: isInViewPort,\n    getVisibleRange: getVisibleRange\n  };\n};","module.exports = function (gantt) {\n  return function processTaskDateProperties(item, mapTo, mode) {\n    if (mode == \"keepDates\") {\n      keepDatesOnEdit(item, mapTo);\n    } else if (mode == \"keepDuration\") {\n      keepDurationOnEdit(item, mapTo);\n    } else {\n      defaultActionOnEdit(item, mapTo);\n    }\n  }; // resize task\n  // resize task when start/end/duration changes\n\n  function keepDatesOnEdit(item, mapTo) {\n    if (mapTo == \"duration\") {\n      item.end_date = gantt.calculateEndDate(item);\n    } else if (mapTo == \"end_date\" || mapTo == \"start_date\") {\n      item.duration = gantt.calculateDuration(item);\n    }\n  } // move task(before 6.2)\n  // move task when start/end dates changes\n  // resize task when duration changes\n\n\n  function keepDurationOnEdit(item, mapTo) {\n    if (mapTo == \"end_date\") {\n      item.start_date = decreaseStartDate(item);\n    } else if (mapTo == \"start_date\" || mapTo == \"duration\") {\n      item.end_date = gantt.calculateEndDate(item);\n    }\n  } // default behavior\n  // move task when start date changes\n  // resize task when end date/duration changes\n\n\n  function defaultActionOnEdit(item, mapTo) {\n    if (gantt.config.schedule_from_end) {\n      if (mapTo == \"end_date\" || mapTo == \"duration\") {\n        item.start_date = decreaseStartDate(item);\n      } else if (mapTo == \"start_date\") {\n        item.duration = gantt.calculateDuration(item);\n      }\n    } else {\n      if (mapTo == \"start_date\" || mapTo == \"duration\") {\n        item.end_date = gantt.calculateEndDate(item);\n      } else if (mapTo == \"end_date\") {\n        item.duration = gantt.calculateDuration(item);\n      }\n    }\n  }\n\n  function decreaseStartDate(item) {\n    return gantt.calculateEndDate({\n      start_date: item.end_date,\n      duration: -item.duration,\n      task: item\n    });\n  }\n};","module.exports = function (gantt) {\n  var BaseEditor = require(\"./base\")(gantt),\n      utils = require(\"../../../../../utils/utils\");\n\n  var __extends = require(\"../../../../../utils/extends\");\n\n  function TextEditor() {\n    var self = BaseEditor.apply(this, arguments) || this;\n    return self;\n  }\n\n  __extends(TextEditor, BaseEditor);\n\n  function getFormatter(config) {\n    return config.formatter || gantt.ext.formatters.durationFormatter();\n  }\n\n  utils.mixin(TextEditor.prototype, {\n    show: function show(id, column, config, placeholder) {\n      var html = \"<div role='cell'><input type='text' name='\".concat(column.name, \"' title='\").concat(column.name, \"'></div>\");\n      placeholder.innerHTML = html;\n    },\n    set_value: function set_value(value, id, column, node) {\n      this.get_input(node).value = getFormatter(column.editor).format(value);\n    },\n    get_value: function get_value(id, column, node) {\n      return getFormatter(column.editor).parse(this.get_input(node).value || \"\");\n    }\n  }, true);\n  return TextEditor;\n};","module.exports = function (gantt) {\n  var BaseEditor = require(\"./base\")(gantt),\n      utils = require(\"../../../../../utils/utils\");\n\n  var __extends = require(\"../../../../../utils/extends\");\n\n  function PredecessorEditor() {\n    var self = BaseEditor.apply(this, arguments) || this;\n    return self;\n  }\n\n  __extends(PredecessorEditor, BaseEditor);\n\n  function getFormatter(config) {\n    return config.formatter || gantt.ext.formatters.linkFormatter();\n  }\n\n  function parseInputString(value, config) {\n    var predecessors = (value || \"\").split(config.delimiter || \",\");\n\n    for (var i = 0; i < predecessors.length; i++) {\n      var val = predecessors[i].trim();\n\n      if (val) {\n        predecessors[i] = val;\n      } else {\n        predecessors.splice(i, 1);\n        i--;\n      }\n    }\n\n    predecessors.sort();\n    return predecessors;\n  }\n\n  function formatPredecessors(task, config, gantt) {\n    var links = task.$target;\n    var labels = [];\n\n    for (var i = 0; i < links.length; i++) {\n      var link = gantt.getLink(links[i]);\n      labels.push(getFormatter(config).format(link));\n    }\n\n    return labels.join((config.delimiter || \",\") + \" \");\n  }\n\n  function getSelectedLinks(taskId, predecessorCodes, config) {\n    var links = [];\n    predecessorCodes.forEach(function (code) {\n      var link = getFormatter(config).parse(code);\n\n      if (link) {\n        link.target = taskId; // GS-1290 A way to preserve the link. Otherwise validation will return false\n        // because the existing link ID is not passed there\n\n        link.id = \"predecessor_generated\";\n\n        if (gantt.isLinkAllowed(link)) {\n          link.id = undefined;\n          links.push(link);\n        }\n      }\n    });\n    return links;\n  }\n\n  function formatLinkKey(link) {\n    return link.source + \"_\" + link.target + \"_\" + link.type + \"_\" + (link.lag || 0);\n  }\n\n  function getLinksDiff(task, predecessorCodes, config) {\n    var selectedLinks = getSelectedLinks(task.id, predecessorCodes, config);\n    var existingLinksSearch = {};\n    task.$target.forEach(function (linkId) {\n      var link = gantt.getLink(linkId);\n      existingLinksSearch[formatLinkKey(link)] = link.id;\n    });\n    var linksToAdd = [];\n    selectedLinks.forEach(function (link) {\n      var linkKey = formatLinkKey(link);\n\n      if (!existingLinksSearch[linkKey]) {\n        linksToAdd.push(link);\n      } else {\n        delete existingLinksSearch[linkKey];\n      }\n    });\n    var linksToDelete = [];\n\n    for (var i in existingLinksSearch) {\n      linksToDelete.push(existingLinksSearch[i]);\n    }\n\n    return {\n      add: linksToAdd,\n      remove: linksToDelete\n    };\n  }\n\n  utils.mixin(PredecessorEditor.prototype, {\n    show: function show(id, column, config, placeholder) {\n      var html = \"<div role='cell'><input type='text' name='\".concat(column.name, \"' title='\").concat(column.name, \"'></div>\");\n      placeholder.innerHTML = html;\n    },\n    hide: function hide() {},\n    set_value: function set_value(value, id, column, node) {\n      this.get_input(node).value = formatPredecessors(value, column.editor, gantt);\n    },\n    get_value: function get_value(id, column, node) {\n      return parseInputString(this.get_input(node).value || \"\", column.editor);\n    },\n    save: function save(id, column, node) {\n      var task = gantt.getTask(id);\n      var linksDiff = getLinksDiff(task, this.get_value(id, column, node), column.editor);\n\n      if (linksDiff.add.length || linksDiff.remove.length) {\n        gantt.batchUpdate(function () {\n          linksDiff.add.forEach(function (link) {\n            gantt.addLink(link);\n          });\n          linksDiff.remove.forEach(function (linkId) {\n            gantt.deleteLink(linkId);\n          });\n          if (gantt.autoSchedule) gantt.autoSchedule();\n        });\n      }\n    },\n    is_changed: function is_changed(value, id, column, node) {\n      var inputPredecessors = this.get_value(id, column, node);\n      var taskPredecessors = parseInputString(formatPredecessors(value, column.editor, gantt), column.editor);\n      return inputPredecessors.join() !== taskPredecessors.join();\n    }\n  }, true);\n  return PredecessorEditor;\n};","module.exports = function (gantt) {\n  var BaseEditor = require(\"./base\")(gantt),\n      utils = require(\"../../../../../utils/utils\");\n\n  var __extends = require(\"../../../../../utils/extends\");\n\n  var html5DateFormat = \"%Y-%m-%d\";\n  var dateToStr = null;\n  var strToDate = null;\n\n  function init() {\n    if (!dateToStr) {\n      dateToStr = gantt.date.date_to_str(html5DateFormat);\n    }\n\n    if (!strToDate) {\n      strToDate = gantt.date.str_to_date(html5DateFormat);\n    }\n  }\n\n  function DateEditor() {\n    var self = BaseEditor.apply(this, arguments) || this;\n    return self;\n  }\n\n  __extends(DateEditor, BaseEditor);\n\n  utils.mixin(DateEditor.prototype, {\n    show: function show(id, column, config, placeholder) {\n      init();\n      var minValue = null;\n      var maxValue = null;\n\n      if (typeof config.min === \"function\") {\n        minValue = config.min(id, column);\n      } else {\n        minValue = config.min;\n      }\n\n      if (typeof config.max === \"function\") {\n        maxValue = config.max(id, column);\n      } else {\n        maxValue = config.max;\n      }\n\n      var minAttr = minValue ? \" min='\" + dateToStr(minValue) + \"' \" : \"\";\n      var maxAttr = maxValue ? \" max='\" + dateToStr(maxValue) + \"' \" : \"\";\n      var html = \"<div style='width:140px' role='cell'><input type='date' \".concat(minAttr, \" \").concat(maxAttr, \" name='\").concat(column.name, \"' title='\").concat(column.name, \"'></div>\");\n      placeholder.innerHTML = html;\n    },\n    set_value: function set_value(value, id, column, node) {\n      if (value && value.getFullYear) {\n        this.get_input(node).value = dateToStr(value);\n      } else {\n        this.get_input(node).value = value;\n      }\n    },\n    is_valid: function is_valid(value, id, column, node) {\n      if (!value || isNaN(value.getTime())) return false;\n      return true;\n    },\n    get_value: function get_value(id, column, node) {\n      var parsed;\n\n      try {\n        parsed = strToDate(this.get_input(node).value || \"\");\n      } catch (e) {\n        parsed = null; // return null will cancel changes\n      }\n\n      return parsed;\n    }\n  }, true);\n  return DateEditor;\n};","module.exports = function (gantt) {\n  var BaseEditor = require(\"./base\")(gantt),\n      utils = require(\"../../../../../utils/utils\");\n\n  var __extends = require(\"../../../../../utils/extends\");\n\n  function SelectEditor() {\n    var self = BaseEditor.apply(this, arguments) || this;\n    return self;\n  }\n\n  __extends(SelectEditor, BaseEditor);\n\n  utils.mixin(SelectEditor.prototype, {\n    show: function show(id, column, config, placeholder) {\n      var html = \"<div role='cell'><select name='\".concat(column.name, \"' title='\").concat(column.name, \"'>\");\n      var optionsHtml = [],\n          options = config.options || [];\n\n      for (var i = 0; i < options.length; i++) {\n        optionsHtml.push(\"<option value='\" + config.options[i].key + \"'>\" + options[i].label + \"</option>\");\n      }\n\n      html += optionsHtml.join(\"\") + \"</select></div>\";\n      placeholder.innerHTML = html;\n    },\n    get_input: function get_input(node) {\n      return node.querySelector(\"select\");\n    }\n  }, true);\n  return SelectEditor;\n};","module.exports = function (gantt) {\n  var BaseEditor = require(\"./base\")(gantt),\n      utils = require(\"../../../../../utils/utils\");\n\n  var __extends = require(\"../../../../../utils/extends\");\n\n  function NumberEditor() {\n    var self = BaseEditor.apply(this, arguments) || this;\n    return self;\n  }\n\n  __extends(NumberEditor, BaseEditor);\n\n  utils.mixin(NumberEditor.prototype, {\n    show: function show(id, column, config, placeholder) {\n      var min = config.min || 0,\n          max = config.max || 100;\n      var html = \"<div role='cell'><input type='number' min='\".concat(min, \"' max='\").concat(max, \"' name='\").concat(column.name, \"' title='\").concat(column.name, \"'></div>\");\n      placeholder.innerHTML = html;\n    },\n    get_value: function get_value(id, column, node) {\n      return this.get_input(node).value || \"\";\n    },\n    is_valid: function is_valid(value, id, column, node) {\n      return !isNaN(parseInt(value, 10));\n    }\n  }, true);\n  return NumberEditor;\n};","module.exports = function (gantt) {\n  var BaseEditor = require(\"./base\")(gantt),\n      utils = require(\"../../../../../utils/utils\");\n\n  var __extends = require(\"../../../../../utils/extends\");\n\n  function TextEditor() {\n    var self = BaseEditor.apply(this, arguments) || this;\n    return self;\n  }\n\n  __extends(TextEditor, BaseEditor);\n\n  utils.mixin(TextEditor.prototype, {\n    show: function show(id, column, config, placeholder) {\n      var html = \"<div role='cell'><input type='text' name='\".concat(column.name, \"' title='\").concat(column.name, \"'></div>\");\n      placeholder.innerHTML = html;\n    }\n  }, true);\n  return TextEditor;\n};","module.exports = {\n  init: function init(controller, grid) {\n    var self = controller;\n    var gantt = grid.$gantt;\n    var onBlurDelay = null;\n    var keyNav = gantt.ext.keyboardNavigation;\n    keyNav.attachEvent(\"onBeforeFocus\", function (node) {\n      var activeCell = controller.locateCell(node);\n      clearTimeout(onBlurDelay);\n\n      if (activeCell) {\n        var columnName = activeCell.columnName;\n        var id = activeCell.id;\n        var editorState = self.getState();\n\n        if (self.isVisible()) {\n          if (editorState.id == id && editorState.columnName === columnName) {\n            return false;\n          }\n        }\n      }\n\n      return true;\n    });\n    keyNav.attachEvent(\"onFocus\", function (node) {\n      var activeCell = controller.locateCell(node);\n      var state = controller.getState();\n      clearTimeout(onBlurDelay);\n\n      if (activeCell && !(activeCell.id == state.id && activeCell.columnName == state.columnName)) {\n        if (self.isVisible()) {\n          self.save();\n        }\n      }\n\n      return true;\n    });\n    controller.attachEvent(\"onHide\", function () {\n      clearTimeout(onBlurDelay);\n    });\n    keyNav.attachEvent(\"onBlur\", function () {\n      onBlurDelay = setTimeout(function () {\n        self.save();\n      });\n      return true;\n    });\n    gantt.attachEvent(\"onTaskDblClick\", function (id, e) {\n      // block lightbox on double click inside editor\n      var state = controller.getState();\n      var cell = controller.locateCell(e.target);\n\n      if (cell && controller.isVisible() && cell.columnName == state.columnName) {\n        return false;\n      }\n\n      return true;\n    });\n    gantt.attachEvent(\"onTaskClick\", function (id, e) {\n      if (gantt._is_icon_open_click(e)) return true;\n      var state = controller.getState();\n      var cell = controller.locateCell(e.target);\n\n      if (cell && controller.getEditorConfig(cell.columnName)) {\n        if (controller.isVisible() && state.id == cell.id && state.columnName == cell.columnName) {// do nothing if editor is already active in this cell\n        } else {\n          controller.startEdit(cell.id, cell.columnName);\n        }\n\n        return false;\n      }\n\n      return true;\n    });\n    gantt.attachEvent(\"onEmptyClick\", function () {\n      self.save();\n      return true;\n    });\n    keyNav.attachEvent(\"onKeyDown\", function (command, e) {\n      var activeCell = controller.locateCell(e.target);\n      var hasEditor = activeCell ? controller.getEditorConfig(activeCell.columnName) : false;\n      var state = controller.getState();\n      var keyboard = gantt.constants.KEY_CODES;\n      var keyCode = e.keyCode;\n      var preventKeyNav = false;\n\n      switch (keyCode) {\n        case keyboard.ENTER:\n          if (controller.isVisible()) {\n            controller.save();\n            e.preventDefault();\n            preventKeyNav = true;\n          } else if (hasEditor && !(e.ctrlKey || e.metaKey || e.shiftKey)) {\n            self.startEdit(activeCell.id, activeCell.columnName);\n            e.preventDefault();\n            preventKeyNav = true;\n          }\n\n          break;\n\n        case keyboard.ESC:\n          if (controller.isVisible()) {\n            controller.hide();\n            e.preventDefault();\n            preventKeyNav = true;\n          }\n\n          break;\n\n        case keyboard.UP:\n        case keyboard.DOWN:\n          break;\n\n        case keyboard.LEFT:\n        case keyboard.RIGHT:\n          if (hasEditor && controller.isVisible() || state.editorType === \"date\") {\n            preventKeyNav = true;\n          }\n\n          break;\n\n        case keyboard.SPACE:\n          if (controller.isVisible()) {\n            preventKeyNav = true;\n          }\n\n          if (hasEditor && !controller.isVisible()) {\n            self.startEdit(activeCell.id, activeCell.columnName);\n            e.preventDefault();\n            preventKeyNav = true;\n          }\n\n          break;\n\n        case keyboard.DELETE:\n          if (hasEditor && !controller.isVisible()) {\n            self.startEdit(activeCell.id, activeCell.columnName);\n            preventKeyNav = true;\n          } else if (hasEditor && controller.isVisible()) {\n            preventKeyNav = true;\n          }\n\n          break;\n\n        case keyboard.TAB:\n          if (controller.isVisible()) {\n            if (e.shiftKey) {\n              controller.editPrevCell(true);\n            } else {\n              controller.editNextCell(true);\n            }\n\n            var newState = controller.getState();\n\n            if (newState.id) {\n              keyNav.focus({\n                type: \"taskCell\",\n                id: newState.id,\n                column: newState.columnName\n              });\n            }\n\n            e.preventDefault();\n            preventKeyNav = true;\n          }\n\n          break;\n\n        default:\n          if (controller.isVisible()) preventKeyNav = true;else {\n            // start editing on character key\n            if (keyCode >= 48 && keyCode <= 57 || // [0-9]\n            keyCode > 95 && keyCode < 112 || // numpad\n            keyCode >= 64 && keyCode <= 91 || // [a-z]\n            keyCode > 185 && keyCode < 193 || //;=-,etc\n            keyCode > 218 && keyCode < 223) {\n              var modifiers = command.modifiers;\n              var anyModifier = modifiers.alt || modifiers.ctrl || modifiers.meta || modifiers.shift;\n\n              if (modifiers.alt) {// don't start editing on alt+key\n              } else if (anyModifier && keyNav.getCommandHandler(command, \"taskCell\")) {// don't start editing if command already have a keyboard shortcut\n              } else if (hasEditor && !controller.isVisible()) {\n                self.startEdit(activeCell.id, activeCell.columnName);\n                preventKeyNav = true;\n              }\n            }\n          }\n          break;\n      }\n\n      if (preventKeyNav) {\n        return false;\n      } else {\n        return true;\n      }\n    });\n  },\n  onShow: function onShow(controller, placeholder, grid) {},\n  onHide: function onHide(controller, placeholder, grid) {\n    var gantt = grid.$gantt;\n    gantt.focus();\n  },\n  destroy: function destroy() {}\n};","module.exports = {\n  init: function init(controller, grid) {\n    var gantt = grid.$gantt;\n    gantt.attachEvent(\"onTaskClick\", function (id, e) {\n      if (gantt._is_icon_open_click(e)) return true;\n      var state = controller.getState();\n      var cell = controller.locateCell(e.target);\n\n      if (cell && controller.getEditorConfig(cell.columnName)) {\n        if (controller.isVisible() && state.id == cell.id && state.columnName == cell.columnName) {// do nothing if editor is already active in this cell\n        } else {\n          controller.startEdit(cell.id, cell.columnName);\n        }\n\n        return false;\n      }\n\n      return true;\n    });\n    gantt.attachEvent(\"onEmptyClick\", function () {\n      if (controller.isVisible() && controller.isChanged()) {\n        controller.save();\n      } else {\n        controller.hide();\n      }\n\n      return true;\n    });\n    gantt.attachEvent(\"onTaskDblClick\", function (id, e) {\n      var state = controller.getState();\n      var cell = controller.locateCell(e.target);\n\n      if (cell && controller.isVisible() && cell.columnName == state.columnName) {\n        //GS-933 probably, we don't need to hide the inline editor because the lightbox cannot be opened if you double-click on an inline editor\n        //remove this code later if people don't complain\n        //controller.hide();\n        return false;\n      }\n\n      return true;\n    });\n  },\n  onShow: function onShow(controller, placeholder, grid) {\n    var gantt = grid.$gantt;\n\n    if (gantt.ext && gantt.ext.keyboardNavigation) {\n      var keyNav = gantt.ext.keyboardNavigation;\n      keyNav.attachEvent(\"onKeyDown\", function (command, e) {\n        var keyboard = gantt.constants.KEY_CODES;\n        var keyCode = e.keyCode;\n        var preventKeyNav = false;\n\n        switch (keyCode) {\n          case keyboard.SPACE:\n            if (controller.isVisible()) {\n              preventKeyNav = true;\n            }\n\n            break;\n        }\n\n        if (preventKeyNav) {\n          return false;\n        } else {\n          return true;\n        }\n      });\n    }\n\n    placeholder.onkeydown = function (e) {\n      e = e || window.event;\n      var keyboard = gantt.constants.KEY_CODES;\n\n      if (e.defaultPrevented || e.shiftKey && e.keyCode != keyboard.TAB) {\n        return;\n      }\n\n      var shouldPrevent = true;\n\n      switch (e.keyCode) {\n        case gantt.keys.edit_save:\n          controller.save();\n          break;\n\n        case gantt.keys.edit_cancel:\n          controller.hide();\n          break;\n\n        case keyboard.UP:\n        case keyboard.DOWN:\n          if (controller.isVisible()) {\n            controller.hide();\n            shouldPrevent = false;\n          }\n\n          break;\n\n        case keyboard.TAB:\n          if (e.shiftKey) {\n            controller.editPrevCell(true);\n          } else {\n            controller.editNextCell(true);\n          }\n\n          break;\n\n        default:\n          shouldPrevent = false;\n          break;\n      }\n\n      if (shouldPrevent) {\n        e.preventDefault();\n      }\n    };\n  },\n  onHide: function onHide() {},\n  destroy: function destroy() {}\n};","var defaultMapping = require(\"./keyboard_mappings/default\");\n\nvar keyNavMappings = require(\"./keyboard_mappings/keyboard_navigation\");\n\nmodule.exports = function (gantt) {\n  var mapping = null;\n  return {\n    setMapping: function setMapping(map) {\n      mapping = map;\n    },\n    getMapping: function getMapping() {\n      if (mapping) {\n        return mapping;\n      } else if (gantt.config.keyboard_navigation_cells && gantt.ext.keyboardNavigation) {\n        return keyNavMappings;\n      } else {\n        return defaultMapping;\n      }\n    }\n  };\n};","var getKeyboardMapping = require(\"./keyboard_mappings\");\n\nvar textEditorFactory = require(\"./editors/text\"),\n    numberEditorFactory = require(\"./editors/number\"),\n    selectEditorFactory = require(\"./editors/select\"),\n    dateEditorFactory = require(\"./editors/date\"),\n    predecessorEditorFactory = require(\"./editors/predecessor\"),\n    durationEditorFactory = require(\"./editors/duration\");\n\nvar utils = require(\"../../../../utils/utils\");\n\nvar domHelpers = require(\"../../utils/dom_helpers\");\n\nvar eventable = require(\"../../../../utils/eventable\");\n\nvar linkedPropertiesProcessor = require(\"./linked_properties\");\n\nfunction initConfigs(gantt) {\n  gantt.config.editor_types = {\n    text: new (textEditorFactory(gantt))(),\n    number: new (numberEditorFactory(gantt))(),\n    select: new (selectEditorFactory(gantt))(),\n    date: new (dateEditorFactory(gantt))(),\n    predecessor: new (predecessorEditorFactory(gantt))(),\n    duration: new (durationEditorFactory(gantt))()\n  };\n}\n\nfunction create(gantt) {\n  var keyboardMapping = getKeyboardMapping(gantt);\n  var eventBus = {};\n  eventable(eventBus);\n\n  function createGridEditors(grid) {\n    function _getGridCellFromNode(node) {\n      if (!domHelpers.isChildOf(node, grid.$grid)) {\n        return null;\n      }\n\n      var row = domHelpers.locateAttribute(node, grid.$config.item_attribute);\n      var cell = domHelpers.locateAttribute(node, \"data-column-name\");\n\n      if (row && cell) {\n        var columnName = cell.getAttribute(\"data-column-name\");\n        var id = row.getAttribute(grid.$config.item_attribute);\n        return {\n          id: id,\n          columnName: columnName\n        };\n      }\n\n      return null;\n    }\n\n    function _getEditorPosition(itemId, columnName) {\n      var config = grid.$getConfig();\n      var top = grid.getItemTop(itemId);\n      var height = grid.getItemHeight(itemId);\n      var cols = grid.getGridColumns();\n      var left = 0,\n          right = 0,\n          width = 0;\n\n      for (var i = 0; i < cols.length; i++) {\n        if (cols[i].name == columnName) {\n          width = cols[i].width;\n          break;\n        }\n\n        if (config.rtl) {\n          right += cols[i].width;\n        } else {\n          left += cols[i].width;\n        }\n      }\n\n      if (config.rtl) {\n        return {\n          top: top,\n          right: right,\n          height: height,\n          width: width\n        };\n      } else {\n        return {\n          top: top,\n          left: left,\n          height: height,\n          width: width\n        };\n      }\n    }\n\n    function findVisibleIndex(grid, columnName) {\n      var columns = grid.getGridColumns();\n\n      for (var i = 0; i < columns.length; i++) {\n        if (columns[i].name == columnName) {\n          return i;\n        }\n      }\n\n      return 0;\n    }\n\n    function _createPlaceholder(itemId, columnName) {\n      var config = grid.$getConfig();\n\n      var pos = _getEditorPosition(itemId, columnName);\n\n      var el = document.createElement(\"div\");\n      el.className = \"gantt_grid_editor_placeholder\";\n      el.setAttribute(grid.$config.item_attribute, itemId);\n      el.setAttribute(grid.$config.bind + \"_id\", itemId); // for backward compatibility\n\n      el.setAttribute(\"data-column-name\", columnName);\n      var visibleIndex = findVisibleIndex(grid, columnName);\n      el.setAttribute(\"data-column-index\", visibleIndex);\n\n      gantt._waiAria.inlineEditorAttr(el);\n\n      if (config.rtl) {\n        el.style.cssText = [\"top:\" + pos.top + \"px\", \"right:\" + pos.right + \"px\", \"width:\" + pos.width + \"px\", \"height:\" + pos.height + \"px\"].join(\";\");\n      } else {\n        el.style.cssText = [\"top:\" + pos.top + \"px\", \"left:\" + pos.left + \"px\", \"width:\" + pos.width + \"px\", \"height:\" + pos.height + \"px\"].join(\";\");\n      }\n\n      return el;\n    }\n\n    var updateTaskDateProperties = linkedPropertiesProcessor(gantt);\n    var handlers = [];\n    var ganttHandlers = [];\n    var store = null;\n    var controller = {\n      _itemId: null,\n      _columnName: null,\n      _editor: null,\n      _editorType: null,\n      _placeholder: null,\n      locateCell: _getGridCellFromNode,\n      getEditorConfig: function getEditorConfig(columnName) {\n        var column = grid.getColumn(columnName);\n        return column.editor;\n      },\n      init: function init() {\n        var mapping = keyboardMapping.getMapping();\n\n        if (mapping.init) {\n          mapping.init(this, grid);\n        }\n\n        store = grid.$gantt.getDatastore(grid.$config.bind);\n        var self = this;\n        handlers.push(store.attachEvent(\"onIdChange\", function (oldId, newId) {\n          if (self._itemId == oldId) {\n            self._itemId = newId;\n          }\n        }));\n        handlers.push(store.attachEvent(\"onStoreUpdated\", function () {\n          if (grid.$gantt.getState(\"batchUpdate\").batch_update) {\n            return;\n          }\n\n          if (self.isVisible() && !store.isVisible(self._itemId)) {\n            self.hide();\n          }\n        }));\n        ganttHandlers.push(gantt.attachEvent(\"onDataRender\", function () {\n          if (self._editor && self._placeholder && !domHelpers.isChildOf(self._placeholder, gantt.$root)) {\n            grid.$grid_data.appendChild(self._placeholder);\n          }\n        }));\n\n        this.init = function () {};\n      },\n      getState: function getState() {\n        return {\n          editor: this._editor,\n          editorType: this._editorType,\n          placeholder: this._placeholder,\n          id: this._itemId,\n          columnName: this._columnName\n        };\n      },\n      startEdit: function startEdit(itemId, columnName) {\n        if (this.isVisible()) {\n          this.save();\n        }\n\n        if (!store.exists(itemId)) {\n          return;\n        }\n\n        var editorState = {\n          id: itemId,\n          columnName: columnName\n        };\n\n        if (gantt.isReadonly(store.getItem(itemId))) {\n          this.callEvent(\"onEditPrevent\", [editorState]);\n          return;\n        }\n\n        if (this.callEvent(\"onBeforeEditStart\", [editorState]) === false) {\n          this.callEvent(\"onEditPrevent\", [editorState]);\n          return;\n        }\n\n        this.show(editorState.id, editorState.columnName);\n        this.setValue();\n        this.callEvent(\"onEditStart\", [editorState]);\n      },\n      isVisible: function isVisible() {\n        return !!(this._editor && domHelpers.isChildOf(this._placeholder, gantt.$root));\n      },\n      show: function show(itemId, columnName) {\n        if (this.isVisible()) {\n          this.save();\n        }\n\n        var editorState = {\n          id: itemId,\n          columnName: columnName\n        };\n        var column = grid.getColumn(editorState.columnName);\n        var editorConfig = this.getEditorConfig(column.name);\n        if (!editorConfig) return;\n        var editor = grid.$getConfig().editor_types[editorConfig.type];\n\n        var placeholder = _createPlaceholder(editorState.id, editorState.columnName);\n\n        grid.$grid_data.appendChild(placeholder);\n        editor.show(editorState.id, column, editorConfig, placeholder);\n        this._editor = editor;\n        this._placeholder = placeholder;\n        this._itemId = editorState.id;\n        this._columnName = editorState.columnName;\n        this._editorType = editorConfig.type;\n        var mapping = keyboardMapping.getMapping();\n\n        if (mapping.onShow) {\n          mapping.onShow(this, placeholder, grid);\n        }\n      },\n      setValue: function setValue() {\n        var state = this.getState();\n        var itemId = state.id,\n            columnName = state.columnName;\n        var column = grid.getColumn(columnName);\n        var item = store.getItem(itemId);\n        var editorConfig = this.getEditorConfig(columnName);\n        if (!editorConfig) return;\n        var value = item[editorConfig.map_to];\n\n        if (editorConfig.map_to == \"auto\") {\n          value = store.getItem(itemId);\n        }\n\n        this._editor.set_value(value, itemId, column, this._placeholder);\n\n        this.focus();\n      },\n      focus: function focus() {\n        this._editor.focus(this._placeholder);\n      },\n      getValue: function getValue() {\n        var column = grid.getColumn(this._columnName);\n        return this._editor.get_value(this._itemId, column, this._placeholder);\n      },\n      _getItemValue: function _getItemValue() {\n        var editorConfig = this.getEditorConfig(this._columnName);\n        if (!editorConfig) return;\n        var item = gantt.getTask(this._itemId);\n        var value = item[editorConfig.map_to];\n\n        if (editorConfig.map_to == \"auto\") {\n          value = store.getItem(this._itemId);\n        }\n\n        return value;\n      },\n      isChanged: function isChanged() {\n        var column = grid.getColumn(this._columnName);\n\n        var value = this._getItemValue();\n\n        return this._editor.is_changed(value, this._itemId, column, this._placeholder);\n      },\n      hide: function hide() {\n        if (!this._itemId) return;\n        var itemId = this._itemId,\n            columnName = this._columnName;\n        var mapping = keyboardMapping.getMapping();\n\n        if (mapping.onHide) {\n          mapping.onHide(this, this._placeholder, grid);\n        }\n\n        this._itemId = null;\n        this._columnName = null;\n        this._editorType = null;\n        if (!this._placeholder) return;\n\n        if (this._editor && this._editor.hide) {\n          this._editor.hide(this._placeholder);\n        }\n\n        this._editor = null;\n\n        if (this._placeholder.parentNode) {\n          this._placeholder.parentNode.removeChild(this._placeholder);\n        }\n\n        this._placeholder = null;\n        this.callEvent(\"onEditEnd\", [{\n          id: itemId,\n          columnName: columnName\n        }]);\n      },\n      save: function save() {\n        if (!(this.isVisible() && store.exists(this._itemId) && this.isChanged())) {\n          this.hide();\n          return;\n        }\n\n        var itemId = this._itemId,\n            columnName = this._columnName;\n\n        if (!store.exists(itemId)) {\n          return;\n        }\n\n        var item = store.getItem(itemId);\n        var editorConfig = this.getEditorConfig(columnName);\n        var editorState = {\n          id: itemId,\n          columnName: columnName,\n          newValue: this.getValue(),\n          oldValue: this._getItemValue()\n        };\n\n        if (this.callEvent(\"onBeforeSave\", [editorState]) !== false) {\n          if (!this._editor.is_valid || this._editor.is_valid(editorState.newValue, editorState.id, grid.getColumn(columnName), this._placeholder)) {\n            var mapTo = editorConfig.map_to;\n            var value = editorState.newValue;\n\n            if (mapTo != \"auto\") {\n              item[mapTo] = value;\n              updateTaskDateProperties(item, mapTo, gantt.config.inline_editors_date_processing);\n              store.updateItem(itemId);\n            } else {\n              this._editor.save(itemId, grid.getColumn(columnName), this._placeholder);\n            }\n\n            this.callEvent(\"onSave\", [editorState]);\n          }\n        }\n\n        this.hide();\n      },\n      _findEditableCell: function findEditableCell(start, direction) {\n        var nextIndex = start;\n        var columns = grid.getGridColumns();\n        var nextColumn = columns[nextIndex];\n        var columnName = nextColumn ? nextColumn.name : null;\n\n        if (columnName) {\n          while (columnName && !this.getEditorConfig(columnName)) {\n            columnName = this._findEditableCell(start + direction, direction);\n          }\n\n          return columnName;\n        }\n\n        return null;\n      },\n      getNextCell: function moveCell(dir) {\n        // GS-1257. true means to exclude hidden columns\n        return this._findEditableCell(grid.getColumnIndex(this._columnName, true) + dir, dir);\n      },\n      getFirstCell: function getFirstCell() {\n        return this._findEditableCell(0, 1);\n      },\n      getLastCell: function getLastCell() {\n        return this._findEditableCell(grid.getGridColumns().length - 1, -1);\n      },\n      editNextCell: function nextCell(canChangeRow) {\n        var cell = this.getNextCell(1);\n\n        if (cell) {\n          var nextColumn = this.getNextCell(1);\n\n          if (nextColumn && this.getEditorConfig(nextColumn)) {\n            this.startEdit(this._itemId, nextColumn);\n          }\n        } else if (canChangeRow && this.moveRow(1)) {\n          var task = this.moveRow(1);\n          cell = this.getFirstCell();\n\n          if (cell && this.getEditorConfig(cell)) {\n            this.startEdit(task, cell);\n          }\n        }\n      },\n      editPrevCell: function prevCell(canChangeRow) {\n        var cell = this.getNextCell(-1);\n\n        if (cell) {\n          var nextColumn = this.getNextCell(-1);\n\n          if (nextColumn && this.getEditorConfig(nextColumn)) {\n            this.startEdit(this._itemId, nextColumn);\n          }\n        } else if (canChangeRow && this.moveRow(-1)) {\n          var task = this.moveRow(-1);\n          cell = this.getLastCell();\n\n          if (cell && this.getEditorConfig(cell)) {\n            this.startEdit(task, cell);\n          }\n        }\n      },\n      moveRow: function moveRow(dir) {\n        var moveTask = dir > 0 ? gantt.getNext : gantt.getPrev;\n        moveTask = gantt.bind(moveTask, gantt);\n        var nextItem = moveTask(this._itemId); // skip readonly rows\n\n        while (gantt.isTaskExists(nextItem) && gantt.isReadonly(gantt.getTask(nextItem))) {\n          nextItem = moveTask(nextItem);\n        }\n\n        return nextItem;\n      },\n      editNextRow: function nextRow(skipReadonly) {\n        var id = this.getState().id;\n        if (!gantt.isTaskExists(id)) return;\n        var next = null;\n\n        if (skipReadonly) {\n          next = this.moveRow(1);\n        } else {\n          next = gantt.getNext(id);\n        }\n\n        if (gantt.isTaskExists(next)) {\n          this.startEdit(next, this._columnName);\n        }\n      },\n      editPrevRow: function prevRow(skipReadonly) {\n        var id = this.getState().id;\n        if (!gantt.isTaskExists(id)) return;\n        var prev = null;\n\n        if (skipReadonly) {\n          prev = this.moveRow(-1);\n        } else {\n          prev = gantt.getPrev(id);\n        }\n\n        if (gantt.isTaskExists(prev)) {\n          this.startEdit(prev, this._columnName);\n        }\n      },\n      destructor: function destructor() {\n        handlers.forEach(function (handlerId) {\n          store.detachEvent(handlerId);\n        });\n        ganttHandlers.forEach(function (handlerId) {\n          gantt.detachEvent(handlerId);\n        });\n        handlers = [];\n        ganttHandlers = [];\n        store = null;\n        this.hide();\n        this.detachAllEvents();\n      }\n    };\n    utils.mixin(controller, keyboardMapping);\n    utils.mixin(controller, eventBus);\n    return controller;\n  }\n\n  var inlineEditController = {\n    init: initConfigs,\n    createEditors: createGridEditors\n  };\n  utils.mixin(inlineEditController, keyboardMapping);\n  utils.mixin(inlineEditController, eventBus);\n  return inlineEditController;\n}\n\nmodule.exports = create;","var createStaticBgHelper = function createStaticBgHelper() {\n  return {\n    render: function render() {},\n    destroy: function destroy() {}\n  };\n};\n\nmodule.exports = {\n  create: function create() {\n    return createStaticBgHelper();\n  }\n};","var __extends = require(\"../../../utils/extends\"),\n    domHelpers = require(\"../utils/dom_helpers\"),\n    utils = require(\"../../../utils/utils\"),\n    env = require(\"../../../utils/env\"),\n    Cell = require(\"./cell\");\n\nvar ScrollbarCell = function (_super) {\n  \"use strict\";\n\n  var SCROLL_MODIFIER_KEYS = [\"altKey\", \"shiftKey\", \"metaKey\"]; // it's no way to disable ctrl+wheel\n\n  __extends(ScrollbarCell, _super);\n\n  function ScrollbarCell(parent, config, factory, gantt) {\n    var _this = _super.apply(this, arguments) || this;\n\n    this.$config = utils.mixin(config, {\n      scroll: \"x\"\n    });\n    _this._scrollHorizontalHandler = utils.bind(_this._scrollHorizontalHandler, _this);\n    _this._scrollVerticalHandler = utils.bind(_this._scrollVerticalHandler, _this);\n    _this._outerScrollVerticalHandler = utils.bind(_this._outerScrollVerticalHandler, _this);\n    _this._outerScrollHorizontalHandler = utils.bind(_this._outerScrollHorizontalHandler, _this);\n    _this._mouseWheelHandler = utils.bind(_this._mouseWheelHandler, _this);\n    this.$config.hidden = true;\n    var size = gantt.config.scroll_size;\n\n    if (gantt.env.isIE) {\n      // full element height/width must be bigger than just a browser scrollbar,\n      // otherwise the scrollbar element won't be scrolled on click\n      size += 1;\n    }\n\n    if (this._isHorizontal()) {\n      _this.$config.height = size;\n      _this.$parent.$config.height = size;\n    } else {\n      _this.$config.width = size;\n      _this.$parent.$config.width = size;\n    }\n\n    this.$config.scrollPosition = 0;\n    _this.$name = \"scroller\";\n    return _this;\n  }\n\n  ScrollbarCell.prototype.init = function (container) {\n    container.innerHTML = this.$toHTML();\n    this.$view = container.firstChild;\n\n    if (!this.$view) {\n      this.init();\n    }\n\n    if (this._isVertical()) {\n      this._initVertical();\n    } else {\n      this._initHorizontal();\n    }\n\n    this._initMouseWheel();\n\n    this._initLinkedViews();\n  };\n\n  ScrollbarCell.prototype.$toHTML = function () {\n    var className = this._isHorizontal() ? \"gantt_hor_scroll\" : \"gantt_ver_scroll\";\n    return \"<div class='gantt_layout_cell \" + className + \"'><div style='\" + (this._isHorizontal() ? \"width:2000px\" : \"height:2000px\") + \"'></div></div>\";\n  };\n\n  ScrollbarCell.prototype._getRootParent = function () {\n    var parent = this.$parent;\n\n    while (parent && parent.$parent) {\n      parent = parent.$parent;\n    }\n\n    if (parent) {\n      return parent;\n    }\n  };\n\n  function eachCell(root, res) {\n    res.push(root);\n\n    if (root.$cells) {\n      for (var i = 0; i < root.$cells.length; i++) {\n        eachCell(root.$cells[i], res);\n      }\n    }\n  }\n\n  ScrollbarCell.prototype._eachView = function () {\n    var res = [];\n    eachCell(this._getRootParent(), res);\n    return res;\n  };\n\n  ScrollbarCell.prototype._getLinkedViews = function () {\n    var views = this._eachView();\n\n    var res = [];\n\n    for (var i = 0; i < views.length; i++) {\n      if (views[i].$config && (this._isVertical() && views[i].$config.scrollY == this.$id || this._isHorizontal() && views[i].$config.scrollX == this.$id)) {\n        res.push(views[i]);\n      }\n    }\n\n    return res;\n  };\n\n  ScrollbarCell.prototype._initHorizontal = function () {\n    this.$scroll_hor = this.$view;\n    this.$domEvents.attach(this.$view, \"scroll\", this._scrollHorizontalHandler);\n  };\n\n  ScrollbarCell.prototype._initLinkedViews = function () {\n    var views = this._getLinkedViews();\n\n    var css = this._isVertical() ? \"gantt_layout_outer_scroll gantt_layout_outer_scroll_vertical\" : \"gantt_layout_outer_scroll gantt_layout_outer_scroll_horizontal\";\n\n    for (var i = 0; i < views.length; i++) {\n      //views[i].$config.css = [views[i].$config.css || \"\", css].join(\" \");\n      domHelpers.addClassName(views[i].$view || views[i].getNode(), css);\n    }\n  };\n\n  ScrollbarCell.prototype._initVertical = function () {\n    this.$scroll_ver = this.$view;\n    this.$domEvents.attach(this.$view, \"scroll\", this._scrollVerticalHandler);\n  };\n\n  ScrollbarCell.prototype._updateLinkedViews = function () {};\n\n  ScrollbarCell.prototype._initMouseWheel = function () {\n    var ff = env.isFF;\n    if (ff) this.$domEvents.attach(this._getRootParent().$view, \"wheel\", this._mouseWheelHandler, {\n      passive: false\n    });else this.$domEvents.attach(this._getRootParent().$view, \"mousewheel\", this._mouseWheelHandler, {\n      passive: false\n    });\n  };\n\n  ScrollbarCell.prototype.scrollHorizontally = function (left) {\n    if (this._scrolling) return;\n    this._scrolling = true;\n    this.$scroll_hor.scrollLeft = left;\n    this.$config.codeScrollLeft = left;\n    left = this.$scroll_hor.scrollLeft;\n\n    var views = this._getLinkedViews();\n\n    for (var i = 0; i < views.length; i++) {\n      if (views[i].scrollTo) {\n        views[i].scrollTo(left, undefined);\n      }\n    }\n\n    var oldSize = this.$config.scrollPosition;\n    this.$config.scrollPosition = left;\n    this.callEvent(\"onScroll\", [oldSize, left, this.$config.scroll]);\n    this._scrolling = false;\n  };\n\n  ScrollbarCell.prototype.scrollVertically = function (top) {\n    if (this._scrolling) return;\n    this._scrolling = true;\n    this.$scroll_ver.scrollTop = top;\n    top = this.$scroll_ver.scrollTop;\n\n    var views = this._getLinkedViews();\n\n    for (var i = 0; i < views.length; i++) {\n      if (views[i].scrollTo) {\n        views[i].scrollTo(undefined, top);\n      }\n    }\n\n    var oldSize = this.$config.scrollPosition;\n    this.$config.scrollPosition = top;\n    this.callEvent(\"onScroll\", [oldSize, top, this.$config.scroll]);\n    this._scrolling = false;\n  };\n\n  ScrollbarCell.prototype._isVertical = function () {\n    return this.$config.scroll == \"y\";\n  };\n\n  ScrollbarCell.prototype._isHorizontal = function () {\n    return this.$config.scroll == \"x\";\n  };\n\n  ScrollbarCell.prototype._scrollHorizontalHandler = function (e) {\n    if (this._isVertical() || this._scrolling) {\n      return;\n    } //in safari we can catch previous onscroll after setting new value from mouse-wheel event\n    //set delay to prevent value drifiting\n\n\n    if (new Date() - (this._wheel_time || 0) < 100) return true; //if (this.$gantt._touch_scroll_active) return;\n\n    var left = this.$scroll_hor.scrollLeft;\n    this.scrollHorizontally(left);\n    this._oldLeft = this.$scroll_hor.scrollLeft;\n  };\n\n  ScrollbarCell.prototype._outerScrollHorizontalHandler = function (e) {\n    if (this._isVertical()) {\n      return;\n    }\n  };\n\n  ScrollbarCell.prototype.show = function () {\n    this.$parent.show();\n  };\n\n  ScrollbarCell.prototype.hide = function () {\n    this.$parent.hide();\n  };\n\n  ScrollbarCell.prototype._getScrollSize = function () {\n    var scrollSize = 0;\n    var outerSize = 0;\n\n    var isHorizontal = this._isHorizontal();\n\n    var linked = this._getLinkedViews();\n\n    var view;\n    var scrollProperty = isHorizontal ? \"scrollWidth\" : \"scrollHeight\",\n        innerSizeProperty = isHorizontal ? \"contentX\" : \"contentY\";\n    var outerProperty = isHorizontal ? \"x\" : \"y\";\n\n    var offset = this._getScrollOffset();\n\n    for (var i = 0; i < linked.length; i++) {\n      view = linked[i];\n      if (!(view && view.$content && view.$content.getSize && !view.$config.hidden)) continue;\n      var sizes = view.$content.getSize();\n      var cellScrollSize;\n\n      if (sizes.hasOwnProperty(scrollProperty)) {\n        cellScrollSize = sizes[scrollProperty];\n      } else {\n        cellScrollSize = sizes[innerSizeProperty];\n      }\n\n      if (offset) {\n        // precalculated vertical/horizontal offsets of scrollbar to emulate 4.x look\n        if (sizes[innerSizeProperty] > sizes[outerProperty] && sizes[innerSizeProperty] > scrollSize && cellScrollSize > sizes[outerProperty] - offset + 2) {\n          scrollSize = cellScrollSize + (isHorizontal ? 0 : 2);\n          outerSize = sizes[outerProperty];\n        }\n      } else {\n        var nonScrollableSize = Math.max(sizes[innerSizeProperty] - cellScrollSize, 0);\n        var scrollableViewPortSize = Math.max(sizes[outerProperty] - nonScrollableSize, 0);\n        cellScrollSize = cellScrollSize + nonScrollableSize;\n\n        if (cellScrollSize > scrollableViewPortSize && cellScrollSize > scrollSize) {\n          //|| (cellScrollSize === scrollSize && sizes[outerProperty] < outerSize) // same scroll width but smaller scrollable view port\n          scrollSize = cellScrollSize;\n          outerSize = sizes[outerProperty];\n        }\n      }\n    }\n\n    return {\n      outerScroll: outerSize,\n      innerScroll: scrollSize\n    };\n  };\n\n  ScrollbarCell.prototype.scroll = function (position) {\n    if (this._isHorizontal()) {\n      this.scrollHorizontally(position);\n    } else {\n      this.scrollVertically(position);\n    }\n  };\n\n  ScrollbarCell.prototype.getScrollState = function () {\n    return {\n      visible: this.isVisible(),\n      direction: this.$config.scroll,\n      size: this.$config.outerSize,\n      scrollSize: this.$config.scrollSize || 0,\n      position: this.$config.scrollPosition || 0\n    };\n  };\n\n  ScrollbarCell.prototype.setSize = function (width, height) {\n    _super.prototype.setSize.apply(this, arguments);\n\n    var scrollSizes = this._getScrollSize();\n\n    var ownSize = (this._isVertical() ? height : width) - this._getScrollOffset() + (this._isHorizontal() ? 1 : 0);\n\n    if (scrollSizes.innerScroll && ownSize > scrollSizes.outerScroll) {\n      scrollSizes.innerScroll += ownSize - scrollSizes.outerScroll;\n    }\n\n    this.$config.scrollSize = scrollSizes.innerScroll;\n    this.$config.width = width;\n    this.$config.height = height;\n\n    this._setScrollSize(scrollSizes.innerScroll);\n  };\n\n  ScrollbarCell.prototype.isVisible = function () {\n    return !!(this.$parent && this.$parent.$view.parentNode);\n  };\n\n  ScrollbarCell.prototype.shouldShow = function () {\n    var scrollSizes = this._getScrollSize();\n\n    if (!scrollSizes.innerScroll && this.$parent && this.$parent.$view.parentNode) {\n      return false;\n    } else if (scrollSizes.innerScroll && !(this.$parent && this.$parent.$view.parentNode)) {\n      return true;\n    } else {\n      return false;\n    }\n  };\n\n  ScrollbarCell.prototype.shouldHide = function () {\n    var scrollSizes = this._getScrollSize();\n\n    if (!scrollSizes.innerScroll && this.$parent && this.$parent.$view.parentNode) {\n      return true;\n    } else {\n      return false;\n    }\n  };\n\n  ScrollbarCell.prototype.toggleVisibility = function () {\n    if (this.shouldHide()) {\n      this.hide();\n    } else if (this.shouldShow()) {\n      this.show();\n    }\n  };\n\n  ScrollbarCell.prototype._getScaleOffset = function (view) {\n    var offset = 0;\n\n    if (view && (view.$config.view == \"timeline\" || view.$config.view == \"grid\")) {\n      offset = view.$content.$getConfig().scale_height;\n    }\n\n    return offset;\n  };\n\n  ScrollbarCell.prototype._getScrollOffset = function () {\n    var offset = 0;\n\n    if (this._isVertical()) {\n      var parentLayout = this.$parent.$parent;\n      offset = Math.max(this._getScaleOffset(parentLayout.getPrevSibling(this.$parent.$id)), this._getScaleOffset(parentLayout.getNextSibling(this.$parent.$id)));\n    } else {\n      var linked = this._getLinkedViews();\n\n      for (var i = 0; i < linked.length; i++) {\n        var view = linked[i],\n            vparent = view.$parent;\n        var cells = vparent.$cells;\n        var last = cells[cells.length - 1];\n\n        if (last && last.$config.view == \"scrollbar\" && last.$config.hidden === false) {\n          offset = last.$config.width;\n          break;\n        }\n      }\n    }\n\n    return offset || 0;\n  };\n\n  ScrollbarCell.prototype._setScrollSize = function (size) {\n    var property = this._isHorizontal() ? \"width\" : \"height\";\n    var scrollbar = this._isHorizontal() ? this.$scroll_hor : this.$scroll_ver;\n\n    var offset = this._getScrollOffset();\n\n    var node = scrollbar.firstChild;\n\n    if (offset) {\n      if (this._isVertical()) {\n        this.$config.outerSize = this.$config.height - offset + 3;\n        scrollbar.style.height = this.$config.outerSize + \"px\";\n        scrollbar.style.top = offset - 1 + \"px\";\n        domHelpers.addClassName(scrollbar, this.$parent._borders.top);\n        domHelpers.addClassName(scrollbar.parentNode, \"gantt_task_vscroll\");\n      } else {\n        this.$config.outerSize = this.$config.width - offset + 1;\n        scrollbar.style.width = this.$config.outerSize + \"px\"; //domHelpers.addClassName(scrollbar, this.$parent._borders.right);\n      }\n    } else {\n      scrollbar.style.top = \"auto\";\n      domHelpers.removeClassName(scrollbar, this.$parent._borders.top);\n      domHelpers.removeClassName(scrollbar.parentNode, \"gantt_task_vscroll\");\n      this.$config.outerSize = this.$config.height;\n    }\n\n    node.style[property] = size + \"px\";\n  };\n\n  ScrollbarCell.prototype._scrollVerticalHandler = function (e) {\n    if (this._scrollHorizontalHandler() || this._scrolling) {\n      return;\n    } //if (this.$gantt._touch_scroll_active) return;\n\n\n    var top = this.$scroll_ver.scrollTop;\n    var prev = this._oldTop;\n    if (top == prev) return;\n    this.scrollVertically(top);\n    this._oldTop = this.$scroll_ver.scrollTop;\n  };\n\n  ScrollbarCell.prototype._outerScrollVerticalHandler = function (e) {\n    if (this._scrollHorizontalHandler()) {\n      return;\n    }\n  };\n\n  ScrollbarCell.prototype._checkWheelTarget = function (targetNode) {\n    var connectedViews = this._getLinkedViews().concat(this);\n\n    for (var i = 0; i < connectedViews.length; i++) {\n      var node = connectedViews[i].$view;\n\n      if (domHelpers.isChildOf(targetNode, node)) {\n        return true;\n      }\n    }\n\n    return false;\n  };\n\n  ScrollbarCell.prototype._mouseWheelHandler = function (e) {\n    var target = e.target || e.srcElement;\n    if (!this._checkWheelTarget(target)) return;\n    this._wheel_time = new Date();\n    var res = {};\n    var wheelSpeed = {\n      x: 1,\n      y: 1\n    };\n    var wheelSpeedConfig = this.$gantt.config.wheel_scroll_sensitivity;\n\n    if (typeof wheelSpeedConfig == \"number\" && !!wheelSpeedConfig) {\n      wheelSpeed = {\n        x: wheelSpeedConfig,\n        y: wheelSpeedConfig\n      };\n    } else if ({}.toString.apply(wheelSpeedConfig) == \"[object Object]\") {\n      wheelSpeed = {\n        x: wheelSpeedConfig.x,\n        y: wheelSpeedConfig.y\n      };\n    }\n\n    var ff = env.isFF;\n    var deltaX = ff ? e.deltaX : e.wheelDeltaX;\n    var deltaY = ff ? e.deltaY : e.wheelDelta;\n    var multiplier = -20;\n\n    if (ff) {\n      if (e.deltaMode !== 0) {\n        multiplier = -40;\n      } else {\n        multiplier = -10;\n      }\n    }\n\n    var wx = ff ? deltaX * multiplier * wheelSpeed.x : deltaX * 2 * wheelSpeed.x;\n    var wy = ff ? deltaY * multiplier * wheelSpeed.y : deltaY * wheelSpeed.y;\n    var horizontalScrollModifier = this.$gantt.config.horizontal_scroll_key;\n\n    if (horizontalScrollModifier !== false) {\n      if (SCROLL_MODIFIER_KEYS.indexOf(horizontalScrollModifier) >= 0) {\n        if (e[horizontalScrollModifier] && !(e.deltaX || e.wheelDeltaX)) {\n          // shift+mousewheel for horizontal scroll\n          wx = wy * 2;\n          wy = 0;\n        }\n      }\n    }\n\n    if (wx && Math.abs(wx) > Math.abs(wy)) {\n      if (this._isVertical()) {\n        return;\n      }\n\n      if (res.x) return true; //no horisontal scroll, must not block scrolling\n\n      if (!this.$scroll_hor || !this.$scroll_hor.offsetWidth) return true;\n      var dir = wx / -40;\n      var oldLeft = this._oldLeft;\n      var left = oldLeft + dir * 30;\n      this.scrollHorizontally(left);\n      this.$scroll_hor.scrollLeft = left; // not block scroll if position hasn't changed\n\n      if (oldLeft == this.$scroll_hor.scrollLeft) {\n        return true;\n      }\n\n      this._oldLeft = this.$scroll_hor.scrollLeft;\n    } else {\n      if (this._isHorizontal()) {\n        return;\n      }\n\n      if (res.y) return true; //no vertical scroll, must not block scrolling\n\n      if (!this.$scroll_ver || !this.$scroll_ver.offsetHeight) return true;\n      var dir = wy / -40;\n      if (typeof wy == \"undefined\") dir = e.detail;\n      var oldTop = this._oldTop;\n      var top = this.$scroll_ver.scrollTop + dir * 30; //if(!this.$gantt.config.prevent_default_scroll &&\n      //\t(this.$gantt._cached_scroll_pos && ((this.$gantt._cached_scroll_pos.y == top) || (this.$gantt._cached_scroll_pos.y <= 0 && top <= 0)))) return true;\n\n      this.scrollVertically(top);\n      this.$scroll_ver.scrollTop = top; // not block scroll if position hasn't changed\n\n      if (oldTop == this.$scroll_ver.scrollTop) {\n        return true;\n      }\n\n      this._oldTop = this.$scroll_ver.scrollTop;\n    }\n\n    if (e.preventDefault) e.preventDefault();\n    e.cancelBubble = true;\n    return false;\n  };\n\n  return ScrollbarCell;\n}(Cell);\n\nmodule.exports = ScrollbarCell;","module.exports = null;","var __extends = require(\"../../../utils/extends\"),\n    utils = require(\"../../../utils/utils\"),\n    Cell = require(\"./cell\");\n\nvar ViewCell = function (_super) {\n  \"use strict\";\n\n  __extends(ViewCell, _super);\n\n  function ViewCell(parent, config, factory) {\n    var _this = _super.apply(this, arguments) || this;\n\n    if (config.view) {\n      if (config.id) {\n        // pass id to the nested view\n        this.$id = utils.uid();\n      }\n\n      var childConfig = utils.copy(config);\n      delete childConfig.config;\n      delete childConfig.templates;\n      this.$content = this.$factory.createView(config.view, this, childConfig, this);\n      if (!this.$content) return false;\n    }\n\n    _this.$name = \"viewCell\";\n    return _this;\n  }\n\n  ViewCell.prototype.destructor = function () {\n    this.clear();\n\n    _super.prototype.destructor.call(this);\n  };\n\n  ViewCell.prototype.clear = function () {\n    this.$initialized = false; // call destructor\n\n    if (this.$content) {\n      var method = this.$content.unload || this.$content.destructor;\n\n      if (method) {\n        method.call(this.$content);\n      }\n    }\n\n    _super.prototype.clear.call(this);\n  };\n\n  ViewCell.prototype.scrollTo = function (left, top) {\n    if (this.$content && this.$content.scrollTo) {\n      this.$content.scrollTo(left, top);\n    } else {\n      _super.prototype.scrollTo.call(this, left, top);\n    }\n  };\n\n  ViewCell.prototype._setContentSize = function (x, y) {\n    var borders = this._getBorderSizes();\n\n    if (typeof x === \"number\") {\n      var outerX = x + borders.horizontal;\n      this.$config.width = outerX;\n    }\n\n    if (typeof y === \"number\") {\n      var outerY = y + borders.vertical;\n      this.$config.height = outerY;\n    }\n  };\n\n  ViewCell.prototype.setSize = function (x, y) {\n    _super.prototype.setSize.call(this, x, y);\n\n    if (!this.$preResize && this.$content) {\n      if (!this.$initialized) {\n        this.$initialized = true;\n        var header = this.$view.childNodes[0];\n        var content = this.$view.childNodes[1];\n        if (!content) content = header;\n        /*if(this.$content.$config){\r\n        \tthis.$content.$config.width = this.$lastSize.contentX;\r\n        \tthis.$content.$config.height = this.$lastSize.contentY;\r\n        }*/\n\n        this.$content.init(content);\n      }\n    }\n  };\n\n  ViewCell.prototype.setContentSize = function () {\n    if (!this.$preResize && this.$content) {\n      if (this.$initialized) {\n        this.$content.setSize(this.$lastSize.contentX, this.$lastSize.contentY);\n      }\n    }\n  };\n\n  ViewCell.prototype.getContentSize = function () {\n    var size = _super.prototype.getContentSize.call(this);\n\n    if (this.$content && this.$initialized) {\n      var childSize = this.$content.getSize();\n      size.width = childSize.contentX === undefined ? childSize.width : childSize.contentX;\n      size.height = childSize.contentY === undefined ? childSize.height : childSize.contentY;\n    }\n\n    var borders = this._getBorderSizes();\n\n    size.width += borders.horizontal;\n    size.height += borders.vertical;\n    return size;\n  };\n\n  return ViewCell;\n}(Cell);\n\nmodule.exports = ViewCell;","var __extends = require(\"../../../utils/extends\"),\n    Layout = require(\"./layout\"),\n    Cell = require(\"./cell\");\n\nvar ViewLayout = function (_super) {\n  \"use strict\";\n\n  __extends(ViewLayout, _super);\n\n  function ViewLayout(parent, config, factory) {\n    var _this = _super.apply(this, arguments) || this;\n\n    for (var i = 0; i < _this.$cells.length; i++) {\n      _this.$cells[i].$config.hidden = i !== 0;\n    }\n\n    _this.$cell = _this.$cells[0];\n    _this.$name = \"viewLayout\";\n    return _this;\n  }\n\n  ViewLayout.prototype.cell = function (id) {\n    var cell = _super.prototype.cell.call(this, id);\n\n    if (!cell.$view) {\n      this.$fill(null, this);\n    }\n\n    return cell;\n  };\n\n  ViewLayout.prototype.moveView = function (view) {\n    var body = this.$view;\n\n    if (this.$cell) {\n      this.$cell.$config.hidden = true;\n      body.removeChild(this.$cell.$view);\n    }\n\n    this.$cell = view;\n    body.appendChild(view.$view);\n  };\n\n  ViewLayout.prototype.setSize = function (x, y) {\n    Cell.prototype.setSize.call(this, x, y);\n  };\n\n  ViewLayout.prototype.setContentSize = function () {\n    var size = this.$lastSize;\n    this.$cell.setSize(size.contentX, size.contentY);\n  };\n\n  ViewLayout.prototype.getSize = function () {\n    var sizes = _super.prototype.getSize.call(this);\n\n    if (this.$cell) {\n      var cellSize = this.$cell.getSize();\n\n      if (this.$config.byMaxSize) {\n        for (var i = 0; i < this.$cells.length; i++) {\n          var otherCell = this.$cells[i].getSize();\n\n          for (var cell in cellSize) {\n            cellSize[cell] = Math.max(cellSize[cell], otherCell[cell]);\n          }\n        }\n      }\n\n      for (var size in sizes) {\n        sizes[size] = sizes[size] || cellSize[size];\n      }\n\n      sizes.gravity = Math.max(sizes.gravity, cellSize.gravity);\n    }\n\n    return sizes;\n  };\n\n  return ViewLayout;\n}(Layout);\n\nmodule.exports = ViewLayout;","module.exports = function (item, view, config) {\n  if (!item.start_date || !item.end_date) {\n    return null;\n  }\n\n  var padding = 200;\n  var startCoord = view.posFromDate(item.start_date);\n  var endCoord = view.posFromDate(item.end_date);\n  var left = Math.min(startCoord, endCoord) - padding;\n  var right = Math.max(startCoord, endCoord) + padding;\n  return {\n    top: view.getItemTop(item.id),\n    height: view.getItemHeight(item.id),\n    left: left,\n    width: right - left\n  };\n};","var barRectangle = require(\"./get_bar_rectangle\");\n\nmodule.exports = function getLinkBox(item, view, config, gantt) {\n  if (!gantt.isTaskExists(item.source)) {\n    return null;\n  }\n\n  if (!gantt.isTaskExists(item.target)) {\n    return null;\n  }\n\n  var sourceBox = barRectangle(gantt.getTask(item.source), view, gantt);\n  var targetBox = barRectangle(gantt.getTask(item.target), view, gantt);\n\n  if (!sourceBox || !targetBox) {\n    return null;\n  }\n\n  var padding = 100;\n  var left = Math.min(sourceBox.left, targetBox.left) - padding;\n  var right = Math.max(sourceBox.left + sourceBox.width, targetBox.left + targetBox.width) + padding;\n  var top = Math.min(sourceBox.top, targetBox.top) - padding;\n  var bottom = Math.max(sourceBox.top + sourceBox.height, targetBox.top + targetBox.height) + padding;\n  return {\n    top: top,\n    height: bottom - top,\n    bottom: bottom,\n    left: left,\n    width: right - left,\n    right: right\n  };\n};","module.exports = function (viewport, box) {\n  if (!box) {\n    return false;\n  }\n\n  if (box.left > viewport.x_end || box.left + box.width < viewport.x) {\n    return false;\n  }\n\n  if (box.top > viewport.y_end || box.top + box.height < viewport.y) {\n    return false;\n  }\n\n  return true;\n};","var genericViewPortChecker = require(\"./viewport/is_in_viewport\");\n\nvar isLegacyRender = require(\"./is_legacy_smart_render\");\n\nvar basicGetRectangle = require(\"./viewport/get_grid_row_rectangle\");\n\nvar basicGetRange = require(\"./viewport/get_visible_bars_range\");\n\nvar rendererFactory = function rendererFactory(gantt) {\n  //hash of dom elements is needed to redraw single bar/link\n  var task_area_pulls = {},\n      task_area_renderers = {};\n\n  function getView(layer) {\n    var view = null;\n\n    if (typeof layer.view === \"string\") {\n      view = gantt.$ui.getView(layer.view);\n    } else if (layer.view) {\n      view = layer.view;\n    }\n\n    return view;\n  }\n\n  function getRenderer(id, layer, node) {\n    if (task_area_renderers[id]) return task_area_renderers[id];\n    if (!layer.renderer) gantt.assert(false, \"Invalid renderer call\");\n    var renderMethod = null;\n    var updateMethod = null;\n    var getRectangle = null;\n    var renderCallbackMethod = null;\n    var specializedViewPortChecker = null;\n\n    if (typeof layer.renderer === \"function\") {\n      renderMethod = layer.renderer;\n      getRectangle = basicGetRectangle;\n    } else {\n      renderMethod = layer.renderer.render;\n      updateMethod = layer.renderer.update;\n      renderCallbackMethod = layer.renderer.onrender;\n\n      if (layer.renderer.isInViewPort) {\n        specializedViewPortChecker = layer.renderer.isInViewPort;\n      } else {\n        getRectangle = layer.renderer.getRectangle;\n      }\n\n      if (!getRectangle && getRectangle !== null) {\n        getRectangle = basicGetRectangle;\n      }\n    }\n\n    var filter = layer.filter;\n    if (node) node.setAttribute(gantt.config.layer_attribute, true);\n    task_area_renderers[id] = {\n      render_item: function render_item(item, container, viewPort, layerView, viewConfig) {\n        container = container || node;\n\n        if (filter) {\n          if (!filter(item)) {\n            this.remove_item(item.id);\n            return;\n          }\n        }\n\n        var view = layerView || getView(layer);\n        var config = viewConfig || (view ? view.$getConfig() : null);\n        var rendererViewPort = viewPort;\n\n        if (!rendererViewPort && config && config.smart_rendering) {\n          rendererViewPort = view.getViewPort();\n        }\n\n        var dom = null;\n\n        if (!isLegacyRender(gantt) && (getRectangle || specializedViewPortChecker) && rendererViewPort) {\n          var isVisible = false;\n\n          if (specializedViewPortChecker) {\n            isVisible = specializedViewPortChecker(item, rendererViewPort, view, config, gantt);\n          } else {\n            isVisible = genericViewPortChecker(rendererViewPort, getRectangle(item, view, config, gantt));\n          }\n\n          if (isVisible) {\n            dom = renderMethod.call(gantt, item, view, config, rendererViewPort);\n          }\n        } else {\n          dom = renderMethod.call(gantt, item, view, config, rendererViewPort);\n        }\n\n        this.append(item, dom, container);\n        var useBuffer = container.nodeType == 11; //DocumentFragment\n\n        if (renderCallbackMethod && !useBuffer && dom) {\n          renderCallbackMethod.call(gantt, item, dom, view);\n        }\n      },\n      clear: function clear(container) {\n        this.rendered = task_area_pulls[id] = {};\n        if (!layer.append) this.clear_container(container);\n      },\n      clear_container: function clear_container(container) {\n        container = container || node;\n\n        if (container) {\n          container.innerHTML = \"\";\n        }\n      },\n      get_visible_range: function get_visible_range(datastore) {\n        var view = getView(layer);\n        var viewport;\n        var viewConfig = view ? view.$getConfig() : null;\n\n        if (viewConfig && viewConfig.smart_rendering) {\n          viewport = view.getViewPort();\n        }\n\n        var range;\n\n        if (view && viewport) {\n          if (typeof layer.renderer === \"function\") {\n            range = basicGetRange(gantt, view, viewConfig, datastore, viewport);\n          } else if (layer.renderer && layer.renderer.getVisibleRange) {\n            range = layer.renderer.getVisibleRange(gantt, view, viewConfig, datastore, viewport);\n          }\n        }\n\n        if (!range) {\n          range = {\n            start: 0,\n            end: datastore.count()\n          };\n        }\n\n        return range;\n      },\n      prepare_data: function prepare_data(items) {\n        if (layer.renderer && layer.renderer.prepareData) {\n          return layer.renderer.prepareData(items, gantt, layer);\n        }\n      },\n      render_items: function render_items(items, container) {\n        container = container || node;\n        var buffer = document.createDocumentFragment();\n        this.clear(container);\n        var viewPort = null;\n        var view = getView(layer);\n        var viewConfig = view ? view.$getConfig() : null;\n\n        if (viewConfig && viewConfig.smart_rendering) {\n          viewPort = view.getViewPort();\n        }\n\n        for (var i = 0, vis = items.length; i < vis; i++) {\n          this.render_item(items[i], buffer, viewPort, view, viewConfig);\n        }\n\n        container.appendChild(buffer, container);\n        var itemsSearch = {};\n        items.forEach(function (item) {\n          itemsSearch[item.id] = item;\n        });\n        var renderedItems = {};\n\n        if (renderCallbackMethod) {\n          var newElements = {};\n\n          for (var i in this.rendered) {\n            if (!renderedItems[i]) {\n              newElements[i] = this.rendered[i];\n              renderCallbackMethod.call(gantt, itemsSearch[i], this.rendered[i], view);\n            }\n          }\n        }\n      },\n      update_items: function update_items(items, container) {\n        var view = getView(layer);\n        var viewConfig = view ? view.$getConfig() : null;\n\n        if (!view || !view.$getConfig().smart_rendering || isLegacyRender(gantt)) {\n          return;\n        }\n\n        if (!this.rendered) {\n          return;\n        }\n\n        if (!(getRectangle || specializedViewPortChecker)) {\n          return;\n        }\n\n        container = container || node;\n        var buffer = document.createDocumentFragment();\n        var viewPort = null;\n\n        if (view) {\n          viewPort = view.getViewPort();\n        }\n\n        var itemsSearch = {};\n        items.forEach(function (item) {\n          itemsSearch[item.id] = item;\n        });\n        var renderedItems = {};\n        var nodesToRemove = {};\n\n        for (var i in this.rendered) {\n          nodesToRemove[i] = true;\n          renderedItems[i] = true;\n        }\n\n        var renderCalledFor = {};\n\n        for (var i = 0, vis = items.length; i < vis; i++) {\n          var item = items[i];\n          var itemNode = this.rendered[item.id];\n          nodesToRemove[item.id] = false;\n\n          if (itemNode && itemNode.parentNode) {\n            var isVisible = false;\n\n            if (specializedViewPortChecker) {\n              isVisible = specializedViewPortChecker(item, viewPort, view, viewConfig, gantt);\n            } else {\n              isVisible = genericViewPortChecker(viewPort, getRectangle(item, view, viewConfig, gantt));\n            }\n\n            if (!isVisible) {\n              nodesToRemove[item.id] = true;\n            } else {\n              if (updateMethod) {\n                updateMethod.call(gantt, item, itemNode, view, viewConfig, viewPort);\n              }\n\n              this.restore(item, buffer);\n            }\n          } else {\n            renderCalledFor[items[i].id] = true;\n            this.render_item(items[i], buffer, viewPort, view, viewConfig);\n          }\n        }\n\n        for (var i in nodesToRemove) {\n          if (nodesToRemove[i]) {\n            this.hide(i);\n          }\n        }\n\n        if (buffer.childNodes.length) {\n          container.appendChild(buffer, container);\n        }\n\n        if (renderCallbackMethod) {\n          var newElements = {};\n\n          for (var i in this.rendered) {\n            if (!renderedItems[i] || renderCalledFor[i]) {\n              newElements[i] = this.rendered[i];\n              renderCallbackMethod.call(gantt, itemsSearch[i], this.rendered[i], view);\n            }\n          }\n        }\n      },\n      append: function append(item, node, container) {\n        if (!this.rendered) {\n          return;\n        }\n\n        if (!node) {\n          if (this.rendered[item.id]) {\n            this.remove_item(item.id);\n          }\n\n          return;\n        }\n\n        if (this.rendered[item.id] && this.rendered[item.id].parentNode) {\n          this.replace_item(item.id, node);\n        } else {\n          container.appendChild(node);\n        }\n\n        this.rendered[item.id] = node;\n      },\n      replace_item: function replace_item(item_id, newNode) {\n        var item = this.rendered[item_id];\n\n        if (item && item.parentNode) {\n          item.parentNode.replaceChild(newNode, item);\n        }\n\n        this.rendered[item_id] = newNode;\n      },\n      remove_item: function remove_item(item_id) {\n        this.hide(item_id);\n        delete this.rendered[item_id];\n      },\n      hide: function hide(item_id) {\n        var item = this.rendered[item_id];\n\n        if (item && item.parentNode) {\n          item.parentNode.removeChild(item);\n        }\n      },\n      restore: function restore(item, container) {\n        var dom = this.rendered[item.id];\n\n        if (dom) {\n          if (!dom.parentNode) {\n            this.append(item, dom, container || node);\n          }\n        } else {\n          this.render_item(item, container || node);\n        }\n      },\n      change_id: function change_id(oldid, newid) {\n        this.rendered[newid] = this.rendered[oldid];\n        delete this.rendered[oldid];\n      },\n      rendered: task_area_pulls[id],\n      node: node,\n      destructor: function destructor() {\n        this.clear();\n        delete task_area_renderers[id];\n        delete task_area_pulls[id];\n      }\n    };\n    return task_area_renderers[id];\n  }\n\n  function clearRenderers() {\n    for (var i in task_area_renderers) {\n      getRenderer(i).destructor();\n    }\n  }\n\n  return {\n    getRenderer: getRenderer,\n    clearRenderers: clearRenderers\n  };\n};\n\nmodule.exports = rendererFactory;","var renderFactoryProvider = require(\"./render_factory\");\n\nvar utils = require(\"../../../utils/utils\"),\n    domHelpers = require(\"../utils/dom_helpers\"),\n    isLegacyRender = require(\"./is_legacy_smart_render\");\n\nvar layerFactory = function layerFactory(gantt) {\n  var renderFactory = renderFactoryProvider(gantt);\n  return {\n    createGroup: function createGroup(getContainer, relativeRoot, defaultFilters, initLayer) {\n      var renderGroup = {\n        tempCollection: [],\n        renderers: {},\n        container: getContainer,\n        filters: [],\n        getLayers: function getLayers() {\n          this._add(); // add pending layers\n\n\n          var res = [];\n\n          for (var i in this.renderers) {\n            res.push(this.renderers[i]);\n          }\n\n          return res;\n        },\n        getLayer: function getLayer(id) {\n          return this.renderers[id];\n        },\n        _add: function _add(layer) {\n          if (layer) {\n            layer.id = layer.id || utils.uid();\n            this.tempCollection.push(layer);\n          }\n\n          var container = this.container();\n          var pending = this.tempCollection;\n\n          for (var i = 0; i < pending.length; i++) {\n            layer = pending[i];\n            if (!this.container() && !(layer && layer.container && domHelpers.isChildOf(layer.container, document.body))) continue;\n            var node = layer.container,\n                id = layer.id,\n                topmost = layer.topmost;\n\n            if (!node.parentNode) {\n              //insert on top or below the tasks\n              if (topmost) {\n                container.appendChild(node);\n              } else {\n                var rel = relativeRoot ? relativeRoot() : container.firstChild; // GS-1274: if we don't add the second check, Gantt stops working if\n                // we add the task layer without the timeline and switch to a layout with the timeline\n\n                if (rel && rel.parentNode == container) container.insertBefore(node, rel);else container.appendChild(node);\n              }\n            }\n\n            this.renderers[id] = renderFactory.getRenderer(id, layer, node);\n\n            if (initLayer) {\n              initLayer(layer, gantt);\n            }\n\n            this.tempCollection.splice(i, 1);\n            i--;\n          }\n        },\n        addLayer: function addLayer(config) {\n          if (config) {\n            if (typeof config == \"function\") {\n              config = {\n                renderer: config\n              };\n            }\n\n            if (config.filter === undefined) {\n              config.filter = mergeFilters(defaultFilters || []);\n            } else if (config.filter instanceof Array) {\n              config.filter.push(defaultFilters);\n              config.filter = mergeFilters(config.filter);\n            }\n\n            if (!config.container) {\n              config.container = document.createElement(\"div\");\n            }\n\n            var self = this;\n\n            config.requestUpdate = function () {\n              if (gantt.config.smart_rendering && !isLegacyRender(gantt)) {\n                if (self.renderers[config.id]) {\n                  self.onUpdateRequest(self.renderers[config.id]);\n                }\n              }\n            };\n          }\n\n          this._add(config);\n\n          return config ? config.id : undefined;\n        },\n        onUpdateRequest: function onUpdateRequest(layer) {},\n        eachLayer: function eachLayer(code) {\n          for (var i in this.renderers) {\n            code(this.renderers[i]);\n          }\n        },\n        removeLayer: function removeLayer(id) {\n          if (!this.renderers[id]) return;\n          this.renderers[id].destructor();\n          delete this.renderers[id];\n        },\n        clear: function clear() {\n          for (var i in this.renderers) {\n            this.renderers[i].destructor();\n          }\n\n          this.renderers = {};\n        } //,\n        //prepareConfig: prepareConfig\n\n      };\n      gantt.attachEvent(\"onDestroy\", function () {\n        renderGroup.clear();\n        renderGroup = null;\n      });\n      return renderGroup;\n    }\n  };\n};\n\nfunction mergeFilters(filter_methods) {\n  if (!(filter_methods instanceof Array)) {\n    filter_methods = Array.prototype.slice.call(arguments, 0);\n  }\n\n  return function (obj) {\n    var res = true;\n\n    for (var i = 0, len = filter_methods.length; i < len; i++) {\n      var filter_method = filter_methods[i];\n\n      if (filter_method) {\n        res = res && filter_method(obj.id, obj) !== false;\n      }\n    }\n\n    return res;\n  };\n}\n\nmodule.exports = layerFactory;","var createLayerFactory = require(\"./render/layer_engine\");\n\nvar getVisibleTaskRange = require(\"./render/viewport/get_visible_bars_range\");\n\nvar getVisibleLinksRangeFactory = require(\"./render/viewport/factory/get_visible_link_range\");\n\nvar isLinkInViewport = require(\"./render/viewport/is_link_in_viewport\");\n\nfunction initLayer(layer, gantt) {\n  if (!layer.view) {\n    return;\n  }\n\n  var view = layer.view;\n\n  if (typeof view === \"string\") {\n    view = gantt.$ui.getView(view);\n  }\n\n  if (view && view.attachEvent) {\n    view.attachEvent(\"onScroll\", function () {\n      var state = gantt.$services.getService(\"state\"); // don't repaint if we're inside batchUpdate, a complete repaint will be called afterwards\n\n      if (!state.getState(\"batchUpdate\").batch_update && !view.$config.$skipSmartRenderOnScroll) {\n        if (layer.requestUpdate) {\n          layer.requestUpdate();\n        }\n      }\n    });\n  }\n}\n\nvar createLayerEngine = function createLayerEngine(gantt) {\n  var factory = createLayerFactory(gantt);\n  return {\n    getDataRender: function getDataRender(name) {\n      return gantt.$services.getService(\"layer:\" + name) || null;\n    },\n    createDataRender: function createDataRender(config) {\n      var name = config.name,\n          defaultContainer = config.defaultContainer,\n          previusSiblingContainer = config.defaultContainerSibling;\n      var layers = factory.createGroup(defaultContainer, previusSiblingContainer, function (itemId, item) {\n        if (layers.filters) {\n          for (var i = 0; i < layers.filters.length; i++) {\n            if (layers.filters[i](itemId, item) === false) {\n              return false;\n            }\n          }\n        } else {\n          return true;\n        }\n      }, initLayer);\n      gantt.$services.setService(\"layer:\" + name, function () {\n        return layers;\n      });\n      gantt.attachEvent(\"onGanttReady\", function () {\n        layers.addLayer(); // init layers on start\n      });\n      return layers;\n    },\n    init: function init() {\n      var taskLayers = this.createDataRender({\n        name: \"task\",\n        defaultContainer: function defaultContainer() {\n          if (gantt.$task_data) {\n            return gantt.$task_data;\n          } else if (gantt.$ui.getView(\"timeline\")) {\n            return gantt.$ui.getView(\"timeline\").$task_data;\n          }\n        },\n        defaultContainerSibling: function defaultContainerSibling() {\n          if (gantt.$task_links) {\n            return gantt.$task_links;\n          } else if (gantt.$ui.getView(\"timeline\")) {\n            return gantt.$ui.getView(\"timeline\").$task_links;\n          }\n        },\n        filter: function filter(item) {}\n      }, gantt);\n      var linkLayers = this.createDataRender({\n        name: \"link\",\n        defaultContainer: function defaultContainer() {\n          if (gantt.$task_data) {\n            return gantt.$task_data;\n          } else if (gantt.$ui.getView(\"timeline\")) {\n            return gantt.$ui.getView(\"timeline\").$task_data;\n          }\n        }\n      }, gantt);\n      return {\n        addTaskLayer: function addTaskLayer(config) {\n          var rangeFunction = getVisibleTaskRange;\n\n          if (typeof config === \"function\") {\n            config = {\n              renderer: {\n                render: config,\n                getVisibleRange: rangeFunction\n              }\n            };\n          } else {\n            if (config.renderer && !config.renderer.getVisibleRange) {\n              config.renderer.getVisibleRange = rangeFunction;\n            }\n          }\n\n          config.view = \"timeline\";\n          return taskLayers.addLayer(config);\n        },\n        _getTaskLayers: function _getTaskLayers() {\n          return taskLayers.getLayers();\n        },\n        removeTaskLayer: function removeTaskLayer(id) {\n          taskLayers.removeLayer(id);\n        },\n        _clearTaskLayers: function _clearTaskLayers() {\n          taskLayers.clear();\n        },\n        addLinkLayer: function addLinkLayer(config) {\n          var rangeFunction = getVisibleLinksRangeFactory();\n\n          if (typeof config === \"function\") {\n            config = {\n              renderer: {\n                render: config,\n                getVisibleRange: rangeFunction\n              }\n            };\n          } else {\n            if (config.renderer && !config.renderer.getVisibleRange) {\n              config.renderer.getVisibleRange = rangeFunction;\n            }\n          }\n\n          config.view = \"timeline\";\n\n          if (config && config.renderer) {\n            if (!config.renderer.getRectangle && !config.renderer.isInViewPort) {\n              config.renderer.isInViewPort = isLinkInViewport;\n            }\n          }\n\n          return linkLayers.addLayer(config);\n        },\n        _getLinkLayers: function _getLinkLayers() {\n          return linkLayers.getLayers();\n        },\n        removeLinkLayer: function removeLinkLayer(id) {\n          linkLayers.removeLayer(id);\n        },\n        _clearLinkLayers: function _clearLinkLayers() {\n          linkLayers.clear();\n        }\n      };\n    }\n  };\n};\n\nmodule.exports = createLayerEngine;","var domHelpers = require(\"./utils/dom_helpers\");\n\nvar createMouseHandler = function (domHelpers) {\n  return function (gantt) {\n    var eventHandlers = {\n      \"click\": {},\n      \"doubleclick\": {},\n      \"contextMenu\": {}\n    };\n\n    function addEventTarget(event, className, handler, root) {\n      if (!eventHandlers[event][className]) {\n        eventHandlers[event][className] = [];\n      }\n\n      eventHandlers[event][className].push({\n        handler: handler,\n        root: root\n      });\n    }\n\n    function callHandler(eventName, className, root, args) {\n      var handlers = eventHandlers[eventName][className];\n\n      if (handlers) {\n        for (var i = 0; i < handlers.length; i++) {\n          if (!(root || handlers[i].root) || handlers[i].root === root) {\n            handlers[i].handler.apply(this, args);\n          }\n        }\n      }\n    }\n\n    function onClick(e) {\n      e = e || window.event;\n      var id = gantt.locate(e);\n      var handlers = findEventHandlers(e, eventHandlers.click);\n      var res = true;\n\n      if (id !== null) {\n        res = !gantt.checkEvent(\"onTaskClick\") || gantt.callEvent(\"onTaskClick\", [id, e]);\n      } else {\n        gantt.callEvent(\"onEmptyClick\", [e]);\n      }\n\n      if (res) {\n        var default_action = callEventHandlers(handlers, e, id);\n        if (!default_action) return; // GS-1025: if we don't do that, the dropdown or date select will be closed for unselected tasks\n        // GS-1078: or for the built-in select inline editor\n\n        switch (e.target.nodeName) {\n          case \"SELECT\":\n          case 'INPUT':\n            return;\n        } //allow task selection when the multiselect plugin is not enabled\n\n\n        if (id && gantt.getTask(id) && !gantt._multiselect && gantt.config.select_task) {\n          gantt.selectTask(id);\n        }\n      }\n    }\n\n    function onContextMenu(e) {\n      e = e || window.event;\n      var src = e.target || e.srcElement,\n          taskId = gantt.locate(src),\n          linkId = gantt.locate(src, gantt.config.link_attribute);\n      var res = !gantt.checkEvent(\"onContextMenu\") || gantt.callEvent(\"onContextMenu\", [taskId, linkId, e]);\n\n      if (!res) {\n        if (e.preventDefault) e.preventDefault();else e.returnValue = false;\n      }\n\n      return res;\n    }\n\n    function findEventHandlers(e, hash) {\n      var trg = e.target || e.srcElement;\n      var handlers = [];\n\n      while (trg) {\n        var css = domHelpers.getClassName(trg);\n\n        if (css) {\n          css = css.split(\" \");\n\n          for (var i = 0; i < css.length; i++) {\n            if (!css[i]) continue;\n\n            if (hash[css[i]]) {\n              var delegateHandlers = hash[css[i]];\n\n              for (var h = 0; h < delegateHandlers.length; h++) {\n                if (delegateHandlers[h].root) {\n                  if (!domHelpers.isChildOf(trg, delegateHandlers[h].root)) {\n                    continue;\n                  }\n                }\n\n                handlers.push(delegateHandlers[h].handler);\n              }\n            }\n          }\n        }\n\n        trg = trg.parentNode;\n      }\n\n      return handlers;\n    }\n\n    function callEventHandlers(handlers, e, id) {\n      var res = true;\n\n      for (var i = 0; i < handlers.length; i++) {\n        var handlerResult = handlers[i].call(gantt, e, id, e.target || e.srcElement);\n        res = res && !(typeof handlerResult != \"undefined\" && handlerResult !== true);\n      }\n\n      return res;\n    }\n\n    function onDoubleClick(e) {\n      e = e || window.event;\n      var id = gantt.locate(e);\n      var handlers = findEventHandlers(e, eventHandlers.doubleclick); // when doubleclick fired not on task, id === null\n\n      var res = !gantt.checkEvent(\"onTaskDblClick\") || id === null || gantt.callEvent(\"onTaskDblClick\", [id, e]);\n\n      if (res) {\n        var default_action = callEventHandlers(handlers, e, id);\n        if (!default_action) return;\n\n        if (id !== null && gantt.getTask(id)) {\n          if (res && gantt.config.details_on_dblclick && !gantt.isReadonly(id)) {\n            gantt.showLightbox(id);\n          }\n        }\n      }\n    }\n\n    function onMouseMove(e) {\n      if (gantt.checkEvent(\"onMouseMove\")) {\n        var id = gantt.locate(e);\n        gantt._last_move_event = e;\n        gantt.callEvent(\"onMouseMove\", [id, e]);\n      }\n    }\n\n    function detach(eventName, className, handler, root) {\n      if (eventHandlers[eventName] && eventHandlers[eventName][className]) {\n        var handlers = eventHandlers[eventName];\n        var elementHandlers = handlers[className];\n\n        for (var i = 0; i < elementHandlers.length; i++) {\n          if (elementHandlers[i].root == root) {\n            elementHandlers.splice(i, 1);\n            i--;\n          }\n        }\n\n        if (!elementHandlers.length) {\n          delete handlers[className];\n        }\n      }\n    }\n\n    var domEvents = gantt._createDomEventScope();\n\n    function reset(node) {\n      domEvents.detachAll();\n\n      if (node) {\n        domEvents.attach(node, \"click\", onClick);\n        domEvents.attach(node, \"dblclick\", onDoubleClick);\n        domEvents.attach(node, \"mousemove\", onMouseMove);\n        domEvents.attach(node, \"contextmenu\", onContextMenu);\n      }\n    }\n\n    return {\n      reset: reset,\n      global: function global(event, classname, handler) {\n        addEventTarget(event, classname, handler, null);\n      },\n      delegate: addEventTarget,\n      detach: detach,\n      callHandler: callHandler,\n      onDoubleClick: onDoubleClick,\n      onMouseMove: onMouseMove,\n      onContextMenu: onContextMenu,\n      onClick: onClick,\n      destructor: function destructor() {\n        reset();\n        eventHandlers = null;\n        domEvents = null;\n      }\n    };\n  };\n}(domHelpers);\n\nmodule.exports = {\n  init: createMouseHandler\n};","var utils = require(\"../../utils/utils\");\n\nfunction extendSettings(store, parentSettings) {\n  var own = this.$config[store];\n\n  if (own) {\n    if (!own.$extendedConfig) {\n      own.$extendedConfig = true;\n      Object.setPrototypeOf(own, parentSettings);\n    }\n\n    return own;\n  } else {\n    return parentSettings;\n  }\n}\n\nvar configurable = function configurable(parentView) {\n  var parentConfig, parentTemplates;\n  return {\n    $getConfig: function $getConfig() {\n      if (!parentConfig) {\n        parentConfig = parentView ? parentView.$getConfig() : this.$gantt.config;\n      }\n\n      if (!this.$config.config) {\n        return parentConfig;\n      } else {\n        return extendSettings.call(this, \"config\", parentConfig);\n      }\n    },\n    $getTemplates: function $getTemplates() {\n      if (!parentTemplates) {\n        parentTemplates = parentView ? parentView.$getTemplates() : this.$gantt.templates;\n      }\n\n      if (!this.$config.templates) {\n        return parentTemplates;\n      } else {\n        return extendSettings.call(this, \"templates\", parentTemplates);\n      }\n    }\n  };\n};\n\nmodule.exports = function (obj, parent) {\n  utils.mixin(obj, configurable(parent));\n};","function _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nvar utils = require(\"../../utils/utils\"),\n    configurable = require(\"./configurable\");\n\nvar uiFactory = function createFactory(gantt) {\n  var views = {};\n\n  function ui(cell, parentView) {\n    var content;\n    var view = \"cell\";\n\n    if (cell.view) {\n      view = \"viewcell\";\n    } else if (cell.resizer) {\n      view = \"resizer\";\n    } else if (cell.rows || cell.cols) {\n      view = \"layout\";\n    } else if (cell.views) {\n      view = \"multiview\";\n    }\n\n    content = createView.call(this, view, null, cell, parentView);\n    return content;\n  }\n\n  var createdViews = {};\n\n  function createView(name, parent, config, parentView) {\n    var creator = views[name];\n    if (!creator || !creator.create) return false;\n\n    if (name == \"resizer\" && !config.mode) {\n      if (parentView.$config.cols) {\n        config.mode = \"x\";\n      } else {\n        config.mode = \"y\";\n      }\n    }\n\n    if (name == \"viewcell\" && config.view == \"scrollbar\" && !config.scroll) {\n      if (parentView.$config.cols) {\n        config.scroll = \"y\";\n      } else {\n        config.scroll = \"x\";\n      }\n    }\n\n    var config = utils.copy(config);\n\n    if (!config.id && !createdViews[config.view]) {\n      config.id = config.view;\n    }\n\n    if (config.id && !config.css) {\n      config.css = config.id + \"_cell\";\n    }\n\n    var view = new creator.create(parent, config, this, gantt);\n\n    if (creator.configure) {\n      creator.configure(view);\n    }\n\n    configurable(view, parentView);\n\n    if (!view.$id) {\n      view.$id = config.id || gantt.uid();\n    }\n\n    if (!view.$parent && _typeof(parent) == \"object\") {\n      view.$parent = parent;\n    }\n\n    if (!view.$config) {\n      view.$config = config;\n    }\n\n    if (createdViews[view.$id]) {\n      view.$id = gantt.uid();\n    }\n\n    createdViews[view.$id] = view;\n    return view;\n  }\n\n  function reset() {\n    createdViews = {};\n  }\n\n  function register(name, viewConstructor, configure) {\n    views[name] = {\n      create: viewConstructor,\n      configure: configure\n    };\n  }\n\n  function getView(id) {\n    return createdViews[id];\n  }\n\n  var factory = {\n    initUI: ui,\n    reset: reset,\n    registerView: register,\n    createView: createView,\n    getView: getView\n  };\n  return factory;\n};\n\nmodule.exports = {\n  createFactory: uiFactory\n};","var uiFactory = require(\"./ui_factory\"),\n    mouseEvents = require(\"./mouse\"),\n    createLayers = require(\"./gantt_layers\"),\n    Cell = require(\"./layout/cell\"),\n    Layout = require(\"./layout/layout\"),\n    ViewLayout = require(\"./layout/view_layout\"),\n    ViewCell = require(\"./layout/view_cell\"),\n    Resizer = require(\"./layout/resizer_cell\"),\n    Scrollbar = require(\"./layout/scrollbar_cell\"),\n    Timeline = require(\"./timeline/timeline\"),\n    Grid = require(\"./grid/grid\"),\n    ResourceGrid = require(\"./grid/resource_grid\"),\n    ResourceTimeline = require(\"./timeline/resource_timeline\"),\n    ResourceHistogram = require(\"./timeline/resource_histogram\");\n\nvar gridEditorsFactory = require(\"./grid/editors/controller\");\n\nvar renderTaskBar = require(\"./render/task_bar_smart_render\"),\n    renderSplitTaskBar = require(\"./render/task_split_render\"),\n    renderRollupTaskBar = require(\"./render/task_rollup_render\"),\n    renderTaskBg = require(\"./render/task_bg_render\"),\n    renderLink = require(\"./render/link_render\"),\n    gridRenderer = require(\"./render/task_grid_line_render\"),\n    resourceMatrixRenderer = require(\"./render/resource_matrix_render\"),\n    resourceHistogramRenderer = require(\"./render/resource_histogram_render\"),\n    gridTaskRowResizerRenderer = require(\"./render/task_grid_row_resize_render\");\n\nvar mainGridInitializer = require(\"./grid/main_grid_initializer\");\n\nvar mainTimelineInitializer = require(\"./timeline/main_timeline_initializer\");\n\nvar mainLayoutInitializer = require(\"./main_layout_initializer\");\n\nfunction initUI(gantt) {\n  function attachInitializer(view, initializer) {\n    var ext = initializer(gantt);\n    if (ext.onCreated) ext.onCreated(view);\n    view.attachEvent(\"onReady\", function () {\n      if (ext.onInitialized) ext.onInitialized(view);\n    });\n    view.attachEvent(\"onDestroy\", function () {\n      if (ext.onDestroyed) ext.onDestroyed(view);\n    });\n  }\n\n  var factory = uiFactory.createFactory(gantt);\n  factory.registerView(\"cell\", Cell);\n  factory.registerView(\"resizer\", Resizer);\n  factory.registerView(\"scrollbar\", Scrollbar);\n  factory.registerView(\"layout\", Layout, function (view) {\n    var id = view.$config ? view.$config.id : null;\n\n    if (id === \"main\") {\n      attachInitializer(view, mainLayoutInitializer);\n    }\n  });\n  factory.registerView(\"viewcell\", ViewCell);\n  factory.registerView(\"multiview\", ViewLayout);\n  factory.registerView(\"timeline\", Timeline, function (view) {\n    var id = view.$config ? view.$config.id : null;\n\n    if (id === \"timeline\" || view.$config.bind == \"task\") {\n      attachInitializer(view, mainTimelineInitializer);\n    }\n  });\n  factory.registerView(\"grid\", Grid, function (view) {\n    var id = view.$config ? view.$config.id : null;\n\n    if (id === \"grid\" || view.$config.bind == \"task\") {\n      attachInitializer(view, mainGridInitializer);\n    }\n  });\n  factory.registerView(\"resourceGrid\", ResourceGrid);\n  factory.registerView(\"resourceTimeline\", ResourceTimeline);\n  factory.registerView(\"resourceHistogram\", ResourceHistogram);\n  var layersEngine = createLayers(gantt);\n  var inlineEditors = gridEditorsFactory(gantt);\n  gantt.ext.inlineEditors = inlineEditors;\n  gantt.ext._inlineEditors = inlineEditors;\n  inlineEditors.init(gantt);\n  return {\n    factory: factory,\n    mouseEvents: mouseEvents.init(gantt),\n    layersApi: layersEngine.init(),\n    render: {\n      gridLine: function gridLine() {\n        return gridRenderer(gantt);\n      },\n      taskBg: function taskBg() {\n        return renderTaskBg(gantt);\n      },\n      taskBar: function taskBar() {\n        return renderTaskBar(gantt);\n      },\n      taskRollupBar: function taskRollupBar() {\n        return renderRollupTaskBar(gantt);\n      },\n      taskSplitBar: function taskSplitBar() {\n        return renderSplitTaskBar(gantt);\n      },\n      link: function link() {\n        return renderLink(gantt);\n      },\n      resourceRow: function resourceRow() {\n        return resourceMatrixRenderer(gantt);\n      },\n      resourceHistogram: function resourceHistogram() {\n        return resourceHistogramRenderer(gantt);\n      },\n      gridTaskRowResizer: function gridTaskRowResizer() {\n        return gridTaskRowResizerRenderer(gantt);\n      }\n    },\n    layersService: {\n      getDataRender: function getDataRender(name) {\n        return layersEngine.getDataRender(name, gantt);\n      },\n      createDataRender: function createDataRender(config) {\n        return layersEngine.createDataRender(config, gantt);\n      }\n    }\n  };\n}\n\nmodule.exports = {\n  init: initUI\n};","function _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nvar utils = require(\"../../utils/utils\");\n\nvar domHelpers = require(\"./utils/dom_helpers\");\n\nmodule.exports = function (gantt) {\n  var boxAttribute = \"data-dhxbox\";\n  var _dhx_msg_cfg = null;\n\n  function callback(config, result) {\n    var usercall = config.callback;\n    modalBox.hide(config.box);\n    _dhx_msg_cfg = config.box = null;\n    if (usercall) usercall(result);\n  }\n\n  function modal_key(event) {\n    if (_dhx_msg_cfg) {\n      var code = event.which || event.keyCode;\n      var preventDefault = false;\n\n      if (messageBox.keyboard) {\n        if (code == 13 || code == 32) {\n          // default behavior is to confirm/submit popup on space/enter\n          // if browser focus is set on button element - do button click instead of default behavior\n          var target = event.target || event.srcElement;\n\n          if (domHelpers.getClassName(target).indexOf(\"gantt_popup_button\") > -1 && target.click) {\n            target.click();\n          } else {\n            callback(_dhx_msg_cfg, true);\n            preventDefault = true;\n          }\n        }\n\n        if (code == 27) {\n          callback(_dhx_msg_cfg, false);\n          preventDefault = true;\n        }\n      }\n\n      if (preventDefault) {\n        if (event.preventDefault) {\n          event.preventDefault();\n        }\n\n        return !(event.cancelBubble = true);\n      }\n\n      return;\n    }\n  }\n\n  var eventElement = domHelpers.getRootNode(gantt.$root) || document;\n  gantt.event(eventElement, \"keydown\", modal_key, true);\n\n  function modality(mode) {\n    if (!modality.cover) {\n      modality.cover = document.createElement(\"div\"); //necessary for IE only\n\n      modality.cover.onkeydown = modal_key;\n      modality.cover.className = \"dhx_modal_cover\";\n      document.body.appendChild(modality.cover);\n    }\n\n    modality.cover.style.display = mode ? \"inline-block\" : \"none\";\n  }\n\n  function button(text, className, result) {\n    var buttonAriaAttrs = gantt._waiAria.messageButtonAttrString(text);\n\n    var name = className.toLowerCase().replace(/ /g, \"_\");\n    var button_css = \"gantt_\" + name + \"_button\";\n    return \"<div \" + buttonAriaAttrs + \" class='gantt_popup_button \" + button_css + \"' data-result='\" + result + \"' result='\" + result + \"' ><div>\" + text + \"</div></div>\";\n  }\n\n  function info(text) {\n    if (!messageBox.area) {\n      messageBox.area = document.createElement(\"div\");\n      messageBox.area.className = \"gantt_message_area\";\n      messageBox.area.style[messageBox.position] = \"5px\";\n      document.body.appendChild(messageBox.area);\n    }\n\n    messageBox.hide(text.id);\n    var message = document.createElement(\"div\");\n    message.innerHTML = \"<div>\" + text.text + \"</div>\";\n    message.className = \"gantt-info gantt-\" + text.type;\n\n    message.onclick = function () {\n      messageBox.hide(text.id);\n      text = null;\n    };\n\n    gantt._waiAria.messageInfoAttr(message);\n\n    if (messageBox.position == \"bottom\" && messageBox.area.firstChild) messageBox.area.insertBefore(message, messageBox.area.firstChild);else messageBox.area.appendChild(message);\n    if (text.expire > 0) messageBox.timers[text.id] = window.setTimeout(function () {\n      // GS-1213: We need that when Gantt is destroyed\n      if (messageBox) messageBox.hide(text.id);\n    }, text.expire);\n    messageBox.pull[text.id] = message;\n    message = null;\n    return text.id;\n  }\n\n  function getFirstDefined() {\n    var values = [].slice.apply(arguments, [0]);\n\n    for (var i = 0; i < values.length; i++) {\n      if (values[i]) {\n        return values[i];\n      }\n    }\n  }\n\n  function _boxStructure(config, ok, cancel) {\n    var box = document.createElement(\"div\");\n    var contentId = utils.uid();\n\n    gantt._waiAria.messageModalAttr(box, contentId);\n\n    box.className = \" gantt_modal_box gantt-\" + config.type;\n    box.setAttribute(boxAttribute, 1);\n    var inner = '';\n    if (config.width) box.style.width = config.width;\n    if (config.height) box.style.height = config.height;\n    if (config.title) inner += '<div class=\"gantt_popup_title\">' + config.title + '</div>';\n    inner += '<div class=\"gantt_popup_text\" id=\"' + contentId + '\"><span>' + (config.content ? '' : config.text) + '</span></div><div  class=\"gantt_popup_controls\">';\n    if (ok) inner += button(getFirstDefined(config.ok, gantt.locale.labels.message_ok, \"OK\"), \"ok\", true);\n    if (cancel) inner += button(getFirstDefined(config.cancel, gantt.locale.labels.message_cancel, \"Cancel\"), \"cancel\", false);\n\n    if (config.buttons) {\n      for (var i = 0; i < config.buttons.length; i++) {\n        var btn = config.buttons[i];\n\n        if (_typeof(btn) == \"object\") {\n          // Support { label:\"Save\", css:\"main_button\", value:\"save\" }\n          var label = btn.label;\n          var css = btn.css || \"gantt_\" + btn.label.toLowerCase() + \"_button\";\n          var value = btn.value || i;\n          inner += button(label, css, value);\n        } else {\n          inner += button(btn, btn, i);\n        }\n      }\n    }\n\n    inner += '</div>';\n    box.innerHTML = inner;\n\n    if (config.content) {\n      var node = config.content;\n      if (typeof node == \"string\") node = document.getElementById(node);\n      if (node.style.display == 'none') node.style.display = \"\";\n      box.childNodes[config.title ? 1 : 0].appendChild(node);\n    }\n\n    box.onclick = function (event) {\n      var source = event.target || event.srcElement;\n      if (!source.className) source = source.parentNode;\n\n      if (domHelpers.closest(source, \".gantt_popup_button\")) {\n        var result = source.getAttribute(\"data-result\");\n        result = result == \"true\" || (result == \"false\" ? false : result);\n        callback(config, result);\n      }\n    };\n\n    config.box = box;\n    if (ok || cancel) _dhx_msg_cfg = config;\n    return box;\n  }\n\n  function _createBox(config, ok, cancel) {\n    var box = config.tagName ? config : _boxStructure(config, ok, cancel);\n    if (!config.hidden) modality(true);\n    document.body.appendChild(box);\n    var x = Math.abs(Math.floor(((window.innerWidth || document.documentElement.offsetWidth) - box.offsetWidth) / 2));\n    var y = Math.abs(Math.floor(((window.innerHeight || document.documentElement.offsetHeight) - box.offsetHeight) / 2));\n    if (config.position == \"top\") box.style.top = \"-3px\";else box.style.top = y + 'px';\n    box.style.left = x + 'px'; //necessary for IE only\n\n    box.onkeydown = modal_key;\n    modalBox.focus(box);\n    if (config.hidden) modalBox.hide(box);\n    gantt.callEvent(\"onMessagePopup\", [box]);\n    return box;\n  }\n\n  function alertPopup(config) {\n    return _createBox(config, true, false);\n  }\n\n  function confirmPopup(config) {\n    return _createBox(config, true, true);\n  }\n\n  function boxPopup(config) {\n    return _createBox(config);\n  }\n\n  function box_params(text, type, callback) {\n    if (_typeof(text) != \"object\") {\n      if (typeof type == \"function\") {\n        callback = type;\n        type = \"\";\n      }\n\n      text = {\n        text: text,\n        type: type,\n        callback: callback\n      };\n    }\n\n    return text;\n  }\n\n  function params(text, type, expire, id) {\n    if (_typeof(text) != \"object\") text = {\n      text: text,\n      type: type,\n      expire: expire,\n      id: id\n    };\n    text.id = text.id || utils.uid();\n    text.expire = text.expire || messageBox.expire;\n    return text;\n  }\n\n  var alertBox = function alertBox() {\n    var text = box_params.apply(this, arguments);\n    text.type = text.type || \"confirm\";\n    return alertPopup(text);\n  };\n\n  var confirmBox = function confirmBox() {\n    var text = box_params.apply(this, arguments);\n    text.type = text.type || \"alert\";\n    return confirmPopup(text);\n  };\n\n  var modalBox = function modalBox() {\n    var text = box_params.apply(this, arguments);\n    text.type = text.type || \"alert\";\n    return boxPopup(text);\n  };\n\n  modalBox.hide = function (node) {\n    while (node && node.getAttribute && !node.getAttribute(boxAttribute)) {\n      node = node.parentNode;\n    }\n\n    if (node) {\n      node.parentNode.removeChild(node);\n      modality(false);\n      gantt.callEvent(\"onAfterMessagePopup\", [node]);\n    }\n  };\n\n  modalBox.focus = function (node) {\n    setTimeout(function () {\n      var focusable = domHelpers.getFocusableNodes(node);\n\n      if (focusable.length) {\n        if (focusable[0].focus) focusable[0].focus();\n      }\n    }, 1);\n  };\n\n  var messageBox = function messageBox(text, type, expire, id) {\n    text = params.apply(this, arguments);\n    text.type = text.type || \"info\";\n    var subtype = text.type.split(\"-\")[0];\n\n    switch (subtype) {\n      case \"alert\":\n        return alertPopup(text);\n\n      case \"confirm\":\n        return confirmPopup(text);\n\n      case \"modalbox\":\n        return boxPopup(text);\n\n      default:\n        return info(text);\n    }\n  };\n\n  messageBox.seed = new Date().valueOf();\n  messageBox.uid = utils.uid;\n  messageBox.expire = 4000;\n  messageBox.keyboard = true;\n  messageBox.position = \"top\";\n  messageBox.pull = {};\n  messageBox.timers = {};\n\n  messageBox.hideAll = function () {\n    for (var key in messageBox.pull) {\n      messageBox.hide(key);\n    }\n  };\n\n  messageBox.hide = function (id) {\n    var obj = messageBox.pull[id];\n\n    if (obj && obj.parentNode) {\n      window.setTimeout(function () {\n        obj.parentNode.removeChild(obj);\n        obj = null;\n      }, 2000);\n      obj.className += \" hidden\";\n      if (messageBox.timers[id]) window.clearTimeout(messageBox.timers[id]);\n      delete messageBox.pull[id];\n    }\n  };\n\n  var popups = [];\n  gantt.attachEvent(\"onMessagePopup\", function (box) {\n    popups.push(box);\n  });\n  gantt.attachEvent(\"onAfterMessagePopup\", function (box) {\n    for (var i = 0; i < popups.length; i++) {\n      if (popups[i] === box) {\n        popups.splice(i, 1);\n        i--;\n      }\n    }\n  });\n  gantt.attachEvent(\"onDestroy\", function () {\n    if (modality.cover && modality.cover.parentNode) {\n      modality.cover.parentNode.removeChild(modality.cover);\n    }\n\n    for (var i = 0; i < popups.length; i++) {\n      if (popups[i].parentNode) {\n        popups[i].parentNode.removeChild(popups[i]);\n      }\n    }\n\n    popups = null;\n\n    if (messageBox.area && messageBox.area.parentNode) {\n      messageBox.area.parentNode.removeChild(messageBox.area);\n    }\n\n    messageBox = null;\n  });\n  return {\n    alert: alertBox,\n    confirm: confirmBox,\n    message: messageBox,\n    modalbox: modalBox\n  };\n};","module.exports = function (gantt) {\n  var utils = require(\"../utils/utils\");\n\n  var env = require(\"../utils/env\");\n\n  var isHeadless = require(\"../utils/is_headless\");\n\n  if (!env.isNode) {\n    var domHelpers = require(\"./ui/utils/dom_helpers\");\n\n    var codeHelpers = require(\"../utils/helpers\");\n\n    gantt.utils = {\n      arrayFind: codeHelpers.arrayFind,\n      dom: domHelpers\n    };\n\n    var domEvents = require(\"./ui/utils/dom_event_scope\")();\n\n    gantt.event = domEvents.attach;\n    gantt.eventRemove = domEvents.detach;\n    gantt._eventRemoveAll = domEvents.detachAll;\n    gantt._createDomEventScope = domEvents.extend;\n    utils.mixin(gantt, require(\"./ui/message\")(gantt));\n\n    var uiApi = require(\"./ui/index\").init(gantt);\n\n    gantt.$ui = uiApi.factory;\n    gantt.$ui.layers = uiApi.render;\n    gantt.$mouseEvents = uiApi.mouseEvents;\n    gantt.$services.setService(\"mouseEvents\", function () {\n      return gantt.$mouseEvents;\n    });\n    gantt.mixin(gantt, uiApi.layersApi);\n\n    require(\"./data_task_layers\")(gantt);\n\n    gantt.$services.setService(\"layers\", function () {\n      return uiApi.layersService;\n    });\n\n    var createLayoutFacade = require(\"./facades/layout\");\n\n    gantt.mixin(gantt, createLayoutFacade());\n\n    require(\"./ui/skin\")(gantt);\n\n    require(\"../css/skins/skyblue\")(gantt);\n\n    require(\"../css/skins/meadow\")(gantt);\n\n    require(\"../css/skins/terrace\")(gantt);\n\n    require(\"../css/skins/broadway\")(gantt);\n\n    require(\"../css/skins/material\")(gantt);\n\n    require(\"../css/skins/contrast_black\")(gantt);\n\n    require(\"../css/skins/contrast_white\")(gantt);\n\n    require(\"./ui/plugins\")(gantt);\n\n    require(\"./ui/touch\")(gantt);\n\n    require(\"./ui/lightbox\")(gantt);\n\n    require(\"./ui/lightbox/lightbox_optional_time\")(gantt);\n\n    require(\"./ui/wai_aria\")(gantt);\n\n    gantt.locate = function (e) {\n      var trg = domHelpers.getTargetNode(e); // ignore empty rows/cells of the timeline\n\n      if (domHelpers.closest(trg, \".gantt_task_row\")) {\n        return null;\n      }\n\n      var targetAttribute = arguments[1] || this.config.task_attribute;\n      var node = domHelpers.locateAttribute(trg, targetAttribute);\n\n      if (node) {\n        return node.getAttribute(targetAttribute);\n      } else {\n        return null;\n      }\n    };\n\n    gantt._locate_css = function (e, classname, strict) {\n      return domHelpers.locateClassName(e, classname, strict);\n    };\n\n    gantt._locateHTML = function (e, attribute) {\n      return domHelpers.locateAttribute(e, attribute || this.config.task_attribute);\n    };\n  }\n\n  gantt.attachEvent(\"onParse\", function () {\n    if (!isHeadless(gantt)) {\n      gantt.attachEvent(\"onGanttRender\", function () {\n        if (gantt.config.initial_scroll) {\n          var firstTask = gantt.getTaskByIndex(0);\n          var id = firstTask ? firstTask.id : gantt.config.root_id; // GS-1450. Don't scroll to the task if there is no timeline\n\n          if (gantt.isTaskExists(id) && gantt.$task && gantt.utils.dom.isChildOf(gantt.$task, gantt.$container)) {\n            gantt.showTask(id);\n          }\n        }\n      }, {\n        once: true\n      });\n    }\n  });\n  gantt.attachEvent(\"onBeforeGanttReady\", function () {\n    if (!this.config.scroll_size) this.config.scroll_size = domHelpers.getScrollSize() || 1;\n\n    if (!isHeadless(gantt)) {\n      // detach listeners before clearing old DOM, possible IE errors when accessing detached nodes\n      this._eventRemoveAll();\n\n      this.$mouseEvents.reset();\n      this.resetLightbox();\n    }\n  }); // GS-1261: scroll the views to the right side when RTL is enabled\n\n  gantt.attachEvent(\"onGanttReady\", function () {\n    if (!isHeadless(gantt) && gantt.config.rtl) {\n      gantt.$layout.getCellsByType(\"viewCell\").forEach(function (cell) {\n        var attachedScrollbar = cell.$config.scrollX;\n        if (!attachedScrollbar) return;\n        var scrollbar = gantt.$ui.getView(attachedScrollbar);\n        if (scrollbar) scrollbar.scrollTo(scrollbar.$config.scrollSize, 0);\n      });\n    }\n  }); // GS-1649: check if extensions are connected via files\n\n  gantt.attachEvent(\"onGanttReady\", function () {\n    if (!isHeadless(gantt)) {\n      var activePlugins = gantt.plugins();\n      var availablePlugins = {\n        auto_scheduling: gantt.autoSchedule,\n        click_drag: gantt.ext.clickDrag,\n        critical_path: gantt.isCriticalTask,\n        drag_timeline: gantt.ext.dragTimeline,\n        export_api: gantt.exportToPDF,\n        fullscreen: gantt.ext.fullscreen,\n        grouping: gantt.groupBy,\n        keyboard_navigation: gantt.ext.keyboardNavigation,\n        marker: gantt.addMarker,\n        multiselect: gantt.eachSelectedTask,\n        overlay: gantt.ext.overlay,\n        quick_info: gantt.templates.quick_info_content,\n        tooltip: gantt.ext.tooltips,\n        undo: gantt.undo\n      };\n\n      for (var plugin in availablePlugins) {\n        if (availablePlugins[plugin] && !activePlugins[plugin]) {\n          // eslint-disable-next-line no-console\n          console.warn(\"You connected the '\".concat(plugin, \"' extension via an obsolete file. \\nTo fix it, you need to remove the obsolete file and connect the extension via the plugins method: https://docs.dhtmlx.com/gantt/api__gantt_plugins.html\"));\n        }\n      }\n    }\n  });\n};","const locale: IGanttLocale = {\r\n\tdate: {\r\n\t\tmonth_full: [\"Січень\", \"Лютий\", \"Березень\", \"Квітень\", \"Травень\", \"Червень\", \"Липень\", \"Серпень\", \"Вересень\", \"Жовтень\", \"Листопад\", \"Грудень\"],\r\n\t\tmonth_short: [\"Січ\", \"Лют\", \"Бер\", \"Кві\", \"Тра\", \"Чер\", \"Лип\", \"Сер\", \"Вер\", \"Жов\", \"Лис\", \"Гру\"],\r\n\t\tday_full: [\"Неділя\", \"Понеділок\", \"Вівторок\", \"Середа\", \"Четвер\", \"П'ятниця\", \"Субота\"],\r\n\t\tday_short: [\"Нед\", \"Пон\", \"Вів\", \"Сер\", \"Чет\", \"Птн\", \"Суб\"]\r\n\t},\r\n\tlabels: {\r\n\t\tnew_task: \"Нове Ð·Ð°Ð²Ð´Ð°Ð½Ð½Ñ\",\r\n\t\ticon_save: \"Зберегти\",\r\n\t\ticon_cancel: \"Відміна\",\r\n\t\ticon_details: \"Деталі\",\r\n\t\ticon_edit: \"Редагувати\",\r\n\t\ticon_delete: \"Вилучити\",\r\n\t\tconfirm_closing: \"\", // Ð’аші Ð·Ð¼Ñ–ни Ð²Ñ‚ратяться. Ð’и Ð²Ð¿ÐµÐ²Ð½ÐµÐ½Ñ– ?\r\n\t\tconfirm_deleting: \"Подія Ð²Ð¸Ð»ÑƒÑ‡Ð¸Ñ‚ься Ð½Ð°Ð·Ð°Ð²Ð¶Ð´Ð¸. Ð’и Ð²Ð¿ÐµÐ²Ð½ÐµÐ½Ñ–?\",\r\n\t\tsection_description: \"Опис\",\r\n\t\tsection_time: \"Часовий Ð¿Ñ€Ð¾Ð¼Ñ–жок\",\r\n\t\tsection_type: \"Тип\",\r\n\t\t/* grid columns */\r\n\r\n\t\tcolumn_wbs: \"WBS\",\r\n\t\tcolumn_text: \"Task name\",\r\n\t\tcolumn_start_date: \"Start time\",\r\n\t\tcolumn_duration: \"Duration\",\r\n\t\tcolumn_add: \"\",\r\n\r\n\t\t/* link confirmation */\r\n\t\tlink: \"Link\",\r\n\t\tconfirm_link_deleting: \"will be deleted\",\r\n\t\tlink_start: \" (start)\",\r\n\t\tlink_end: \" (end)\",\r\n\r\n\t\ttype_task: \"Task\",\r\n\t\ttype_project: \"Project\",\r\n\t\ttype_milestone: \"Milestone\",\r\n\r\n\r\n\t\tminutes: \"Minutes\",\r\n\t\thours: \"Hours\",\r\n\t\tdays: \"Days\",\r\n\t\tweeks: \"Week\",\r\n\t\tmonths: \"Months\",\r\n\t\tyears: \"Years\",\r\n\r\n\t\t/* message popup */\r\n\t\tmessage_ok: \"OK\",\r\n\t\tmessage_cancel: \"Відміна\",\r\n\r\n\t\t/* constraints */\r\n\t\tsection_constraint: \"Constraint\",\r\n\t\tconstraint_type: \"Constraint type\",\r\n\t\tconstraint_date: \"Constraint date\",\r\n\t\tasap: \"As Soon As Possible\",\r\n\t\talap: \"As Late As Possible\",\r\n\t\tsnet: \"Start No Earlier Than\",\r\n\t\tsnlt: \"Start No Later Than\",\r\n\t\tfnet: \"Finish No Earlier Than\",\r\n\t\tfnlt: \"Finish No Later Than\",\r\n\t\tmso: \"Must Start On\",\r\n\t\tmfo: \"Must Finish On\",\r\n\r\n\t\t/* resource control */\r\n\t\tresources_filter_placeholder: \"type to filter\",\r\n\t\tresources_filter_label: \"hide empty\",\r\n\r\n\t\t/* empty state screen */\r\n\t\tempty_state_text_link: \"Click here\",\r\n\t\tempty_state_text_description: \"to create your first task\"\r\n\t}\r\n};\r\n\r\nexport default locale;\r\n","/*\r\n * updated by @levkar at https://github.com/DHTMLX/gantt/pull/10\r\n */\r\nconst locale: IGanttLocale = {\r\n\tdate: {\r\n\t\tmonth_full: [\"Ocak\", \"Şubat\", \"Mart\", \"Nisan\", \"Mayıs\", \"Haziran\", \"Temmuz\", \"Ağustos\", \"Eylül\", \"Ekim\", \"Kasım\", \"Aralık\"],\r\n\t\tmonth_short: [\"Oca\", \"Şub\", \"Mar\", \"Nis\", \"May\", \"Haz\", \"Tem\", \"Ağu\", \"Eyl\", \"Eki\", \"Kas\", \"Ara\"],\r\n\t\tday_full: [\"Pazar\", \"Pazartesi\", \"Salı\", \"Çarşamba\", \"Perşembe\", \"Cuma\", \"Cumartesi\"],\r\n\t\tday_short: [\"Paz\", \"Pzt\", \"Sal\", \"Çar\", \"Per\", \"Cum\", \"Cmt\"]\r\n\t},\r\n\tlabels: {\r\n\t\tnew_task: \"Yeni görev\",\r\n\t\ticon_save: \"Kaydet\",\r\n\t\ticon_cancel: \"İptal\",\r\n\t\ticon_details: \"Detaylar\",\r\n\t\ticon_edit: \"Düzenle\",\r\n\t\ticon_delete: \"Sil\",\r\n\t\tconfirm_closing: \"\", // Your changes will be lost, are your sure ?\r\n\t\tconfirm_deleting: \"Görev silinecek, emin misiniz?\",\r\n\t\tsection_description: \"Açıklama\",\r\n\t\tsection_time: \"Zaman Aralığı\",\r\n\t\tsection_type: \"Tip\",\r\n\t\t/* grid columns */\r\n\r\n\t\tcolumn_wbs: \"WBS\",\r\n\t\tcolumn_text: \"Görev Adı\",\r\n\t\tcolumn_start_date: \"Başlangıç\",\r\n\t\tcolumn_duration: \"Süre\",\r\n\t\tcolumn_add: \"\",\r\n\r\n\t\t/* link confirmation */\r\n\t\tlink: \"Bağlantı\",\r\n\t\tconfirm_link_deleting: \"silinecek\",\r\n\t\tlink_start: \" (başlangıç)\",\r\n\t\tlink_end: \" (bitiş)\",\r\n\r\n\t\ttype_task: \"Görev\",\r\n\t\ttype_project: \"Proje\",\r\n\t\ttype_milestone: \"Kilometretaşı\",\r\n\r\n\r\n\t\tminutes: \"Dakika\",\r\n\t\thours: \"Saat\",\r\n\t\tdays: \"Gün\",\r\n\t\tweeks: \"Hafta\",\r\n\t\tmonths: \"Ay\",\r\n\t\tyears: \"Yıl\",\r\n\r\n\t\t/* message popup */\r\n\t\tmessage_ok: \"OK\",\r\n\t\tmessage_cancel: \"Ýptal\",\r\n\r\n\t\t/* constraints */\r\n\t\tsection_constraint: \"Constraint\",\r\n\t\tconstraint_type: \"Constraint type\",\r\n\t\tconstraint_date: \"Constraint date\",\r\n\t\tasap: \"As Soon As Possible\",\r\n\t\talap: \"As Late As Possible\",\r\n\t\tsnet: \"Start No Earlier Than\",\r\n\t\tsnlt: \"Start No Later Than\",\r\n\t\tfnet: \"Finish No Earlier Than\",\r\n\t\tfnlt: \"Finish No Later Than\",\r\n\t\tmso: \"Must Start On\",\r\n\t\tmfo: \"Must Finish On\",\r\n\r\n\t\t/* resource control */\r\n\t\tresources_filter_placeholder: \"type to filter\",\r\n\t\tresources_filter_label: \"hide empty\",\r\n\r\n\t\t/* empty state screen */\r\n\t\tempty_state_text_link: \"Click here\",\r\n\t\tempty_state_text_description: \"to create your first task\"\r\n\t}\r\n};\r\n\r\nexport default locale;\r\n","/*\r\n\tTranslation by Peter Eriksson\r\n */\r\nconst locale: IGanttLocale = {\r\n\tdate: {\r\n\t\tmonth_full: [\"Januari\", \"Februari\", \"Mars\", \"April\", \"Maj\", \"Juni\", \"Juli\", \"Augusti\", \"September\", \"Oktober\", \"November\", \"December\"],\r\n\t\tmonth_short: [\"Jan\", \"Feb\", \"Mar\", \"Apr\", \"Maj\", \"Jun\", \"Jul\", \"Aug\", \"Sep\", \"Okt\", \"Nov\", \"Dec\"],\r\n\t\tday_full: [\"Söndag\", \"MÃ¥ndag\", \"Tisdag\", \"Onsdag\", \"Torsdag\", \"Fredag\", \"Lördag\"],\r\n\t\tday_short: [\"Sön\", \"MÃ¥n\", \"Tis\", \"Ons\", \"Tor\", \"Fre\", \"Lör\"]\r\n\t},\r\n\tlabels: {\r\n\t\tnew_task: \"Ny uppgift\",\r\n\t\ticon_save: \"Spara\",\r\n\t\ticon_cancel: \"Avbryt\",\r\n\t\ticon_details: \"Detajer\",\r\n\t\ticon_edit: \"Ändra\",\r\n\t\ticon_delete: \"Ta bort\",\r\n\t\tconfirm_closing: \"\",\r\n\t\tconfirm_deleting: \"Är du säker pÃ¥ att du vill ta bort händelsen permanent?\",\r\n\t\tsection_description: \"Beskrivning\",\r\n\t\tsection_time: \"Tid\",\r\n\t\tsection_type: \"Typ\",\r\n\r\n\t\t/* grid columns */\r\n\r\n\t\tcolumn_wbs: \"WBS\",\r\n\t\tcolumn_text: \"Uppgiftsnamn\",\r\n\t\tcolumn_start_date: \"Starttid\",\r\n\t\tcolumn_duration: \"Varaktighet\",\r\n\t\tcolumn_add: \"\",\r\n\r\n\t\t/* link confirmation */\r\n\r\n\t\tlink: \"Länk\",\r\n\t\tconfirm_link_deleting: \"kommer tas bort\",\r\n\t\tlink_start: \" (start)\",\r\n\t\tlink_end: \" (slut)\",\r\n\t\ttype_task: \"Uppgift\",\r\n\t\ttype_project: \"Projekt\",\r\n\t\ttype_milestone: \"Milstolpe\",\r\n\r\n\t\tminutes: \"Minuter\",\r\n\t\thours: \"Timmar\",\r\n\t\tdays: \"Dagar\",\r\n\t\tweeks: \"Veckor\",\r\n\t\tmonths: \"MÃ¥nader\",\r\n\t\tyears: \"År\",\r\n\r\n\t\t/* message popup */\r\n\t\tmessage_ok: \"OK\",\r\n\t\tmessage_cancel: \"Avbryt\",\r\n\r\n\t\t/* constraints */\r\n\t\tsection_constraint: \"Constraint\",\r\n\t\tconstraint_type: \"Constraint type\",\r\n\t\tconstraint_date: \"Constraint date\",\r\n\t\tasap: \"As Soon As Possible\",\r\n\t\talap: \"As Late As Possible\",\r\n\t\tsnet: \"Start No Earlier Than\",\r\n\t\tsnlt: \"Start No Later Than\",\r\n\t\tfnet: \"Finish No Earlier Than\",\r\n\t\tfnlt: \"Finish No Later Than\",\r\n\t\tmso: \"Must Start On\",\r\n\t\tmfo: \"Must Finish On\",\r\n\r\n\t\t/* resource control */\r\n\t\tresources_filter_placeholder: \"type to filter\",\r\n\t\tresources_filter_label: \"hide empty\",\r\n\r\n\t\t/* empty state screen */\r\n\t\tempty_state_text_link: \"Click here\",\r\n\t\tempty_state_text_description: \"to create your first task\"\r\n\t}\r\n};\r\n\r\nexport default locale;\r\n","const locale: IGanttLocale = {\r\n\tdate: {\r\n\t\tmonth_full: [\"Január\", \"Február\", \"Marec\", \"Apríl\", \"Máj\", \"Jún\", \"Júl\", \"August\", \"September\", \"Október\", \"November\", \"December\"],\r\n\t\tmonth_short: [\"Jan\", \"Feb\", \"Mar\", \"Apr\", \"Máj\", \"Jún\", \"Júl\", \"Aug\", \"Sept\", \"Okt\", \"Nov\", \"Dec\"],\r\n\t\tday_full: [\"Nedeľa\", \"Pondelok\", \"Utorok\", \"Streda\", \"Å tvrtok\", \"Piatok\", \"Sobota\"],\r\n\t\tday_short: [\"Ne\", \"Po\", \"Ut\", \"St\", \"Å t\", \"Pi\", \"So\"]\r\n\t},\r\n\tlabels: {\r\n\t\tnew_task: \"Nová Ãºloha\",\r\n\t\ticon_save: \"UložiÅ¥\",\r\n\t\ticon_cancel: \"Späť\",\r\n\t\ticon_details: \"Detail\",\r\n\t\ticon_edit: \"Edituj\",\r\n\t\ticon_delete: \"ZmazaÅ¥\",\r\n\t\tconfirm_closing: \"VaÅ¡e zmeny nebudú uložené. Skutočne?\", // VaÅ¡e změny budou ztraceny, opravdu ?\r\n\t\tconfirm_deleting: \"UdalosÅ¥ bude natrvalo vymazaná. Skutočne?\",\r\n\t\tsection_description: \"Poznámky\",\r\n\t\tsection_time: \"Doba platnosti\",\r\n\t\tsection_type: \"Type\",\r\n\t\t/* grid columns */\r\n\r\n\t\tcolumn_wbs: \"WBS\",\r\n\t\tcolumn_text: \"Task name\",\r\n\t\tcolumn_start_date: \"Start time\",\r\n\t\tcolumn_duration: \"Duration\",\r\n\t\tcolumn_add: \"\",\r\n\r\n\t\t/* link confirmation */\r\n\t\tlink: \"Link\",\r\n\t\tconfirm_link_deleting: \"will be deleted\",\r\n\t\tlink_start: \" (start)\",\r\n\t\tlink_end: \" (end)\",\r\n\r\n\t\ttype_task: \"Task\",\r\n\t\ttype_project: \"Project\",\r\n\t\ttype_milestone: \"Milestone\",\r\n\r\n\r\n\t\tminutes: \"Minutes\",\r\n\t\thours: \"Hours\",\r\n\t\tdays: \"Days\",\r\n\t\tweeks: \"Week\",\r\n\t\tmonths: \"Months\",\r\n\t\tyears: \"Years\",\r\n\r\n\t\t/* message popup */\r\n\t\tmessage_ok: \"OK\",\r\n\t\tmessage_cancel: \"Späť\",\r\n\r\n\t\t/* constraints */\r\n\t\tsection_constraint: \"Constraint\",\r\n\t\tconstraint_type: \"Constraint type\",\r\n\t\tconstraint_date: \"Constraint date\",\r\n\t\tasap: \"As Soon As Possible\",\r\n\t\talap: \"As Late As Possible\",\r\n\t\tsnet: \"Start No Earlier Than\",\r\n\t\tsnlt: \"Start No Later Than\",\r\n\t\tfnet: \"Finish No Earlier Than\",\r\n\t\tfnlt: \"Finish No Later Than\",\r\n\t\tmso: \"Must Start On\",\r\n\t\tmfo: \"Must Finish On\",\r\n\r\n\t\t/* resource control */\r\n\t\tresources_filter_placeholder: \"type to filter\",\r\n\t\tresources_filter_label: \"hide empty\",\r\n\r\n\t\t/* empty state screen */\r\n\t\tempty_state_text_link: \"Click here\",\r\n\t\tempty_state_text_description: \"to create your first task\"\r\n\t}\r\n};\r\n\r\nexport default locale;\r\n","const locale: IGanttLocale = {\r\n\tdate: {\r\n\t\tmonth_full: [\"Januar\", \"Februar\", \"Marec\", \"April\", \"Maj\", \"Junij\", \"Julij\", \"Avgust\", \"September\", \"Oktober\", \"November\", \"December\"],\r\n\t\tmonth_short: [\"Jan\", \"Feb\", \"Mar\", \"Apr\", \"Maj\", \"Jun\", \"Jul\", \"Aug\", \"Sep\", \"Okt\", \"Nov\", \"Dec\"],\r\n\t\tday_full: [\"Nedelja\", \"Ponedeljek\", \"Torek\", \"Sreda\", \"Četrtek\", \"Petek\", \"Sobota\"],\r\n\t\tday_short: [\"Ned\", \"Pon\", \"Tor\", \"Sre\", \"Čet\", \"Pet\", \"Sob\"]\r\n\t},\r\n\tlabels: {\r\n\t\tnew_task: \"Nova naloga\",\r\n\t\ticon_save: \"Shrani\",\r\n\t\ticon_cancel: \"Prekliči\",\r\n\t\ticon_details: \"Podrobnosti\",\r\n\t\ticon_edit: \"Uredi\",\r\n\t\ticon_delete: \"IzbriÅ¡i\",\r\n\t\tconfirm_closing: \"\", // Spremembe ne bodo shranjene. Å½elite nadaljevati ?\r\n\t\tconfirm_deleting: \"Dogodek bo izbrisan. Å½elite nadaljevati?\",\r\n\t\tsection_description: \"Opis\",\r\n\t\tsection_time: \"Časovni okvir\",\r\n\t\tsection_type: \"Type\",\r\n\t\t/* grid columns */\r\n\r\n\t\tcolumn_wbs: \"WBS\",\r\n\t\tcolumn_text: \"Task name\",\r\n\t\tcolumn_start_date: \"Start time\",\r\n\t\tcolumn_duration: \"Duration\",\r\n\t\tcolumn_add: \"\",\r\n\r\n\t\t/* link confirmation */\r\n\t\tlink: \"Link\",\r\n\t\tconfirm_link_deleting: \"will be deleted\",\r\n\t\tlink_start: \" (start)\",\r\n\t\tlink_end: \" (end)\",\r\n\r\n\t\ttype_task: \"Task\",\r\n\t\ttype_project: \"Project\",\r\n\t\ttype_milestone: \"Milestone\",\r\n\r\n\r\n\t\tminutes: \"Minutes\",\r\n\t\thours: \"Hours\",\r\n\t\tdays: \"Days\",\r\n\t\tweeks: \"Week\",\r\n\t\tmonths: \"Months\",\r\n\t\tyears: \"Years\",\r\n\r\n\t\t/* message popup */\r\n\t\tmessage_ok: \"OK\",\r\n\t\tmessage_cancel: \"Prekliči\",\r\n\r\n\t\t/* constraints */\r\n\t\tsection_constraint: \"Constraint\",\r\n\t\tconstraint_type: \"Constraint type\",\r\n\t\tconstraint_date: \"Constraint date\",\r\n\t\tasap: \"As Soon As Possible\",\r\n\t\talap: \"As Late As Possible\",\r\n\t\tsnet: \"Start No Earlier Than\",\r\n\t\tsnlt: \"Start No Later Than\",\r\n\t\tfnet: \"Finish No Earlier Than\",\r\n\t\tfnlt: \"Finish No Later Than\",\r\n\t\tmso: \"Must Start On\",\r\n\t\tmfo: \"Must Finish On\",\r\n\r\n\t\t/* resource control */\r\n\t\tresources_filter_placeholder: \"type to filter\",\r\n\t\tresources_filter_label: \"hide empty\",\r\n\r\n\t\t/* empty state screen */\r\n\t\tempty_state_text_link: \"Click here\",\r\n\t\tempty_state_text_description: \"to create your first task\"\r\n\t}\r\n};\r\n\r\nexport default locale;\r\n","const locale: IGanttLocale = {\r\n\tdate: {\r\n\t\tmonth_full: [\"Январь\", \"Февраль\", \"Март\", \"Апрель\", \"Maй\", \"Июнь\", \"Июль\", \"Август\", \"Сентябрь\", \"Oктябрь\", \"Ноябрь\", \"Декабрь\"],\r\n\t\tmonth_short: [\"Янв\", \"Фев\", \"Maр\", \"Aпр\", \"Maй\", \"Июн\", \"Июл\", \"Aвг\", \"Сен\", \"Окт\", \"Ноя\", \"Дек\"],\r\n\t\tday_full: [\"Воскресенье\", \"Понедельник\", \"Вторник\", \"Среда\", \"Четверг\", \"Пятница\", \"Суббота\"],\r\n\t\tday_short: [\"Вс\", \"Пн\", \"Вт\", \"Ср\", \"Чт\", \"Пт\", \"Сб\"]\r\n\t},\r\n\tlabels: {\r\n\t\tnew_task: \"Новое Ð·Ð°Ð´Ð°Ð½Ð¸Ðµ\",\r\n\t\ticon_save: \"Сохранить\",\r\n\t\ticon_cancel: \"Отменить\",\r\n\t\ticon_details: \"Детали\",\r\n\t\ticon_edit: \"Изменить\",\r\n\t\ticon_delete: \"Удалить\",\r\n\t\tconfirm_closing: \"\", // Ð’аши Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð±ÑƒÐ´ÑƒÑ‚ Ð¿Ð¾Ñ‚еряны, Ð¿Ñ€Ð¾Ð´Ð¾Ð»Ð¶Ð¸Ñ‚ÑŒ?\r\n\t\tconfirm_deleting: \"Событие Ð±ÑƒÐ´ÐµÑ‚ ÑƒÐ´Ð°Ð»ÐµÐ½Ð¾ Ð±ÐµÐ·Ð²Ð¾Ð·Ð²Ñ€Ð°Ñ‚но, Ð¿Ñ€Ð¾Ð´Ð¾Ð»Ð¶Ð¸Ñ‚ÑŒ?\",\r\n\t\tsection_description: \"Описание\",\r\n\t\tsection_time: \"Период Ð²Ñ€ÐµÐ¼ÐµÐ½Ð¸\",\r\n\t\tsection_type: \"Тип\",\r\n\t\t/* grid columns */\r\n\r\n\t\tcolumn_wbs: \"ИСР\",\r\n\t\tcolumn_text: \"Задача\",\r\n\t\tcolumn_start_date: \"Начало\",\r\n\t\tcolumn_duration: \"Длительность\",\r\n\t\tcolumn_add: \"\",\r\n\r\n\t\t/* link confirmation */\r\n\t\tlink: \"Связь\",\r\n\t\tconfirm_link_deleting: \"будет ÑƒÐ´Ð°Ð»ÐµÐ½Ð°\",\r\n\t\tlink_start: \" (начало)\",\r\n\t\tlink_end: \" (конец)\",\r\n\r\n\t\ttype_task: \"Task\",\r\n\t\ttype_project: \"Project\",\r\n\t\ttype_milestone: \"Milestone\",\r\n\r\n\r\n\t\tminutes: \"Минута\",\r\n\t\thours: \"Час\",\r\n\t\tdays: \"День\",\r\n\t\tweeks: \"Неделя\",\r\n\t\tmonths: \"Месяц\",\r\n\t\tyears: \"Год\",\r\n\r\n\t\t/* message popup */\r\n\t\tmessage_ok: \"OK\",\r\n\t\tmessage_cancel: \"Отменить\",\r\n\r\n\t\t/* constraints */\r\n\t\tsection_constraint: \"Constraint\",\r\n\t\tconstraint_type: \"Constraint type\",\r\n\t\tconstraint_date: \"Constraint date\",\r\n\t\tasap: \"As Soon As Possible\",\r\n\t\talap: \"As Late As Possible\",\r\n\t\tsnet: \"Start No Earlier Than\",\r\n\t\tsnlt: \"Start No Later Than\",\r\n\t\tfnet: \"Finish No Earlier Than\",\r\n\t\tfnlt: \"Finish No Later Than\",\r\n\t\tmso: \"Must Start On\",\r\n\t\tmfo: \"Must Finish On\",\r\n\r\n\t\t/* resource control */\r\n\t\tresources_filter_placeholder: \"начните Ð²Ð²Ð¾Ð´Ð¸Ñ‚ÑŒ ÑÐ»Ð¾Ð²Ð¾ Ð´Ð»Ñ Ñ„ильтрации\",\r\n\t\tresources_filter_label: \"спрятать Ð½Ðµ ÑƒÑÑ‚ановленные\",\r\n\r\n\t\t/* empty state screen */\r\n\t\tempty_state_text_link: \"Click here\",\r\n\t\tempty_state_text_description: \"to create your first task\"\r\n\t}\r\n};\r\n\r\nexport default locale;\r\n","/*\r\n\tTraducere de Ovidiu Lixandru: http://www.madball.ro\r\n */\r\n\r\nconst locale: IGanttLocale = {\r\n\tdate: {\r\n\t\tmonth_full: [\"Ianuarie\", \"Februarie\", \"Martie\", \"Aprilie\", \"Mai\", \"Iunie\", \"Iulie\", \"August\", \"Septembrie\", \"Octombrie\", \"November\", \"December\"],\r\n\t\tmonth_short: [\"Ian\", \"Feb\", \"Mar\", \"Apr\", \"Mai\", \"Iun\", \"Iul\", \"Aug\", \"Sep\", \"Oct\", \"Nov\", \"Dec\"],\r\n\t\tday_full: [\"Duminica\", \"Luni\", \"Marti\", \"Miercuri\", \"Joi\", \"Vineri\", \"Sambata\"],\r\n\t\tday_short: [\"Du\", \"Lu\", \"Ma\", \"Mi\", \"Jo\", \"Vi\", \"Sa\"]\r\n\t},\r\n\tlabels: {\r\n\t\tnew_task: \"Sarcina noua\",\r\n\t\ticon_save: \"Salveaza\",\r\n\t\ticon_cancel: \"Anuleaza\",\r\n\t\ticon_details: \"Detalii\",\r\n\t\ticon_edit: \"Editeaza\",\r\n\t\ticon_delete: \"Sterge\",\r\n\t\tconfirm_closing: \"Schimbarile nu vor fi salvate, esti sigur?\",// Your changes will be lost, are your sure ?\r\n\t\tconfirm_deleting: \"Evenimentul va fi sters permanent, esti sigur?\",\r\n\t\tsection_description: \"Descriere\",\r\n\t\tsection_time: \"Interval\",\r\n\t\tsection_type: \"Type\",\r\n\t\t/* grid columns */\r\n\r\n\t\tcolumn_wbs: \"WBS\",\r\n\t\tcolumn_text: \"Task name\",\r\n\t\tcolumn_start_date: \"Start time\",\r\n\t\tcolumn_duration: \"Duration\",\r\n\t\tcolumn_add: \"\",\r\n\r\n\t\t/* link confirmation */\r\n\t\tlink: \"Link\",\r\n\t\tconfirm_link_deleting: \"will be deleted\",\r\n\t\tlink_start: \" (start)\",\r\n\t\tlink_end: \" (end)\",\r\n\r\n\t\ttype_task: \"Task\",\r\n\t\ttype_project: \"Project\",\r\n\t\ttype_milestone: \"Milestone\",\r\n\r\n\r\n\t\tminutes: \"Minutes\",\r\n\t\thours: \"Hours\",\r\n\t\tdays: \"Days\",\r\n\t\tweeks: \"Week\",\r\n\t\tmonths: \"Months\",\r\n\t\tyears: \"Years\",\r\n\r\n\t\t/* message popup */\r\n\t\tmessage_ok: \"OK\",\r\n\t\tmessage_cancel: \"Anuleaza\",\r\n\r\n\t\t/* constraints */\r\n\t\tsection_constraint: \"Constraint\",\r\n\t\tconstraint_type: \"Constraint type\",\r\n\t\tconstraint_date: \"Constraint date\",\r\n\t\tasap: \"As Soon As Possible\",\r\n\t\talap: \"As Late As Possible\",\r\n\t\tsnet: \"Start No Earlier Than\",\r\n\t\tsnlt: \"Start No Later Than\",\r\n\t\tfnet: \"Finish No Earlier Than\",\r\n\t\tfnlt: \"Finish No Later Than\",\r\n\t\tmso: \"Must Start On\",\r\n\t\tmfo: \"Must Finish On\",\r\n\r\n\t\t/* resource control */\r\n\t\tresources_filter_placeholder: \"type to filter\",\r\n\t\tresources_filter_label: \"hide empty\",\r\n\r\n\t\t/* empty state screen */\r\n\t\tempty_state_text_link: \"Click here\",\r\n\t\tempty_state_text_description: \"to create your first task\"\r\n\t}\r\n};\r\n\r\nexport default locale;\r\n","/*\r\n\r\n TRANSLATION BY MATTHEUS PIROVANI RORIZ GONЗALVES\r\n\r\n mattheusroriz@hotmail.com / mattheus.pirovani@gmail.com /\r\n\r\n www.atrixian.com.br\r\n\r\n\r\n Updated by Jorge Albernaz Martins\r\n\r\n jorgefox@hotmail.com\r\n\r\n www.redfox.inf.br\r\n\r\n JorgeFox\r\n\r\n*/\r\n\r\nconst locale: IGanttLocale = {\r\n\tdate: {\r\n\t\tmonth_full: [\"Janeiro\", \"Fevereiro\", \"Março\", \"Abril\", \"Maio\", \"Junho\", \"Julho\", \"Agosto\", \"Setembro\", \"Outubro\", \"Novembro\", \"Dezembro\"],\r\n\t\tmonth_short: [\"Jan\", \"Fev\", \"Mar\", \"Abr\", \"Mai\", \"Jun\", \"Jul\", \"Ago\", \"Set\", \"Out\", \"Nov\", \"Dez\"],\r\n\t\tday_full: [\"Domingo\", \"Segunda\", \"Terça\", \"Quarta\", \"Quinta\", \"Sexta\", \"Sábado\"],\r\n\t\tday_short: [\"Dom\", \"Seg\", \"Ter\", \"Qua\", \"Qui\", \"Sex\", \"Sab\"]\r\n\t},\r\n\tlabels: {\r\n\t\tnew_task: \"Nova tarefa\",\r\n\t\ticon_save: \"Salvar\",\r\n\t\ticon_cancel: \"Cancelar\",\r\n\t\ticon_details: \"Detalhes\",\r\n\t\ticon_edit: \"Editar\",\r\n\t\ticon_delete: \"Excluir\",\r\n\t\tconfirm_closing: \"\",// Suas alterações serão perdidas, confirme?\r\n\t\tconfirm_deleting: \"As tarefas serão excluidas permanentemente, confirme?\",\r\n\t\tsection_description: \"Descrição\",\r\n\t\tsection_time: \"Período\",\r\n\t\tsection_type: \"Tipo\",\r\n\t\t/* grid columns */\r\n\r\n\t\tcolumn_wbs: \"EAP\",\r\n\t\tcolumn_text: \"Nome tarefa\",\r\n\t\tcolumn_start_date: \"Data início\",\r\n\t\tcolumn_duration: \"Duração\",\r\n\t\tcolumn_add: \"\",\r\n\r\n\t\t/* link confirmation */\r\n\t\tlink: \"Link\",\r\n\t\tconfirm_link_deleting: \"Será excluído!\",\r\n\t\tlink_start: \" (início)\",\r\n\t\tlink_end: \" (fim)\",\r\n\r\n\t\ttype_task: \"Task\",\r\n\t\ttype_project: \"Projeto\",\r\n\t\ttype_milestone: \"Marco\",\r\n\r\n\r\n\t\tminutes: \"Minutos\",\r\n\t\thours: \"Horas\",\r\n\t\tdays: \"Dias\",\r\n\t\tweeks: \"Semanas\",\r\n\t\tmonths: \"Meses\",\r\n\t\tyears: \"Anos\",\r\n\r\n\t\t/* message popup */\r\n\t\tmessage_ok: \"OK\",\r\n\t\tmessage_cancel: \"Cancelar\",\r\n\r\n\t\t/* constraints */\r\n\t\tsection_constraint: \"Restrição\",\r\n\t\tconstraint_type: \"Tipo Restrição\",\r\n\t\tconstraint_date: \"Data restrição\",\r\n\t\tasap: \"Mais breve possível\",\r\n\t\talap: \"Mais tarde possível\",\r\n\t\tsnet: \"Não começar antes de\",\r\n\t\tsnlt: \"Não começar depois de\",\r\n\t\tfnet: \"Não terminar antes de\",\r\n\t\tfnlt: \"Não terminar depois de\",\r\n\t\tmso: \"Precisa começar em\",\r\n\t\tmfo: \"Precisa terminar em\",\r\n\r\n\t\t/* resource control */\r\n\t\tresources_filter_placeholder: \"Tipo de filtros\",\r\n\t\tresources_filter_label: \"Ocultar vazios\",\r\n\r\n\t\t/* empty state screen */\r\n\t\tempty_state_text_link: \"Click here\",\r\n\t\tempty_state_text_description: \"to create your first task\"\r\n\t}\r\n};\r\n\r\nexport default locale;\r\n","const locale: IGanttLocale = {\r\n\tdate: {\r\n\t\tmonth_full: [\"Styczeń\", \"Luty\", \"Marzec\", \"Kwiecień\", \"Maj\", \"Czerwiec\", \"Lipiec\", \"Sierpień\", \"Wrzesień\", \"Październik\", \"Listopad\", \"Grudzień\"],\r\n\t\tmonth_short: [\"Sty\", \"Lut\", \"Mar\", \"Kwi\", \"Maj\", \"Cze\", \"Lip\", \"Sie\", \"Wrz\", \"Paź\", \"Lis\", \"Gru\"],\r\n\t\tday_full: [\"Niedziela\", \"Poniedziałek\", \"Wtorek\", \"Środa\", \"Czwartek\", \"Piątek\", \"Sobota\"],\r\n\t\tday_short: [\"Nie\", \"Pon\", \"Wto\", \"Śro\", \"Czw\", \"Pią\", \"Sob\"]\r\n\t},\r\n\tlabels: {\r\n\t\tnew_task: \"Nowe zadanie\",\r\n\t\ticon_save: \"Zapisz\",\r\n\t\ticon_cancel: \"Anuluj\",\r\n\t\ticon_details: \"Szczegóły\",\r\n\t\ticon_edit: \"Edytuj\",\r\n\t\ticon_delete: \"Usuń\",\r\n\t\tconfirm_closing: \"\", // Zmiany zostaną usunięte, jesteś pewien?\r\n\t\tconfirm_deleting: \"Zdarzenie zostanie usunięte na zawsze, kontynuować?\",\r\n\t\tsection_description: \"Opis\",\r\n\t\tsection_time: \"Okres czasu\",\r\n\t\tsection_type: \"Typ\",\r\n\t\t/* grid columns */\r\n\r\n\t\tcolumn_wbs: \"WBS\",\r\n\t\tcolumn_text: \"Nazwa zadania\",\r\n\t\tcolumn_start_date: \"Początek\",\r\n\t\tcolumn_duration: \"Czas trwania\",\r\n\t\tcolumn_add: \"\",\r\n\r\n\t\t/* link confirmation */\r\n\t\tlink: \"Link\",\r\n\t\tconfirm_link_deleting: \"zostanie usunięty\",\r\n\t\tlink_start: \" (początek)\",\r\n\t\tlink_end: \" (koniec)\",\r\n\r\n\t\ttype_task: \"Zadanie\",\r\n\t\ttype_project: \"Projekt\",\r\n\t\ttype_milestone: \"Milestone\",\r\n\r\n\r\n\t\tminutes: \"Minuty\",\r\n\t\thours: \"Godziny\",\r\n\t\tdays: \"Dni\",\r\n\t\tweeks: \"Tydzień\",\r\n\t\tmonths: \"Miesiące\",\r\n\t\tyears: \"Lata\",\r\n\r\n\t\t/* message popup */\r\n\t\tmessage_ok: \"OK\",\r\n\t\tmessage_cancel: \"Anuluj\",\r\n\r\n\t\t/* constraints */\r\n\t\tsection_constraint: \"Constraint\",\r\n\t\tconstraint_type: \"Constraint type\",\r\n\t\tconstraint_date: \"Constraint date\",\r\n\t\tasap: \"As Soon As Possible\",\r\n\t\talap: \"As Late As Possible\",\r\n\t\tsnet: \"Start No Earlier Than\",\r\n\t\tsnlt: \"Start No Later Than\",\r\n\t\tfnet: \"Finish No Earlier Than\",\r\n\t\tfnlt: \"Finish No Later Than\",\r\n\t\tmso: \"Must Start On\",\r\n\t\tmfo: \"Must Finish On\",\r\n\r\n\t\t/* resource control */\r\n\t\tresources_filter_placeholder: \"type to filter\",\r\n\t\tresources_filter_label: \"hide empty\",\r\n\r\n\t\t/* empty state screen */\r\n\t\tempty_state_text_link: \"Click here\",\r\n\t\tempty_state_text_description: \"to create your first task\"\r\n\t}\r\n};\r\n\r\nexport default locale;\r\n","const locale: IGanttLocale = {\r\n\tdate: {\r\n\t\tmonth_full: [\"Januar\", \"Februar\", \"Mars\", \"April\", \"Mai\", \"Juni\", \"Juli\", \"August\", \"September\", \"Oktober\", \"November\", \"Desember\"],\r\n\t\tmonth_short: [\"Jan\", \"Feb\", \"Mar\", \"Apr\", \"Mai\", \"Jun\", \"Jul\", \"Aug\", \"Sep\", \"Okt\", \"Nov\", \"Des\"],\r\n\t\tday_full: [\"Søndag\", \"Mandag\", \"Tirsdag\", \"Onsdag\", \"Torsdag\", \"Fredag\", \"Lørdag\"],\r\n\t\tday_short: [\"Søn\", \"Man\", \"Tir\", \"Ons\", \"Tor\", \"Fre\", \"Lør\"]\r\n\t},\r\n\tlabels: {\r\n\t\tnew_task: \"Ny oppgave\",\r\n\t\ticon_save: \"Lagre\",\r\n\t\ticon_cancel: \"Avbryt\",\r\n\t\ticon_details: \"Detaljer\",\r\n\t\ticon_edit: \"Endre\",\r\n\t\ticon_delete: \"Slett\",\r\n\t\tconfirm_closing: \"Endringer blir ikke lagret, er du sikker?\", // Endringer blir ikke lagret, er du sikker?\r\n\t\tconfirm_deleting: \"Oppføringen vil bli slettet, er du sikker?\",\r\n\t\tsection_description: \"Beskrivelse\",\r\n\t\tsection_time: \"Tidsperiode\",\r\n\t\tsection_type: \"Type\",\r\n\t\t/* grid columns */\r\n\r\n\t\tcolumn_wbs: \"WBS\",\r\n\t\tcolumn_text: \"Task name\",\r\n\t\tcolumn_start_date: \"Start time\",\r\n\t\tcolumn_duration: \"Duration\",\r\n\t\tcolumn_add: \"\",\r\n\r\n\t\t/* link confirmation */\r\n\t\tlink: \"Link\",\r\n\t\tconfirm_link_deleting: \"will be deleted\",\r\n\t\tlink_start: \" (start)\",\r\n\t\tlink_end: \" (end)\",\r\n\r\n\t\ttype_task: \"Task\",\r\n\t\ttype_project: \"Project\",\r\n\t\ttype_milestone: \"Milestone\",\r\n\r\n\r\n\t\tminutes: \"Minutes\",\r\n\t\thours: \"Hours\",\r\n\t\tdays: \"Days\",\r\n\t\tweeks: \"Week\",\r\n\t\tmonths: \"Months\",\r\n\t\tyears: \"Years\",\r\n\r\n\t\t/* message popup */\r\n\t\tmessage_ok: \"OK\",\r\n\t\tmessage_cancel: \"Avbryt\",\r\n\r\n\t\t/* constraints */\r\n\t\tsection_constraint: \"Constraint\",\r\n\t\tconstraint_type: \"Constraint type\",\r\n\t\tconstraint_date: \"Constraint date\",\r\n\t\tasap: \"As Soon As Possible\",\r\n\t\talap: \"As Late As Possible\",\r\n\t\tsnet: \"Start No Earlier Than\",\r\n\t\tsnlt: \"Start No Later Than\",\r\n\t\tfnet: \"Finish No Earlier Than\",\r\n\t\tfnlt: \"Finish No Later Than\",\r\n\t\tmso: \"Must Start On\",\r\n\t\tmfo: \"Must Finish On\",\r\n\r\n\t\t/* resource control */\r\n\t\tresources_filter_placeholder: \"type to filter\",\r\n\t\tresources_filter_label: \"hide empty\",\r\n\r\n\t\t/* empty state screen */\r\n\t\tempty_state_text_link: \"Click here\",\r\n\t\tempty_state_text_description: \"to create your first task\"\r\n\t}\r\n};\r\n\r\nexport default locale;\r\n","const locale: IGanttLocale = {\r\n\tdate: {\r\n\t\tmonth_full: [\"Januari\", \"Februari\", \"Maart\", \"April\", \"Mei\", \"Juni\", \"Juli\", \"Augustus\", \"September\", \"Oktober\", \"November\", \"December\"],\r\n\t\tmonth_short: [\"Jan\", \"Feb\", \"mrt\", \"Apr\", \"Mei\", \"Jun\", \"Jul\", \"Aug\", \"Sep\", \"Okt\", \"Nov\", \"Dec\"],\r\n\t\tday_full: [\"Zondag\", \"Maandag\", \"Dinsdag\", \"Woensdag\", \"Donderdag\", \"Vrijdag\", \"Zaterdag\"],\r\n\t\tday_short: [\"Zo\", \"Ma\", \"Di\", \"Wo\", \"Do\", \"Vr\", \"Za\"]\r\n\t},\r\n\tlabels: {\r\n\t\tnew_task: \"Nieuwe taak\",\r\n\t\ticon_save: \"Opslaan\",\r\n\t\ticon_cancel: \"Annuleren\",\r\n\t\ticon_details: \"Details\",\r\n\t\ticon_edit: \"Bewerken\",\r\n\t\ticon_delete: \"Verwijderen\",\r\n\t\tconfirm_closing: \"\", // Your changes will be lost, are your sure ?\r\n\t\tconfirm_deleting: \"Item zal permanent worden verwijderd, doorgaan?\",\r\n\t\tsection_description: \"Beschrijving\",\r\n\t\tsection_time: \"Tijd periode\",\r\n\t\tsection_type: \"Type\",\r\n\t\t/* grid columns */\r\n\r\n\t\tcolumn_wbs: \"WBS\",\r\n\t\tcolumn_text: \"Taak omschrijving\",\r\n\t\tcolumn_start_date: \"Startdatum\",\r\n\t\tcolumn_duration: \"Duur\",\r\n\t\tcolumn_add: \"\",\r\n\r\n\t\t/* link confirmation */\r\n\t\tlink: \"Koppeling\",\r\n\t\tconfirm_link_deleting: \"zal worden verwijderd\",\r\n\t\tlink_start: \" (start)\",\r\n\t\tlink_end: \" (eind)\",\r\n\r\n\t\ttype_task: \"Task\",\r\n\t\ttype_project: \"Project\",\r\n\t\ttype_milestone: \"Milestone\",\r\n\r\n\r\n\t\tminutes: \"minuten\",\r\n\t\thours: \"uren\",\r\n\t\tdays: \"dagen\",\r\n\t\tweeks: \"weken\",\r\n\t\tmonths: \"maanden\",\r\n\t\tyears: \"jaren\",\r\n\r\n\t\t/* message popup */\r\n\t\tmessage_ok: \"OK\",\r\n\t\tmessage_cancel: \"Annuleren\",\r\n\r\n\t\t/* constraints */\r\n\t\tsection_constraint: \"Constraint\",\r\n\t\tconstraint_type: \"Constraint type\",\r\n\t\tconstraint_date: \"Constraint date\",\r\n\t\tasap: \"As Soon As Possible\",\r\n\t\talap: \"As Late As Possible\",\r\n\t\tsnet: \"Start No Earlier Than\",\r\n\t\tsnlt: \"Start No Later Than\",\r\n\t\tfnet: \"Finish No Earlier Than\",\r\n\t\tfnlt: \"Finish No Later Than\",\r\n\t\tmso: \"Must Start On\",\r\n\t\tmfo: \"Must Finish On\",\r\n\r\n\t\t/* resource control */\r\n\t\tresources_filter_placeholder: \"type to filter\",\r\n\t\tresources_filter_label: \"hide empty\",\r\n\r\n\t\t/* empty state screen */\r\n\t\tempty_state_text_link: \"Click here\",\r\n\t\tempty_state_text_description: \"to create your first task\"\r\n\t}\r\n};\r\n\r\nexport default locale;\r\n","const locale: IGanttLocale = {\r\n\tdate: {\r\n\t\tmonth_full: [\"Januar\", \"Februar\", \"Mars\", \"April\", \"Mai\", \"Juni\", \"Juli\", \"August\", \"September\", \"Oktober\", \"November\", \"Desember\"],\r\n\t\tmonth_short: [\"Jan\", \"Feb\", \"Mar\", \"Apr\", \"Mai\", \"Jun\", \"Jul\", \"Aug\", \"Sep\", \"Okt\", \"Nov\", \"Des\"],\r\n\t\tday_full: [\"Søndag\", \"Mandag\", \"Tirsdag\", \"Onsdag\", \"Torsdag\", \"Fredag\", \"Lørdag\"],\r\n\t\tday_short: [\"Søn\", \"Mon\", \"Tir\", \"Ons\", \"Tor\", \"Fre\", \"Lør\"]\r\n\t},\r\n\tlabels: {\r\n\t\tnew_task: \"Ny oppgave\",\r\n\t\ticon_save: \"Lagre\",\r\n\t\ticon_cancel: \"Avbryt\",\r\n\t\ticon_details: \"Detaljer\",\r\n\t\ticon_edit: \"Rediger\",\r\n\t\ticon_delete: \"Slett\",\r\n\t\tconfirm_closing: \"\", // Your changes will be lost, are your sure ?\r\n\t\tconfirm_deleting: \"Hendelsen vil bli slettet permanent. Er du sikker?\",\r\n\t\tsection_description: \"Beskrivelse\",\r\n\t\tsection_time: \"Tidsperiode\",\r\n\t\tsection_type: \"Type\",\r\n\t\t/* grid columns */\r\n\r\n\t\tcolumn_wbs: \"WBS\",\r\n\t\tcolumn_text: \"Task name\",\r\n\t\tcolumn_start_date: \"Start time\",\r\n\t\tcolumn_duration: \"Duration\",\r\n\t\tcolumn_add: \"\",\r\n\r\n\t\t/* link confirmation */\r\n\t\tlink: \"Link\",\r\n\t\tconfirm_link_deleting: \"will be deleted\",\r\n\t\tlink_start: \" (start)\",\r\n\t\tlink_end: \" (end)\",\r\n\r\n\t\ttype_task: \"Task\",\r\n\t\ttype_project: \"Project\",\r\n\t\ttype_milestone: \"Milestone\",\r\n\r\n\r\n\t\tminutes: \"Minutes\",\r\n\t\thours: \"Hours\",\r\n\t\tdays: \"Days\",\r\n\t\tweeks: \"Week\",\r\n\t\tmonths: \"Months\",\r\n\t\tyears: \"Years\",\r\n\r\n\t\t/* message popup */\r\n\t\tmessage_ok: \"OK\",\r\n\t\tmessage_cancel: \"Avbryt\",\r\n\r\n\t\t/* constraints */\r\n\t\tsection_constraint: \"Constraint\",\r\n\t\tconstraint_type: \"Constraint type\",\r\n\t\tconstraint_date: \"Constraint date\",\r\n\t\tasap: \"As Soon As Possible\",\r\n\t\talap: \"As Late As Possible\",\r\n\t\tsnet: \"Start No Earlier Than\",\r\n\t\tsnlt: \"Start No Later Than\",\r\n\t\tfnet: \"Finish No Earlier Than\",\r\n\t\tfnlt: \"Finish No Later Than\",\r\n\t\tmso: \"Must Start On\",\r\n\t\tmfo: \"Must Finish On\",\r\n\r\n\t\t/* resource control */\r\n\t\tresources_filter_placeholder: \"type to filter\",\r\n\t\tresources_filter_label: \"hide empty\",\r\n\r\n\t\t/* empty state screen */\r\n\t\tempty_state_text_link: \"Click here\",\r\n\t\tempty_state_text_description: \"to create your first task\"\r\n\t}\r\n};\r\n\r\nexport default locale;\r\n","export default class LocaleManager{\r\n\tprivate _locales:{[key:string]: IGanttLocale };\r\n\r\n\tconstructor(config: {[key:string]: IGanttLocale }){\r\n\t\tthis._locales = {};\r\n\t\tfor(const i in config){\r\n\t\t\tthis._locales[i] = config[i];\r\n\t\t}\r\n\t}\r\n\r\n\taddLocale = (name: string, locale: IGanttLocale) => {\r\n\t\tthis._locales[name] = locale;\r\n\t}\r\n\r\n\tgetLocale = (name: string): IGanttLocale => {\r\n\t\treturn this._locales[name];\r\n\t}\r\n}","/*\r\n\tTranslated by cjkim@dbvalley.com\r\n*/\r\n\r\nconst locale: IGanttLocale = {\r\n\tdate: {\r\n\t\tmonth_full: [\"1월\", \"2월\", \"3월\", \"4월\", \"5월\", \"6월\", \"7월\", \"8월\", \"9월\", \"10월\", \"11월\", \"12월\"],\r\n\t\tmonth_short: [\"1월\", \"2월\", \"3월\", \"4월\", \"5월\", \"6월\", \"7월\", \"8월\", \"9월\", \"10월\", \"11월\", \"12월\"],\r\n\t\tday_full: [\"일요일\", \"월요일\", \"화요일\", \"수요일\", \"목요일\", \"금요일\", \"토요일\"],\r\n\t\tday_short: [\"일\", \"월\", \"화\", \"수\", \"목\", \"금\", \"토\"]\r\n\t},\r\n\tlabels: {\r\n\t\tnew_task: \"이름없는 ìž‘ì—…\",\r\n\t\ticon_save: \"저장\",\r\n\t\ticon_cancel: \"취소\",\r\n\t\ticon_details: \"세부 ì‚¬í•­\",\r\n\t\ticon_edit: \"수정\",\r\n\t\ticon_delete: \"삭제\",\r\n\t\tconfirm_closing: \"\",\r\n\t\tconfirm_deleting: \"작업을 ì‚­ì œí•˜ì‹œê² ìŠµë‹ˆê¹Œ?\",\r\n\t\tsection_description: \"설명\",\r\n\t\tsection_time: \"기간\",\r\n\t\tsection_type: \"Type\",\r\n\t\tcolumn_wbs: \"WBS\",\r\n\t\tcolumn_text: \"작업명\",\r\n\t\tcolumn_start_date: \"시작일\",\r\n\t\tcolumn_duration: \"기간\",\r\n\t\tcolumn_add: \"\",\r\n\t\tlink: \"전제\",\r\n\t\tconfirm_link_deleting: \"삭제 í•˜ì‹œê² ìŠµë‹ˆê¹Œ?\",\r\n\t\tlink_start: \" (start)\",\r\n\t\tlink_end: \" (end)\",\r\n\t\ttype_task: \"작업\",\r\n\t\ttype_project: \"프로젝트\",\r\n\t\ttype_milestone: \"마일스톤\",\r\n\t\tminutes: \"분\",\r\n\t\thours: \"시간\",\r\n\t\tdays: \"일\",\r\n\t\tweeks: \"주\",\r\n\t\tmonths: \"달\",\r\n\t\tyears: \"년\",\r\n\r\n\t\t/* message popup */\r\n\t\tmessage_ok: \"OK\",\r\n\t\tmessage_cancel: \"취소\",\r\n\r\n\t\t/* constraints */\r\n\t\tsection_constraint: \"Constraint\",\r\n\t\tconstraint_type: \"Constraint type\",\r\n\t\tconstraint_date: \"Constraint date\",\r\n\t\tasap: \"As Soon As Possible\",\r\n\t\talap: \"As Late As Possible\",\r\n\t\tsnet: \"Start No Earlier Than\",\r\n\t\tsnlt: \"Start No Later Than\",\r\n\t\tfnet: \"Finish No Earlier Than\",\r\n\t\tfnlt: \"Finish No Later Than\",\r\n\t\tmso: \"Must Start On\",\r\n\t\tmfo: \"Must Finish On\",\r\n\r\n\t\t/* resource control */\r\n\t\tresources_filter_placeholder: \"type to filter\",\r\n\t\tresources_filter_label: \"hide empty\",\r\n\r\n\t\t/* empty state screen */\r\n\t\tempty_state_text_link: \"Click here\",\r\n\t\tempty_state_text_description: \"to create your first task\"\r\n\t}\r\n};\r\n\r\nexport default locale;\r\n","/*\r\n Translation by Genexus Japan Inc.\r\n */\r\n\r\nconst locale: IGanttLocale = {\r\n\tdate: {\r\n\t\tmonth_full: [\"1月\", \"2月\", \"3月\", \"4月\", \"5月\", \"6月\", \"7月\", \"8月\", \"9月\", \"10月\", \"11月\", \"12月\"],\r\n\t\tmonth_short: [\"1月\", \"2月\", \"3月\", \"4月\", \"5月\", \"6月\", \"7月\", \"8月\", \"9月\", \"10月\", \"11月\", \"12月\"],\r\n\t\tday_full: [\"日曜日\", \"月曜日\", \"火曜日\", \"水曜日\", \"木曜日\", \"金曜日\", \"土曜日\"],\r\n\t\tday_short: [\"日\", \"月\", \"火\", \"æ°´\", \"木\", \"金\", \"土\"]\r\n\t},\r\n\tlabels: {\r\n\t\tnew_task: \"新しい仕事\",\r\n\t\ticon_save: \"保存\",\r\n\t\ticon_cancel: \"キャンセル\",\r\n\t\ticon_details: \"詳細\",\r\n\t\ticon_edit: \"編集\",\r\n\t\ticon_delete: \"削除\",\r\n\t\tconfirm_closing: \"\", // å¤‰æ›´ãŒå–り消されます、宜しいですか?\r\n\t\tconfirm_deleting: \"イベント完全に削除されます、宜しいですか?\",\r\n\t\tsection_description: \"デスクリプション\",\r\n\t\tsection_time: \"期間\",\r\n\t\tsection_type: \"Type\",\r\n\t\t/* grid columns */\r\n\r\n\t\tcolumn_wbs: \"WBS\",\r\n\t\tcolumn_text: \"Task name\",\r\n\t\tcolumn_start_date: \"Start time\",\r\n\t\tcolumn_duration: \"Duration\",\r\n\t\tcolumn_add: \"\",\r\n\r\n\t\t/* link confirmation */\r\n\t\tlink: \"Link\",\r\n\t\tconfirm_link_deleting: \"will be deleted\",\r\n\t\tlink_start: \" (start)\",\r\n\t\tlink_end: \" (end)\",\r\n\r\n\t\ttype_task: \"Task\",\r\n\t\ttype_project: \"Project\",\r\n\t\ttype_milestone: \"Milestone\",\r\n\r\n\r\n\t\tminutes: \"Minutes\",\r\n\t\thours: \"Hours\",\r\n\t\tdays: \"Days\",\r\n\t\tweeks: \"Week\",\r\n\t\tmonths: \"Months\",\r\n\t\tyears: \"Years\",\r\n\r\n\t\t/* message popup */\r\n\t\tmessage_ok: \"OK\",\r\n\t\tmessage_cancel: \"キャンセル\",\r\n\r\n\t\t/* constraints */\r\n\t\tsection_constraint: \"Constraint\",\r\n\t\tconstraint_type: \"Constraint type\",\r\n\t\tconstraint_date: \"Constraint date\",\r\n\t\tasap: \"As Soon As Possible\",\r\n\t\talap: \"As Late As Possible\",\r\n\t\tsnet: \"Start No Earlier Than\",\r\n\t\tsnlt: \"Start No Later Than\",\r\n\t\tfnet: \"Finish No Earlier Than\",\r\n\t\tfnlt: \"Finish No Later Than\",\r\n\t\tmso: \"Must Start On\",\r\n\t\tmfo: \"Must Finish On\",\r\n\r\n\t\t/* resource control */\r\n\t\tresources_filter_placeholder: \"type to filter\",\r\n\t\tresources_filter_label: \"hide empty\",\r\n\r\n\t\t/* empty state screen */\r\n\t\tempty_state_text_link: \"Click here\",\r\n\t\tempty_state_text_description: \"to create your first task\"\r\n\t}\r\n};\r\n\r\nexport default locale;\r\n","/*\r\n Update 29/12/2015:\r\n New labels translation by ARCANGELI CLAUDIO\r\n\r\n */\r\n\r\nconst locale: IGanttLocale = {\r\n\tdate: {\r\n\t\tmonth_full: [\"Gennaio\", \"Febbraio\", \"Marzo\", \"Aprile\", \"Maggio\", \"Giugno\", \"Luglio\", \"Agosto\", \"Settembre\", \"Ottobre\", \"Novembre\", \"Dicembre\"],\r\n\t\tmonth_short: [\"Gen\", \"Feb\", \"Mar\", \"Apr\", \"Mag\", \"Giu\", \"Lug\", \"Ago\", \"Set\", \"Ott\", \"Nov\", \"Dic\"],\r\n\t\tday_full: [\"Domenica\", \"Lunedì\", \"Martedì\", \"Mercoledì\", \"Giovedì\", \"Venerdì\", \"Sabato\"],\r\n\t\tday_short: [\"Dom\", \"Lun\", \"Mar\", \"Mer\", \"Gio\", \"Ven\", \"Sab\"]\r\n\t},\r\n\tlabels: {\r\n\t\tnew_task: \"Nuovo compito\",\r\n\t\ticon_save: \"Salva\",\r\n\t\ticon_cancel: \"Chiudi\",\r\n\t\ticon_details: \"Dettagli\",\r\n\t\ticon_edit: \"Modifica\",\r\n\t\ticon_delete: \"Elimina\",\r\n\t\tconfirm_closing: \"\",// \"Sei sicuro di confermare la chiusura?\",\r\n\t\tconfirm_deleting: \"Sei sicuro di confermare l'eliminazione?\",\r\n\t\tsection_description: \"Descrizione\",\r\n\t\tsection_time: \"Periodo di tempo\",\r\n\t\tsection_type: \"Tipo\",\r\n\t\t/* grid columns */\r\n\r\n\t\tcolumn_wbs: \"WBS\",\r\n\t\tcolumn_text: \"Nome Attività\",\r\n\t\tcolumn_start_date: \"Inizio\",\r\n\t\tcolumn_duration: \"Durata\",\r\n\t\tcolumn_add: \"\",\r\n\r\n\t\t/* link confirmation */\r\n\t\tlink: \"Link\",\r\n\t\tconfirm_link_deleting: \"sarà eliminato\",\r\n\t\tlink_start: \" (inizio)\",\r\n\t\tlink_end: \" (fine)\",\r\n\r\n\t\ttype_task: \"Task\",\r\n\t\ttype_project: \"Project\",\r\n\t\ttype_milestone: \"Milestone\",\r\n\r\n\r\n\t\tminutes: \"Minuti\",\r\n\t\thours: \"Ore\",\r\n\t\tdays: \"Giorni\",\r\n\t\tweeks: \"Settimane\",\r\n\t\tmonths: \"Mesi\",\r\n\t\tyears: \"Anni\",\r\n\r\n\t\t/* message popup */\r\n\t\tmessage_ok: \"OK\",\r\n\t\tmessage_cancel: \"Chiudi\",\r\n\r\n\t\t/* constraints */\r\n\t\tsection_constraint: \"Constraint\",\r\n\t\tconstraint_type: \"Constraint type\",\r\n\t\tconstraint_date: \"Constraint date\",\r\n\t\tasap: \"As Soon As Possible\",\r\n\t\talap: \"As Late As Possible\",\r\n\t\tsnet: \"Start No Earlier Than\",\r\n\t\tsnlt: \"Start No Later Than\",\r\n\t\tfnet: \"Finish No Earlier Than\",\r\n\t\tfnlt: \"Finish No Later Than\",\r\n\t\tmso: \"Must Start On\",\r\n\t\tmfo: \"Must Finish On\",\r\n\r\n\t\t/* resource control */\r\n\t\tresources_filter_placeholder: \"type to filter\",\r\n\t\tresources_filter_label: \"hide empty\",\r\n\r\n\t\t/* empty state screen */\r\n\t\tempty_state_text_link: \"Click here\",\r\n\t\tempty_state_text_description: \"to create your first task\"\r\n\t}\r\n};\r\n\r\nexport default locale;\r\n","const locale: IGanttLocale = {\r\n\tdate: {\r\n\t\tmonth_full: [\"Januari\", \"Februari\", \"Maret\", \"April\", \"Mei\", \"Juni\", \"Juli\", \"Agustus\", \"September\", \"Oktober\", \"November\", \"Desember\"],\r\n\t\tmonth_short: [\"Jan\", \"Feb\", \"Mar\", \"Apr\", \"Mei\", \"Jun\", \"Jul\", \"Ags\", \"Sep\", \"Okt\", \"Nov\", \"Des\"],\r\n\t\tday_full: [\"Minggu\", \"Senin\", \"Selasa\", \"Rabu\", \"Kamis\", \"Jumat\", \"Sabtu\"],\r\n\t\tday_short: [\"Ming\", \"Sen\", \"Sel\", \"Rab\", \"Kam\", \"Jum\", \"Sab\"]\r\n\t},\r\n\tlabels: {\r\n\t\tnew_task: \"Tugas baru\",\r\n\t\ticon_save: \"Simpan\",\r\n\t\ticon_cancel: \"Batal\",\r\n\t\ticon_details: \"Detail\",\r\n\t\ticon_edit: \"Edit\",\r\n\t\ticon_delete: \"Hapus\",\r\n\t\tconfirm_closing: \"\", /* Perubahan tidak akan disimpan ? */\r\n\t\tconfirm_deleting: \"Acara akan dihapus\",\r\n\t\tsection_description: \"Keterangan\",\r\n\t\tsection_time: \"Periode\",\r\n\t\tsection_type: \"Type\",\r\n\t\t/* grid columns */\r\n\r\n\t\tcolumn_wbs: \"WBS\",\r\n\t\tcolumn_text: \"Task name\",\r\n\t\tcolumn_start_date: \"Start time\",\r\n\t\tcolumn_duration: \"Duration\",\r\n\t\tcolumn_add: \"\",\r\n\r\n\t\t/* link confirmation */\r\n\t\tlink: \"Link\",\r\n\t\tconfirm_link_deleting: \"will be deleted\",\r\n\t\tlink_start: \" (start)\",\r\n\t\tlink_end: \" (end)\",\r\n\r\n\t\ttype_task: \"Task\",\r\n\t\ttype_project: \"Project\",\r\n\t\ttype_milestone: \"Milestone\",\r\n\r\n\r\n\t\tminutes: \"Minutes\",\r\n\t\thours: \"Hours\",\r\n\t\tdays: \"Days\",\r\n\t\tweeks: \"Week\",\r\n\t\tmonths: \"Months\",\r\n\t\tyears: \"Years\",\r\n\r\n\t\t/* message popup */\r\n\t\tmessage_ok: \"OK\",\r\n\t\tmessage_cancel: \"Batal\",\r\n\r\n\t\t/* constraints */\r\n\t\tsection_constraint: \"Constraint\",\r\n\t\tconstraint_type: \"Constraint type\",\r\n\t\tconstraint_date: \"Constraint date\",\r\n\t\tasap: \"As Soon As Possible\",\r\n\t\talap: \"As Late As Possible\",\r\n\t\tsnet: \"Start No Earlier Than\",\r\n\t\tsnlt: \"Start No Later Than\",\r\n\t\tfnet: \"Finish No Earlier Than\",\r\n\t\tfnlt: \"Finish No Later Than\",\r\n\t\tmso: \"Must Start On\",\r\n\t\tmfo: \"Must Finish On\",\r\n\r\n\t\t/* resource control */\r\n\t\tresources_filter_placeholder: \"type to filter\",\r\n\t\tresources_filter_label: \"hide empty\",\r\n\r\n\t\t/* empty state screen */\r\n\t\tempty_state_text_link: \"Click here\",\r\n\t\tempty_state_text_description: \"to create your first task\"\r\n\t}\r\n};\r\n\r\nexport default locale;\r\n","const locale: IGanttLocale = {\r\n\tdate: {\r\n\t\tmonth_full: [\"Január\", \"Február\", \"Március\", \"Április\", \"Május\", \"Június\", \"Július\", \"Augusztus\", \"Szeptember\", \"Október\", \"November\", \"December\"],\r\n\t\tmonth_short: [\"Jan\", \"Feb\", \"Már\", \"Ápr\", \"Máj\", \"Jún\", \"Júl\", \"Aug\", \"Sep\", \"Okt\", \"Nov\", \"Dec\"],\r\n\t\tday_full: [\"Vasárnap\", \"Hétfõ\", \"Kedd\", \"Szerda\", \"Csütörtök\", \"Péntek\", \"szombat\"],\r\n\t\tday_short: [\"Va\", \"Hé\", \"Ke\", \"Sze\", \"Csü\", \"Pé\", \"Szo\"]\r\n\t},\r\n\tlabels: {\r\n\t\tnew_task: \"Új feladat\",\r\n\t\ticon_save: \"Mentés\",\r\n\t\ticon_cancel: \"Mégse\",\r\n\t\ticon_details: \"Részletek\",\r\n\t\ticon_edit: \"Szerkesztés\",\r\n\t\ticon_delete: \"Törlés\",\r\n\t\tconfirm_closing: \"\", // A változások elvesznek, biztosan folytatja? \"\r\n\t\tconfirm_deleting: \"Az esemény törölve lesz, biztosan folytatja?\",\r\n\t\tsection_description: \"Leírás\",\r\n\t\tsection_time: \"Idõszak\",\r\n\t\tsection_type: \"Type\",\r\n\t\t/* grid columns */\r\n\r\n\t\tcolumn_wbs: \"WBS\",\r\n\t\tcolumn_text: \"Task name\",\r\n\t\tcolumn_start_date: \"Start time\",\r\n\t\tcolumn_duration: \"Duration\",\r\n\t\tcolumn_add: \"\",\r\n\r\n\t\t/* link confirmation */\r\n\t\tlink: \"Link\",\r\n\t\tconfirm_link_deleting: \"will be deleted\",\r\n\t\tlink_start: \" (start)\",\r\n\t\tlink_end: \" (end)\",\r\n\r\n\t\ttype_task: \"Task\",\r\n\t\ttype_project: \"Project\",\r\n\t\ttype_milestone: \"Milestone\",\r\n\r\n\r\n\t\tminutes: \"Minutes\",\r\n\t\thours: \"Hours\",\r\n\t\tdays: \"Days\",\r\n\t\tweeks: \"Week\",\r\n\t\tmonths: \"Months\",\r\n\t\tyears: \"Years\",\r\n\r\n\t\t/* message popup */\r\n\t\tmessage_ok: \"OK\",\r\n\t\tmessage_cancel: \"Mégse\",\r\n\r\n\t\t/* constraints */\r\n\t\tsection_constraint: \"Constraint\",\r\n\t\tconstraint_type: \"Constraint type\",\r\n\t\tconstraint_date: \"Constraint date\",\r\n\t\tasap: \"As Soon As Possible\",\r\n\t\talap: \"As Late As Possible\",\r\n\t\tsnet: \"Start No Earlier Than\",\r\n\t\tsnlt: \"Start No Later Than\",\r\n\t\tfnet: \"Finish No Earlier Than\",\r\n\t\tfnlt: \"Finish No Later Than\",\r\n\t\tmso: \"Must Start On\",\r\n\t\tmfo: \"Must Finish On\",\r\n\r\n\t\t/* resource control */\r\n\t\tresources_filter_placeholder: \"type to filter\",\r\n\t\tresources_filter_label: \"hide empty\",\r\n\r\n\t\t/* empty state screen */\r\n\t\tempty_state_text_link: \"Click here\",\r\n\t\tempty_state_text_description: \"to create your first task\"\r\n\t}\r\n};\r\n\r\nexport default locale;\r\n","/*\r\n  Translation by Davor\r\n http://docs.dhtmlx.com/gantt/desktop__localization.html#comment-2569116291\r\n */\r\n\r\nconst locale: IGanttLocale = {\r\n\tdate: {\r\n\t\tmonth_full: [\"Siječanj\", \"Veljača\", \"Ožujak\", \"Travanj\", \"Svibanj\", \"Lipanj\", \"Srpanj\", \"Kolovoz\", \"Rujan\", \"Listopad\", \"Studeni\", \"Prosinac\"],\r\n\t\tmonth_short: [\"Sij\", \"Velj\", \"Ožu\", \"Tra\", \"Svi\", \"Lip\", \"Srp\", \"Kol\", \"Ruj\", \"Lis\", \"Stu\", \"Pro\"],\r\n\t\tday_full: [\"Nedjelja\", \"Ponedjeljak\", \"Utorak\", \"Srijeda\", \"Četvrtak\", \"Petak\", \"Subota\"],\r\n\t\tday_short: [\"Ned\", \"Pon\", \"Uto\", \"Sri\", \"Čet\", \"Pet\", \"Sub\"]\r\n\t},\r\n\tlabels: {\r\n\t\tnew_task: \"Novi Zadatak\",\r\n\t\ticon_save: \"Spremi\",\r\n\t\ticon_cancel: \"Odustani\",\r\n\t\ticon_details: \"Detalji\",\r\n\t\ticon_edit: \"Izmjeni\",\r\n\t\ticon_delete: \"ObriÅ¡i\",\r\n\t\tconfirm_closing: \"\",\r\n\t\tconfirm_deleting: \"Zadatak Ä‡e biti trajno izbrisan, jeste li sigurni?\",\r\n\t\tsection_description: \"Opis\",\r\n\t\tsection_time: \"Vremenski Period\",\r\n\t\tsection_type: \"Tip\",\r\n\r\n\t\t/* grid columns */\r\n\t\tcolumn_wbs: \"WBS\",\r\n\t\tcolumn_text: \"Naziv Zadatka\",\r\n\t\tcolumn_start_date: \"Početno Vrijeme\",\r\n\t\tcolumn_duration: \"Trajanje\",\r\n\t\tcolumn_add: \"\",\r\n\r\n\t\t/* link confirmation */\r\n\t\tlink: \"Poveznica\",\r\n\t\tconfirm_link_deleting: \"će biti izbrisan\",\r\n\t\tlink_start: \" (početak)\",\r\n\t\tlink_end: \" (kraj)\",\r\n\r\n\t\ttype_task: \"Zadatak\",\r\n\t\ttype_project: \"Projekt\",\r\n\t\ttype_milestone: \"Milestone\",\r\n\r\n\t\tminutes: \"Minute\",\r\n\t\thours: \"Sati\",\r\n\t\tdays: \"Dani\",\r\n\t\tweeks: \"Tjedni\",\r\n\t\tmonths: \"Mjeseci\",\r\n\t\tyears: \"Godine\",\r\n\r\n\t\t/* message popup */\r\n\t\tmessage_ok: \"OK\",\r\n\t\tmessage_cancel: \"Odustani\",\r\n\r\n\t\t/* constraints */\r\n\t\tsection_constraint: \"Constraint\",\r\n\t\tconstraint_type: \"Constraint type\",\r\n\t\tconstraint_date: \"Constraint date\",\r\n\t\tasap: \"As Soon As Possible\",\r\n\t\talap: \"As Late As Possible\",\r\n\t\tsnet: \"Start No Earlier Than\",\r\n\t\tsnlt: \"Start No Later Than\",\r\n\t\tfnet: \"Finish No Earlier Than\",\r\n\t\tfnlt: \"Finish No Later Than\",\r\n\t\tmso: \"Must Start On\",\r\n\t\tmfo: \"Must Finish On\",\r\n\r\n\t\t/* resource control */\r\n\t\tresources_filter_placeholder: \"type to filter\",\r\n\t\tresources_filter_label: \"hide empty\",\r\n\r\n\t\t/* empty state screen */\r\n\t\tempty_state_text_link: \"Click here\",\r\n\t\tempty_state_text_description: \"to create your first task\"\r\n\t}\r\n};\r\n\r\nexport default locale;\r\n","const locale: IGanttLocale = {\r\n\tdate: {\r\n\t\tmonth_full: [\"ינואר\", \"פברואר\", \"מרץ\", \"אפריל\", \"מאי\", \"יוני\", \"יולי\", \"אוגוסט\", \"ספטמבר\", \"אוקטובר\", \"נובמבר\", \"דצמבר\"],\r\n\t\tmonth_short: [\"ינו\", \"פבר\", \"מרץ\", \"אפר\", \"מאי\", \"יונ\", \"יול\", \"אוג\", \"ספט\", \"אוק\", \"נוב\", \"דצמ\"],\r\n\t\tday_full: [\"ראשון\", \"שני\", \"שלישי\", \"רביעי\", \"חמישי\", \"שישי\", \"שבת\"],\r\n\t\tday_short: [\"א\", \"ב\", \"ג\", \"ד\", \"ה\", \"ו\", \"ש\"]\r\n\t},\r\n\tlabels: {\r\n\t\tnew_task: \"משימה ×—דש\",\r\n\t\ticon_save: \"שמור\",\r\n\t\ticon_cancel: \"בטל\",\r\n\t\ticon_details: \"פרטים\",\r\n\t\ticon_edit: \"ערוך\",\r\n\t\ticon_delete: \"מחק\",\r\n\t\tconfirm_closing: \"\", // Your changes will be lost, are your sure ?\r\n\t\tconfirm_deleting: \"ארוע ×™×ž×—×§ ×¡×•פית.להמשיך?\",\r\n\t\tsection_description: \"הסבר\",\r\n\t\tsection_time: \"תקופה\",\r\n\t\tsection_type: \"Type\",\r\n\t\t/* grid columns */\r\n\r\n\t\tcolumn_wbs: \"WBS\",\r\n\t\tcolumn_text: \"Task name\",\r\n\t\tcolumn_start_date: \"Start time\",\r\n\t\tcolumn_duration: \"Duration\",\r\n\t\tcolumn_add: \"\",\r\n\r\n\t\t/* link confirmation */\r\n\t\tlink: \"Link\",\r\n\t\tconfirm_link_deleting: \"will be deleted\",\r\n\t\tlink_start: \" (start)\",\r\n\t\tlink_end: \" (end)\",\r\n\r\n\t\ttype_task: \"Task\",\r\n\t\ttype_project: \"Project\",\r\n\t\ttype_milestone: \"Milestone\",\r\n\r\n\r\n\t\tminutes: \"Minutes\",\r\n\t\thours: \"Hours\",\r\n\t\tdays: \"Days\",\r\n\t\tweeks: \"Week\",\r\n\t\tmonths: \"Months\",\r\n\t\tyears: \"Years\",\r\n\r\n\t\t/* message popup */\r\n\t\tmessage_ok: \"OK\",\r\n\t\tmessage_cancel: \"בטל\",\r\n\r\n\t\t/* constraints */\r\n\t\tsection_constraint: \"Constraint\",\r\n\t\tconstraint_type: \"Constraint type\",\r\n\t\tconstraint_date: \"Constraint date\",\r\n\t\tasap: \"As Soon As Possible\",\r\n\t\talap: \"As Late As Possible\",\r\n\t\tsnet: \"Start No Earlier Than\",\r\n\t\tsnlt: \"Start No Later Than\",\r\n\t\tfnet: \"Finish No Earlier Than\",\r\n\t\tfnlt: \"Finish No Later Than\",\r\n\t\tmso: \"Must Start On\",\r\n\t\tmfo: \"Must Finish On\",\r\n\r\n\t\t/* resource control */\r\n\t\tresources_filter_placeholder: \"type to filter\",\r\n\t\tresources_filter_label: \"hide empty\",\r\n\r\n\t\t/* empty state screen */\r\n\t\tempty_state_text_link: \"Click here\",\r\n\t\tempty_state_text_description: \"to create your first task\"\r\n\t}\r\n};\r\n\r\nexport default locale;\r\n","const locale: IGanttLocale = {\r\n\tdate: {\r\n\t\tmonth_full: [\"Janvier\", \"Février\", \"Mars\", \"Avril\", \"Mai\", \"Juin\", \"Juillet\", \"Août\", \"Septembre\", \"Octobre\", \"Novembre\", \"Décembre\"],\r\n\t\tmonth_short: [\"Jan\", \"Fév\", \"Mar\", \"Avr\", \"Mai\", \"Juin\", \"Juil\", \"Aoû\", \"Sep\", \"Oct\", \"Nov\", \"Déc\"],\r\n\t\tday_full: [\"Dimanche\", \"Lundi\", \"Mardi\", \"Mercredi\", \"Jeudi\", \"Vendredi\", \"Samedi\"],\r\n\t\tday_short: [\"Dim\", \"Lun\", \"Mar\", \"Mer\", \"Jeu\", \"Ven\", \"Sam\"]\r\n\t},\r\n\tlabels: {\r\n\t\tnew_task: \"Nouvelle tâche\",\r\n\t\ticon_save: \"Enregistrer\",\r\n\t\ticon_cancel: \"Annuler\",\r\n\t\ticon_details: \"Détails\",\r\n\t\ticon_edit: \"Modifier\",\r\n\t\ticon_delete: \"Effacer\",\r\n\t\tconfirm_closing: \"\",// Vos modifications seront perdus, Ãªtes-vous sûr ?\r\n\t\tconfirm_deleting: \"L'événement sera effacé sans appel, Ãªtes-vous sûr ?\",\r\n\r\n\t\tsection_description: \"Description\",\r\n\t\tsection_time: \"Période\",\r\n\t\tsection_type: \"Type\",\r\n\r\n\t\t/* grid columns */\r\n\r\n\t\tcolumn_wbs: \"OTP\",\r\n\t\tcolumn_text: \"Nom de la tâche\",\r\n\t\tcolumn_start_date: \"Date initiale\",\r\n\t\tcolumn_duration: \"Durée\",\r\n\t\tcolumn_add: \"\",\r\n\r\n\r\n\t\t/* link confirmation */\r\n\t\tlink: \"Le lien\",\r\n\t\tconfirm_link_deleting: \"sera supprimé\",\r\n\t\tlink_start: \"(début)\",\r\n\t\tlink_end: \"(fin)\",\r\n\r\n\t\ttype_task: \"Task\",\r\n\t\ttype_project: \"Project\",\r\n\t\ttype_milestone: \"Milestone\",\r\n\r\n\r\n\t\tminutes: \"Minutes\",\r\n\t\thours: \"Heures\",\r\n\t\tdays: \"Jours\",\r\n\t\tweeks: \"Semaines\",\r\n\t\tmonths: \"Mois\",\r\n\t\tyears: \"Années\",\r\n\r\n\t\t/* message popup */\r\n\t\tmessage_ok: \"OK\",\r\n\t\tmessage_cancel: \"Annuler\",\r\n\r\n\t\t/* constraints */\r\n\t\tsection_constraint: \"Constraint\",\r\n\t\tconstraint_type: \"Constraint type\",\r\n\t\tconstraint_date: \"Constraint date\",\r\n\t\tasap: \"As Soon As Possible\",\r\n\t\talap: \"As Late As Possible\",\r\n\t\tsnet: \"Start No Earlier Than\",\r\n\t\tsnlt: \"Start No Later Than\",\r\n\t\tfnet: \"Finish No Earlier Than\",\r\n\t\tfnlt: \"Finish No Later Than\",\r\n\t\tmso: \"Must Start On\",\r\n\t\tmfo: \"Must Finish On\",\r\n\r\n\t\t/* resource control */\r\n\t\tresources_filter_placeholder: \"type to filter\",\r\n\t\tresources_filter_label: \"hide empty\",\r\n\r\n\t\t/* empty state screen */\r\n\t\tempty_state_text_link: \"Click here\",\r\n\t\tempty_state_text_description: \"to create your first task\"\r\n\t}\r\n};\r\n\r\nexport default locale;\r\n","const locale: IGanttLocale = {\r\n\tdate: {\r\n\t\tmonth_full: [\"Tammikuu\", \"Helmikuu\", \"Maaliskuu\", \"Huhtikuu\", \"Toukokuu\", \"Kes&auml;kuu\", \"Hein&auml;kuu\", \"Elokuu\", \"Syyskuu\", \"Lokakuu\", \"Marraskuu\", \"Joulukuu\"],\r\n\t\tmonth_short: [\"Tam\", \"Hel\", \"Maa\", \"Huh\", \"Tou\", \"Kes\", \"Hei\", \"Elo\", \"Syy\", \"Lok\", \"Mar\", \"Jou\"],\r\n\t\tday_full: [\"Sunnuntai\", \"Maanantai\", \"Tiistai\", \"Keskiviikko\", \"Torstai\", \"Perjantai\", \"Lauantai\"],\r\n\t\tday_short: [\"Su\", \"Ma\", \"Ti\", \"Ke\", \"To\", \"Pe\", \"La\"]\r\n\t},\r\n\tlabels: {\r\n\t\tnew_task: \"Uusi tehtävä\",\r\n\t\ticon_save: \"Tallenna\",\r\n\t\ticon_cancel: \"Peru\",\r\n\t\ticon_details: \"Tiedot\",\r\n\t\ticon_edit: \"Muokkaa\",\r\n\t\ticon_delete: \"Poista\",\r\n\t\tconfirm_closing: \"\", // Your changes will be lost, are your sure ?\r\n\t\tconfirm_deleting: \"Haluatko varmasti poistaa tapahtuman?\",\r\n\t\tsection_description: \"Kuvaus\",\r\n\t\tsection_time: \"Aikajakso\",\r\n\t\tsection_type: \"Type\",\r\n\t\t/* grid columns */\r\n\r\n\t\tcolumn_wbs: \"WBS\",\r\n\t\tcolumn_text: \"Task name\",\r\n\t\tcolumn_start_date: \"Start time\",\r\n\t\tcolumn_duration: \"Duration\",\r\n\t\tcolumn_add: \"\",\r\n\r\n\t\t/* link confirmation */\r\n\t\tlink: \"Link\",\r\n\t\tconfirm_link_deleting: \"will be deleted\",\r\n\t\tlink_start: \" (start)\",\r\n\t\tlink_end: \" (end)\",\r\n\r\n\t\ttype_task: \"Task\",\r\n\t\ttype_project: \"Project\",\r\n\t\ttype_milestone: \"Milestone\",\r\n\r\n\r\n\t\tminutes: \"Minutes\",\r\n\t\thours: \"Hours\",\r\n\t\tdays: \"Days\",\r\n\t\tweeks: \"Week\",\r\n\t\tmonths: \"Months\",\r\n\t\tyears: \"Years\",\r\n\r\n\t\t/* message popup */\r\n\t\tmessage_ok: \"OK\",\r\n\t\tmessage_cancel: \"Peru\",\r\n\r\n\t\t/* constraints */\r\n\t\tsection_constraint: \"Constraint\",\r\n\t\tconstraint_type: \"Constraint type\",\r\n\t\tconstraint_date: \"Constraint date\",\r\n\t\tasap: \"As Soon As Possible\",\r\n\t\talap: \"As Late As Possible\",\r\n\t\tsnet: \"Start No Earlier Than\",\r\n\t\tsnlt: \"Start No Later Than\",\r\n\t\tfnet: \"Finish No Earlier Than\",\r\n\t\tfnlt: \"Finish No Later Than\",\r\n\t\tmso: \"Must Start On\",\r\n\t\tmfo: \"Must Finish On\",\r\n\r\n\t\t/* resource control */\r\n\t\tresources_filter_placeholder: \"type to filter\",\r\n\t\tresources_filter_label: \"hide empty\",\r\n\r\n\t\t/* empty state screen */\r\n\t\tempty_state_text_link: \"Click here\",\r\n\t\tempty_state_text_description: \"to create your first task\"\r\n\t}\r\n};\r\n\r\nexport default locale;\r\n","/*\r\n dhtmlxGantt Persian (Farsi, fa_IR) locale by Mohammad Shokri http://slashsbin.com/\r\n */\r\n\r\nconst locale: IGanttLocale = {\r\n\tdate: {\r\n\t\tmonth_full: [\r\n\t\t\t\"ژانویه\",\r\n\t\t\t\"فوریه\",\r\n\t\t\t\"مارس\",\r\n\t\t\t\"آوریل\",\r\n\t\t\t\"مه\",\r\n\t\t\t\"ژوئن\",\r\n\t\t\t\"ژوئیه\",\r\n\t\t\t\"اوت\",\r\n\t\t\t\"سپتامبر\",\r\n\t\t\t\"اکتبر\",\r\n\t\t\t\"نوامبر\",\r\n\t\t\t\"دسامبر\"\r\n\t\t],\r\n\t\tmonth_short: [\"1\", \"2\", \"3\", \"4\", \"5\", \"6\", \"7\", \"8\", \"9\", \"10\", \"11\", \"12\"],\r\n\t\tday_full: [\r\n\t\t\t\"يکشنبه\",\r\n\t\t\t\"دوشنبه\",\r\n\t\t\t\"سه‌شنبه\",\r\n\t\t\t\"چهارشنبه\",\r\n\t\t\t\"پنجشنبه\",\r\n\t\t\t\"جمعه\",\r\n\t\t\t\"شنبه\"\r\n\t\t],\r\n\t\tday_short: [\r\n\t\t\t\"ی\",\r\n\t\t\t\"د\",\r\n\t\t\t\"س\",\r\n\t\t\t\"چ\",\r\n\t\t\t\"Ù¾\",\r\n\t\t\t\"ج\",\r\n\t\t\t\"Ø´\"\r\n\t\t]\r\n\t},\r\n\tlabels: {\r\n\t\tnew_task: \"وظیفه Ø¬Ø¯ÛŒØ¯\",\r\n\t\ticon_save: \"ذخیره\",\r\n\t\ticon_cancel: \"لغو\",\r\n\t\ticon_details: \"جزییات\",\r\n\t\ticon_edit: \"ویرایش\",\r\n\t\ticon_delete: \"حذف\",\r\n\t\tconfirm_closing: \"تغییرات Ø´Ù…ا Ø§Ø²Ø¯Ø³Øª Ø®ÙˆØ§Ù‡Ø¯ Ø±ÙØªØŒ Ø¢ÛŒØ§ Ù…طمئن Ù‡Ø³ØªÛŒØ¯ØŸ\",\r\n\t\tconfirm_deleting: \"این Ù…ورد Ø¨Ø±Ø§ÛŒ Ù‡Ù…یشه Ø­Ø°Ù Ø®ÙˆØ§Ù‡Ø¯ Ø´Ø¯ØŒ Ø¢ÛŒØ§ Ù…طمئن Ù‡Ø³ØªÛŒØ¯ØŸ\",\r\n\t\tsection_description: \"توضیحات\",\r\n\t\tsection_time: \"مدت Ø²Ù…ان\",\r\n\t\tsection_type: \"نوع\",\r\n\r\n\t\t/* grid columns */\r\n\r\n\t\tcolumn_wbs: \"WBS\",\r\n\t\tcolumn_text: \"عنوان\",\r\n\t\tcolumn_start_date: \"زمان Ø´Ø±ÙˆØ¹\",\r\n\t\tcolumn_duration: \"مدت\",\r\n\t\tcolumn_add: \"\",\r\n\r\n\t\t/* link confirmation */\r\n\t\tlink: \"ارتباط\",\r\n\t\tconfirm_link_deleting: \"حذف Ø®ÙˆØ§Ù‡Ø¯ Ø´Ø¯\",\r\n\t\tlink_start: \" (آغاز)\",\r\n\t\tlink_end: \" (پایان)\",\r\n\r\n\t\ttype_task: \"وظیفه\",\r\n\t\ttype_project: \"پروژه\",\r\n\t\ttype_milestone: \"نگارش\",\r\n\r\n\t\tminutes: \"دقایق\",\r\n\t\thours: \"ساعات\",\r\n\t\tdays: \"روزها\",\r\n\t\tweeks: \"هفته\",\r\n\t\tmonths: \"ماه‌ها\",\r\n\t\tyears: \"سال‌ها\",\r\n\r\n\t\t/* message popup */\r\n\t\tmessage_ok: \"تایید\",\r\n\t\tmessage_cancel: \"لغو\",\r\n\r\n\t\t/* constraints */\r\n\t\tsection_constraint: \"Constraint\",\r\n\t\tconstraint_type: \"Constraint type\",\r\n\t\tconstraint_date: \"Constraint date\",\r\n\t\tasap: \"As Soon As Possible\",\r\n\t\talap: \"As Late As Possible\",\r\n\t\tsnet: \"Start No Earlier Than\",\r\n\t\tsnlt: \"Start No Later Than\",\r\n\t\tfnet: \"Finish No Earlier Than\",\r\n\t\tfnlt: \"Finish No Later Than\",\r\n\t\tmso: \"Must Start On\",\r\n\t\tmfo: \"Must Finish On\",\r\n\r\n\t\t/* resource control */\r\n\t\tresources_filter_placeholder: \"type to filter\",\r\n\t\tresources_filter_label: \"hide empty\",\r\n\r\n\t\t/* empty state screen */\r\n\t\tempty_state_text_link: \"Click here\",\r\n\t\tempty_state_text_description: \"to create your first task\"\r\n\r\n\t}\r\n};\r\n\r\nexport default locale;\r\n","/*\r\n @Autor Manuel Fernandez Panzuela - www.mfernandez.es\r\n\r\n Update 30/10/2015:\r\n Translation of new labels by Jorge Macias\r\n https://disqus.com/by/disqus_bTuZk1voC7/\r\n */\r\n\r\nconst locale: IGanttLocale = {\r\n\tdate: {\r\n\t\tmonth_full: [\"Enero\", \"Febrero\", \"Marzo\", \"Abril\", \"Mayo\", \"Junio\", \"Julio\", \"Agosto\", \"Septiembre\", \"Octubre\", \"Noviembre\", \"Diciembre\"],\r\n\t\tmonth_short: [\"Ene\", \"Feb\", \"Mar\", \"Abr\", \"May\", \"Jun\", \"Jul\", \"Ago\", \"Sep\", \"Oct\", \"Nov\", \"Dic\"],\r\n\t\tday_full: [\"Domingo\", \"Lunes\", \"Martes\", \"Miércoles\", \"Jueves\", \"Viernes\", \"Sábado\"],\r\n\t\tday_short: [\"Dom\", \"Lun\", \"Mar\", \"Mié\", \"Jue\", \"Vie\", \"Sáb\"]\r\n\t},\r\n\tlabels: {\r\n\t\tnew_task: \"Nueva tarea\",\r\n\t\ticon_save: \"Guardar\",\r\n\t\ticon_cancel: \"Cancelar\",\r\n\t\ticon_details: \"Detalles\",\r\n\t\ticon_edit: \"Editar\",\r\n\t\ticon_delete: \"Eliminar\",\r\n\t\tconfirm_closing: \"\", // \"Sus cambios se perderán, continuar ?\"\r\n\t\tconfirm_deleting: \"El evento se borrará definitivamente, Â¿continuar?\",\r\n\t\tsection_description: \"Descripción\",\r\n\t\tsection_time: \"Período\",\r\n\t\tsection_type: \"Tipo\",\r\n\t\t/* grid columns */\r\n\r\n\t\tcolumn_wbs: \"EDT\",\r\n\t\tcolumn_text: \"Tarea\",\r\n\t\tcolumn_start_date: \"Inicio\",\r\n\t\tcolumn_duration: \"Duración\",\r\n\t\tcolumn_add: \"\",\r\n\r\n\t\t/* link confirmation */\r\n\t\tlink: \"Enlace\",\r\n\t\tconfirm_link_deleting: \"será borrada\",\r\n\t\tlink_start: \" (inicio)\",\r\n\t\tlink_end: \" (fin)\",\r\n\r\n\t\ttype_task: \"Tarea\",\r\n\t\ttype_project: \"Proyecto\",\r\n\t\ttype_milestone: \"Hito\",\r\n\r\n\r\n\t\tminutes: \"Minutos\",\r\n\t\thours: \"Horas\",\r\n\t\tdays: \"Días\",\r\n\t\tweeks: \"Semanas\",\r\n\t\tmonths: \"Meses\",\r\n\t\tyears: \"Años\",\r\n\r\n\t\t/* message popup */\r\n\t\tmessage_ok: \"OK\",\r\n\t\tmessage_cancel: \"Cancelar\",\r\n\r\n\t\t/* constraints */\r\n\t\tsection_constraint: \"Constraint\",\r\n\t\tconstraint_type: \"Constraint type\",\r\n\t\tconstraint_date: \"Constraint date\",\r\n\t\tasap: \"As Soon As Possible\",\r\n\t\talap: \"As Late As Possible\",\r\n\t\tsnet: \"Start No Earlier Than\",\r\n\t\tsnlt: \"Start No Later Than\",\r\n\t\tfnet: \"Finish No Earlier Than\",\r\n\t\tfnlt: \"Finish No Later Than\",\r\n\t\tmso: \"Must Start On\",\r\n\t\tmfo: \"Must Finish On\",\r\n\r\n\t\t/* resource control */\r\n\t\tresources_filter_placeholder: \"type to filter\",\r\n\t\tresources_filter_label: \"hide empty\",\r\n\r\n\t\t/* empty state screen */\r\n\t\tempty_state_text_link: \"Click here\",\r\n\t\tempty_state_text_description: \"to create your first task\"\r\n\t}\r\n};\r\n\r\nexport default locale;\r\n","const locale: IGanttLocale = {\r\n\tdate: {\r\n\t\tmonth_full: [\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"],\r\n\t\tmonth_short: [\"Jan\", \"Feb\", \"Mar\", \"Apr\", \"May\", \"Jun\", \"Jul\", \"Aug\", \"Sep\", \"Oct\", \"Nov\", \"Dec\"],\r\n\t\tday_full: [\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"],\r\n\t\tday_short: [\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"]\r\n\t},\r\n\tlabels: {\r\n\t\tnew_task: \"New task\",\r\n\t\ticon_save: \"Save\",\r\n\t\ticon_cancel: \"Cancel\",\r\n\t\ticon_details: \"Details\",\r\n\t\ticon_edit: \"Edit\",\r\n\t\ticon_delete: \"Delete\",\r\n\t\tconfirm_closing: \"\",// Your changes will be lost, are you sure?\r\n\t\tconfirm_deleting: \"Task will be deleted permanently, are you sure?\",\r\n\t\tsection_description: \"Description\",\r\n\t\tsection_time: \"Time period\",\r\n\t\tsection_type: \"Type\",\r\n\r\n\t\t/* grid columns */\r\n\t\tcolumn_wbs: \"WBS\",\r\n\t\tcolumn_text: \"Task name\",\r\n\t\tcolumn_start_date: \"Start time\",\r\n\t\tcolumn_duration: \"Duration\",\r\n\t\tcolumn_add: \"\",\r\n\r\n\t\t/* link confirmation */\r\n\t\tlink: \"Link\",\r\n\t\tconfirm_link_deleting: \"will be deleted\",\r\n\t\tlink_start: \" (start)\",\r\n\t\tlink_end: \" (end)\",\r\n\r\n\t\ttype_task: \"Task\",\r\n\t\ttype_project: \"Project\",\r\n\t\ttype_milestone: \"Milestone\",\r\n\r\n\t\tminutes: \"Minutes\",\r\n\t\thours: \"Hours\",\r\n\t\tdays: \"Days\",\r\n\t\tweeks: \"Week\",\r\n\t\tmonths: \"Months\",\r\n\t\tyears: \"Years\",\r\n\r\n\t\t/* message popup */\r\n\t\tmessage_ok: \"OK\",\r\n\t\tmessage_cancel: \"Cancel\",\r\n\r\n\t\t/* constraints */\r\n\t\tsection_constraint: \"Constraint\",\r\n\t\tconstraint_type: \"Constraint type\",\r\n\t\tconstraint_date: \"Constraint date\",\r\n\t\tasap: \"As Soon As Possible\",\r\n\t\talap: \"As Late As Possible\",\r\n\t\tsnet: \"Start No Earlier Than\",\r\n\t\tsnlt: \"Start No Later Than\",\r\n\t\tfnet: \"Finish No Earlier Than\",\r\n\t\tfnlt: \"Finish No Later Than\",\r\n\t\tmso: \"Must Start On\",\r\n\t\tmfo: \"Must Finish On\",\r\n\r\n\t\t/* resource control */\r\n\t\tresources_filter_placeholder: \"type to filter\",\r\n\t\tresources_filter_label: \"hide empty\",\r\n\r\n\t\t/* empty state screen */\r\n\t\tempty_state_text_link: \"Click here\",\r\n\t\tempty_state_text_description: \"to create your first task\"\r\n\t}\r\n};\r\n\r\nexport default locale;","const locale: IGanttLocale = {\r\n\tdate: {\r\n\t\tmonth_full: [\"Ιανουάριος\", \"Φεβρουάριος\", \"Μάρτιος\", \"Απρίλιος\", \"Μάϊος\", \"Ιούνιος\", \"Ιούλιος\", \"Αύγουστος\", \"Σεπτέμβριος\", \"Οκτώβριος\", \"Νοέμβριος\", \"Δεκέμβριος\"],\r\n\t\tmonth_short: [\"ΙΑΝ\", \"ΦΕΒ\", \"ΜΑΡ\", \"ΑΠΡ\", \"ΜΑΙ\", \"ΙΟΥΝ\", \"ΙΟΥΛ\", \"ΑΥΓ\", \"ΣΕΠ\", \"ΟΚΤ\", \"ΝΟΕ\", \"ΔΕΚ\"],\r\n\t\tday_full: [\"Κυριακή\", \"Δευτέρα\", \"Τρίτη\", \"Τετάρτη\", \"Πέμπτη\", \"Παρασκευή\", \"Κυριακή\"],\r\n\t\tday_short: [\"ΚΥ\", \"ΔΕ\", \"ΤΡ\", \"ΤΕ\", \"ΠΕ\", \"ΠΑ\", \"ΣΑ\"]\r\n\t},\r\n\tlabels: {\r\n\t\tnew_task: \"Νέα ÎµÏÎ³Î±ÏƒÎ¯Î±\",\r\n\t\ticon_save: \"Αποθήκευση\",\r\n\t\ticon_cancel: \"Άκυρο\",\r\n\t\ticon_details: \"Λεπτομέρειες\",\r\n\t\ticon_edit: \"Επεξεργασία\",\r\n\t\ticon_delete: \"Διαγραφή\",\r\n\t\tconfirm_closing: \"\", // Your changes will be lost, are your sure ?\r\n\t\tconfirm_deleting: \"Το Î­ÏÎ³Î¿ Î¸Î± Î´Î¹Î±Î³ÏÎ±Ï†ÎµÎ¯ Î¿ÏÎ¹ÏƒÏ„ικά. Î˜Î­Î»ÎµÏ„ε Î½Î± ÏƒÏ…νεχίσετε;\",\r\n\t\tsection_description: \"Περιγραφή\",\r\n\t\tsection_time: \"Χρονική Ï€ÎµÏÎ¯Î¿Î´Î¿Ï‚\",\r\n\t\tsection_type: \"Type\",\r\n\t\t/* grid columns */\r\n\r\n\t\tcolumn_wbs: \"WBS\",\r\n\t\tcolumn_text: \"Task name\",\r\n\t\tcolumn_start_date: \"Start time\",\r\n\t\tcolumn_duration: \"Duration\",\r\n\t\tcolumn_add: \"\",\r\n\r\n\t\t/* link confirmation */\r\n\t\tlink: \"Link\",\r\n\t\tconfirm_link_deleting: \"will be deleted\",\r\n\t\tlink_start: \" (start)\",\r\n\t\tlink_end: \" (end)\",\r\n\r\n\t\ttype_task: \"Task\",\r\n\t\ttype_project: \"Project\",\r\n\t\ttype_milestone: \"Milestone\",\r\n\r\n\r\n\t\tminutes: \"Minutes\",\r\n\t\thours: \"Hours\",\r\n\t\tdays: \"Days\",\r\n\t\tweeks: \"Week\",\r\n\t\tmonths: \"Months\",\r\n\t\tyears: \"Years\",\r\n\r\n\t\t/* message popup */\r\n\t\tmessage_ok: \"OK\",\r\n\t\tmessage_cancel: \"Άκυρο\",\r\n\r\n\t\t/* constraints */\r\n\t\tsection_constraint: \"Constraint\",\r\n\t\tconstraint_type: \"Constraint type\",\r\n\t\tconstraint_date: \"Constraint date\",\r\n\t\tasap: \"As Soon As Possible\",\r\n\t\talap: \"As Late As Possible\",\r\n\t\tsnet: \"Start No Earlier Than\",\r\n\t\tsnlt: \"Start No Later Than\",\r\n\t\tfnet: \"Finish No Earlier Than\",\r\n\t\tfnlt: \"Finish No Later Than\",\r\n\t\tmso: \"Must Start On\",\r\n\t\tmfo: \"Must Finish On\",\r\n\r\n\t\t/* resource control */\r\n\t\tresources_filter_placeholder: \"type to filter\",\r\n\t\tresources_filter_label: \"hide empty\",\r\n\r\n\t\t/* empty state screen */\r\n\t\tempty_state_text_link: \"Click here\",\r\n\t\tempty_state_text_description: \"to create your first task\"\r\n\t}\r\n};\r\n\r\nexport default locale;\r\n","const locale: IGanttLocale = {\r\n\tdate: {\r\n\t\tmonth_full: [\" Januar\", \" Februar\", \" März \", \" April\", \" Mai\", \" Juni\", \" Juli\", \" August\", \" September \", \" Oktober\", \" November \", \" Dezember\"],\r\n\t\tmonth_short: [\"Jan\", \"Feb\", \"Mär\", \"Apr\", \"Mai\", \"Jun\", \"Jul\", \"Aug\", \"Sep\", \"Okt\", \"Nov\", \"Dez\"],\r\n\t\tday_full: [\"Sonntag\", \"Montag\", \"Dienstag\", \" Mittwoch\", \" Donnerstag\", \"Freitag\", \"Samstag\"],\r\n\t\tday_short: [\"So\", \"Mo\", \"Di\", \"Mi\", \"Do\", \"Fr\", \"Sa\"]\r\n\t},\r\n\tlabels: {\r\n\t\tnew_task: \"Neue Aufgabe\",\r\n\t\ticon_save: \"Speichern\",\r\n\t\ticon_cancel: \"Abbrechen\",\r\n\t\ticon_details: \"Details\",\r\n\t\ticon_edit: \"Ändern\",\r\n\t\ticon_delete: \"Löschen\",\r\n\t\tconfirm_closing: \"\", // \"Ihre Veränderungen werden verloren sein, wollen Sie ergänzen? \"\r\n\t\tconfirm_deleting: \"Der Eintrag wird gelöscht\",\r\n\t\tsection_description: \"Beschreibung\",\r\n\t\tsection_time: \"Zeitspanne\",\r\n\t\tsection_type: \"Type\",\r\n\t\t/* grid columns */\r\n\r\n\t\tcolumn_wbs: \"PSP\",\r\n\t\tcolumn_text: \"Task-Namen\",\r\n\t\tcolumn_start_date: \"Startzeit\",\r\n\t\tcolumn_duration: \"Dauer\",\r\n\t\tcolumn_add: \"\",\r\n\r\n\t\t/* link confirmation */\r\n\t\tlink: \"Link\",\r\n\t\tconfirm_link_deleting: \"werden gelöscht\",\r\n\t\tlink_start: \"(starten)\",\r\n\t\tlink_end: \"(ende)\",\r\n\r\n\t\ttype_task: \"Task\",\r\n\t\ttype_project: \"Project\",\r\n\t\ttype_milestone: \"Milestone\",\r\n\r\n\r\n\t\tminutes: \"Minuten\",\r\n\t\thours: \"Stunden\",\r\n\t\tdays: \"Tage\",\r\n\t\tweeks: \"Wochen\",\r\n\t\tmonths: \"Monate\",\r\n\t\tyears: \"Jahre\",\r\n\r\n\t\t/* message popup */\r\n\t\tmessage_ok: \"OK\",\r\n\t\tmessage_cancel: \"Abbrechen\",\r\n\r\n\t\t/* constraints */\r\n\t\tsection_constraint: \"Regel\",\r\n\t\tconstraint_type: \"Regel\",\r\n\t\tconstraint_date: \"Regel - Datum\",\r\n\t\tasap: \"So bald wie möglich\",\r\n\t\talap: \"So spät wie möglich\",\r\n\t\tsnet: \"Beginn nicht vor\",\r\n\t\tsnlt: \"Beginn nicht später als\",\r\n\t\tfnet: \"Fertigstellung nicht vor\",\r\n\t\tfnlt: \"Fertigstellung nicht später als\",\r\n\t\tmso: \"Muss beginnen am\",\r\n\t\tmfo: \"Muss fertig sein am\",\r\n\r\n\t\t/* resource control */\r\n\t\tresources_filter_placeholder: \"type to filter\",\r\n\t\tresources_filter_label: \"hide empty\",\r\n\r\n\t\t/* empty state screen */\r\n\t\tempty_state_text_link: \"Click here\",\r\n\t\tempty_state_text_description: \"to create your first task\"\r\n\t}\r\n};\r\n\r\nexport default locale;\r\n","const locale: IGanttLocale = {\r\n\tdate: {\r\n\t\tmonth_full: [\"Januar\", \"Februar\", \"Marts\", \"April\", \"Maj\", \"Juni\", \"Juli\", \"August\", \"September\", \"Oktober\", \"November\", \"December\"],\r\n\t\tmonth_short: [\"Jan\", \"Feb\", \"Mar\", \"Apr\", \"Maj\", \"Jun\", \"Jul\", \"Aug\", \"Sep\", \"Okt\", \"Nov\", \"Dec\"],\r\n\t\tday_full: [\"Søndag\", \"Mandag\", \"Tirsdag\", \"Onsdag\", \"Torsdag\", \"Fredag\", \"Lørdag\"],\r\n\t\tday_short: [\"Søn\", \"Man\", \"Tir\", \"Ons\", \"Tor\", \"Fre\", \"Lør\"]\r\n\t},\r\n\tlabels: {\r\n\t\tnew_task: \"Ny opgave\",\r\n\t\ticon_save: \"Gem\",\r\n\t\ticon_cancel: \"Fortryd\",\r\n\t\ticon_details: \"Detaljer\",\r\n\t\ticon_edit: \"Tilret\",\r\n\t\ticon_delete: \"Slet\",\r\n\t\tconfirm_closing: \"Dine rettelser vil gÃ¥ tabt.. Er dy sikker?\", // Your changes will be lost, are your sure ?\r\n\t\tconfirm_deleting: \"Bigivenheden vil blive slettet permanent. Er du sikker?\",\r\n\t\tsection_description: \"Beskrivelse\",\r\n\t\tsection_time: \"Tidsperiode\",\r\n\t\tsection_type: \"Type\",\r\n\t\t/* grid columns */\r\n\r\n\t\tcolumn_wbs: \"WBS\",\r\n\t\tcolumn_text: \"Task name\",\r\n\t\tcolumn_start_date: \"Start time\",\r\n\t\tcolumn_duration: \"Duration\",\r\n\t\tcolumn_add: \"\",\r\n\r\n\t\t/* link confirmation */\r\n\t\tlink: \"Link\",\r\n\t\tconfirm_link_deleting: \"will be deleted\",\r\n\t\tlink_start: \" (start)\",\r\n\t\tlink_end: \" (end)\",\r\n\r\n\t\ttype_task: \"Task\",\r\n\t\ttype_project: \"Project\",\r\n\t\ttype_milestone: \"Milestone\",\r\n\r\n\r\n\t\tminutes: \"Minutes\",\r\n\t\thours: \"Hours\",\r\n\t\tdays: \"Days\",\r\n\t\tweeks: \"Week\",\r\n\t\tmonths: \"Months\",\r\n\t\tyears: \"Years\",\r\n\r\n\t\t/* message popup */\r\n\t\tmessage_ok: \"OK\",\r\n\t\tmessage_cancel: \"Fortryd\",\r\n\r\n\t\t/* constraints */\r\n\t\tsection_constraint: \"Constraint\",\r\n\t\tconstraint_type: \"Constraint type\",\r\n\t\tconstraint_date: \"Constraint date\",\r\n\t\tasap: \"As Soon As Possible\",\r\n\t\talap: \"As Late As Possible\",\r\n\t\tsnet: \"Start No Earlier Than\",\r\n\t\tsnlt: \"Start No Later Than\",\r\n\t\tfnet: \"Finish No Earlier Than\",\r\n\t\tfnlt: \"Finish No Later Than\",\r\n\t\tmso: \"Must Start On\",\r\n\t\tmfo: \"Must Finish On\",\r\n\r\n\t\t/* resource control */\r\n\t\tresources_filter_placeholder: \"type to filter\",\r\n\t\tresources_filter_label: \"hide empty\",\r\n\r\n\t\t/* empty state screen */\r\n\t\tempty_state_text_link: \"Click here\",\r\n\t\tempty_state_text_description: \"to create your first task\"\r\n\t}\r\n};\r\n\r\nexport default locale;\r\n","const locale: IGanttLocale = {\r\n\tdate: {\r\n\t\tmonth_full: [\"Leden\", \"Únor\", \"Březen\", \"Duben\", \"Květen\", \"Červen\", \"Červenec\", \"Srpen\", \"Září\", \"Říjen\", \"Listopad\", \"Prosinec\"],\r\n\t\tmonth_short: [\"Led\", \"Ún\", \"Bře\", \"Dub\", \"Kvě\", \"Čer\", \"Čec\", \"Srp\", \"Září\", \"Říj\", \"List\", \"Pro\"],\r\n\t\tday_full: [\"Neděle\", \"Pondělí\", \"Úterý\", \"Středa\", \"Čtvrtek\", \"Pátek\", \"Sobota\"],\r\n\t\tday_short: [\"Ne\", \"Po\", \"Út\", \"St\", \"Čt\", \"Pá\", \"So\"]\r\n\t},\r\n\tlabels: {\r\n\t\tnew_task: \"Nová práce\",\r\n\t\ticon_save: \"Uložit\",\r\n\t\ticon_cancel: \"Zpět\",\r\n\t\ticon_details: \"Detail\",\r\n\t\ticon_edit: \"Edituj\",\r\n\t\ticon_delete: \"Smazat\",\r\n\t\tconfirm_closing: \"\", // VaÅ¡e změny budou ztraceny, opravdu ?\r\n\t\tconfirm_deleting: \"Událost bude trvale smazána, opravdu?\",\r\n\t\tsection_description: \"Poznámky\",\r\n\t\tsection_time: \"Doba platnosti\",\r\n\t\tsection_type: \"Type\",\r\n\t\t/* grid columns */\r\n\r\n\t\tcolumn_wbs: \"WBS\",\r\n\t\tcolumn_text: \"Task name\",\r\n\t\tcolumn_start_date: \"Start time\",\r\n\t\tcolumn_duration: \"Duration\",\r\n\t\tcolumn_add: \"\",\r\n\r\n\t\t/* link confirmation */\r\n\t\tlink: \"Link\",\r\n\t\tconfirm_link_deleting: \"will be deleted\",\r\n\t\tlink_start: \" (start)\",\r\n\t\tlink_end: \" (end)\",\r\n\r\n\t\ttype_task: \"Task\",\r\n\t\ttype_project: \"Project\",\r\n\t\ttype_milestone: \"Milestone\",\r\n\r\n\r\n\t\tminutes: \"Minutes\",\r\n\t\thours: \"Hours\",\r\n\t\tdays: \"Days\",\r\n\t\tweeks: \"Week\",\r\n\t\tmonths: \"Months\",\r\n\t\tyears: \"Years\",\r\n\r\n\t\t/* message popup */\r\n\t\tmessage_ok: \"OK\",\r\n\t\tmessage_cancel: \"Zpět\",\r\n\r\n\t\t/* constraints */\r\n\t\tsection_constraint: \"Constraint\",\r\n\t\tconstraint_type: \"Constraint type\",\r\n\t\tconstraint_date: \"Constraint date\",\r\n\t\tasap: \"As Soon As Possible\",\r\n\t\talap: \"As Late As Possible\",\r\n\t\tsnet: \"Start No Earlier Than\",\r\n\t\tsnlt: \"Start No Later Than\",\r\n\t\tfnet: \"Finish No Earlier Than\",\r\n\t\tfnlt: \"Finish No Later Than\",\r\n\t\tmso: \"Must Start On\",\r\n\t\tmfo: \"Must Finish On\",\r\n\r\n\t\t/* resource control */\r\n\t\tresources_filter_placeholder: \"type to filter\",\r\n\t\tresources_filter_label: \"hide empty\",\r\n\r\n\t\t/* empty state screen */\r\n\t\tempty_state_text_link: \"Click here\",\r\n\t\tempty_state_text_description: \"to create your first task\"\r\n\t}\r\n};\r\n\r\nexport default locale;\r\n","/*\r\nTranslation by FreezeSoul\r\n\r\nUpdate 26/10/2015:\r\nTranslation of new labels by zwh8800\r\n https://github.com/DHTMLX/gantt/pull/7\r\n\r\n*/\r\n\r\nconst locale: IGanttLocale = {\r\n\tdate: {\r\n\t\tmonth_full: [\"一月\", \"二月\", \"三月\", \"四月\", \"五月\", \"六月\", \"七月\", \"八月\", \"九月\", \"十月\", \"十一月\", \"十二月\"],\r\n\t\tmonth_short: [\"1月\", \"2月\", \"3月\", \"4月\", \"5月\", \"6月\", \"7月\", \"8月\", \"9月\", \"10月\", \"11月\", \"12月\"],\r\n\t\tday_full: [\"星期日\", \"星期一\", \"星期二\", \"星期三\", \"星期四\", \"星期五\", \"星期六\"],\r\n\t\tday_short: [\"日\", \"一\", \"二\", \"三\", \"四\", \"五\", \"六\"]\r\n\t},\r\n\tlabels: {\r\n\t\tnew_task: \"新任務\",\r\n\t\ticon_save: \"保存\",\r\n\t\ticon_cancel: \"关闭\",\r\n\t\ticon_details: \"详细\",\r\n\t\ticon_edit: \"编辑\",\r\n\t\ticon_delete: \"删除\",\r\n\t\tconfirm_closing: \"请确认是否撤销修改!\", // Your changes will be lost, are your sure?\r\n\t\tconfirm_deleting: \"是否删除日程?\",\r\n\t\tsection_description: \"描述\",\r\n\t\tsection_time: \"时间范围\",\r\n\t\tsection_type: \"类型\",\r\n\r\n\t\t/* grid columns */\r\n\r\n\t\tcolumn_wbs: \"工作分解结构\",\r\n\t\tcolumn_text: \"任务名\",\r\n\t\tcolumn_start_date: \"开始时间\",\r\n\t\tcolumn_duration: \"持续时间\",\r\n\t\tcolumn_add: \"\",\r\n\r\n\t\t/* link confirmation */\r\n\r\n\t\tlink: \"关联\",\r\n\t\tconfirm_link_deleting: \"将被删除\",\r\n\t\tlink_start: \" (开始)\",\r\n\t\tlink_end: \" (结束)\",\r\n\r\n\t\ttype_task: \"任务\",\r\n\t\ttype_project: \"项目\",\r\n\t\ttype_milestone: \"里程碑\",\r\n\r\n\t\tminutes: \"分钟\",\r\n\t\thours: \"小时\",\r\n\t\tdays: \"天\",\r\n\t\tweeks: \"周\",\r\n\t\tmonths: \"月\",\r\n\t\tyears: \"å¹´\",\r\n\r\n\t\t/* message popup */\r\n\t\tmessage_ok: \"OK\",\r\n\t\tmessage_cancel: \"关闭\",\r\n\r\n\t\t/* constraints */\r\n\t\tsection_constraint: \"Constraint\",\r\n\t\tconstraint_type: \"Constraint type\",\r\n\t\tconstraint_date: \"Constraint date\",\r\n\t\tasap: \"As Soon As Possible\",\r\n\t\talap: \"As Late As Possible\",\r\n\t\tsnet: \"Start No Earlier Than\",\r\n\t\tsnlt: \"Start No Later Than\",\r\n\t\tfnet: \"Finish No Earlier Than\",\r\n\t\tfnlt: \"Finish No Later Than\",\r\n\t\tmso: \"Must Start On\",\r\n\t\tmfo: \"Must Finish On\",\r\n\r\n\t\t/* resource control */\r\n\t\tresources_filter_placeholder: \"type to filter\",\r\n\t\tresources_filter_label: \"hide empty\",\r\n\r\n\t\t/* empty state screen */\r\n\t\tempty_state_text_link: \"Click here\",\r\n\t\tempty_state_text_description: \"to create your first task\"\r\n\t}\r\n};\r\n\r\nexport default locale;\r\n","/*\r\n @Traducido por Vicente Adria Bohigues - vicenteadria@hotmail.com\r\n */\r\n\r\nconst locale: IGanttLocale = {\r\n\tdate: {\r\n\t\tmonth_full: [\"Gener\", \"Febrer\", \"Març\", \"Abril\", \"Maig\", \"Juny\", \"Juliol\", \"Agost\", \"Setembre\", \"Octubre\", \"Novembre\", \"Desembre\"],\r\n\t\tmonth_short: [\"Gen\", \"Feb\", \"Mar\", \"Abr\", \"Mai\", \"Jun\", \"Jul\", \"Ago\", \"Set\", \"Oct\", \"Nov\", \"Des\"],\r\n\t\tday_full: [\"Diumenge\", \"Dilluns\", \"Dimarts\", \"Dimecres\", \"Dijous\", \"Divendres\", \"Dissabte\"],\r\n\t\tday_short: [\"Dg\", \"Dl\", \"Dm\", \"Dc\", \"Dj\", \"Dv\", \"Ds\"]\r\n\t},\r\n\tlabels: {\r\n\t\tnew_task: \"Nova tasca\",\r\n\t\ticon_save: \"Guardar\",\r\n\t\ticon_cancel: \"Cancel·lar\",\r\n\t\ticon_details: \"Detalls\",\r\n\t\ticon_edit: \"Editar\",\r\n\t\ticon_delete: \"Esborrar\",\r\n\t\tconfirm_closing: \"\", // \"Els seus canvis es perdràn, continuar ?\"\r\n\t\tconfirm_deleting: \"L'esdeveniment s'esborrarà definitivament, continuar ?\",\r\n\t\tsection_description: \"Descripció\",\r\n\t\tsection_time: \"Periode de temps\",\r\n\t\tsection_type: \"Type\",\r\n\t\t/* grid columns */\r\n\r\n\t\tcolumn_wbs: \"WBS\",\r\n\t\tcolumn_text: \"Task name\",\r\n\t\tcolumn_start_date: \"Start time\",\r\n\t\tcolumn_duration: \"Duration\",\r\n\t\tcolumn_add: \"\",\r\n\r\n\t\t/* link confirmation */\r\n\t\tlink: \"Link\",\r\n\t\tconfirm_link_deleting: \"will be deleted\",\r\n\t\tlink_start: \" (start)\",\r\n\t\tlink_end: \" (end)\",\r\n\r\n\t\ttype_task: \"Task\",\r\n\t\ttype_project: \"Project\",\r\n\t\ttype_milestone: \"Milestone\",\r\n\r\n\r\n\t\tminutes: \"Minutes\",\r\n\t\thours: \"Hours\",\r\n\t\tdays: \"Days\",\r\n\t\tweeks: \"Week\",\r\n\t\tmonths: \"Months\",\r\n\t\tyears: \"Years\",\r\n\r\n\t\t/* message popup */\r\n\t\tmessage_ok: \"OK\",\r\n\t\tmessage_cancel: \"Cancel·lar\",\r\n\r\n\t\t/* constraints */\r\n\t\tsection_constraint: \"Constraint\",\r\n\t\tconstraint_type: \"Constraint type\",\r\n\t\tconstraint_date: \"Constraint date\",\r\n\t\tasap: \"As Soon As Possible\",\r\n\t\talap: \"As Late As Possible\",\r\n\t\tsnet: \"Start No Earlier Than\",\r\n\t\tsnlt: \"Start No Later Than\",\r\n\t\tfnet: \"Finish No Earlier Than\",\r\n\t\tfnlt: \"Finish No Later Than\",\r\n\t\tmso: \"Must Start On\",\r\n\t\tmfo: \"Must Finish On\",\r\n\r\n\t\t/* resource control */\r\n\t\tresources_filter_placeholder: \"type to filter\",\r\n\t\tresources_filter_label: \"hide empty\",\r\n\r\n\t\t/* empty state screen */\r\n\t\tempty_state_text_link: \"Click here\",\r\n\t\tempty_state_text_description: \"to create your first task\"\r\n\t}\r\n};\r\n\r\nexport default locale;\r\n","const locale: IGanttLocale = {\r\n\tdate: {\r\n\t\tmonth_full: [\"Студзень\", \"Люты\", \"Сакавік\", \"Красавік\", \"Maй\", \"Чэрвень\", \"Ліпень\", \"Жнівень\", \"Верасень\", \"Кастрычнік\", \"Лістапад\", \"Снежань\"],\r\n\t\tmonth_short: [\"Студз\", \"Лют\", \"Сак\", \"Крас\", \"Maй\", \"Чэр\", \"Ліп\", \"Жнів\", \"Вер\", \"Каст\", \"Ліст\", \"Снеж\"],\r\n\t\tday_full: [\"Нядзеля\", \"Панядзелак\", \"Аўторак\", \"Серада\", \"Чацвер\", \"Пятніца\", \"Субота\"],\r\n\t\tday_short: [\"Нд\", \"Пн\", \"Аўт\", \"Ср\", \"Чцв\", \"Пт\", \"Сб\"]\r\n\t},\r\n\tlabels: {\r\n\t\tnew_task: \"Новае Ð·Ð°Ð´Ð°Ð½Ð½Ðµ\",\r\n\t\ticon_save: \"Захаваць\",\r\n\t\ticon_cancel: \"Адмяніць\",\r\n\t\ticon_details: \"Дэталі\",\r\n\t\ticon_edit: \"Змяніць\",\r\n\t\ticon_delete: \"Выдаліць\",\r\n\t\tconfirm_closing: \"\", // Ð£Ð½ÐµÑÐµÐ½Ñ‹Ñ Ð·Ð¼ÐµÐ½Ñ‹ Ð±ÑƒÐ´ÑƒÑ†ÑŒ ÑÑ‚рачаны, Ð¿Ñ€Ð°Ñ†ÑÐ³Ð½ÑƒÑ†ÑŒ?\r\n\t\tconfirm_deleting: \"Падзея Ð±ÑƒÐ´Ð·Ðµ Ð²Ñ‹Ð´Ð°Ð»ÐµÐ½Ð° Ð½ÐµÐ·Ð²Ð°Ñ€Ð¾Ñ‚на, Ð¿Ñ€Ð°Ñ†ÑÐ³Ð½ÑƒÑ†ÑŒ?\",\r\n\t\tsection_description: \"Апісанне\",\r\n\t\tsection_time: \"Перыяд Ñ‡Ð°ÑÑƒ\",\r\n\t\tsection_type: \"Тып\",\r\n\t\t/* grid columns */\r\n\r\n\t\tcolumn_wbs: \"ІСР\",\r\n\t\tcolumn_text: \"Задача\",\r\n\t\tcolumn_start_date: \"Пачатак\",\r\n\t\tcolumn_duration: \"Працяг\",\r\n\t\tcolumn_add: \"\",\r\n\r\n\t\t/* link confirmation */\r\n\t\tlink: \"Сувязь\",\r\n\t\tconfirm_link_deleting: \"будзе Ð²Ñ‹Ð´Ð°Ð»ÐµÐ½Ð°\",\r\n\t\tlink_start: \"(пачатак)\",\r\n\t\tlink_end: \"(канец)\",\r\n\r\n\t\ttype_task: \"Task\",\r\n\t\ttype_project: \"Project\",\r\n\t\ttype_milestone: \"Milestone\",\r\n\r\n\r\n\t\tminutes: \"Хвiлiна\",\r\n\t\thours: \"Гадзiна\",\r\n\t\tdays: \"Дзень\",\r\n\t\tweeks: \"Тыдзень\",\r\n\t\tmonths: \"Месяц\",\r\n\t\tyears: \"Год\",\r\n\r\n\t\t/* message popup */\r\n\t\tmessage_ok: \"OK\",\r\n\t\tmessage_cancel: \"Адмяніць\",\r\n\r\n\t\t/* constraints */\r\n\t\tsection_constraint: \"Constraint\",\r\n\t\tconstraint_type: \"Constraint type\",\r\n\t\tconstraint_date: \"Constraint date\",\r\n\t\tasap: \"As Soon As Possible\",\r\n\t\talap: \"As Late As Possible\",\r\n\t\tsnet: \"Start No Earlier Than\",\r\n\t\tsnlt: \"Start No Later Than\",\r\n\t\tfnet: \"Finish No Earlier Than\",\r\n\t\tfnlt: \"Finish No Later Than\",\r\n\t\tmso: \"Must Start On\",\r\n\t\tmfo: \"Must Finish On\",\r\n\r\n\t\t/* resource control */\r\n\t\tresources_filter_placeholder: \"type to filter\",\r\n\t\tresources_filter_label: \"hide empty\",\r\n\r\n\t\t/* empty state screen */\r\n\t\tempty_state_text_link: \"Click here\",\r\n\t\tempty_state_text_description: \"to create your first task\"\r\n\t}\r\n};\r\n\r\nexport default locale;\r\n","const locale: IGanttLocale = {\r\n\tdate: {\r\n\t\tmonth_full: [\"كانون Ø§Ù„ثاني\", \"شباط\", \"آذار\", \"نيسان\", \"أيار\", \"حزيران\", \"تموز\", \"آب\", \"أيلول\", \"تشرين Ø§Ù„أول\", \"تشرين Ø§Ù„ثاني\", \"كانون Ø§Ù„أول\"],\r\n\t\tmonth_short: [\"يناير\", \"فبراير\", \"مارس\", \"أبريل\", \"مايو\", \"يونيو\", \"يوليو\", \"أغسطس\", \"سبتمبر\", \"أكتوبر\", \"نوفمبر\", \"ديسمبر\"],\r\n\t\tday_full: [\"الأحد\", \"الأثنين\", \"ألثلاثاء\", \"الأربعاء\", \"ألحميس\", \"ألجمعة\", \"السبت\"],\r\n\t\tday_short: [\"احد\", \"اثنين\", \"ثلاثاء\", \"اربعاء\", \"خميس\", \"جمعة\", \"سبت\"]\r\n\t},\r\n\tlabels: {\r\n\t\tnew_task: \"مهمة Ø¬Ø¯ÙŠØ¯\",\r\n\t\ticon_save: \"اخزن\",\r\n\t\ticon_cancel: \"الغاء\",\r\n\t\ticon_details: \"تفاصيل\",\r\n\t\ticon_edit: \"تحرير\",\r\n\t\ticon_delete: \"حذف\",\r\n\t\tconfirm_closing: \"التغييرات Ø³ÙˆÙ ØªØ¶ÙŠØ¹, Ù‡Ù„ Ø§Ù†Øª Ù…تأكد؟\", // Your changes will be lost, are your sure ?\r\n\t\tconfirm_deleting: \"الحدث Ø³ÙŠØªÙ… Ø­Ø°ÙÙ‡Ø§ Ù†Ù‡Ø§Ø¦ÙŠØ§ ØŒ Ù‡Ù„ Ø£Ù†Øª Ù…تأكد؟\",\r\n\t\tsection_description: \"الوصف\",\r\n\t\tsection_time: \"الفترة Ø§Ù„زمنية\",\r\n\t\tsection_type: \"Type\",\r\n\t\t/* grid columns */\r\n\r\n\t\tcolumn_wbs: \"WBS\",\r\n\t\tcolumn_text: \"Task name\",\r\n\t\tcolumn_start_date: \"Start time\",\r\n\t\tcolumn_duration: \"Duration\",\r\n\t\tcolumn_add: \"\",\r\n\r\n\t\t/* link confirmation */\r\n\t\tlink: \"Link\",\r\n\t\tconfirm_link_deleting: \"will be deleted\",\r\n\t\tlink_start: \" (start)\",\r\n\t\tlink_end: \" (end)\",\r\n\r\n\t\ttype_task: \"Task\",\r\n\t\ttype_project: \"Project\",\r\n\t\ttype_milestone: \"Milestone\",\r\n\r\n\t\tminutes: \"Minutes\",\r\n\t\thours: \"Hours\",\r\n\t\tdays: \"Days\",\r\n\t\tweeks: \"Week\",\r\n\t\tmonths: \"Months\",\r\n\t\tyears: \"Years\",\r\n\r\n\t\t/* message popup */\r\n\t\tmessage_ok: \"OK\",\r\n\t\tmessage_cancel: \"الغاء\",\r\n\r\n\t\t/* constraints */\r\n\t\tsection_constraint: \"Constraint\",\r\n\t\tconstraint_type: \"Constraint type\",\r\n\t\tconstraint_date: \"Constraint date\",\r\n\t\tasap: \"As Soon As Possible\",\r\n\t\talap: \"As Late As Possible\",\r\n\t\tsnet: \"Start No Earlier Than\",\r\n\t\tsnlt: \"Start No Later Than\",\r\n\t\tfnet: \"Finish No Earlier Than\",\r\n\t\tfnlt: \"Finish No Later Than\",\r\n\t\tmso: \"Must Start On\",\r\n\t\tmfo: \"Must Finish On\",\r\n\r\n\t\t/* resource control */\r\n\t\tresources_filter_placeholder: \"type to filter\",\r\n\t\tresources_filter_label: \"hide empty\",\r\n\r\n\t\t/* empty state screen */\r\n\t\tempty_state_text_link: \"Click here\",\r\n\t\tempty_state_text_description: \"to create your first task\"\r\n\t}\r\n};\r\n\r\nexport default locale;\r\n","import ar from \"./locale_ar\";\r\nimport be from \"./locale_be\";\r\nimport ca from \"./locale_ca\";\r\nimport cn from \"./locale_cn\";\r\nimport cs from \"./locale_cs\";\r\nimport da from \"./locale_da\";\r\nimport de from \"./locale_de\";\r\nimport el from \"./locale_el\";\r\nimport en from \"./locale_en\";\r\nimport es from \"./locale_es\";\r\nimport fa from \"./locale_fa\";\r\nimport fi from \"./locale_fi\";\r\nimport fr from \"./locale_fr\";\r\nimport he from \"./locale_he\";\r\nimport hr from \"./locale_hr\";\r\nimport hu from \"./locale_hu\";\r\nimport id from \"./locale_id\";\r\nimport it from \"./locale_it\";\r\nimport jp from \"./locale_jp\";\r\nimport kr from \"./locale_kr\";\r\n\r\nimport LocaleManager from \"./locale_manager\";\r\n\r\nimport nb from \"./locale_nb\";\r\nimport nl from \"./locale_nl\";\r\nimport no from \"./locale_no\";\r\nimport pl from \"./locale_pl\";\r\nimport pt from \"./locale_pt\";\r\nimport ro from \"./locale_ro\";\r\nimport ru from \"./locale_ru\";\r\nimport si from \"./locale_si\";\r\nimport sk from \"./locale_sk\";\r\nimport sv from \"./locale_sv\";\r\nimport tr from \"./locale_tr\";\r\nimport ua from \"./locale_ua\";\r\n\r\nexport default function(){\r\n\treturn new LocaleManager({\r\n\t\ten,\r\n\t\tar,\r\n\t\tbe,\r\n\t\tca,\r\n\t\tcn,\r\n\t\tcs,\r\n\t\tda,\r\n\t\tde,\r\n\t\tel,\r\n\t\tes,\r\n\t\tfa,\r\n\t\tfi,\r\n\t\tfr,\r\n\t\the,\r\n\t\thr,\r\n\t\thu,\r\n\t\tid,\r\n\t\tit,\r\n\t\tjp,\r\n\t\tkr,\r\n\t\tnb,\r\n\t\tnl,\r\n\t\tno,\r\n\t\tpl,\r\n\t\tpt,\r\n\t\tro,\r\n\t\tru,\r\n\t\tsi,\r\n\t\tsk,\r\n\t\tsv,\r\n\t\ttr,\r\n\t\tua\r\n\t});\r\n}","// all builds except for evaluation version get this mockup\r\n// the evaluation build gets actual codes\r\nexport default () => {};","function extend(gantt) {\n  gantt.destructor = function () {\n    this.clearAll();\n    this.callEvent(\"onDestroy\", []);\n\n    if (this.$root) {\n      delete this.$root.gantt;\n    }\n\n    if (this._eventRemoveAll) {\n      this._eventRemoveAll();\n    }\n\n    if (this.$layout) {\n      this.$layout.destructor();\n    }\n\n    if (this.resetLightbox) {\n      this.resetLightbox();\n    }\n\n    if (this._dp && this._dp.destructor) {\n      this._dp.destructor();\n    }\n\n    this.$services.destructor(); // detachAllEvents should be called last, because in components may be attached events\n\n    this.detachAllEvents();\n\n    for (var i in this) {\n      if (i.indexOf(\"$\") === 0) {\n        delete this[i];\n      }\n    }\n\n    this.$destroyed = true;\n  };\n}\n\nmodule.exports = extend;","/*\r\n \tasserts will be removed in final code, so you can place them anythere\r\n\twithout caring about performance impacts\r\n*/\nmodule.exports = function (gantt) {\n  return function assert(check, message) {\n    if (!check) {\n      if (gantt.config.show_errors && gantt.callEvent(\"onError\", [message]) !== false) {\n        if (gantt.message) {\n          gantt.message({\n            type: \"error\",\n            text: message,\n            expire: -1\n          });\n        } else {\n          // eslint-disable-next-line\n          console.log(message);\n        } // eslint-disable-next-line no-debugger\n\n\n        debugger;\n      }\n    }\n  };\n};","function addResizeListener(gantt) {\n  var containerStyles = window.getComputedStyle(gantt.$root);\n\n  if (containerStyles.getPropertyValue(\"position\") == \"static\") {\n    gantt.$root.style.position = \"relative\";\n  }\n\n  var resizeWatcher = document.createElement('iframe');\n  resizeWatcher.className = \"gantt_container_resize_watcher\";\n  resizeWatcher.tabIndex = -1;\n\n  if (gantt.config.wai_aria_attributes) {\n    resizeWatcher.setAttribute(\"role\", \"none\");\n    resizeWatcher.setAttribute(\"aria-hidden\", true);\n  }\n\n  var salesforce_environment = !!window[\"Sfdc\"] || !!window[\"$A\"] || window[\"Aura\"];\n\n  if (salesforce_environment) {\n    gantt.config.container_resize_method = \"timeout\";\n  } // in some environments (namely, in SalesForce) iframe.contentWindow is not available\n\n\n  gantt.$root.appendChild(resizeWatcher);\n\n  if (resizeWatcher.contentWindow) {\n    listenWindowResize(gantt, resizeWatcher.contentWindow);\n  } else {\n    // if so - ditch the iframe and fallback to listening the main window resize\n    gantt.$root.removeChild(resizeWatcher);\n    listenWindowResize(gantt, window);\n  }\n}\n\nfunction listenWindowResize(gantt, window) {\n  var resizeTimeout = gantt.config.container_resize_timeout || 20;\n  var resizeDelay;\n\n  if (gantt.config.container_resize_method == \"timeout\") {\n    lowlevelResizeWatcher();\n  } else {\n    try {\n      gantt.event(window, \"resize\", function () {\n        if (gantt.$scrollbarRepaint) {\n          gantt.$scrollbarRepaint = null;\n        } else {\n          repaintGantt();\n        }\n      });\n    } catch (e) {\n      lowlevelResizeWatcher();\n    }\n  }\n\n  function repaintGantt() {\n    clearTimeout(resizeDelay);\n    resizeDelay = setTimeout(function () {\n      if (!gantt.$destroyed) {\n        gantt.render();\n      }\n    }, resizeTimeout);\n  }\n\n  var previousHeight = gantt.$root.offsetHeight;\n  var previousWidth = gantt.$root.offsetWidth;\n\n  function lowlevelResizeWatcher() {\n    if (gantt.$root.offsetHeight != previousHeight || gantt.$root.offsetWidth != previousWidth) {\n      repaintGantt();\n    }\n\n    previousHeight = gantt.$root.offsetHeight;\n    previousWidth = gantt.$root.offsetWidth;\n    setTimeout(lowlevelResizeWatcher, resizeTimeout);\n  }\n}\n\nmodule.exports = addResizeListener;","function _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nvar domHelpers = require(\"./ui/utils/dom_helpers\"),\n    helpers = require(\"../utils/helpers\");\n\nvar isHeadless = require(\"../utils/is_headless\");\n\nvar addResizeListener = require(\"./ui/resize_listener\");\n\nmodule.exports = function (gantt) {\n  var calculateScaleRange = require(\"./gantt_data_range\");\n\n  gantt.assert = require(\"./common/assert\")(gantt);\n\n  function isHTMLElement(node) {\n    try {\n      node.cloneNode(false);\n    } catch (e) {\n      return false;\n    }\n\n    return true;\n  }\n\n  var invalidContainerMessage = \"Invalid value of the first argument of `gantt.init`. Supported values: HTMLElement, String (element id).\" + \"This error means that either invalid object is passed into `gantt.init` or that the element with the specified ID doesn't exist on the page when `gantt.init` is called.\";\n\n  function validateNode(node) {\n    if (!node || typeof node == 'string' && document.getElementById(node)) return true;\n    if (isHTMLElement(node)) return true;\n    gantt.assert(false, invalidContainerMessage);\n    throw new Error(invalidContainerMessage);\n  } //initial initialization\n\n\n  gantt.init = function (node, from, to) {\n    if (gantt.env.isNode) {\n      node = null; // for the nodejs version\n    } else {\n      validateNode(node); // for the web version\n    }\n\n    if (from && to) {\n      this.config.start_date = this._min_date = new Date(from);\n      this.config.end_date = this._max_date = new Date(to);\n    }\n\n    this.date.init(); //can be called only once\n\n    this.init = function (node) {\n      if (gantt.env.isNode) {\n        node = null; // for the nodejs version\n      } else {\n        validateNode(node); // for the web version\n      }\n\n      if (this.$container && this.$container.parentNode) {\n        this.$container.parentNode.removeChild(this.$container);\n        this.$container = null;\n      }\n\n      if (this.$layout) {\n        this.$layout.clear();\n      }\n\n      this._reinit(node);\n    };\n\n    this._reinit(node);\n  };\n\n  gantt._quickRefresh = function (code) {\n    var stores = this._getDatastores.call(this);\n\n    for (var i = 0; i < stores.length; i++) {\n      stores[i]._quick_refresh = true;\n    }\n\n    code();\n\n    for (var i = 0; i < stores.length; i++) {\n      stores[i]._quick_refresh = false;\n    }\n  };\n\n  var dropLayout = function dropLayout() {\n    if (this._clearTaskLayers) {\n      this._clearTaskLayers();\n    }\n\n    if (this._clearLinkLayers) {\n      this._clearLinkLayers();\n    }\n\n    if (this.$layout) {\n      this.$layout.destructor();\n      this.$layout = null;\n      this.$ui.reset();\n    }\n  }.bind(gantt);\n\n  var rebuildLayout = function rebuildLayout() {\n    if (isHeadless(gantt)) {\n      return;\n    }\n\n    this.$root.innerHTML = \"\";\n    this.$root.gantt = this;\n    calculateScaleRange(this);\n    this.config.layout.id = \"main\";\n    this.$layout = this.$ui.createView(\"layout\", this.$root, this.config.layout);\n    this.$layout.attachEvent(\"onBeforeResize\", function () {\n      var storeNames = gantt.$services.getService(\"datastores\");\n\n      for (var i = 0; i < storeNames.length; i++) {\n        gantt.getDatastore(storeNames[i]).filter();\n\n        if (gantt.$data.tasksStore._skipTaskRecalculation) {\n          // do not repaint items, they will be repainted later in the onStoreUpdate event\n          if (gantt.$data.tasksStore._skipTaskRecalculation != \"lightbox\") {\n            gantt.$data.tasksStore._skipTaskRecalculation = false;\n          }\n        } else {\n          gantt.getDatastore(storeNames[i]).callEvent(\"onBeforeRefreshAll\", []);\n        }\n      }\n    });\n    this.$layout.attachEvent(\"onResize\", function () {\n      gantt._quickRefresh(function () {\n        gantt.refreshData();\n      });\n    });\n    this.callEvent(\"onGanttLayoutReady\", []);\n    this.$layout.render();\n    this.$container = this.$layout.$container.firstChild;\n    addResizeListener(this);\n  }.bind(gantt);\n\n  gantt.resetLayout = function () {\n    dropLayout();\n    rebuildLayout();\n    this.render();\n  };\n\n  gantt._reinit = function (node) {\n    this.callEvent(\"onBeforeGanttReady\", []);\n\n    this._update_flags();\n\n    var config = this.$services.getService(\"templateLoader\");\n    config.initTemplates(this);\n    dropLayout();\n    this.$root = null;\n\n    if (node) {\n      this.$root = domHelpers.toNode(node);\n      rebuildLayout();\n      this.$mouseEvents.reset(this.$root);\n    }\n\n    this.callEvent(\"onTemplatesReady\", []);\n    this.callEvent(\"onGanttReady\", []);\n    this.render();\n  };\n\n  gantt.$click = {\n    buttons: {\n      \"edit\": function edit(id) {\n        if (gantt.isReadonly(gantt.getTask(id))) {\n          return;\n        }\n\n        gantt.showLightbox(id);\n      },\n      \"delete\": function _delete(id) {\n        var task = gantt.getTask(id);\n\n        if (gantt.isReadonly(task)) {\n          return;\n        }\n\n        var question = gantt.locale.labels.confirm_deleting;\n        var title = gantt.locale.labels.confirm_deleting_title;\n\n        gantt._simple_confirm(question, title, function () {\n          if (!gantt.isTaskExists(id)) {\n            gantt.hideLightbox();\n            return;\n          }\n\n          if (task.$new) {\n            // GS-2170. Do not recalculate the indexes and dates of other tasks\n            // as they will be recalculated in the `refreshData`\n            gantt.$data.tasksStore._skipTaskRecalculation = \"lightbox\";\n            gantt.silent(function () {\n              gantt.deleteTask(id, true);\n            });\n            gantt.$data.tasksStore._skipTaskRecalculation = false;\n            gantt.refreshData();\n          } else {\n            gantt.$data.tasksStore._skipTaskRecalculation = true;\n            gantt.deleteTask(id);\n          }\n\n          gantt.hideLightbox();\n        });\n      }\n    }\n  }; //renders self\n\n  gantt.render = function () {\n    this.callEvent(\"onBeforeGanttRender\", []);\n    var visibleDate;\n\n    if (!isHeadless(gantt)) {\n      if (!this.config.sort && this._sort) {\n        this._sort = undefined;\n      }\n\n      if (this.$root) {\n        if (this.config.rtl) {\n          this.$root.classList.add(\"gantt_rtl\");\n          this.$root.firstChild.classList.add(\"gantt_rtl\"); // GS-1499\n        } else {\n          this.$root.classList.remove(\"gantt_rtl\");\n          this.$root.firstChild.classList.remove(\"gantt_rtl\"); // GS-1499\n        }\n      }\n\n      var pos = this.getScrollState();\n      var posX = pos ? pos.x : 0;\n\n      if (this._getHorizontalScrollbar()) {\n        var scrollbar = this._getHorizontalScrollbar();\n\n        posX = scrollbar.$config.codeScrollLeft || posX || 0;\n      }\n\n      visibleDate = null;\n\n      if (posX) {\n        visibleDate = gantt.dateFromPos(posX + this.config.task_scroll_offset);\n      }\n    }\n\n    calculateScaleRange(this);\n\n    if (!isHeadless(gantt)) {\n      this.$layout.$config.autosize = this.config.autosize;\n      var preserveScroll = this.config.preserve_scroll;\n      this.config.preserve_scroll = false; // prevent scrolling from layout resize, scroll will be called here later on\n\n      this.$layout.resize();\n      this.config.preserve_scroll = preserveScroll;\n\n      if (this.config.preserve_scroll && pos) {\n        // GS-1640: We need pos.y, otherwise part of the timeline won't be rendered if the scrollbar disappeared\n        if (posX || pos.y) {\n          var new_pos = gantt.getScrollState();\n          var new_date = gantt.dateFromPos(new_pos.x);\n\n          if (!(+visibleDate == +new_date && new_pos.y == pos.y)) {\n            var posX = null;\n            var posY = null;\n\n            if (visibleDate) {\n              var posX = Math.max(gantt.posFromDate(visibleDate) - gantt.config.task_scroll_offset, 0);\n            }\n\n            if (pos.y) {\n              posY = pos.y;\n            }\n\n            gantt.scrollTo(posX, posY);\n          }\n        } // GS-1640: We need to reset the scroll position for the grid if the scrollbar disappeared and\n        // the grid and timeline have different scrollbars\n\n\n        var gridCell = gantt.$ui.getView(\"grid\");\n\n        if (gridCell) {\n          var attachedScrollbar = gridCell.$config.scrollY;\n          var verticalScrollbar = gantt.$ui.getView(attachedScrollbar);\n\n          if (verticalScrollbar) {\n            var scrollbarNodeVisible = gantt.utils.dom.isChildOf(verticalScrollbar.$view, gantt.$container);\n\n            if (!scrollbarNodeVisible) {\n              gridCell.scrollTo(undefined, 0);\n            }\n          }\n        }\n      }\n    } else {\n      gantt.refreshData();\n    }\n\n    this.callEvent(\"onGanttRender\", []);\n  }; //TODO: add layout.resize method that wouldn't trigger data repaint\n\n\n  gantt.setSizes = gantt.render;\n\n  gantt.getTaskRowNode = function (id) {\n    var els = this.$grid_data.childNodes;\n    var attribute = this.config.task_attribute;\n\n    for (var i = 0; i < els.length; i++) {\n      if (els[i].getAttribute) {\n        var value = els[i].getAttribute(attribute);\n        if (value == id) return els[i];\n      }\n    }\n\n    return null;\n  };\n\n  gantt.changeLightboxType = function (type) {\n    if (this.getLightboxType() == type) return true;\n\n    gantt._silent_redraw_lightbox(type);\n  };\n\n  gantt._get_link_type = function (from_start, to_start) {\n    var type = null;\n\n    if (from_start && to_start) {\n      type = gantt.config.links.start_to_start;\n    } else if (!from_start && to_start) {\n      type = gantt.config.links.finish_to_start;\n    } else if (!from_start && !to_start) {\n      type = gantt.config.links.finish_to_finish;\n    } else if (from_start && !to_start) {\n      type = gantt.config.links.start_to_finish;\n    }\n\n    return type;\n  };\n\n  gantt.isLinkAllowed = function (from, to, from_start, to_start) {\n    var link = null;\n\n    if (_typeof(from) == \"object\") {\n      link = from;\n    } else {\n      link = {\n        source: from,\n        target: to,\n        type: this._get_link_type(from_start, to_start)\n      };\n    }\n\n    if (!link) return false;\n    if (!(link.source && link.target && link.type)) return false;\n    if (link.source == link.target) return false;\n    var res = true; //any custom rules\n\n    if (this.checkEvent(\"onLinkValidation\")) res = this.callEvent(\"onLinkValidation\", [link]);\n    return res;\n  };\n\n  gantt._correct_dst_change = function (date, prevOffset, step, unit) {\n    var time_unit = helpers.getSecondsInUnit(unit) * step;\n\n    if (time_unit > 60 * 60 && time_unit < 60 * 60 * 24) {\n      //correct dst change only if current unit is more than one hour and less than day (days have own checking), e.g. 12h\n      var offsetChanged = date.getTimezoneOffset() - prevOffset;\n\n      if (offsetChanged) {\n        date = gantt.date.add(date, offsetChanged, \"minute\");\n      }\n    }\n\n    return date;\n  };\n\n  gantt.isSplitTask = function (task) {\n    gantt.assert(task && task instanceof Object, \"Invalid argument <b>task</b>=\" + task + \" of gantt.isSplitTask. Task object was expected\");\n    return this.$data.tasksStore._isSplitItem(task);\n  };\n\n  gantt._is_icon_open_click = function (e) {\n    if (!e) return false;\n    var target = e.target || e.srcElement;\n    if (!(target && target.className)) return false;\n    var className = domHelpers.getClassName(target);\n    if (className.indexOf(\"gantt_tree_icon\") !== -1 && (className.indexOf(\"gantt_close\") !== -1 || className.indexOf(\"gantt_open\") !== -1)) return true;\n    return false;\n  };\n};","/*\r\n reuse results of functions that can be recalculated during rendering\r\n greatly increases the rendering speed when critical path enabled\r\n Sample - 94_dev/critical_path.html\r\n\r\n */\nmodule.exports = function (gantt) {\n  gantt._cached_functions = {\n    cache: {},\n    mode: false,\n    critical_path_mode: false,\n    wrap_methods: function wrap_methods(methods, object) {\n      if (object._prefetch_originals) {\n        for (var i in object._prefetch_originals) {\n          object[i] = object._prefetch_originals[i];\n        }\n      }\n\n      object._prefetch_originals = {};\n\n      for (var i = 0; i < methods.length; i++) {\n        this.prefetch(methods[i], object);\n      }\n    },\n    prefetch: function prefetch(methodname, host) {\n      var original = host[methodname];\n\n      if (original) {\n        var optimizer = this;\n        host._prefetch_originals[methodname] = original;\n\n        host[methodname] = function get_prefetched_value() {\n          var argumentsArray = new Array(arguments.length);\n\n          for (var i = 0, l = arguments.length; i < l; i++) {\n            argumentsArray[i] = arguments[i];\n          }\n\n          if (optimizer.active) {\n            var args = optimizer.get_arguments_hash(Array.prototype.slice.call(argumentsArray));\n\n            if (!optimizer.cache[methodname]) {\n              optimizer.cache[methodname] = {};\n            }\n\n            var cached_values = optimizer.cache[methodname];\n\n            if (optimizer.has_cached_value(cached_values, args)) {\n              return optimizer.get_cached_value(cached_values, args);\n            } else {\n              var value = original.apply(this, argumentsArray);\n              optimizer.cache_value(cached_values, args, value);\n              return value;\n            }\n          }\n\n          return original.apply(this, argumentsArray);\n        };\n      }\n\n      return original;\n    },\n    cache_value: function cache_value(cache, arguments_hash, value) {\n      if (this.is_date(value)) value = new Date(value);\n      cache[arguments_hash] = value;\n    },\n    has_cached_value: function has_cached_value(cache, arguments_hash) {\n      return cache.hasOwnProperty(arguments_hash);\n    },\n    get_cached_value: function get_cached_value(cache, arguments_hash) {\n      var data = cache[arguments_hash]; //for cached dates - return copy\n\n      if (this.is_date(data)) {\n        data = new Date(data);\n      }\n\n      return data;\n    },\n    is_date: function is_date(value) {\n      return value && value.getUTCDate;\n    },\n    get_arguments_hash: function get_arguments_hash(args) {\n      var values = [];\n\n      for (var i = 0; i < args.length; i++) {\n        values.push(this.stringify_argument(args[i]));\n      }\n\n      return \"(\" + values.join(\";\") + \")\";\n    },\n    stringify_argument: function stringify_argument(value) {\n      //expecting task or link, or any other data entries, dates and primitive values\n      var ret = \"\";\n\n      if (value.id) {\n        ret = value.id;\n      } else if (this.is_date(value)) {\n        ret = value.valueOf();\n      } else {\n        ret = value;\n      }\n\n      return ret + \"\";\n    },\n    activate: function activate() {\n      this.clear();\n      this.active = true;\n    },\n    deactivate: function deactivate() {\n      this.clear();\n      this.active = false;\n    },\n    clear: function clear() {\n      this.cache = {};\n    },\n    setup: function setup(gantt) {\n      var override_gantt = [];\n      var gantt_methods = ['_isProjectEnd', '_getProjectEnd', '_getSlack'];\n\n      if (this.mode == 'auto') {\n        if (gantt.config.highlight_critical_path) {\n          override_gantt = gantt_methods;\n        }\n      } else if (this.mode === true) {\n        override_gantt = gantt_methods;\n      }\n\n      this.wrap_methods(override_gantt, gantt);\n    },\n    update_if_changed: function update_if_changed(gantt) {\n      var changed = this.critical_path_mode != gantt.config.highlight_critical_path || this.mode !== gantt.config.optimize_render;\n\n      if (changed) {\n        this.critical_path_mode = gantt.config.highlight_critical_path;\n        this.mode = gantt.config.optimize_render;\n        this.setup(gantt);\n      }\n    }\n  };\n\n  function activate() {\n    gantt._cached_functions.update_if_changed(gantt);\n\n    if (!gantt._cached_functions.active) {\n      gantt._cached_functions.activate();\n    }\n\n    return true;\n  }\n\n  gantt.attachEvent(\"onBeforeGanttRender\", activate);\n  gantt.attachEvent(\"onBeforeDataRender\", activate);\n  gantt.attachEvent(\"onBeforeSmartRender\", function () {\n    activate();\n  });\n  gantt.attachEvent(\"onBeforeParse\", activate);\n  gantt.attachEvent(\"onDataRender\", function () {\n    gantt._cached_functions.deactivate();\n  });\n  var deactivTimeout = null;\n  gantt.attachEvent(\"onSmartRender\", function () {\n    if (deactivTimeout) clearTimeout(deactivTimeout);\n    deactivTimeout = setTimeout(function () {\n      gantt._cached_functions.deactivate();\n    }, 1000);\n  });\n  gantt.attachEvent(\"onBeforeGanttReady\", function () {\n    gantt._cached_functions.update_if_changed(gantt);\n\n    return true;\n  });\n};","function _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nmodule.exports = function (gantt) {\n  gantt.getTaskType = function (type) {\n    var checkType = type;\n\n    if (type && _typeof(type) == \"object\") {\n      checkType = type.type;\n    }\n\n    for (var i in this.config.types) {\n      if (this.config.types[i] == checkType) {\n        return checkType;\n      }\n    }\n\n    return gantt.config.types.task;\n  };\n};","// all builds except for evaluation version get this mockup\r\n// the evaluation build gets actual codes\r\nexport default () => {};","var helpers = require(\"../utils/helpers\");\n\nmodule.exports = function (gantt) {\n  gantt.isUnscheduledTask = function (task) {\n    gantt.assert(task && task instanceof Object, \"Invalid argument <b>task</b>=\" + task + \" of gantt.isUnscheduledTask. Task object was expected\");\n    return !!task.unscheduled || !task.start_date;\n  };\n\n  gantt._isAllowedUnscheduledTask = function (task) {\n    return !!(task.unscheduled && gantt.config.show_unscheduled);\n  };\n\n  gantt._isTaskInTimelineLimits = function (task) {\n    var taskStart = task.start_date ? task.start_date.valueOf() : null;\n    var taskEnd = task.end_date ? task.end_date.valueOf() : null;\n    return !!(taskStart && taskEnd && taskStart <= this._max_date.valueOf() && taskEnd >= this._min_date.valueOf());\n  };\n\n  gantt.isTaskVisible = function (id) {\n    if (!this.isTaskExists(id)) {\n      return false;\n    }\n\n    var task = this.getTask(id);\n\n    if (!(this._isAllowedUnscheduledTask(task) || this._isTaskInTimelineLimits(task))) {\n      return false;\n    }\n\n    return !!(this.getGlobalTaskIndex(id) >= 0);\n  };\n\n  gantt._getProjectEnd = function () {\n    if (gantt.config.project_end) {\n      return gantt.config.project_end;\n    } else {\n      var tasks = gantt.getTaskByTime();\n      tasks = tasks.sort(function (a, b) {\n        return +a.end_date > +b.end_date ? 1 : -1;\n      });\n      return tasks.length ? tasks[tasks.length - 1].end_date : null;\n    }\n  };\n\n  gantt._getProjectStart = function () {\n    if (gantt.config.project_start) {\n      return gantt.config.project_start;\n    } // use timeline start if project start is not specified\n\n\n    if (gantt.config.start_date) {\n      return gantt.config.start_date;\n    }\n\n    if (gantt.getState().min_date) {\n      return gantt.getState().min_date;\n    } // earliest task start if neither project start nor timeline are specified\n\n\n    var tasks = gantt.getTaskByTime();\n    tasks = tasks.sort(function (a, b) {\n      return +a.start_date > +b.start_date ? 1 : -1;\n    });\n    return tasks.length ? tasks[0].start_date : null;\n  };\n\n  var getDefaultTaskDate = function getDefaultTaskDate(item, parent_id) {\n    var parentExists = parent_id && parent_id != gantt.config.root_id && gantt.isTaskExists(parent_id);\n    var parent = parentExists ? gantt.getTask(parent_id) : false,\n        startDate = null;\n\n    if (parent) {\n      if (gantt.config.schedule_from_end) {\n        startDate = gantt.calculateEndDate({\n          start_date: parent.end_date,\n          duration: -gantt.config.duration_step,\n          task: item\n        });\n      } else {\n        startDate = parent.start_date;\n      }\n    } else if (gantt.config.schedule_from_end) {\n      startDate = gantt.calculateEndDate({\n        start_date: gantt._getProjectEnd(),\n        duration: -gantt.config.duration_step,\n        task: item\n      });\n    } else {\n      var first = gantt.getTaskByIndex(0);\n      startDate = first ? first.start_date ? first.start_date : first.end_date ? gantt.calculateEndDate({\n        start_date: first.end_date,\n        duration: -gantt.config.duration_step,\n        task: item\n      }) : null : gantt.config.start_date || gantt.getState().min_date;\n    }\n\n    gantt.assert(startDate, \"Invalid dates\");\n    return new Date(startDate);\n  };\n\n  gantt._set_default_task_timing = function (task) {\n    task.start_date = task.start_date || getDefaultTaskDate(task, gantt.getParent(task));\n    task.duration = task.duration || gantt.config.duration_step;\n    task.end_date = task.end_date || gantt.calculateEndDate(task);\n  };\n\n  gantt.createTask = function (item, parent, index) {\n    item = item || {};\n    if (!gantt.defined(item.id)) item.id = gantt.uid();\n\n    if (!item.start_date) {\n      item.start_date = getDefaultTaskDate(item, parent);\n    }\n\n    if (item.text === undefined) {\n      item.text = gantt.locale.labels.new_task;\n    }\n\n    if (item.duration === undefined) {\n      item.duration = 1;\n    }\n\n    if (this.isTaskExists(parent)) {\n      this.setParent(item, parent, true);\n      var parentObj = this.getTask(parent);\n      parentObj.$open = true;\n    }\n\n    if (!this.callEvent(\"onTaskCreated\", [item])) {\n      return null;\n    }\n\n    if (this.config.details_on_create) {\n      //GS-761: assert unique ID\n      if (gantt.isTaskExists(item.id)) {\n        var task = gantt.getTask(item.id);\n\n        if (task.$index != item.$index) {\n          // Someone may try to mistakenly add a task with the same ID, and most likely\n          // use the string format for the dates. Gantt shouldn't break in this scenario\n          if (item.start_date && typeof item.start_date === \"string\") {\n            item.start_date = this.date.parseDate(item.start_date, \"parse_date\");\n          }\n\n          if (item.end_date && typeof item.end_date === \"string\") {\n            item.end_date = this.date.parseDate(item.end_date, \"parse_date\");\n          }\n\n          this.$data.tasksStore.updateItem(item.id, item);\n        }\n      } else {\n        item.$new = true;\n        this.silent(function () {\n          gantt.$data.tasksStore.addItem(item, index);\n        });\n      }\n\n      this.selectTask(item.id);\n      this.refreshData();\n      this.showLightbox(item.id);\n    } else {\n      if (this.addTask(item, parent, index)) {\n        this.showTask(item.id);\n        this.selectTask(item.id);\n      }\n    }\n\n    return item.id;\n  };\n\n  gantt._update_flags = function (oldid, newid) {\n    //  TODO: need a proper way to update all possible flags\n    var store = gantt.$data.tasksStore;\n\n    if (oldid === undefined) {\n      this._lightbox_id = null;\n      store.silent(function () {\n        store.unselect();\n      }); // GS-1522. If we have multiselect, unselect all previously selected tasks\n\n      if (this.getSelectedTasks) {\n        this._multiselect.reset();\n      }\n\n      if (this._tasks_dnd && this._tasks_dnd.drag) {\n        this._tasks_dnd.drag.id = null;\n      }\n    } else {\n      if (this._lightbox_id == oldid) this._lightbox_id = newid; // TODO: probably can be removed\n\n      if (store.getSelectedId() == oldid) {\n        store.silent(function () {\n          store.unselect(oldid);\n          store.select(newid);\n        });\n      }\n\n      if (this._tasks_dnd && this._tasks_dnd.drag && this._tasks_dnd.drag.id == oldid) {\n        this._tasks_dnd.drag.id = newid;\n      }\n    }\n  };\n\n  var getTaskTimingMode = function getTaskTimingMode(task, force) {\n    var task_type = gantt.getTaskType(task.type);\n    var state = {\n      type: task_type,\n      $no_start: false,\n      $no_end: false\n    };\n\n    if (!force && task_type == task.$rendered_type) {\n      state.$no_start = task.$no_start;\n      state.$no_end = task.$no_end;\n      return state;\n    }\n\n    if (task_type == gantt.config.types.project) {\n      //project duration is always defined by children duration\n      state.$no_end = state.$no_start = true;\n    } else if (task_type != gantt.config.types.milestone) {\n      //tasks can have fixed duration, children duration(as projects), or one date fixed, and other defined by nested items\n      state.$no_end = !(task.end_date || task.duration);\n      state.$no_start = !task.start_date;\n\n      if (gantt._isAllowedUnscheduledTask(task)) {\n        state.$no_end = state.$no_start = false;\n      }\n    }\n\n    return state;\n  };\n\n  gantt._init_task_timing = function (task) {\n    var task_mode = getTaskTimingMode(task, true);\n    var dirty = task.$rendered_type != task_mode.type;\n    var task_type = task_mode.type;\n\n    if (dirty) {\n      task.$no_start = task_mode.$no_start;\n      task.$no_end = task_mode.$no_end;\n      task.$rendered_type = task_mode.type;\n    }\n\n    if (dirty && task_type != this.config.types.milestone) {\n      if (task_type == this.config.types.project) {\n        //project duration is always defined by children duration\n        this._set_default_task_timing(task);\n\n        task.$calculate_duration = false; // do not recalculate duration below\n      }\n    }\n\n    if (task_type == this.config.types.milestone) {\n      task.end_date = task.start_date;\n    }\n\n    if (task.start_date && task.end_date && task.$calculate_duration !== false) {\n      task.duration = this.calculateDuration(task);\n    }\n\n    if (!task.$calculate_duration) {\n      task.$calculate_duration = true;\n    }\n\n    if (!task.end_date) {\n      task.end_date = task.start_date;\n    }\n\n    task.duration = task.duration || 0; // GS-1145. We should let tasks to have 0 duration if user wants it\n\n    if (this.config.min_duration === 0 && task.duration === 0) {\n      task.$no_end = false;\n    } // work calendar of task has changed\n\n\n    var effectiveCalendar = this.getTaskCalendar(task);\n\n    if (task.$effective_calendar && task.$effective_calendar !== effectiveCalendar.id) {\n      updateTaskTiming(task);\n\n      if (this.config.inherit_calendar && this.isSummaryTask(task)) {\n        this.eachTask(function (child) {\n          updateTaskTiming(child);\n        }, task.id);\n      }\n    }\n\n    task.$effective_calendar = effectiveCalendar.id;\n  };\n\n  function updateTaskTiming(task) {\n    task.$effective_calendar = gantt.getTaskCalendar(task).id;\n    task.start_date = gantt.getClosestWorkTime({\n      dir: \"future\",\n      date: task.start_date,\n      unit: gantt.config.duration_unit,\n      task: task\n    });\n    task.end_date = gantt.calculateEndDate(task);\n  }\n\n  gantt.isSummaryTask = function (task) {\n    gantt.assert(task && task instanceof Object, \"Invalid argument <b>task</b>=\" + task + \" of gantt.isSummaryTask. Task object was expected\");\n    var mode = getTaskTimingMode(task);\n    return !!(mode.$no_end || mode.$no_start);\n  }; // downward calculation of project duration\n\n\n  gantt.resetProjectDates = function (task) {\n    var taskMode = getTaskTimingMode(task);\n\n    if (taskMode.$no_end || taskMode.$no_start) {\n      var info = getSubtaskInfo(task.id);\n      assignProjectDates.call(this, task, taskMode, info.start_date, info.end_date);\n      task.$rollup = info.rollup;\n    }\n  };\n\n  function assignProjectDates(task, taskTiming, from, to) {\n    if (taskTiming.$no_start) {\n      if (from) {\n        task.start_date = new Date(from);\n      } else {\n        task.start_date = getDefaultTaskDate(task, this.getParent(task));\n      }\n    }\n\n    if (taskTiming.$no_end) {\n      if (to) {\n        task.end_date = new Date(to);\n      } else {\n        task.end_date = this.calculateEndDate({\n          start_date: task.start_date,\n          duration: this.config.duration_step,\n          task: task\n        });\n      }\n    }\n\n    if (taskTiming.$no_start || taskTiming.$no_end) {\n      this._init_task_timing(task);\n    }\n  }\n\n  gantt.getSubtaskDuration = function (taskId) {\n    var res = 0,\n        root = taskId !== undefined ? taskId : gantt.config.root_id;\n    this.eachTask(function (child) {\n      if (this.getTaskType(child.type) == gantt.config.types.project || this.isUnscheduledTask(child)) return;\n      res += child.duration;\n    }, root);\n    return res;\n  };\n\n  function getSubtaskInfo(taskId) {\n    var min = null,\n        max = null,\n        root = taskId !== undefined ? taskId : gantt.config.root_id,\n        rollup = [];\n    gantt.eachTask(function (child) {\n      if (gantt.getTaskType(child.type) == gantt.config.types.project || gantt.isUnscheduledTask(child)) return;\n\n      if (child.rollup) {\n        rollup.push(child.id);\n      }\n\n      if (child.start_date && !child.$no_start && (!min || min > child.start_date.valueOf())) min = child.start_date.valueOf();\n      if (child.end_date && !child.$no_end && (!max || max < child.end_date.valueOf())) max = child.end_date.valueOf();\n    }, root);\n    return {\n      start_date: min ? new Date(min) : null,\n      end_date: max ? new Date(max) : null,\n      rollup: rollup\n    };\n  }\n\n  gantt.getSubtaskDates = function (task_id) {\n    var info = getSubtaskInfo(task_id);\n    return {\n      start_date: info.start_date,\n      end_date: info.end_date\n    };\n  }; // upward calculation of project duration\n\n\n  gantt._update_parents = function (taskId, silent, updateAll) {\n    if (!taskId) return;\n    var task = this.getTask(taskId);\n\n    if (task.rollup) {\n      updateAll = true;\n    }\n\n    var pid = this.getParent(task);\n    var taskTiming = getTaskTimingMode(task);\n    var has_changed = true; // GS-761 the dates check is necessary for adding empty tasks: gantt.addTask({id:\"2\"})\n\n    if (updateAll || task.start_date && task.end_date && (taskTiming.$no_start || taskTiming.$no_end)) {\n      var oldStart = task.start_date.valueOf(),\n          oldEnd = task.end_date.valueOf();\n      gantt.resetProjectDates(task); // not refresh parent projects if dates hasn't changed\n\n      if (!updateAll && oldStart == task.start_date.valueOf() && oldEnd == task.end_date.valueOf()) {\n        has_changed = false;\n      }\n\n      if (has_changed && !silent) {\n        this.refreshTask(task.id, true);\n      }\n    }\n\n    if (has_changed && pid && this.isTaskExists(pid)) {\n      this._update_parents(pid, silent, updateAll);\n    }\n  };\n\n  gantt.roundDate = function (config) {\n    var scale = gantt.getScale();\n\n    if (helpers.isDate(config)) {\n      config = {\n        date: config,\n        unit: scale ? scale.unit : gantt.config.duration_unit,\n        step: scale ? scale.step : gantt.config.duration_step\n      };\n    }\n\n    var date = config.date,\n        steps = config.step,\n        unit = config.unit;\n\n    if (!scale) {\n      return date;\n    }\n\n    var upper, lower, colIndex;\n\n    if (unit == scale.unit && steps == scale.step && +date >= +scale.min_date && +date <= +scale.max_date) {\n      //find date in time scale config\n      colIndex = Math.floor(gantt.columnIndexByDate(date));\n\n      if (!scale.trace_x[colIndex]) {\n        colIndex -= 1; // end of time scale\n\n        if (scale.rtl) {\n          colIndex = 0;\n        }\n      }\n\n      lower = new Date(scale.trace_x[colIndex]);\n      upper = gantt.date.add(lower, steps, unit);\n    } else {\n      colIndex = Math.floor(gantt.columnIndexByDate(date));\n      upper = gantt.date[unit + \"_start\"](new Date(scale.min_date));\n\n      if (scale.trace_x[colIndex]) {\n        upper = gantt.date[unit + \"_start\"](scale.trace_x[colIndex]); // end of time scale\n      }\n\n      while (+upper < +date) {\n        upper = gantt.date[unit + \"_start\"](gantt.date.add(upper, steps, unit));\n        var tzOffset = upper.getTimezoneOffset();\n        upper = gantt._correct_dst_change(upper, tzOffset, upper, unit);\n        if (gantt.date[unit + '_start']) upper = gantt.date[unit + '_start'](upper);\n      }\n\n      lower = gantt.date.add(upper, -1 * steps, unit);\n    }\n\n    if (config.dir && config.dir == 'future') return upper;\n    if (config.dir && config.dir == 'past') return lower;\n\n    if (Math.abs(date - lower) < Math.abs(upper - date)) {\n      return lower;\n    } else {\n      return upper;\n    }\n  };\n\n  gantt.correctTaskWorkTime = function (task) {\n    if (gantt.config.work_time && gantt.config.correct_work_time) {\n      if (!this.isWorkTime(task.start_date, undefined, task)) {\n        task.start_date = this.getClosestWorkTime({\n          date: task.start_date,\n          dir: 'future',\n          task: task\n        });\n        task.end_date = this.calculateEndDate(task);\n      } else if (!this.isWorkTime(new Date(+task.end_date - 1), undefined, task)) {\n        task.end_date = this.calculateEndDate(task);\n      }\n    }\n  };\n\n  gantt.attachEvent(\"onBeforeTaskUpdate\", function (id, task) {\n    gantt._init_task_timing(task);\n\n    return true;\n  });\n  gantt.attachEvent(\"onBeforeTaskAdd\", function (id, task) {\n    gantt._init_task_timing(task);\n\n    return true;\n  });\n  gantt.attachEvent(\"onAfterTaskMove\", function (id, parent, tindex) {\n    gantt._init_task_timing(gantt.getTask(id));\n\n    return true;\n  });\n};","// TODO: rework public api for date methods\nvar utils = require(\"../../utils/utils\");\n\nvar createWorkTimeFacade = function createWorkTimeFacade(calendarManager, timeCalculator) {\n  return {\n    getWorkHours: function getWorkHours(date) {\n      return timeCalculator.getWorkHours(date);\n    },\n    setWorkTime: function setWorkTime(config) {\n      return timeCalculator.setWorkTime(config);\n    },\n    unsetWorkTime: function unsetWorkTime(config) {\n      timeCalculator.unsetWorkTime(config);\n    },\n    isWorkTime: function isWorkTime(date, unit, task) {\n      return timeCalculator.isWorkTime(date, unit, task);\n    },\n    getClosestWorkTime: function getClosestWorkTime(config) {\n      return timeCalculator.getClosestWorkTime(config);\n    },\n    calculateDuration: function calculateDuration(start_date, end_date, task) {\n      return timeCalculator.calculateDuration(start_date, end_date, task);\n    },\n    _hasDuration: function _hasDuration(start_date, end_date, task) {\n      return timeCalculator.hasDuration(start_date, end_date, task);\n    },\n    calculateEndDate: function calculateEndDate(start, duration, unit, task) {\n      return timeCalculator.calculateEndDate(start, duration, unit, task);\n    },\n    mergeCalendars: utils.bind(calendarManager.mergeCalendars, calendarManager),\n    createCalendar: utils.bind(calendarManager.createCalendar, calendarManager),\n    addCalendar: utils.bind(calendarManager.addCalendar, calendarManager),\n    getCalendar: utils.bind(calendarManager.getCalendar, calendarManager),\n    getCalendars: utils.bind(calendarManager.getCalendars, calendarManager),\n    getResourceCalendar: utils.bind(calendarManager.getResourceCalendar, calendarManager),\n    getTaskCalendar: utils.bind(calendarManager.getTaskCalendar, calendarManager),\n    deleteCalendar: utils.bind(calendarManager.deleteCalendar, calendarManager)\n  };\n};\n\nmodule.exports = {\n  create: createWorkTimeFacade\n};","function CalendarDisabledTimeStrategy(gantt, argumentsHelper) {\n  this.argumentsHelper = argumentsHelper;\n  this.$gantt = gantt;\n}\n\nCalendarDisabledTimeStrategy.prototype = {\n  getWorkHours: function getWorkHours() {\n    return [0, 24];\n  },\n  setWorkTime: function setWorkTime() {\n    return true;\n  },\n  unsetWorkTime: function unsetWorkTime() {\n    return true;\n  },\n  isWorkTime: function isWorkTime() {\n    return true;\n  },\n  getClosestWorkTime: function getClosestWorkTime(config) {\n    var config = this.argumentsHelper.getClosestWorkTimeArguments.apply(this.argumentsHelper, arguments);\n    return config.date;\n  },\n  calculateDuration: function calculateDuration() {\n    var config = this.argumentsHelper.getDurationArguments.apply(this.argumentsHelper, arguments);\n    var from = config.start_date,\n        to = config.end_date,\n        unit = config.unit,\n        step = config.step;\n    return this._calculateDuration(from, to, unit, step);\n  },\n  _calculateDuration: function _calculateDuration(start, end, unit, step) {\n    var dateHelper = this.$gantt.date;\n    var fixedUnits = {\n      \"week\": 1000 * 60 * 60 * 24 * 7,\n      \"day\": 1000 * 60 * 60 * 24,\n      \"hour\": 1000 * 60 * 60,\n      \"minute\": 1000 * 60\n    };\n    var res = 0;\n\n    if (fixedUnits[unit]) {\n      res = Math.round((end - start) / (step * fixedUnits[unit]));\n    } else {\n      var from = new Date(start),\n          to = new Date(end);\n\n      while (from.valueOf() < to.valueOf()) {\n        res += 1;\n        from = dateHelper.add(from, step, unit);\n      }\n\n      if (from.valueOf() != end.valueOf()) {\n        res += (to - from) / (dateHelper.add(from, step, unit) - from);\n      }\n    }\n\n    return Math.round(res);\n  },\n  hasDuration: function hasDuration() {\n    var config = this.argumentsHelper.getDurationArguments.apply(this.argumentsHelper, arguments);\n    var from = config.start_date,\n        to = config.end_date,\n        unit = config.unit;\n\n    if (!unit) {\n      return false;\n    }\n\n    from = new Date(from);\n    to = new Date(to);\n    return from.valueOf() < to.valueOf();\n  },\n  hasWorkTime: function hasWorkTime() {\n    return true;\n  },\n  equals: function equals(calendar) {\n    if (!(calendar instanceof CalendarDisabledTimeStrategy)) {\n      return false;\n    }\n\n    return true;\n  },\n  calculateEndDate: function calculateEndDate() {\n    var config = this.argumentsHelper.calculateEndDateArguments.apply(this.argumentsHelper, arguments);\n    var start = config.start_date,\n        duration = config.duration,\n        unit = config.unit,\n        step = config.step;\n    return this.$gantt.date.add(start, step * duration, unit);\n  }\n};\nmodule.exports = CalendarDisabledTimeStrategy;","var createArgumentsHelper = require(\"./calendar_arguments_helper\"),\n    NoWorkTimeCalendar = require(\"./strategy/no_work_time\");\n\nfunction TimeCalculator(calendarManager) {\n  this.$gantt = calendarManager.$gantt;\n  this.argumentsHelper = createArgumentsHelper(this.$gantt);\n  this.calendarManager = calendarManager;\n  this.$disabledCalendar = new NoWorkTimeCalendar(this.$gantt, this.argumentsHelper);\n}\n\nTimeCalculator.prototype = {\n  _getCalendar: function _getCalendar(config) {\n    var calendar;\n\n    if (!this.$gantt.config.work_time) {\n      calendar = this.$disabledCalendar;\n    } else {\n      var manager = this.calendarManager;\n\n      if (config.task) {\n        calendar = manager.getTaskCalendar(config.task);\n      } else if (config.id) {\n        calendar = manager.getTaskCalendar(config);\n      } else if (config.calendar) {\n        calendar = config.calendar;\n      }\n\n      if (!calendar) {\n        calendar = manager.getTaskCalendar();\n      }\n    }\n\n    return calendar;\n  },\n  getWorkHours: function getWorkHours(config) {\n    config = this.argumentsHelper.getWorkHoursArguments.apply(this.argumentsHelper, arguments);\n\n    var calendar = this._getCalendar(config);\n\n    return calendar.getWorkHours(config.date);\n  },\n  setWorkTime: function setWorkTime(config, calendar) {\n    config = this.argumentsHelper.setWorkTimeArguments.apply(this.argumentsHelper, arguments);\n    if (!calendar) calendar = this.calendarManager.getCalendar(); // Global\n\n    return calendar.setWorkTime(config);\n  },\n  unsetWorkTime: function unsetWorkTime(config, calendar) {\n    config = this.argumentsHelper.unsetWorkTimeArguments.apply(this.argumentsHelper, arguments);\n    if (!calendar) calendar = this.calendarManager.getCalendar(); // Global\n\n    return calendar.unsetWorkTime(config);\n  },\n  isWorkTime: function isWorkTime(date, unit, task, calendar) {\n    var config = this.argumentsHelper.isWorkTimeArguments.apply(this.argumentsHelper, arguments);\n    calendar = this._getCalendar(config);\n    return calendar.isWorkTime(config);\n  },\n  getClosestWorkTime: function getClosestWorkTime(config) {\n    config = this.argumentsHelper.getClosestWorkTimeArguments.apply(this.argumentsHelper, arguments);\n\n    var calendar = this._getCalendar(config);\n\n    return calendar.getClosestWorkTime(config);\n  },\n  calculateDuration: function calculateDuration() {\n    // start_date_date, end_date, task\n    var config = this.argumentsHelper.getDurationArguments.apply(this.argumentsHelper, arguments);\n\n    var calendar = this._getCalendar(config);\n\n    return calendar.calculateDuration(config);\n  },\n  hasDuration: function hasDuration() {\n    var config = this.argumentsHelper.hasDurationArguments.apply(this.argumentsHelper, arguments);\n\n    var calendar = this._getCalendar(config);\n\n    return calendar.hasDuration(config);\n  },\n  calculateEndDate: function calculateEndDate(config) {\n    // start_date, duration, unit, task\n    var config = this.argumentsHelper.calculateEndDateArguments.apply(this.argumentsHelper, arguments);\n\n    var calendar = this._getCalendar(config);\n\n    return calendar.calculateEndDate(config);\n  }\n};\nmodule.exports = TimeCalculator;","module.exports = function () {\n  function getResourcesCalendarKey(resourceAssignments) {\n    return resourceAssignments.map(function (res) {\n      if (res && res.resource_id) {\n        return res.resource_id;\n      } else {\n        return res;\n      }\n    }).sort().join(\"-\");\n  }\n\n  var dynamicCalendars = {};\n\n  function mergeResourceCalendars(resourceAssignments, manager) {\n    return manager.mergeCalendars(resourceAssignments.map(function (assignment) {\n      var resourceId = assignment && assignment.resource_id ? assignment.resource_id : assignment;\n      return manager.getResourceCalendar(resourceId);\n    }));\n  }\n\n  function getCalendarIdFromMultipleResources(resourceAssignments, manager) {\n    var key = getResourcesCalendarKey(resourceAssignments);\n\n    if (!resourceAssignments.length) {\n      return null;\n    } else if (resourceAssignments.length === 1) {\n      return manager.getResourceCalendar(key).id;\n    } else if (dynamicCalendars[key]) {\n      return dynamicCalendars[key].id;\n    } else {\n      var tempCalendar = mergeResourceCalendars(resourceAssignments, manager);\n      dynamicCalendars[key] = tempCalendar;\n      return manager.addCalendar(tempCalendar);\n    }\n  }\n\n  return {\n    getCalendarIdFromMultipleResources: getCalendarIdFromMultipleResources\n  };\n};","function _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nmodule.exports = {\n  isLegacyResourceCalendarFormat: function isLegacyResourceCalendarFormat(resourceCalendarsProperty) {\n    // modern format:\n    //gantt.config.resource_calendars = {\n    //\tresourceId: calendarId,\n    //\tresourceId: calendarId,\n    //\tresourceId: calendarId\n    //\t};\n    // legacy format:\n    // gantt.config.resource_calendars = {\n    //\t\"resourceProperty\": {\n    //\t\tresourceId: calendarId,\n    //\t\tresourceId: calendarId,\n    //\t\tresourceId: calendarId\n    //\t\t}\n    //\t};\n    if (!resourceCalendarsProperty) {\n      return false;\n    }\n\n    for (var i in resourceCalendarsProperty) {\n      if (resourceCalendarsProperty[i] && _typeof(resourceCalendarsProperty[i]) === \"object\") {\n        return true;\n      }\n    }\n\n    return false;\n  },\n  getResourceProperty: function getResourceProperty(config) {\n    var resourceCalendarsConfig = config.resource_calendars;\n    var propertyName = config.resource_property;\n\n    if (this.isLegacyResourceCalendarFormat(resourceCalendarsConfig)) {\n      for (var i in config) {\n        propertyName = i;\n        break;\n      }\n    }\n\n    return propertyName;\n  },\n  getCalendarIdFromLegacyConfig: function getCalendarIdFromLegacyConfig(task, config) {\n    if (config) {\n      for (var field in config) {\n        var resource = config[field];\n\n        if (task[field]) {\n          var calendarId = resource[task[field]];\n\n          if (calendarId) {\n            return calendarId;\n          }\n        }\n      }\n    }\n\n    return null;\n  }\n};","export class DateDurationCache  {\r\n\tprivate _cache: any;\r\n\tconstructor() {\r\n\t\tthis.clear();\r\n\t}\r\n\r\n\t_getCacheObject(startDate: Date, unit: string, step:number){\r\n\t\tconst cache = this._cache;\r\n\t\tif (!cache[unit]) {\r\n\t\t\tcache[unit] = [];\r\n\t\t}\r\n\t\tlet unitCache = cache[unit];\r\n\t\tif(!unitCache) {\r\n\t\t\tunitCache = cache[unit] = {};\r\n\t\t}\r\n\r\n\t\tlet stepCache = unitCache[step];\r\n\t\tif(!stepCache) {\r\n\t\t\tstepCache = unitCache[step] = {};\r\n\t\t}\r\n\r\n\t\tconst year = startDate.getFullYear();\r\n\t\tlet yearCache = stepCache[year];\r\n\t\tif(!yearCache){\r\n\t\t\tyearCache = stepCache[year] = {durations: {}, endDates: {}};\r\n\t\t}\r\n\r\n\t\treturn yearCache;\r\n\t}\r\n\t_endDateCacheKey(startDate: number, duration: number){\r\n\t\treturn String(startDate) + \"-\" + String(duration);\r\n\t}\r\n\t_durationCacheKey(startDate: number, endDate: number){\r\n\t\treturn String(startDate) + \"-\" + String(endDate);\r\n\t}\r\n\tgetEndDate(startDate: Date, duration: number, unit: string, step: number, compute: () => Date): number|null{\r\n\t\tconst cache = this._getCacheObject(startDate, unit, step);\r\n\r\n\t\tconst startDateTimestamp = startDate.valueOf();\r\n\t\tconst key = this._endDateCacheKey(startDateTimestamp, duration);\r\n\t\tlet endDate;\r\n\t\tif(cache.endDates[key] === undefined){\r\n\t\t\tconst result = compute();\r\n\t\t\tconst resultTimestamp = result.valueOf();\r\n\t\t\tcache.endDates[key] = resultTimestamp;\r\n\t\t\tcache.durations[this._durationCacheKey(startDateTimestamp, resultTimestamp)] = duration;\r\n\t\t\tendDate = result;\r\n\t\t}else{\r\n\t\t\tendDate = new Date(cache.endDates[key]);\r\n\t\t}\r\n\r\n\t\treturn endDate;\r\n\t}\r\n\r\n\tgetDuration(startDate: Date, endDate: Date, unit: string, step: number, compute: () => number): number|null{\r\n\t\tconst cache = this._getCacheObject(startDate, unit, step);\r\n\r\n\t\tconst startDateTimestamp = startDate.valueOf();\r\n\t\tconst endDateTimestamp = endDate.valueOf();\r\n\t\tconst key = this._durationCacheKey(startDateTimestamp, endDateTimestamp);\r\n\t\tlet duration;\r\n\t\tif(cache.durations[key] === undefined){\r\n\t\t\tconst result = compute();\r\n\t\t\tcache.durations[key] = result.valueOf();\r\n\r\n\t\t\t// can't populate end date due to logic of end date calculation, current unit tests capture it\r\n\t\t\t// cache.endDates[this._endDateCacheKey(startDateTimestamp, result)] = endDateTimestamp;\r\n\t\t\tduration = result;\r\n\t\t}else{\r\n\t\t\tduration = cache.durations[key];\r\n\t\t}\r\n\r\n\t\treturn duration;\r\n\t}\r\n\r\n\tclear(): void{\r\n\t\tthis._cache = {};\r\n\t}\r\n}","\r\n\r\nexport class LargerUnitsCache {\r\n\tprivate _weekCache: Map<number, number>;\r\n\tprivate _monthCache: Map<number, number>;\r\n\tprivate _calendar: any;\r\n\tconstructor(calendar) {\r\n\t\tthis.clear();\r\n\t\tthis._calendar = calendar;\r\n\t}\r\n\r\n\tgetMinutesPerWeek = (weekStart: Date) => {\r\n\t\tconst key = weekStart.valueOf();\r\n\r\n\t\tif(this._weekCache.has(key)){\r\n\t\t\treturn this._weekCache.get(key);\r\n\t\t}\r\n\r\n\t\tconst calendar = this._calendar;\r\n\t\tconst gantt = this._calendar.$gantt;\r\n\r\n\t\tlet minutesPerWeek = 0;\r\n\t\tlet start = gantt.date.week_start(new Date(weekStart));\r\n\t\tfor(let i = 0; i < 7; i++){\r\n\t\t\tminutesPerWeek += calendar.getHoursPerDay(start) * 60;\r\n\t\t\tstart = gantt.date.add(start, 1, \"day\");\r\n\t\t}\r\n\r\n\t\tthis._weekCache.set(key, minutesPerWeek);\r\n\t\treturn minutesPerWeek;\r\n\t}\r\n\r\n\tgetMinutesPerMonth = (monthStart: Date) => {\r\n\t\tconst key = monthStart.valueOf();\r\n\r\n\t\tif(this._monthCache.has(key)){\r\n\t\t\treturn this._monthCache.get(key);\r\n\t\t}\r\n\r\n\t\tconst calendar = this._calendar;\r\n\t\tconst gantt = this._calendar.$gantt;\r\n\r\n\t\tlet minutesPerMonth = 0;\r\n\t\tlet start = gantt.date.week_start(new Date(monthStart));\r\n\t\tconst nextMonth = gantt.date.add(start, 1, \"month\").valueOf();\r\n\t\twhile(start.valueOf() < nextMonth){\r\n\t\t\tminutesPerMonth += calendar.getHoursPerDay(start) * 60;\r\n\t\t\tstart = gantt.date.add(start, 1, \"day\");\r\n\t\t}\r\n\r\n\t\tthis._monthCache.set(key, minutesPerMonth);\r\n\t\treturn minutesPerMonth;\r\n\t}\r\n\r\n\tclear = (): void => {\r\n\t\tthis._weekCache = new Map<number, number>();\r\n\t\tthis._monthCache = new Map<number, number>();\r\n\t}\r\n}","import { IWorkUnitCache } from \"./workunit_cache_interface\";\r\n\r\nexport class WorkUnitsObjectCache implements IWorkUnitCache {\r\n\tprivate _cache: any;\r\n\tconstructor() {\r\n\t\tthis.clear();\r\n\t}\r\n\r\n\tgetItem(unit: string, timestamp: string, value: Date): number|boolean {\r\n\t\tconst cache = this._cache;\r\n\t\tif (cache && cache[unit]) {\r\n\t\t\tconst units = cache[unit];\r\n\t\t\tif(units === undefined){\r\n\t\t\t\treturn -1;\r\n\t\t\t}\r\n\t\t\tconst subCache = units[value.getFullYear()];\r\n\t\t\tif (subCache && subCache[timestamp] !== undefined) {\r\n\t\t\t\treturn subCache[timestamp];\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn -1;\r\n\t}\r\n\tsetItem(unit: string, timestamp: string, value: boolean, rawValue: Date): void {\r\n\t\tif (!unit || !timestamp) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tconst cache = this._cache;\r\n\r\n\t\tif (!cache) {\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tif (!cache[unit]) {\r\n\t\t\tcache[unit] = [];\r\n\t\t}\r\n\t\tconst unitCache = cache[unit];\r\n\r\n\t\tconst year = rawValue.getFullYear();\r\n\t\tlet yearCache = unitCache[year];\r\n\t\tif(!yearCache){\r\n\t\t\tyearCache = unitCache[year] = {};\r\n\t\t}\r\n\t\tyearCache[timestamp] = value;\r\n\t}\r\n\tclear(): void{\r\n\t\tthis._cache = {};\r\n\t}\r\n}","\r\n\r\nimport { IWorkUnitCache } from \"./workunit_cache_interface\";\r\n\r\nexport class WorkUnitsMapCache implements IWorkUnitCache {\r\n\tprivate _cache: Map<string, Array<Map<string, boolean>>>;\r\n\tconstructor() {\r\n\t\tthis.clear();\r\n\t}\r\n\r\n\tgetItem(unit: string, timestamp: string, value: Date): number|boolean {\r\n\t\tif (this._cache.has(unit)) {\r\n\t\t\tconst unitCache = this._cache.get(unit);\r\n\r\n\t\t\tconst subCache = unitCache[value.getFullYear()];\r\n\t\t\tif (subCache && subCache.has(timestamp)) {\r\n\t\t\t\treturn subCache.get(timestamp);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn -1;\r\n\t}\r\n\tsetItem(unit: string, timestamp: string, value: boolean, rawValue: Date): void {\r\n\t\tif (!unit || !timestamp) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tconst cache = this._cache;\r\n\t\tconst year = rawValue.getFullYear();\r\n\r\n\t\tlet unitCache;\r\n\t\tif (!cache.has(unit)) {\r\n\t\t\tunitCache = [];\r\n\t\t\tcache.set(unit, unitCache);\r\n\t\t} else {\r\n\t\t\tunitCache = cache.get(unit);\r\n\t\t}\r\n\r\n\t\tlet yearCache = unitCache[year];\r\n\t\tif(!yearCache){\r\n\t\t\tyearCache = unitCache[year] = new Map<string, boolean>();\r\n\t\t}\r\n\r\n\r\n\t\tyearCache.set(timestamp, value);\r\n\t}\r\n\tclear(): void{\r\n\t\tthis._cache = new Map<string, Array<Map<string, boolean>>>();\r\n\t}\r\n}","function _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nvar createCacheObject = require(\"./work_unit_cache\").createCacheObject;\n\nvar LargerUnitsCache = require(\"./work_unit_cache\").LargerUnitsCache;\n\nvar utils = require(\"../../../utils/utils\");\n\nvar DateDurationCache = require(\"./work_unit_cache/date_duration_cache\").DateDurationCache;\n\nfunction CalendarWorkTimeStrategy(gantt, argumentsHelper) {\n  this.argumentsHelper = argumentsHelper;\n  this.$gantt = gantt;\n  this._workingUnitsCache = createCacheObject();\n  this._largeUnitsCache = new LargerUnitsCache(this);\n  this._dateDurationCache = new DateDurationCache();\n  this._worktime = null;\n  this._cached_timestamps = {};\n  this._cached_timestamps_count = 0;\n}\n\nCalendarWorkTimeStrategy.prototype = {\n  units: [\"year\", \"month\", \"week\", \"day\", \"hour\", \"minute\"],\n  _clearCaches: function _clearCaches() {\n    this._workingUnitsCache.clear();\n\n    this._largeUnitsCache.clear();\n\n    this._dateDurationCache.clear();\n  },\n  // cache previously calculated worktime\n  _getUnitOrder: function _getUnitOrder(unit) {\n    for (var i = 0, len = this.units.length; i < len; i++) {\n      if (this.units[i] == unit) return i;\n    }\n  },\n  _resetTimestampCache: function _resetTimestampCache() {\n    this._cached_timestamps = {};\n    this._cached_timestamps_count = 0;\n  },\n  _timestamp: function _timestamp(settings) {\n    // minor optimization, store calculated timestamps to reduce computations\n    // reset cache when number of keys exceeds large number where key lookup may became more expensive than the recalculation\n    if (this._cached_timestamps_count > 1000000) {\n      this._resetTimestampCache();\n    }\n\n    var timestamp = null;\n\n    if (settings.day || settings.day === 0) {\n      timestamp = settings.day;\n    } else if (settings.date) {\n      var value = String(settings.date.valueOf());\n\n      if (this._cached_timestamps[value]) {\n        timestamp = this._cached_timestamps[value];\n      } else {\n        // store worktime datestamp in utc so it could be recognized in different timezones (e.g. opened locally and sent to the export service in different timezone)\n        timestamp = Date.UTC(settings.date.getFullYear(), settings.date.getMonth(), settings.date.getDate());\n        this._cached_timestamps[value] = timestamp;\n        this._cached_timestamps_count++;\n      }\n    }\n\n    return timestamp;\n  },\n  _checkIfWorkingUnit: function _checkIfWorkingUnit(date, unit) {\n    // GS-596: If unit is larger than day or has a custom logic\n    if (!this[\"_is_work_\" + unit]) {\n      var from = this.$gantt.date[\"\".concat(unit, \"_start\")](new Date(date));\n      var to = this.$gantt.date.add(from, 1, unit);\n      return this.hasDuration(from, to);\n    }\n\n    return this[\"_is_work_\" + unit](date);\n  },\n  //checkings for particular time units\n  //methods for month-year-week can be defined, otherwise always return 'true'\n  _is_work_day: function _is_work_day(date) {\n    var val = this._getWorkHours(date);\n\n    if (Array.isArray(val)) {\n      return val.length > 0;\n    }\n\n    return false;\n  },\n  _is_work_hour: function _is_work_hour(date) {\n    var hours = this._getWorkHours(date); // [{start: 8*60*60, end: 12*60*60}, {start: 13*60*60, end: 17*60*60}]\n\n\n    var value = date.getHours();\n\n    for (var i = 0; i < hours.length; i++) {\n      if (value >= hours[i].startHour && value < hours[i].endHour) {\n        return true;\n      }\n    }\n\n    return false;\n  },\n  _getTimeOfDayStamp: function _getTimeOfDayStamp(date, dayEnd) {\n    var hours = date.getHours();\n\n    if (!date.getHours() && !date.getMinutes() && dayEnd) {\n      hours = 24;\n    }\n\n    return hours * 60 * 60 + date.getMinutes() * 60;\n  },\n  _is_work_minute: function _is_work_minute(date) {\n    var hours = this._getWorkHours(date); // [{start: 8*60*60, end: 12*60*60}, {start: 13*60*60, end: 17*60*60}]\n\n\n    var checkTime = this._getTimeOfDayStamp(date);\n\n    for (var i = 0; i < hours.length; i++) {\n      if (checkTime >= hours[i].start && checkTime < hours[i].end) {\n        return true;\n      }\n    }\n\n    return false;\n  },\n  _nextDate: function _nextDate(start, unit, step) {\n    return this.$gantt.date.add(start, step, unit);\n  },\n  _getWorkUnitsBetweenGeneric: function _getWorkUnitsBetweenGeneric(from, to, unit, step) {\n    var dateHelper = this.$gantt.date;\n    var start = new Date(from),\n        end = new Date(to);\n    step = step || 1;\n    var units = 0;\n    var next = null;\n    var stepStart, stepEnd; // calculating decimal durations, i.e. 2016-09-20 00:05:00 - 2016-09-20 01:00:00 ~ 0.95 instead of 1\n    // and also  2016-09-20 00:00:00 - 2016-09-20 00:05:00 ~ 0.05 instead of 1\n    // durations must be rounded later\n\n    var checkFirst = false;\n    stepStart = dateHelper[unit + \"_start\"](new Date(start));\n\n    if (stepStart.valueOf() != start.valueOf()) {\n      checkFirst = true;\n    }\n\n    var checkLast = false;\n    stepEnd = dateHelper[unit + \"_start\"](new Date(to));\n\n    if (stepEnd.valueOf() != to.valueOf()) {\n      checkLast = true;\n    }\n\n    var isLastStep = false;\n\n    while (start.valueOf() < end.valueOf()) {\n      next = this._nextDate(start, unit, step);\n      isLastStep = next.valueOf() > end.valueOf();\n\n      if (this._isWorkTime(start, unit)) {\n        if (checkFirst || checkLast && isLastStep) {\n          stepStart = dateHelper[unit + \"_start\"](new Date(start));\n          stepEnd = dateHelper.add(stepStart, step, unit);\n        }\n\n        if (checkFirst) {\n          checkFirst = false;\n          next = this._nextDate(stepStart, unit, step);\n          units += (stepEnd.valueOf() - start.valueOf()) / (stepEnd.valueOf() - stepStart.valueOf());\n        } else if (checkLast && isLastStep) {\n          checkLast = false;\n          units += (end.valueOf() - start.valueOf()) / (stepEnd.valueOf() - stepStart.valueOf());\n        } else {\n          units++;\n        }\n      } else {\n        var unitOrder = this._getUnitOrder(unit);\n\n        var biggerTimeUnit = this.units[unitOrder - 1];\n\n        if (biggerTimeUnit && !this._isWorkTime(start, biggerTimeUnit)) {\n          next = this._getClosestWorkTimeFuture(start, biggerTimeUnit);\n        }\n      }\n\n      start = next;\n    }\n\n    return units;\n  },\n  _getMinutesPerHour: function _getMinutesPerHour(date) {\n    var hourStart = this._getTimeOfDayStamp(date);\n\n    var hourEnd = this._getTimeOfDayStamp(this._nextDate(date, \"hour\", 1));\n\n    if (hourEnd === 0) {\n      hourEnd = 24 * 60 * 60;\n    }\n\n    var worktimes = this._getWorkHours(date);\n\n    for (var i = 0; i < worktimes.length; i++) {\n      var interval = worktimes[i];\n\n      if (hourStart >= interval.start && hourEnd <= interval.end) {\n        return 60; // hour inside a working interval, all hour is a work hour\n      } else if (hourStart < interval.end && hourEnd > interval.start) {\n        // hour is partially work time\n        var duration = Math.min(hourEnd, interval.end) - Math.max(hourStart, interval.start);\n        return duration / 60;\n      }\n    }\n\n    return 0;\n  },\n  _getMinutesPerDay: function _getMinutesPerDay(date) {\n    var hours = this._getWorkHours(date);\n\n    var res = 0;\n    hours.forEach(function (interval) {\n      res += interval.durationMinutes;\n    });\n    return res;\n  },\n  getHoursPerDay: function getHoursPerDay(date) {\n    var hours = this._getWorkHours(date);\n\n    var res = 0;\n    hours.forEach(function (interval) {\n      res += interval.durationHours;\n    });\n    return res;\n  },\n  _getWorkUnitsForRange: function _getWorkUnitsForRange(from, to, unit, step) {\n    var total = 0;\n    var start = new Date(from),\n        end = new Date(to);\n    var getUnitsPerDay;\n\n    if (unit == \"minute\") {\n      getUnitsPerDay = utils.bind(this._getMinutesPerDay, this);\n    } else {\n      getUnitsPerDay = utils.bind(this.getHoursPerDay, this);\n    }\n\n    while (start.valueOf() < end.valueOf()) {\n      if (end - start > 1000 * 60 * 60 * 24 * 32 && start.getDate() === 0) {\n        var units = this._largeUnitsCache.getMinutesPerMonth(start);\n\n        if (unit == \"hour\") {\n          units = units / 60;\n        }\n\n        total += units;\n        start = this.$gantt.date.add(start, 1, \"month\");\n        continue;\n      } else if (end - start > 1000 * 60 * 60 * 24 * 16) {\n        var weekStart = this.$gantt.date.week_start(new Date(start));\n\n        if (start.valueOf() === weekStart.valueOf()) {\n          var units = this._largeUnitsCache.getMinutesPerWeek(start);\n\n          if (unit == \"hour\") {\n            units = units / 60;\n          }\n\n          total += units;\n          start = this.$gantt.date.add(start, 7, \"day\");\n          continue;\n        }\n      } //\tif (this._isWorkTime(start, \"day\")) {\n\n\n      total += getUnitsPerDay(start); //\t}\n\n      start = this._nextDate(start, \"day\", 1);\n    }\n\n    return total / step;\n  },\n  _getMinutesBetweenSingleDay: function _getMinutesBetweenSingleDay(from, to) {\n    var range = this._getIntervalTimestamp(from, to);\n\n    var worktimes = this._getWorkHours(from);\n\n    var result = 0;\n\n    for (var i = 0; i < worktimes.length; i++) {\n      var interval = worktimes[i];\n\n      if (range.end >= interval.start && range.start <= interval.end) {\n        var minuteFrom = Math.max(interval.start, range.start);\n        var minuteTo = Math.min(interval.end, range.end);\n        result += (minuteTo - minuteFrom) / 60;\n        range.start = minuteTo;\n      }\n    }\n\n    return Math.floor(result);\n  },\n  _getMinutesBetween: function _getMinutesBetween(from, to, unit, step) {\n    var start = new Date(from),\n        end = new Date(to);\n    step = step || 1;\n    var firstDayStart = new Date(start);\n    var firstDayEnd = this.$gantt.date.add(this.$gantt.date.day_start(new Date(start)), 1, \"day\");\n\n    if (end.valueOf() <= firstDayEnd.valueOf()) {\n      return this._getMinutesBetweenSingleDay(from, to);\n    } else {\n      var lastDayStart = this.$gantt.date.day_start(new Date(end));\n      var lastDayEnd = end;\n\n      var startPart = this._getMinutesBetweenSingleDay(firstDayStart, firstDayEnd);\n\n      var endPart = this._getMinutesBetweenSingleDay(lastDayStart, lastDayEnd);\n\n      var rangePart = this._getWorkUnitsForRange(firstDayEnd, lastDayStart, unit, step);\n\n      var total = startPart + rangePart + endPart;\n      return total;\n    }\n  },\n  // optimized method for calculating work units duration of large time spans\n  // implemented for hours and minutes units, bigger time units don't benefit from the optimization so much\n  _getHoursBetween: function _getHoursBetween(from, to, unit, step) {\n    var start = new Date(from),\n        end = new Date(to);\n    step = step || 1;\n    var firstDayStart = new Date(start);\n    var firstDayEnd = this.$gantt.date.add(this.$gantt.date.day_start(new Date(start)), 1, \"day\");\n\n    if (end.valueOf() <= firstDayEnd.valueOf()) {\n      return Math.round(this._getMinutesBetweenSingleDay(from, to) / 60);\n    } else {\n      var lastDayStart = this.$gantt.date.day_start(new Date(end));\n      var lastDayEnd = end;\n      var startPart = this._getMinutesBetweenSingleDay(firstDayStart, firstDayEnd, unit, step) / 60;\n      var endPart = this._getMinutesBetweenSingleDay(lastDayStart, lastDayEnd, unit, step) / 60;\n\n      var rangePart = this._getWorkUnitsForRange(firstDayEnd, lastDayStart, unit, step);\n\n      var total = startPart + rangePart + endPart;\n      return Math.round(total);\n    }\n  },\n  getConfig: function getConfig() {\n    return this._worktime;\n  },\n  _setConfig: function _setConfig(settings) {\n    this._worktime = settings;\n\n    this._parseSettings();\n\n    this._clearCaches();\n  },\n  _parseSettings: function _parseSettings() {\n    var settings = this.getConfig();\n    settings.parsed = {\n      dates: {},\n      hours: null,\n      haveCustomWeeks: false,\n      customWeeks: {},\n      customWeeksRangeStart: null,\n      customWeeksRangeEnd: null,\n      customWeeksBoundaries: []\n    };\n    settings.parsed.hours = this._parseHours(settings.hours);\n\n    for (var i in settings.dates) {\n      settings.parsed.dates[i] = this._parseHours(settings.dates[i]);\n    }\n\n    if (settings.customWeeks) {\n      var minCustomRangeStart = null;\n      var maxCustomRangeEnd = null;\n\n      for (var i in settings.customWeeks) {\n        var customTime = settings.customWeeks[i];\n\n        if (customTime.from && customTime.to) {\n          var rangeStart = customTime.from;\n          var rangeEnd = customTime.to;\n\n          if (!minCustomRangeStart || minCustomRangeStart > rangeStart.valueOf()) {\n            minCustomRangeStart = rangeStart.valueOf();\n          }\n\n          if (!maxCustomRangeEnd || maxCustomRangeEnd < rangeEnd.valueOf()) {\n            maxCustomRangeEnd = rangeEnd.valueOf();\n          }\n\n          settings.parsed.customWeeksBoundaries.push({\n            from: rangeStart.valueOf(),\n            fromReadable: new Date(rangeStart),\n            to: rangeEnd.valueOf(),\n            toReadable: new Date(rangeEnd),\n            name: i\n          });\n          settings.parsed.haveCustomWeeks = true;\n          var currentWeek = settings.parsed.customWeeks[i] = {\n            from: customTime.from,\n            to: customTime.to,\n            hours: this._parseHours(customTime.hours),\n            dates: {}\n          };\n\n          for (var d in customTime.dates) {\n            currentWeek.dates[d] = this._parseHours(customTime.dates[d]);\n          }\n        }\n      }\n\n      settings.parsed.customWeeksRangeStart = minCustomRangeStart;\n      settings.parsed.customWeeksRangeEnd = maxCustomRangeEnd;\n    }\n  },\n  _tryChangeCalendarSettings: function _tryChangeCalendarSettings(payload) {\n    var backup = JSON.stringify(this.getConfig());\n    payload();\n\n    if (!this.hasWorkTime()) {\n      //\tthis.$gantt.assert(false, \"Invalid calendar settings, no worktime available\");\n      this._setConfig(JSON.parse(backup));\n\n      this._clearCaches();\n\n      return false;\n    }\n\n    return true;\n  },\n  _arraysEqual: function _arraysEqual(a, b) {\n    if (a === b) return true;\n    if (!a || !b) return false;\n    if (a.length != b.length) return false;\n\n    for (var i = 0; i < a.length; ++i) {\n      if (a[i] !== b[i]) return false;\n    }\n\n    return true;\n  },\n  _compareSettings: function _compareSettings(mySettings, thatSettings) {\n    if (!this._arraysEqual(mySettings.hours, thatSettings.hours)) {\n      return false;\n    }\n\n    var myDays = Object.keys(mySettings.dates);\n    var otherDates = Object.keys(thatSettings.dates);\n    myDays.sort();\n    otherDates.sort();\n\n    if (!this._arraysEqual(myDays, otherDates)) {\n      return false;\n    }\n\n    for (var i = 0; i < myDays.length; i++) {\n      var timestamp = myDays[i];\n      var myHours = mySettings.dates[timestamp];\n      var otherHours = mySettings.dates[timestamp]; // day settings not equal\n\n      if (myHours !== otherHours && // but still can be two arrays with the equivalent hour settings\n      !(Array.isArray(myHours) && Array.isArray(otherHours) && this._arraysEqual(myHours, otherHours))) {\n        return false;\n      }\n    }\n\n    return true;\n  },\n  equals: function equals(calendar) {\n    if (!(calendar instanceof CalendarWorkTimeStrategy)) {\n      return false;\n    }\n\n    var mySettings = this.getConfig();\n    var thatSettings = calendar.getConfig();\n\n    if (!this._compareSettings(mySettings, thatSettings)) {\n      return false;\n    }\n\n    if (mySettings.parsed.haveCustomWeeks && thatSettings.parsed.haveCustomWeeks) {\n      if (mySettings.parsed.customWeeksBoundaries.length != thatSettings.parsed.customWeeksBoundaries.length) {\n        return false;\n      }\n\n      for (var i in mySettings.parsed.customWeeks) {\n        var myWeek = mySettings.parsed.customWeeks[i];\n        var thatWeek = thatSettings.parsed.customWeeks[i];\n\n        if (!thatWeek) {\n          return false;\n        }\n\n        if (!this._compareSettings(myWeek, thatWeek)) {\n          return false;\n        }\n      }\n    } else if (mySettings.parse.haveCustomWeeks !== thatSettings.parsed.haveCustomWeeks) {\n      return false;\n    }\n\n    return true;\n  },\n  getWorkHours: function getWorkHours() {\n    var config = this.argumentsHelper.getWorkHoursArguments.apply(this.argumentsHelper, arguments);\n    return this._getWorkHours(config.date, false);\n  },\n  _getWorkHours: function _getWorkHours(date, parsed) {\n    var calendar = this.getConfig();\n\n    if (parsed !== false) {\n      calendar = calendar.parsed;\n    }\n\n    if (!date) {\n      return calendar.hours;\n    }\n\n    var dateValue = this._timestamp({\n      date: date\n    });\n\n    if (calendar.haveCustomWeeks) {\n      if (calendar.customWeeksRangeStart <= dateValue && calendar.customWeeksRangeEnd > dateValue) {\n        for (var i = 0; i < calendar.customWeeksBoundaries.length; i++) {\n          if (calendar.customWeeksBoundaries[i].from <= dateValue && calendar.customWeeksBoundaries[i].to > dateValue) {\n            calendar = calendar.customWeeks[calendar.customWeeksBoundaries[i].name];\n            break;\n          }\n        }\n      }\n    }\n\n    var hours = true;\n\n    if (calendar.dates[dateValue] !== undefined) {\n      hours = calendar.dates[dateValue]; //custom day\n    } else if (calendar.dates[date.getDay()] !== undefined) {\n      hours = calendar.dates[date.getDay()]; //week day\n    }\n\n    if (hours === true) {\n      return calendar.hours;\n    } else if (hours) {\n      return hours;\n    }\n\n    return [];\n  },\n  _getIntervalTimestamp: function _getIntervalTimestamp(from, to) {\n    var res = {\n      start: 0,\n      end: 0\n    };\n    res.start = from.getHours() * 60 * 60 + from.getMinutes() * 60 + from.getSeconds();\n    var endHours = to.getHours();\n\n    if (!endHours && !to.getMinutes() && !to.getSeconds() && from.valueOf() < to.valueOf()) {\n      endHours = 24;\n    }\n\n    res.end = endHours * 60 * 60 + to.getMinutes() * 60 + to.getSeconds();\n    return res;\n  },\n  _parseHours: function _parseHours(hours) {\n    if (Array.isArray(hours)) {\n      var timestampRanges = []; // worktime as seconds range\n\n      hours.forEach(function (hour) {\n        if (typeof hour === \"number\") {\n          timestampRanges.push(hour * 60 * 60);\n        } else if (typeof hour === \"string\") {\n          // \"12-13\", or \"12:00-13:00\", or \"12:00:00-13:00:00\"\n          hour.split(\"-\").map(function (time) {\n            return time.trim();\n          }).forEach(function (part) {\n            var parsed = part.split(\":\").map(function (time) {\n              return time.trim();\n            });\n            var value = parseInt(parsed[0] * 60 * 60);\n\n            if (parsed[1]) {\n              value += parseInt(parsed[1] * 60);\n            }\n\n            if (parsed[2]) {\n              value += parseInt(parsed[2]);\n            }\n\n            timestampRanges.push(value);\n          });\n        }\n      });\n      var timerangeConfig = [];\n\n      for (var i = 0; i < timestampRanges.length; i += 2) {\n        var start = timestampRanges[i];\n        var end = timestampRanges[i + 1];\n        var duration = end - start;\n        timerangeConfig.push({\n          start: start,\n          end: end,\n          startHour: Math.floor(start / (60 * 60)),\n          startMinute: Math.floor(start / 60),\n          endHour: Math.ceil(end / (60 * 60)),\n          endMinute: Math.ceil(end / 60),\n          durationSeconds: duration,\n          durationMinutes: duration / 60,\n          durationHours: duration / (60 * 60)\n        });\n      }\n\n      return timerangeConfig;\n    } else {\n      return hours;\n    }\n  },\n  setWorkTime: function setWorkTime(settings) {\n    return this._tryChangeCalendarSettings(utils.bind(function () {\n      var hours = settings.hours !== undefined ? settings.hours : true;\n\n      var timestamp = this._timestamp(settings);\n\n      var calendarConfig = this.getConfig();\n\n      if (timestamp !== null) {\n        calendarConfig.dates[timestamp] = hours;\n      } else if (!settings.customWeeks) {\n        calendarConfig.hours = hours;\n      }\n\n      if (settings.customWeeks) {\n        if (!calendarConfig.customWeeks) {\n          calendarConfig.customWeeks = {};\n        } // GS-1867. allow setWorkTime to exclude dates in the customWeeks range\n\n\n        if (typeof settings.customWeeks == \"string\") {\n          if (timestamp !== null) {\n            calendarConfig.customWeeks[settings.customWeeks].dates[timestamp] = hours;\n          } else if (!settings.customWeeks) {\n            calendarConfig.customWeeks[settings.customWeeks].hours = hours;\n          }\n        } else if (_typeof(settings.customWeeks) === \"object\" && Function.prototype.toString.call(settings.customWeeks.constructor) === \"function Object() { [native code] }\") {\n          for (var i in settings.customWeeks) {\n            calendarConfig.customWeeks[i] = settings.customWeeks[i];\n          }\n        }\n      }\n\n      this._parseSettings();\n\n      this._clearCaches();\n    }, this));\n  },\n  unsetWorkTime: function unsetWorkTime(settings) {\n    return this._tryChangeCalendarSettings(utils.bind(function () {\n      if (!settings) {\n        this.reset_calendar();\n      } else {\n        var timestamp = this._timestamp(settings);\n\n        if (timestamp !== null) {\n          delete this.getConfig().dates[timestamp];\n        }\n      } // Load updated settings and clear work units cache\n\n\n      this._parseSettings();\n\n      this._clearCaches();\n    }, this));\n  },\n  _isWorkTime: function _isWorkTime(date, unit) {\n    // Check if this item has in the cache\n    var useCache = true; //unit === \"day\"; // use cache only for days. In case of hours/minutes cache size grows too large and the overhead exceeds the gains\n\n    var isWorkUnit = -1;\n    var dateKey = null;\n\n    if (useCache) {\n      // use string keys\n      dateKey = String(date.valueOf());\n      isWorkUnit = this._workingUnitsCache.getItem(unit, dateKey, date);\n    }\n\n    if (isWorkUnit == -1) {\n      // calculate if not cached\n      isWorkUnit = this._checkIfWorkingUnit(date, unit);\n\n      if (useCache) {\n        this._workingUnitsCache.setItem(unit, dateKey, isWorkUnit, date);\n      }\n    }\n\n    return isWorkUnit;\n  },\n  isWorkTime: function isWorkTime() {\n    var config = this.argumentsHelper.isWorkTimeArguments.apply(this.argumentsHelper, arguments);\n    return this._isWorkTime(config.date, config.unit);\n  },\n  calculateDuration: function calculateDuration() {\n    var config = this.argumentsHelper.getDurationArguments.apply(this.argumentsHelper, arguments);\n\n    if (!config.unit) {\n      return false;\n    } //return this._calculateDuration(config.start_date, config.end_date, config.unit, config.step);\n\n\n    var self = this;\n    return this._dateDurationCache.getDuration(config.start_date, config.end_date, config.unit, config.step, function () {\n      return self._calculateDuration(config.start_date, config.end_date, config.unit, config.step);\n    });\n  },\n  _calculateDuration: function _calculateDuration(from, to, unit, step) {\n    var res = 0;\n    var sign = 1;\n\n    if (from.valueOf() > to.valueOf()) {\n      var tmp = to;\n      to = from;\n      from = tmp;\n      sign = -1;\n    }\n\n    if (unit == \"hour\" && step == 1) {\n      res = this._getHoursBetween(from, to, unit, step);\n    } else if (unit == \"minute\" && step == 1) {\n      // quick calculation for minutes with 1 minute step\n      res = this._getMinutesBetween(from, to, unit, step);\n    } else {\n      res = this._getWorkUnitsBetweenGeneric(from, to, unit, step);\n    } // getWorkUnits.. returns decimal durations\n\n\n    return sign * Math.round(res);\n  },\n  hasDuration: function hasDuration() {\n    var config = this.argumentsHelper.getDurationArguments.apply(this.argumentsHelper, arguments);\n    var from = config.start_date,\n        to = config.end_date,\n        unit = config.unit,\n        step = config.step;\n\n    if (!unit) {\n      return false;\n    }\n\n    var start = new Date(from),\n        end = new Date(to);\n    step = step || 1;\n\n    while (start.valueOf() < end.valueOf()) {\n      if (this._isWorkTime(start, unit)) return true;\n      start = this._nextDate(start, unit, step);\n    }\n\n    return false;\n  },\n  calculateEndDate: function calculateEndDate() {\n    var config = this.argumentsHelper.calculateEndDateArguments.apply(this.argumentsHelper, arguments);\n    var from = config.start_date,\n        duration = config.duration,\n        unit = config.unit,\n        step = config.step;\n    if (!unit) return false;\n    var mult = config.duration >= 0 ? 1 : -1;\n    duration = Math.abs(duration * 1); //\tvar endDate = this._calculateEndDate(from, duration, unit, step * mult);\n    //\treturn endDate;\n\n    var self = this;\n    return this._dateDurationCache.getEndDate(from, duration, unit, step * mult, function () {\n      return self._calculateEndDate(from, duration, unit, step * mult);\n    });\n  },\n  _calculateEndDate: function _calculateEndDate(from, duration, unit, step) {\n    if (!unit) return false;\n\n    if (step == 1 && unit == \"minute\") {\n      return this._calculateMinuteEndDate(from, duration, step);\n    } else if (step == -1 && unit == \"minute\") {\n      return this._subtractMinuteDate(from, duration, step);\n    } else if (step == 1 && unit == \"hour\") {\n      return this._calculateHourEndDate(from, duration, step);\n    } else {\n      var interval = this._addInterval(from, duration, unit, step, null);\n\n      return interval.end;\n    }\n  },\n  _addInterval: function _addInterval(start, duration, unit, step, stopAction) {\n    var added = 0;\n    var current = start;\n    var dstShift = false;\n\n    while (added < duration && !(stopAction && stopAction(current))) {\n      var next = this._nextDate(current, unit, step); // GS-1501. Correct hours after DST change\n\n\n      if (unit == \"day\") {\n        dstShift = dstShift || !current.getHours() && next.getHours();\n\n        if (dstShift) {\n          next.setHours(0);\n\n          if (next.getHours()) {// the day when the timezone is changed, try to correct hours next time\n          } else {\n            dstShift = false;\n          }\n        }\n      }\n\n      var dateValue = new Date(next.valueOf() + 1);\n\n      if (step > 0) {\n        dateValue = new Date(next.valueOf() - 1);\n      }\n\n      var workTimeCheck = this._isWorkTime(dateValue, unit);\n\n      if (workTimeCheck && !dstShift) {\n        added++;\n      }\n\n      current = next;\n    }\n\n    return {\n      end: current,\n      start: start,\n      added: added\n    };\n  },\n  _addHoursUntilDayEnd: function _addHoursUntilDayEnd(from, duration) {\n    var dayEnd = this.$gantt.date.add(this.$gantt.date.day_start(new Date(from)), 1, \"day\");\n    var added = 0;\n    var left = duration;\n\n    var range = this._getIntervalTimestamp(from, dayEnd);\n\n    var worktimes = this._getWorkHours(from);\n\n    for (var i = 0; i < worktimes.length && added < duration; i++) {\n      var interval = worktimes[i];\n\n      if (range.end >= interval.start && range.start <= interval.end) {\n        var minuteFrom = Math.max(interval.start, range.start);\n        var minuteTo = Math.min(interval.end, range.end);\n        var rangeHours = (minuteTo - minuteFrom) / (60 * 60);\n\n        if (rangeHours > left) {\n          rangeHours = left;\n          minuteTo = minuteFrom + left * 60 * 60;\n        }\n\n        var addHours = Math.round((minuteTo - minuteFrom) / (60 * 60));\n        added += addHours;\n        left -= addHours;\n        range.start = minuteTo;\n      }\n    }\n\n    var intervalEnd = dayEnd;\n\n    if (added === duration) {\n      intervalEnd = new Date(from.getFullYear(), from.getMonth(), from.getDate(), 0, 0, range.start);\n    }\n\n    return {\n      added: added,\n      end: intervalEnd\n    };\n  },\n  _calculateHourEndDate: function _calculateHourEndDate(from, duration, step) {\n    var start = new Date(from),\n        added = 0;\n    step = step || 1;\n    duration = Math.abs(duration * 1);\n\n    var interval = this._addHoursUntilDayEnd(start, duration);\n\n    added = interval.added;\n    start = interval.end;\n    var durationLeft = duration - added;\n\n    if (durationLeft) {\n      var current = start;\n\n      while (added < duration) {\n        var next = this._nextDate(current, \"day\", step); // reset to day start in case DST switch happens in the process\n\n\n        next.setHours(0);\n        next.setMinutes(0);\n        next.setSeconds(0);\n        var hoursPerDay = 0;\n\n        if (step > 0) {\n          hoursPerDay = this.getHoursPerDay(new Date(next.valueOf() - 1));\n        } else {\n          hoursPerDay = this.getHoursPerDay(new Date(next.valueOf() + 1));\n        }\n\n        if (added + hoursPerDay >= duration) {\n          break;\n        } else {\n          added += hoursPerDay;\n        }\n\n        current = next;\n      }\n\n      start = current;\n    }\n\n    if (added < duration) {\n      var durationLeft = duration - added;\n      interval = this._addHoursUntilDayEnd(start, durationLeft);\n      start = interval.end;\n    }\n\n    return start;\n  },\n  _addMinutesUntilHourEnd: function _addMinutesUntilHourEnd(from, duration) {\n    if (from.getMinutes() === 0) {\n      // already at hour end\n      return {\n        added: 0,\n        end: new Date(from)\n      };\n    }\n\n    var hourEnd = this.$gantt.date.add(this.$gantt.date.hour_start(new Date(from)), 1, \"hour\");\n    var added = 0;\n    var left = duration;\n\n    var range = this._getIntervalTimestamp(from, hourEnd);\n\n    var worktimes = this._getWorkHours(from);\n\n    for (var i = 0; i < worktimes.length && added < duration; i++) {\n      var interval = worktimes[i];\n\n      if (range.end >= interval.start && range.start <= interval.end) {\n        var minuteFrom = Math.max(interval.start, range.start);\n        var minuteTo = Math.min(interval.end, range.end);\n        var rangeMinutes = (minuteTo - minuteFrom) / 60;\n\n        if (rangeMinutes > left) {\n          rangeMinutes = left;\n          minuteTo = minuteFrom + left * 60;\n        } // TODO: verify testcase https://dhtmlxsupport.teamwork.com/desk/tickets/9625700/messages\n\n        /*if (rangeMinutes === 0) {\r\n        \trangeMinutes = left;\r\n        \tminuteTo = minuteFrom + (left * 60);\r\n        }*/\n\n\n        var addMinutes = Math.round((minuteTo - minuteFrom) / 60);\n        left -= addMinutes;\n        added += addMinutes;\n        range.start = minuteTo;\n      }\n    }\n\n    var intervalEnd = hourEnd;\n\n    if (added === duration) {\n      intervalEnd = new Date(from.getFullYear(), from.getMonth(), from.getDate(), 0, 0, range.start);\n    }\n\n    return {\n      added: added,\n      end: intervalEnd\n    };\n  },\n  _subtractMinutesUntilHourStart: function _subtractMinutesUntilHourStart(from, duration) {\n    var hourStart = this.$gantt.date.hour_start(new Date(from));\n    var added = 0;\n    var left = duration;\n    var hourStartTimestamp = hourStart.getHours() * 60 * 60 + hourStart.getMinutes() * 60 + hourStart.getSeconds();\n    var initialDateTimestamp = from.getHours() * 60 * 60 + from.getMinutes() * 60 + from.getSeconds();\n\n    var worktimes = this._getWorkHours(from);\n\n    for (var i = worktimes.length - 1; i >= 0 && added < duration; i--) {\n      var interval = worktimes[i];\n\n      if (initialDateTimestamp > interval.start && hourStartTimestamp <= interval.end) {\n        var minuteFrom = Math.min(initialDateTimestamp, interval.end);\n        var minuteTo = Math.max(hourStartTimestamp, interval.start); //\tvar minuteFrom = Math.max(interval.start, currentHour.start);\n        //\tvar minuteTo = Math.min(interval.end, currentHour.end);\n\n        var rangeMinutes = (minuteFrom - minuteTo) / 60;\n\n        if (rangeMinutes > left) {\n          rangeMinutes = left;\n          minuteTo = minuteFrom - left * 60;\n        } // TODO: verify testcase https://dhtmlxsupport.teamwork.com/desk/tickets/9625700/messages\n\n        /*if (rangeMinutes === 0) {\r\n        \trangeMinutes = left;\r\n        \tminuteTo = minuteFrom - (left * 60);\r\n        }*/\n\n\n        var addMinutes = Math.abs(Math.round((minuteFrom - minuteTo) / 60));\n        left -= addMinutes;\n        added += addMinutes;\n        initialDateTimestamp = minuteTo;\n      }\n    }\n\n    var intervalEnd = hourStart;\n\n    if (added === duration) {\n      intervalEnd = new Date(from.getFullYear(), from.getMonth(), from.getDate(), 0, 0, initialDateTimestamp);\n    }\n\n    return {\n      added: added,\n      end: intervalEnd\n    };\n  },\n  _subtractMinuteDate: function _subtractMinuteDate(from, duration, step) {\n    var start = new Date(from),\n        added = 0;\n    step = step || -1;\n    duration = Math.abs(duration * 1);\n    duration = Math.round(duration);\n\n    var minutePrecision = this._isMinutePrecision(start);\n\n    var addedInterval = this._subtractMinutesUntilHourStart(start, duration);\n\n    added += addedInterval.added;\n    start = addedInterval.end;\n    var calculatedDay = 0;\n    var daySchedule = [];\n    var minutesInDay = 0;\n\n    while (added < duration) {\n      var dayStart = this.$gantt.date.day_start(new Date(start));\n      var iterateFromDayEnd = false;\n\n      if (start.valueOf() === dayStart.valueOf()) {\n        dayStart = this.$gantt.date.add(dayStart, -1, \"day\");\n        iterateFromDayEnd = true;\n      } //var dayStartTimestamp = this.$gantt.date.day_start(new Date(start)).valueOf();\n\n\n      var dayEnd = new Date(dayStart.getFullYear(), dayStart.getMonth(), dayStart.getDate(), 23, 59, 59, 999).valueOf();\n\n      if (dayEnd !== calculatedDay) {\n        daySchedule = this._getWorkHours(dayStart);\n        minutesInDay = this._getMinutesPerDay(dayStart);\n        calculatedDay = dayEnd;\n      }\n\n      var left = duration - added;\n\n      var timestamp = this._getTimeOfDayStamp(start, iterateFromDayEnd);\n\n      if (!daySchedule.length || !minutesInDay) {\n        start = this.$gantt.date.add(start, -1, \"day\");\n        continue;\n      }\n\n      if (daySchedule[daySchedule.length - 1].end <= timestamp) {\n        if (left > minutesInDay) {\n          added += minutesInDay;\n          start = this.$gantt.date.add(start, -1, \"day\");\n          continue;\n        }\n      }\n\n      var isWorkHour = false;\n      var workInterval = null;\n      var prevInterval = null;\n\n      for (var i = daySchedule.length - 1; i >= 0; i--) {\n        if (daySchedule[i].start < timestamp - 1 && daySchedule[i].end >= timestamp - 1) {\n          isWorkHour = true;\n          workInterval = daySchedule[i];\n          prevInterval = daySchedule[i - 1];\n          break;\n        }\n      }\n\n      if (isWorkHour) {\n        // we're at the end of worktime interval and subtracting more than the duration of the interval\n        // -> subtract the duration of the interval and move to the start of the interval (we're moving from end)\n        if (timestamp === workInterval.end && left >= workInterval.durationMinutes) {\n          added += workInterval.durationMinutes;\n          start = this.$gantt.date.add(start, -workInterval.durationMinutes, \"minute\");\n        } // worktime is set in whole hours (no intervals like 9:15-10:00)\n        // the amount we need to subtract lies inside the interval\n        else if (!minutePrecision && left <= timestamp / 60 - workInterval.startMinute) {\n            added += left;\n            start = this.$gantt.date.add(start, -left, \"minute\");\n          } else if (minutePrecision) {\n            // GS-2129. If the working time is set in minutes, we accumulate the working time in minutes from right to left\n            // duration we need to subtract lies completely inside the work interval\n            if (left <= timestamp / 60 - workInterval.startMinute) {\n              added += left;\n              start = this.$gantt.date.add(start, -left, \"minute\");\n            } else {\n              // we need to go trough multiple work intervals to subtract needed time\n              added += timestamp / 60 - workInterval.startMinute;\n\n              if (prevInterval) {\n                start = new Date(start.getFullYear(), start.getMonth(), start.getDate(), 0, 0, prevInterval.end);\n              } else {\n                start = this.$gantt.date.day_start(start);\n              }\n            }\n          } else {\n            var minutesInHour = this._getMinutesPerHour(start);\n\n            if (minutesInHour <= left) {\n              added += minutesInHour;\n              start = this._nextDate(start, \"hour\", step);\n            } else {\n              addedInterval = this._subtractMinutesUntilHourStart(start, left);\n              added += addedInterval.added;\n              start = addedInterval.end;\n            }\n          }\n      } else {\n        if (start.getHours() === 0 && start.getMinutes() === 0 && start.getSeconds() === 0) {\n          var prev = this._getClosestWorkTimePast(start, \"hour\");\n\n          if (prev.valueOf() === start.valueOf()) {\n            var prev = this.$gantt.date.add(start, -1, \"day\");\n\n            var times = this._getWorkHours(prev);\n\n            if (times.length) {\n              var lastInterval = times[times.length - 1];\n              prev.setSeconds(lastInterval.durationSeconds);\n            }\n          }\n\n          start = prev;\n        } else {\n          start = this._getClosestWorkTimePast(new Date(start - 1), \"hour\");\n        }\n      }\n    }\n\n    if (added < duration) {\n      var durationLeft = duration - added;\n      addedInterval = this._subtractMinutesUntilHourStart(start, durationLeft);\n      added += addedInterval.added;\n      start = addedInterval.end;\n    }\n\n    return start;\n  },\n  _calculateMinuteEndDate: function _calculateMinuteEndDate(from, duration, step) {\n    var start = new Date(from),\n        added = 0;\n    step = step || 1;\n    duration = Math.abs(duration * 1);\n    duration = Math.round(duration);\n\n    var addedInterval = this._addMinutesUntilHourEnd(start, duration);\n\n    added += addedInterval.added;\n    start = addedInterval.end;\n    var calculatedDay = 0;\n    var daySchedule = [];\n    var minutesInDay = 0;\n\n    var minutePrecision = this._isMinutePrecision(start);\n\n    while (added < duration) {\n      var dayStart = this.$gantt.date.day_start(new Date(start)).valueOf();\n\n      if (dayStart !== calculatedDay) {\n        daySchedule = this._getWorkHours(start);\n        minutesInDay = this._getMinutesPerDay(start);\n        calculatedDay = dayStart;\n      }\n\n      var left = duration - added;\n\n      var timestamp = this._getTimeOfDayStamp(start);\n\n      if (!daySchedule.length || !minutesInDay) {\n        start = this.$gantt.date.add(this.$gantt.date.day_start(start), 1, \"day\");\n        continue;\n      }\n\n      if (daySchedule[0].start >= timestamp) {\n        if (left >= minutesInDay) {\n          added += minutesInDay;\n\n          if (left == minutesInDay) {\n            start = new Date(start.getFullYear(), start.getMonth(), start.getDate(), 0, 0, daySchedule[daySchedule.length - 1].end);\n            break;\n          } else {\n            start = this.$gantt.date.add(start, 1, \"day\");\n            start = this.$gantt.date.day_start(start);\n          }\n\n          continue;\n        }\n      }\n\n      var isWorkHour = false;\n      var workInterval = null;\n\n      for (var i = 0; i < daySchedule.length; i++) {\n        if (daySchedule[i].start <= timestamp && daySchedule[i].end > timestamp) {\n          isWorkHour = true;\n          workInterval = daySchedule[i];\n          break;\n        }\n      }\n\n      if (isWorkHour) {\n        if (timestamp === workInterval.start && left >= workInterval.durationMinutes) {\n          added += workInterval.durationMinutes;\n          start = this.$gantt.date.add(start, workInterval.durationMinutes, \"minute\");\n        } else if (left <= workInterval.endMinute - timestamp / 60) {\n          added += left;\n          start = this.$gantt.date.add(start, left, \"minute\");\n        } else {\n          var minutesInHour = this._getMinutesPerHour(start);\n\n          if (minutesInHour <= left) {\n            added += minutesInHour; // when the working time settings are set in minutes move to the next minutes\n\n            if (minutePrecision) {\n              start = this.$gantt.date.add(start, minutesInHour, \"minute\");\n            } else {\n              start = this._nextDate(start, \"hour\", step);\n            }\n          } else {\n            addedInterval = this._addMinutesUntilHourEnd(start, left);\n            added += addedInterval.added;\n            start = addedInterval.end;\n          }\n        }\n      } else {\n        start = this._getClosestWorkTimeFuture(start, \"hour\");\n      }\n    }\n\n    if (added < duration) {\n      var durationLeft = duration - added;\n      addedInterval = this._addMinutesUntilHourEnd(start, durationLeft);\n      added += addedInterval.added;\n      start = addedInterval.end;\n    }\n\n    return start;\n  },\n  getClosestWorkTime: function getClosestWorkTime() {\n    var settings = this.argumentsHelper.getClosestWorkTimeArguments.apply(this.argumentsHelper, arguments);\n    return this._getClosestWorkTime(settings.date, settings.unit, settings.dir);\n  },\n  _getClosestWorkTime: function _getClosestWorkTime(inputDate, unit, direction) {\n    var result = new Date(inputDate);\n\n    if (this._isWorkTime(result, unit)) {\n      return result;\n    }\n\n    result = this.$gantt.date[unit + '_start'](result);\n\n    if (direction == 'any' || !direction) {\n      var closestFuture = this._getClosestWorkTimeFuture(result, unit);\n\n      var closestPast = this._getClosestWorkTimePast(result, unit);\n\n      if (Math.abs(closestFuture - inputDate) <= Math.abs(inputDate - closestPast)) {\n        result = closestFuture;\n      } else {\n        result = closestPast;\n      }\n    } else if (direction == \"past\") {\n      result = this._getClosestWorkTimePast(result, unit);\n    } else {\n      result = this._getClosestWorkTimeFuture(result, unit);\n    }\n\n    return result;\n  },\n  _getClosestWorkTimeFuture: function _getClosestWorkTimeFuture(date, unit) {\n    return this._getClosestWorkTimeGeneric(date, unit, 1);\n  },\n  _getClosestWorkTimePast: function _getClosestWorkTimePast(date, unit) {\n    var result = this._getClosestWorkTimeGeneric(date, unit, -1); // should return the end of the closest work interval\n\n\n    return this.$gantt.date.add(result, 1, unit);\n  },\n  _findClosestTimeInDay: function _findClosestTimeInDay(date, direction, worktimes) {\n    var start = new Date(date);\n    var resultDate = null;\n    var fromDayEnd = false;\n\n    if (!this._getWorkHours(start).length) {\n      start = this._getClosestWorkTime(start, \"day\", direction < 0 ? \"past\" : \"future\");\n\n      if (direction < 0) {\n        start = new Date(start.valueOf() - 1);\n        fromDayEnd = true;\n      }\n\n      worktimes = this._getWorkHours(start);\n    }\n\n    var value = this._getTimeOfDayStamp(start);\n\n    if (fromDayEnd) {\n      value = this._getTimeOfDayStamp(new Date(start.valueOf() + 1), fromDayEnd);\n    }\n\n    if (direction > 0) {\n      for (var i = 0; i < worktimes.length; i++) {\n        if (worktimes[i].start >= value) {\n          resultDate = new Date(start.getFullYear(), start.getMonth(), start.getDate(), 0, 0, worktimes[i].start);\n          break;\n        }\n      }\n    } else {\n      for (var i = worktimes.length - 1; i >= 0; i--) {\n        if (worktimes[i].end <= value) {\n          resultDate = new Date(start.getFullYear(), start.getMonth(), start.getDate(), 0, 0, worktimes[i].end);\n          break;\n        } else if (worktimes[i].end > value && worktimes[i].start <= value) {\n          resultDate = new Date(start.getFullYear(), start.getMonth(), start.getDate(), 0, 0, value);\n          break;\n        }\n      }\n    }\n\n    return resultDate;\n  },\n  _getClosestWorkMinute: function _getClosestWorkMinute(date, unit, direction) {\n    var start = new Date(date);\n\n    var worktimes = this._getWorkHours(start);\n\n    var resultDate = this._findClosestTimeInDay(start, direction, worktimes);\n\n    if (!resultDate) {\n      start = this.calculateEndDate(start, direction, \"day\");\n\n      if (direction > 0) {\n        start = this.$gantt.date.day_start(start);\n      } else {\n        start = this.$gantt.date.day_start(start);\n        start = this.$gantt.date.add(start, 1, \"day\");\n        start = new Date(start.valueOf() - 1);\n      }\n\n      worktimes = this._getWorkHours(start);\n      resultDate = this._findClosestTimeInDay(start, direction, worktimes);\n    }\n\n    if (direction < 0) {\n      // getClosestWorkTimePast adds one time unit to the result date after this\n      resultDate = this.$gantt.date.add(resultDate, -1, unit);\n    }\n\n    return resultDate;\n  },\n  _getClosestWorkTimeGeneric: function _getClosestWorkTimeGeneric(date, unit, increment) {\n    if (unit === \"hour\" || unit === \"minute\") {\n      return this._getClosestWorkMinute(date, unit, increment);\n    }\n\n    var unitOrder = this._getUnitOrder(unit),\n        biggerTimeUnit = this.units[unitOrder - 1];\n\n    var result = date; // be extra sure we won't fall into infinite loop, 3k seems big enough\n\n    var maximumLoop = 3000,\n        count = 0;\n\n    while (!this._isWorkTime(result, unit)) {\n      if (biggerTimeUnit && !this._isWorkTime(result, biggerTimeUnit)) {\n        // if we look for closest work hour and detect a week-end - first find the closest work day,\n        // and continue iterations after that\n        if (increment > 0) {\n          result = this._getClosestWorkTimeFuture(result, biggerTimeUnit);\n        } else {\n          result = this._getClosestWorkTimePast(result, biggerTimeUnit);\n        }\n\n        if (this._isWorkTime(result, unit)) {\n          break;\n        }\n      }\n\n      count++;\n\n      if (count > maximumLoop) {\n        this.$gantt.assert(false, \"Invalid working time check\");\n        return false;\n      }\n\n      var tzOffset = result.getTimezoneOffset();\n      result = this.$gantt.date.add(result, increment, unit);\n      result = this.$gantt._correct_dst_change(result, tzOffset, increment, unit);\n\n      if (this.$gantt.date[unit + '_start']) {\n        result = this.$gantt.date[unit + '_start'](result);\n      }\n    }\n\n    return result;\n  },\n\n  /**\r\n   * Check whether this calendar has working time. Calendar has working time only if there are regular working days of week\r\n   *\r\n   */\n  hasWorkTime: function hasWorkTime() {\n    var worktime = this.getConfig();\n    var dates = worktime.dates;\n    var daysOfWeek = [0, 1, 2, 3, 4, 5, 6];\n    var exceptions = [];\n\n    for (var i in worktime.dates) {\n      if (Number(i) > 6) {\n        exceptions.push(Number(i));\n      }\n    }\n\n    var hasRegularHours = this._checkWorkHours(worktime.hours);\n\n    var result = false;\n    daysOfWeek.forEach(function (day) {\n      if (result) {\n        return;\n      }\n\n      var dayConfig = dates[day];\n\n      if (dayConfig === true) {\n        // workday uses global hours\n        result = hasRegularHours;\n      } else if (Array.isArray(dayConfig)) {\n        // workday uses custom hours\n        result = this._checkWorkHours(dayConfig);\n      }\n    }.bind(this));\n    return result;\n  },\n  _checkWorkHours: function _checkWorkHours(hoursArray) {\n    if (hoursArray.length === 0) {\n      return false;\n    }\n\n    var result = false;\n\n    for (var i = 0; i < hoursArray.length; i += 2) {\n      if (hoursArray[i] !== hoursArray[i + 1]) {\n        result = true;\n      }\n    }\n\n    return result;\n  },\n  _isMinutePrecision: function _isMinutePrecision(date) {\n    var minutePrecision = false;\n\n    this._getWorkHours(date).forEach(function (interval) {\n      if (interval.startMinute % 60 || interval.endMinute % 60) {\n        minutePrecision = true;\n      }\n    });\n\n    return minutePrecision;\n  }\n};\nmodule.exports = CalendarWorkTimeStrategy;","var utils = require(\"../../../utils/utils\");\n\nfunction WorkTimeCalendarMerger() {}\n\nWorkTimeCalendarMerger.prototype = {\n  /**\r\n   * convert hours array items into objects, e.g. [8, 12, 17, 18] -> [{start: 8, end: 12}, {start:17, end:18}]\r\n   * @param {Array} hoursArray\r\n   */\n  _getIntervals: function _getIntervals(hoursArray) {\n    var result = [];\n\n    for (var i = 0; i < hoursArray.length; i += 2) {\n      result.push({\n        start: hoursArray[i],\n        end: hoursArray[i + 1]\n      });\n    }\n\n    return result;\n  },\n\n  /**\r\n   * Convert ranges config into hours array\r\n   * [{start: 8, end: 12}, {start:17, end:18}] --> [8, 12, 17, 18]\r\n   * @param {*} intervalsArray\r\n   */\n  _toHoursArray: function _toHoursArray(intervalsArray) {\n    var result = [];\n\n    function toFixed(value) {\n      var str = String(value);\n\n      if (str.length < 2) {\n        str = \"0\" + str;\n      }\n\n      return str;\n    }\n\n    function formatHHMM(secondsValue) {\n      var hours = Math.floor(secondsValue / (60 * 60));\n      var minutePart = secondsValue - hours * 60 * 60;\n      var minutes = Math.floor(minutePart / 60);\n      return hours + \":\" + toFixed(minutes);\n    }\n\n    for (var i = 0; i < intervalsArray.length; i++) {\n      result.push(formatHHMM(intervalsArray[i].start) + \"-\" + formatHHMM(intervalsArray[i].end));\n    }\n\n    return result;\n  },\n\n  /**\r\n   * Build intersection of hour intervals. e.g.\r\n   * first: [{start: 8, end: 12}, {start:13, end:18}]\r\n   * second: [{start: 10, end: 15}]\r\n   * result: [{start: 10, end: 12}, {start: 13, end: 15}]\r\n   * @param {Array} first\r\n   * @param {Array} second\r\n   */\n  _intersectHourRanges: function _intersectHourRanges(first, second) {\n    var result = [];\n    var baseArray = first.length > second.length ? first : second;\n    var overridesArray = first === baseArray ? second : first;\n    baseArray = baseArray.slice();\n    overridesArray = overridesArray.slice();\n    var result = [];\n\n    for (var i = 0; i < baseArray.length; i++) {\n      var base = baseArray[i];\n\n      for (var j = 0; j < overridesArray.length; j++) {\n        var current = overridesArray[j];\n\n        if (current.start < base.end && current.end > base.start) {\n          result.push({\n            start: Math.max(base.start, current.start),\n            end: Math.min(base.end, current.end)\n          });\n\n          if (base.end > current.end) {\n            overridesArray.splice(j, 1);\n            j--;\n            i--;\n          }\n        }\n      }\n    }\n\n    return result;\n  },\n\n  /**\r\n   * Reduce the number of ranges in config when possible,\r\n   * joins ranges that can be merged\r\n   * parts: [{start: 8, end: 12}, {start:12, end:13}, {start: 15, end: 17}]\r\n   * result: [{start: 8, end: 13}, {start: 15, end: 17}]\r\n   * @param {Array} parts\r\n   */\n  _mergeAdjacentIntervals: function _mergeAdjacentIntervals(parts) {\n    var result = parts.slice();\n    result.sort(function (a, b) {\n      return a.start - b.start;\n    });\n    var base = result[0];\n\n    for (var i = 1; i < result.length; i++) {\n      var current = result[i];\n\n      if (current.start <= base.end) {\n        if (current.end > base.end) {\n          base.end = current.end;\n        }\n\n        result.splice(i, 1);\n        i--;\n      } else {\n        base = current;\n      }\n    }\n\n    return result;\n  },\n  _mergeHoursConfig: function _mergeHoursConfig(firstHours, secondHours) {\n    //var firstIntervals = this._getIntervals(firstHours);\n    //var secondIntervals = this._getIntervals(secondHours);\n    return this._mergeAdjacentIntervals(this._intersectHourRanges(firstHours, secondHours));\n  },\n  merge: function merge(first, second) {\n    var firstConfig = utils.copy(first.getConfig().parsed);\n    var secondConfig = utils.copy(second.getConfig().parsed);\n    var mergedSettings = {\n      hours: this._toHoursArray(this._mergeHoursConfig(firstConfig.hours, secondConfig.hours)),\n      dates: {},\n      customWeeks: {}\n    };\n\n    for (var i in firstConfig.dates) {\n      var firstDate = firstConfig.dates[i];\n      var secondDate = secondConfig.dates[i]; // if this key is a working date in both calendars\n\n      if (firstDate && secondDate) {\n        // if at least one of working date is set by hours config - build intersection\n        if (Array.isArray(firstDate) || Array.isArray(secondDate)) {\n          var firstHours = Array.isArray(firstDate) ? firstDate : firstConfig.hours;\n          var secondHours = Array.isArray(secondDate) ? secondDate : secondConfig.hours;\n          mergedSettings.dates[i] = this._toHoursArray(this._mergeHoursConfig(firstHours, secondHours));\n        } else {\n          // date will use global hours\n          mergedSettings.dates[i] = true;\n        }\n      } else {\n        mergedSettings.dates[i] = false;\n      }\n    } // transfer and overwrite custom week calendars\n\n\n    if (firstConfig.customWeeks) {\n      for (var i in firstConfig.customWeeks) {\n        mergedSettings.customWeeks[i] = firstConfig.customWeeks[i];\n      }\n    }\n\n    if (secondConfig.customWeeks) {\n      for (var i in secondConfig.customWeeks) {\n        mergedSettings.customWeeks[i] = secondConfig.customWeeks[i];\n      }\n    }\n\n    return mergedSettings;\n  }\n};\nmodule.exports = WorkTimeCalendarMerger;","var utils = require(\"../../utils/utils\");\n\nvar createArgumentsHelper = require(\"./calendar_arguments_helper\");\n\nvar CalendarMergeHelper = require(\"./strategy/work_calendar_merger\");\n\nvar CalendarWorkTimeStrategy = require(\"./strategy/calendar_strategy\");\n\nvar legacyResourceCalendarConfig = require(\"./legacy_resource_config\");\n\nvar dynamicResourceCalendars = require(\"./dynamic_resource_calendars\")();\n\nfunction CalendarManager(gantt) {\n  this.$gantt = gantt;\n  this._calendars = {};\n  this._legacyConfig = undefined;\n  this.$gantt.attachEvent(\"onGanttReady\", function () {\n    if (this.$gantt.config.resource_calendars) {\n      this._isLegacyConfig = legacyResourceCalendarConfig.isLegacyResourceCalendarFormat(this.$gantt.config.resource_calendars);\n    }\n  }.bind(this));\n  this.$gantt.attachEvent(\"onBeforeGanttReady\", function () {\n    this.createDefaultCalendars();\n  }.bind(this));\n  this.$gantt.attachEvent(\"onBeforeGanttRender\", function () {\n    this.createDefaultCalendars();\n  }.bind(this));\n}\n\nCalendarManager.prototype = {\n  _calendars: {},\n  _convertWorkTimeSettings: function _convertWorkTimeSettings(settings) {\n    var days = settings.days;\n\n    if (days && !settings.dates) {\n      settings.dates = settings.dates || {};\n\n      for (var i = 0; i < days.length; i++) {\n        settings.dates[i] = days[i];\n\n        if (!(days[i] instanceof Array)) {\n          settings.dates[i] = !!days[i];\n        }\n      }\n    }\n\n    delete settings.days;\n    return settings;\n  },\n  mergeCalendars: function mergeCalendars() {\n    var calendars = [];\n    var args = arguments;\n\n    if (Array.isArray(args[0])) {\n      calendars = args[0].slice();\n    } else {\n      for (var i = 0; i < arguments.length; i++) {\n        calendars.push(arguments[i]);\n      }\n    }\n\n    var mergeHelper = new CalendarMergeHelper();\n    var result;\n    calendars.forEach(function (calendar) {\n      if (!result) {\n        result = calendar;\n      } else {\n        result = this._createCalendarFromConfig(mergeHelper.merge(result, calendar));\n      }\n    }.bind(this));\n    return this.createCalendar(result);\n  },\n  _createCalendarFromConfig: function _createCalendarFromConfig(config) {\n    var apiCore = new CalendarWorkTimeStrategy(this.$gantt, createArgumentsHelper(this.$gantt));\n    apiCore.id = String(utils.uid());\n\n    var preparedConfig = this._convertWorkTimeSettings(config);\n\n    if (preparedConfig.customWeeks) {\n      for (var i in preparedConfig.customWeeks) {\n        preparedConfig.customWeeks[i] = this._convertWorkTimeSettings(preparedConfig.customWeeks[i]);\n      }\n    }\n\n    apiCore._setConfig(preparedConfig);\n\n    return apiCore;\n  },\n  createCalendar: function createCalendar(parentCalendar) {\n    var settings;\n\n    if (!parentCalendar) {\n      parentCalendar = {};\n    }\n\n    if (parentCalendar.getConfig) {\n      settings = utils.copy(parentCalendar.getConfig());\n    } else if (parentCalendar.worktime) {\n      settings = utils.copy(parentCalendar.worktime);\n    } else {\n      settings = utils.copy(parentCalendar);\n    }\n\n    var defaults = utils.copy(this.defaults.fulltime.worktime);\n    utils.mixin(settings, defaults);\n    return this._createCalendarFromConfig(settings);\n  },\n  getCalendar: function getCalendar(id) {\n    id = id || \"global\";\n    var calendar = this._calendars[id];\n\n    if (!calendar) {\n      this.createDefaultCalendars();\n      calendar = this._calendars[id];\n    }\n\n    return calendar;\n  },\n  getCalendars: function getCalendars() {\n    var res = [];\n\n    for (var i in this._calendars) {\n      res.push(this.getCalendar(i));\n    }\n\n    return res;\n  },\n  _getOwnCalendar: function _getOwnCalendar(task) {\n    var config = this.$gantt.config;\n\n    if (task[config.calendar_property]) {\n      return this.getCalendar(task[config.calendar_property]);\n    }\n\n    if (config.resource_calendars) {\n      var calendar;\n      var calendarId;\n      var resourceProperty;\n\n      if (this._legacyConfig === false) {\n        resourceProperty = config.resource_property;\n      } else {\n        resourceProperty = legacyResourceCalendarConfig.getResourceProperty(config);\n      }\n\n      if (Array.isArray(task[resourceProperty])) {\n        // if multiple resources are attached to the task - merge their calendars\n        if (config.dynamic_resource_calendars) {\n          calendarId = dynamicResourceCalendars.getCalendarIdFromMultipleResources(task[resourceProperty], this);\n        }\n      } else {\n        if (this._legacyConfig === undefined) {\n          this._legacyConfig = legacyResourceCalendarConfig.isLegacyResourceCalendarFormat(config.resource_calendars);\n        }\n\n        if (this._legacyConfig) {\n          var calendarId = legacyResourceCalendarConfig.getCalendarIdFromLegacyConfig(task, config.resource_calendars);\n        } else if (resourceProperty && task[resourceProperty] && config.resource_calendars[task[resourceProperty]]) {\n          var calendar = this.getResourceCalendar(task[resourceProperty]);\n        }\n      }\n\n      if (calendarId) {\n        calendar = this.getCalendar(calendarId);\n      }\n\n      if (calendar) {\n        return calendar;\n      }\n    }\n\n    return null;\n  },\n\n  /**\r\n   * Returns calendar assigned to the specified resource.\r\n   * Returns the global calendar if no custom calendar is associated with the resource.\r\n   * @param {(string|number|Object)} resource - resource object or resource id\r\n   * @returns {object} Calendar object\r\n   */\n  getResourceCalendar: function getResourceCalendar(resource) {\n    if (resource === null || resource === undefined) {\n      return this.getCalendar();\n    }\n\n    var resourceId = null; // if task id is provided\n\n    if (typeof resource === \"number\" || typeof resource === \"string\") {\n      resourceId = resource;\n    } else {\n      resourceId = resource.id || resource.key;\n    }\n\n    var config = this.$gantt.config;\n    var calendarsConfig = config.resource_calendars;\n    var calendarId = null;\n\n    if (calendarsConfig) {\n      if (this._legacyConfig === undefined) {\n        this._legacyConfig = legacyResourceCalendarConfig.isLegacyResourceCalendarFormat(config.resource_calendars);\n      }\n\n      if (this._legacyConfig) {\n        for (var field in calendarsConfig) {\n          if (calendarsConfig[field][resourceId]) {\n            calendarId = calendarsConfig[field][resourceId];\n            break;\n          }\n        }\n      } else {\n        var calendarId = calendarsConfig[resourceId];\n      }\n\n      if (calendarId) {\n        return this.getCalendar(calendarId);\n      }\n    }\n\n    return this.getCalendar();\n  },\n\n  /**\r\n   * Returns the calendar assigned to a task.\r\n   * - Returns a calendar assigned via task[gantt.config.calendar_property] if specified.\r\n   * - Returns a calendar assigned to the task resource if specified.\r\n   * - Returns the global calendar otherwise.\r\n   * @param {(string|number|Object)} task - task object or task id\r\n   * @returns {object} Calendar object\r\n   */\n  getTaskCalendar: function getTaskCalendar(task) {\n    var gantt = this.$gantt;\n    var taskObject;\n\n    if (task === null || task === undefined) {\n      return this.getCalendar();\n    } // if task id is provided\n\n\n    if ((typeof task === \"number\" || typeof task === \"string\") && gantt.isTaskExists(task)) {\n      taskObject = gantt.getTask(task);\n    } else {\n      taskObject = task;\n    }\n\n    if (!taskObject) {\n      return this.getCalendar();\n    }\n\n    var calendar = this._getOwnCalendar(taskObject);\n\n    var groupMode = !!gantt.getState().group_mode;\n\n    if (!calendar && gantt.config.inherit_calendar && gantt.isTaskExists(taskObject.parent)) {\n      // GS-1579  group mode overrides tree hierarchy, iterate using `.parent` property, instead of using eachParent iterator\n      var currentTask = taskObject;\n\n      while (gantt.isTaskExists(currentTask.parent)) {\n        currentTask = gantt.getTask(currentTask.parent);\n\n        if (gantt.isSummaryTask(currentTask)) {\n          calendar = this._getOwnCalendar(currentTask);\n\n          if (calendar) {\n            break;\n          }\n        }\n      }\n\n      if (groupMode && !calendar) {\n        // if group mode and inherit_calendars is enabled - preserve previously applied parent calendar\n        // we may need it when groupBy parses grouped data, old parent may be not loaded yet\n        if (task.$effective_calendar) {\n          calendar = this.getCalendar(task.$effective_calendar);\n        }\n      }\n    }\n\n    return calendar || this.getCalendar();\n  },\n  addCalendar: function addCalendar(calendar) {\n    // puts new calendar to Global Storage - gantt.calendarManager._calendars {}\n    if (!this.isCalendar(calendar)) {\n      var id = calendar.id;\n      calendar = this.createCalendar(calendar);\n      calendar.id = id;\n    } // validate/check if empty calendar\n\n\n    if (!calendar._tryChangeCalendarSettings(function () {})) {\n      this.$gantt.callEvent(\"onCalendarError\", [{\n        message: \"Invalid calendar settings, no worktime available\"\n      }, calendar]);\n      return null;\n    } else {\n      var config = this.$gantt.config;\n      calendar.id = calendar.id || utils.uid();\n      this._calendars[calendar.id] = calendar;\n      if (!config.worktimes) config.worktimes = {};\n      config.worktimes[calendar.id] = calendar.getConfig();\n      return calendar.id;\n    }\n  },\n  deleteCalendar: function deleteCalendar(calendar) {\n    var config = this.$gantt.config;\n    if (!calendar) return false;\n\n    if (this._calendars[calendar]) {\n      delete this._calendars[calendar];\n      if (config.worktimes && config.worktimes[calendar]) delete config.worktimes[calendar];\n      return true;\n    } else {\n      return false;\n    }\n  },\n  restoreConfigCalendars: function restoreConfigCalendars(configs) {\n    for (var i in configs) {\n      if (this._calendars[i]) continue;\n      var settings = configs[i];\n      var calendar = this.createCalendar(settings);\n      calendar.id = i;\n      this.addCalendar(calendar);\n    }\n  },\n  defaults: {\n    global: {\n      id: \"global\",\n      worktime: {\n        hours: [8, 12, 13, 17],\n        days: [0, 1, 1, 1, 1, 1, 0]\n      }\n    },\n    fulltime: {\n      id: \"fulltime\",\n      worktime: {\n        hours: [0, 24],\n        days: [1, 1, 1, 1, 1, 1, 1]\n      }\n    }\n  },\n  createDefaultCalendars: function createDefaultCalendars() {\n    var config = this.$gantt.config;\n    this.restoreConfigCalendars(this.defaults);\n    this.restoreConfigCalendars(config.worktimes);\n  },\n  isCalendar: function isCalendar(possibleCalendar) {\n    // because we don't have any way to check without dependency to CalendarWorkTimeStrategy\n    var props = [possibleCalendar.isWorkTime, possibleCalendar.setWorkTime, possibleCalendar.getWorkHours, possibleCalendar.unsetWorkTime, possibleCalendar.getClosestWorkTime, possibleCalendar.calculateDuration, possibleCalendar.hasDuration, possibleCalendar.calculateEndDate];\n    return props.every(function (entry) {\n      return entry instanceof Function;\n    });\n  }\n};\nmodule.exports = CalendarManager;","var CalendarManager = require(\"./calendar_manager\"),\n    TimeCalculator = require(\"./time_calculator\"),\n    worktimeFacadeFactory = require(\"../facades/worktime_calendars\"),\n    utils = require(\"../../utils/utils\");\n\nmodule.exports = function (gantt) {\n  var manager = new CalendarManager(gantt),\n      timeCalculator = new TimeCalculator(manager);\n  var facade = worktimeFacadeFactory.create(manager, timeCalculator);\n  utils.mixin(gantt, facade);\n};","function _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nvar helpers = require(\"../utils/helpers\");\n\nmodule.exports = function (gantt) {\n  gantt.load = function (url, type, callback) {\n    this._load_url = url;\n    this.assert(arguments.length, \"Invalid load arguments\");\n    var tp = 'json',\n        cl = null;\n\n    if (arguments.length >= 3) {\n      tp = type;\n      cl = callback;\n    } else {\n      if (typeof arguments[1] == \"string\") tp = arguments[1];else if (typeof arguments[1] == \"function\") cl = arguments[1];\n    }\n\n    this._load_type = tp;\n    this.callEvent(\"onLoadStart\", [url, tp]);\n    return this.ajax.get(url, gantt.bind(function (l) {\n      this.on_load(l, tp);\n      this.callEvent(\"onLoadEnd\", [url, tp]);\n      if (typeof cl == \"function\") cl.call(this);\n    }, this));\n  };\n\n  gantt.parse = function (data, type) {\n    this.on_load({\n      xmlDoc: {\n        responseText: data\n      }\n    }, type);\n  };\n\n  gantt.serialize = function (type) {\n    type = type || \"json\";\n    return this[type].serialize();\n  };\n  /*\r\n  tasks and relations\r\n  {\r\n  data:[\r\n  \t{\r\n  \t\t\"id\":\"string\",\r\n  \t\t\"text\":\"...\",\r\n  \t\t\"start_date\":\"Date or string\",\r\n  \t\t\"end_date\":\"Date or string\",\r\n  \t\t\"duration\":\"number\",\r\n  \t\t\"progress\":\"0..1\",\r\n  \t\t\"parent_id\":\"string\",\r\n  \t\t\"order\":\"number\"\r\n  \t},...],\r\n  links:[\r\n  \t{\r\n  \t\tid:\"string\",\r\n  \t\tsource:\"string\",\r\n  \t\ttarget:\"string\",\r\n  \t\ttype:\"string\"\r\n  \t},...],\r\n  collections:{\r\n  \t\tcollectionName:[\r\n  \t\t\t{key:, label:, optional:...},...\r\n  \t\t],...\r\n  \t}\r\n  }\r\n  \n  * */\n\n\n  gantt.on_load = function (resp, type) {\n    if (resp.xmlDoc && resp.xmlDoc.status === 404) {\n      // work if we don't have a file at current url\n      this.assert(false, \"Failed to load the data from <a href='\" + resp.xmlDoc.responseURL + \"' target='_blank'>\" + resp.xmlDoc.responseURL + \"</a>, server returns 404\");\n      return;\n    }\n\n    if (gantt.$destroyed) {\n      return;\n    }\n\n    this.callEvent(\"onBeforeParse\", []);\n    if (!type) type = \"json\";\n    this.assert(this[type], \"Invalid data type:'\" + type + \"'\");\n    var raw = resp.xmlDoc.responseText;\n    var data = this[type].parse(raw, resp);\n\n    this._process_loading(data);\n  };\n\n  function attachAssignmentsToTasks(tasks, assignments) {\n    var assignmentsByTasks = {};\n    assignments.forEach(function (a) {\n      if (!assignmentsByTasks[a.task_id]) {\n        assignmentsByTasks[a.task_id] = [];\n      }\n\n      assignmentsByTasks[a.task_id].push(a);\n    });\n    tasks.forEach(function (t) {\n      t[gantt.config.resource_property] = assignmentsByTasks[t.id] || [];\n    });\n  }\n\n  gantt._process_loading = function (data) {\n    if (data.collections) this._load_collections(data.collections);\n\n    if (data.resources && this.$data.resourcesStore) {\n      this.$data.resourcesStore.parse(data.resources);\n    }\n\n    var tasks = data.data || data.tasks;\n\n    if (data.assignments) {\n      attachAssignmentsToTasks(tasks, data.assignments);\n    }\n\n    this.$data.tasksStore.parse(tasks);\n    var links = data.links || (data.collections ? data.collections.links : []);\n    this.$data.linksStore.parse(links); //this._sync_links();\n\n    this.callEvent(\"onParse\", []);\n    this.render();\n  };\n\n  gantt._load_collections = function (collections) {\n    var collections_loaded = false;\n\n    for (var key in collections) {\n      if (collections.hasOwnProperty(key)) {\n        collections_loaded = true;\n        var collection = collections[key]; // GS-1728. Create an empty serverList if it doesn't exist\n\n        this.serverList[key] = this.serverList[key] || [];\n        var arr = this.serverList[key];\n        if (!arr) continue;\n        arr.splice(0, arr.length); //clear old options\n\n        for (var j = 0; j < collection.length; j++) {\n          var option = collection[j];\n          var obj = this.copy(option);\n          obj.key = obj.value; // resulting option object\n\n          for (var option_key in option) {\n            if (option.hasOwnProperty(option_key)) {\n              if (option_key == \"value\" || option_key == \"label\") continue;\n              obj[option_key] = option[option_key]; // obj['value'] = option['value']\n            }\n          }\n\n          arr.push(obj);\n        }\n      }\n    }\n\n    if (collections_loaded) this.callEvent(\"onOptionsLoad\", []);\n  };\n\n  gantt.attachEvent(\"onBeforeTaskDisplay\", function (id, task) {\n    return !task.$ignore;\n  });\n\n  function jsonParseError(data) {\n    gantt.assert(false, \"Can't parse data: incorrect value of gantt.parse or gantt.load method. \" + \"Actual argument value: \" + JSON.stringify(data));\n    throw new Error(\"Invalid argument for gantt.parse or gantt.load. An object or a JSON string of format https://docs.dhtmlx.com/gantt/desktop__supported_data_formats.html#json is expected. Actual argument value: \" + JSON.stringify(data));\n  }\n\n  gantt.json = {\n    parse: function parse(data) {\n      if (!data) {\n        jsonParseError(data);\n      }\n\n      if (typeof data == \"string\") {\n        if ((typeof JSON === \"undefined\" ? \"undefined\" : _typeof(JSON)) != undefined) {\n          try {\n            data = JSON.parse(data);\n          } catch (e) {\n            jsonParseError(data);\n          }\n        } else {\n          gantt.assert(false, \"JSON is not supported\");\n        }\n      }\n\n      if (!data.data && !data.tasks) {\n        jsonParseError(data);\n      }\n\n      if (data.dhx_security) gantt.security_key = data.dhx_security;\n      return data;\n    },\n    serializeTask: function serializeTask(task) {\n      return this._copyObject(task);\n    },\n    serializeLink: function serializeLink(link) {\n      return this._copyLink(link);\n    },\n    _copyLink: function _copyLink(obj) {\n      var copy = {};\n\n      for (var key in obj) {\n        copy[key] = obj[key];\n      }\n\n      return copy;\n    },\n    _copyObject: function _copyObject(obj) {\n      var copy = {};\n\n      for (var key in obj) {\n        if (key.charAt(0) == \"$\") continue;\n        copy[key] = obj[key];\n\n        if (helpers.isDate(copy[key])) {\n          copy[key] = gantt.defined(gantt.templates.xml_format) ? gantt.templates.xml_format(copy[key]) : gantt.templates.format_date(copy[key]);\n        }\n      }\n\n      return copy;\n    },\n    serialize: function serialize() {\n      var tasks = [];\n      var links = [];\n      gantt.eachTask(function (obj) {\n        gantt.resetProjectDates(obj);\n        tasks.push(this.serializeTask(obj));\n      }, gantt.config.root_id, this);\n      var rawLinks = gantt.getLinks();\n\n      for (var i = 0; i < rawLinks.length; i++) {\n        links.push(this.serializeLink(rawLinks[i]));\n      }\n\n      return {\n        data: tasks,\n        links: links\n      };\n    }\n  };\n  /*\r\n  <data>\r\n  \t<task id:\"some\" parent_id=\"0\" progress=\"0.5\">\r\n  \t\t<text>My task 1</text>\r\n  \t\t<start_date>16.08.2013</start_date>\r\n  \t\t<end_date>22.08.2013</end_date>\r\n  \t</task>\r\n  \t<coll_options>\r\n  \t\t<links>\r\n  \t\t\t<link source='a1' target='b2' type='c3' />\r\n  \t\t</links>\r\n  \t</coll_options>\r\n  </data>\r\n  */\n\n  function xmlParseError(data) {\n    gantt.assert(false, \"Can't parse data: incorrect value of gantt.parse or gantt.load method. \" + \"Actual argument value: \" + JSON.stringify(data));\n    throw new Error(\"Invalid argument for gantt.parse or gantt.load. An XML of format https://docs.dhtmlx.com/gantt/desktop__supported_data_formats.html#xmldhtmlxgantt20 is expected. Actual argument value: \" + JSON.stringify(data));\n  }\n\n  gantt.xml = {\n    _xmlNodeToJSON: function _xmlNodeToJSON(node, attrs_only) {\n      var t = {};\n\n      for (var i = 0; i < node.attributes.length; i++) {\n        t[node.attributes[i].name] = node.attributes[i].value;\n      }\n\n      if (!attrs_only) {\n        for (var i = 0; i < node.childNodes.length; i++) {\n          var child = node.childNodes[i];\n          if (child.nodeType == 1) t[child.tagName] = child.firstChild ? child.firstChild.nodeValue : \"\";\n        }\n\n        if (!t.text) t.text = node.firstChild ? node.firstChild.nodeValue : \"\";\n      }\n\n      return t;\n    },\n    _getCollections: function _getCollections(loader) {\n      var collection = {};\n      var opts = gantt.ajax.xpath(\"//coll_options\", loader);\n\n      for (var i = 0; i < opts.length; i++) {\n        var bind = opts[i].getAttribute(\"for\");\n        var arr = collection[bind] = [];\n        var itms = gantt.ajax.xpath(\".//item\", opts[i]);\n\n        for (var j = 0; j < itms.length; j++) {\n          var itm = itms[j];\n          var attrs = itm.attributes;\n          var obj = {\n            key: itms[j].getAttribute(\"value\"),\n            label: itms[j].getAttribute(\"label\")\n          };\n\n          for (var k = 0; k < attrs.length; k++) {\n            var attr = attrs[k];\n            if (attr.nodeName == \"value\" || attr.nodeName == \"label\") continue;\n            obj[attr.nodeName] = attr.nodeValue;\n          }\n\n          arr.push(obj);\n        }\n      }\n\n      return collection;\n    },\n    _getXML: function _getXML(text, loader, toptag) {\n      toptag = toptag || \"data\";\n\n      if (!loader.getXMLTopNode) {\n        loader = gantt.ajax.parse(loader);\n      }\n\n      var xml = gantt.ajax.xmltop(toptag, loader.xmlDoc);\n\n      if (!xml || xml.tagName != toptag) {\n        xmlParseError(text);\n      }\n\n      var skey = xml.getAttribute(\"dhx_security\");\n      if (skey) gantt.security_key = skey;\n      return xml;\n    },\n    parse: function parse(text, loader) {\n      loader = this._getXML(text, loader);\n      var data = {};\n      var evs = data.data = [];\n      var xml = gantt.ajax.xpath(\"//task\", loader);\n\n      for (var i = 0; i < xml.length; i++) {\n        evs[i] = this._xmlNodeToJSON(xml[i]);\n      }\n\n      data.collections = this._getCollections(loader);\n      return data;\n    },\n    _copyLink: function _copyLink(obj) {\n      return \"<item id='\" + obj.id + \"' source='\" + obj.source + \"' target='\" + obj.target + \"' type='\" + obj.type + \"' />\";\n    },\n    _copyObject: function _copyObject(obj) {\n      return \"<task id='\" + obj.id + \"' parent='\" + (obj.parent || \"\") + \"' start_date='\" + obj.start_date + \"' duration='\" + obj.duration + \"' open='\" + !!obj.open + \"' progress='\" + obj.progress + \"' end_date='\" + obj.end_date + \"'><![CDATA[\" + obj.text + \"]]></task>\";\n    },\n    serialize: function serialize() {\n      var tasks = [];\n      var links = [];\n      var json = gantt.json.serialize();\n\n      for (var i = 0, len = json.data.length; i < len; i++) {\n        tasks.push(this._copyObject(json.data[i]));\n      }\n\n      for (var i = 0, len = json.links.length; i < len; i++) {\n        links.push(this._copyLink(json.links[i]));\n      }\n\n      return \"<data>\" + tasks.join(\"\") + \"<coll_options for='links'>\" + links.join(\"\") + \"</coll_options></data>\";\n    }\n  };\n  gantt.oldxml = {\n    parse: function parse(text, loader) {\n      loader = gantt.xml._getXML(text, loader, \"projects\");\n      var data = {\n        collections: {\n          links: []\n        }\n      };\n      var evs = data.data = [];\n      var xml = gantt.ajax.xpath(\"//task\", loader);\n\n      for (var i = 0; i < xml.length; i++) {\n        evs[i] = gantt.xml._xmlNodeToJSON(xml[i]);\n        var parent = xml[i].parentNode;\n        if (parent.tagName == \"project\") evs[i].parent = \"project-\" + parent.getAttribute(\"id\");else evs[i].parent = parent.parentNode.getAttribute(\"id\");\n      }\n\n      xml = gantt.ajax.xpath(\"//project\", loader);\n\n      for (var i = 0; i < xml.length; i++) {\n        var ev = gantt.xml._xmlNodeToJSON(xml[i], true);\n\n        ev.id = \"project-\" + ev.id;\n        evs.push(ev);\n      }\n\n      for (var i = 0; i < evs.length; i++) {\n        var ev = evs[i];\n        ev.start_date = ev.startdate || ev.est;\n        ev.end_date = ev.enddate;\n        ev.text = ev.name;\n        ev.duration = ev.duration / 8;\n        ev.open = 1;\n        if (!ev.duration && !ev.end_date) ev.duration = 1;\n        if (ev.predecessortasks) data.collections.links.push({\n          target: ev.id,\n          source: ev.predecessortasks,\n          type: gantt.config.links.finish_to_start\n        });\n      }\n\n      return data;\n    },\n    serialize: function serialize() {\n      gantt.message(\"Serialization to 'old XML' is not implemented\");\n    }\n  };\n\n  gantt.serverList = function (name, array) {\n    if (array) {\n      this.serverList[name] = array.slice(0);\n    } else if (!this.serverList[name]) {\n      this.serverList[name] = [];\n    }\n\n    return this.serverList[name];\n  };\n};","module.exports = function (gantt) {\n  gantt.isReadonly = function (item) {\n    if ((typeof item == \"number\" || typeof item == \"string\") && gantt.isTaskExists(item)) {\n      item = gantt.getTask(item);\n    }\n\n    if (item && item[this.config.editable_property]) {\n      return false;\n    } else {\n      return item && item[this.config.readonly_property] || this.config.readonly;\n    }\n  };\n};","module.exports = function (gantt) {\n  gantt.getGridColumn = function (name) {\n    var columns = gantt.config.columns;\n\n    for (var i = 0; i < columns.length; i++) {\n      if (columns[i].name == name) return columns[i];\n    }\n\n    return null;\n  };\n\n  gantt.getGridColumns = function () {\n    return gantt.config.columns.slice();\n  };\n};","const SENSITIVITY = 20;\r\nconst TIMEOUT = 50;\r\nconst SCROLLSTEP = 10;\r\n\r\nexport default class ScrollableGrid {\r\n\tpublic getCurrentX;\r\n\tprivate $gantt;\r\n\tprivate $grid;\r\n\tprivate _dnd;\r\n\tprivate _scrollView;\r\n\tprivate _scrollOrder: 0 | 1 | -1 = 0;\r\n\r\n\tconstructor(params) {\r\n\t\tconst {gantt, grid, dnd, getCurrentX} = params;\r\n\t\tthis.$gantt = gantt;\r\n\t\tthis.$grid = grid;\r\n\t\tthis._dnd = dnd;\r\n\t\tthis.getCurrentX = getCurrentX;\r\n\t\tthis._scrollView = this.$gantt.$ui.getView(this.$grid.$config.scrollX);\r\n\t\tthis.attachEvents();\r\n\t}\r\n\tattachEvents() {\r\n\t\tif (this.isScrollable()) {\r\n\t\t\tthis._dnd.attachEvent(\"onDragMove\", (obj, e) => {\r\n\t\t\t\tconst gridBoundingRect = this.$grid.$grid.getBoundingClientRect();\r\n\t\t\t\tconst maxLeft = gridBoundingRect.right;\r\n\t\t\t\tconst minLeft = gridBoundingRect.left;\r\n\t\t\t\tconst currentX = this.getCurrentX(e.clientX);\r\n\r\n\t\t\t\tif (currentX >= maxLeft - SENSITIVITY) {\r\n\t\t\t\t\tthis.autoscrollRight();\r\n\t\t\t\t\tthis.autoscrollStart();\r\n\t\t\t\t}\r\n\t\t\t\tif (currentX <= minLeft + SENSITIVITY) {\r\n\t\t\t\t\tthis.autoscrollLeft();\r\n\t\t\t\t\tthis.autoscrollStart();\r\n\t\t\t\t}\r\n\t\t\t\tif (currentX < maxLeft - SENSITIVITY && currentX > minLeft + SENSITIVITY) {\r\n\t\t\t\t\tthis.autoscrollStop();\r\n\t\t\t\t}\r\n\t\t\t\treturn true;\r\n\t\t\t});\r\n\t\t\tthis._dnd.attachEvent(\"onDragEnd\", () => {\r\n\t\t\t\tthis.autoscrollStop();\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\tautoscrollStart() {\r\n\t\tif (this._scrollOrder === 0) {\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tconst scrollStep = SCROLLSTEP * this._scrollOrder;\r\n\t\tconst scrollState = this._scrollView.getScrollState();\r\n\t\tthis._scrollView.scrollTo(scrollState.position + scrollStep);\r\n\t\tsetTimeout(() => { this.autoscrollStart(); }, TIMEOUT);\r\n\t}\r\n\tautoscrollRight() {\r\n\t\tthis._scrollOrder = 1;\r\n\t}\r\n\tautoscrollLeft() {\r\n\t\tthis._scrollOrder = -1;\r\n\t}\r\n\tautoscrollStop() {\r\n\t\tthis._scrollOrder = 0;\r\n\t}\r\n\tgetCorrection() {\r\n\t\tif (!this.isScrollable()) {\r\n\t\t\treturn 0;\r\n\t\t}\r\n\t\treturn this._scrollView.getScrollState().position;\r\n\t}\r\n\tisScrollable() {\r\n\t\treturn !!this.$grid.$config.scrollable;\r\n\t}\r\n}","import * as domHelpers from \"../../utils/dom_helpers\";\r\nimport ScrollableGrid from \"./scrollable_grid\";\r\n\r\nconst COLUMN_ID_ATTR_NAME = \"data-column-id\";\r\n\r\nexport class ColumnsGridDnd {\r\n\tprivate $gantt;\r\n\tprivate $grid;\r\n\tprivate _dragX;\r\n\tprivate _dnd;\r\n\tprivate _originAutoscroll;\r\n\tprivate _scrollableGrid: ScrollableGrid;\r\n\tprivate _draggedCell;\r\n\tprivate _targetMarker = null;\r\n\tprivate _gridConfig;\r\n\tconstructor(gantt, grid) {\r\n\t\tthis.$gantt = gantt;\r\n\t\tthis.$grid = grid;\r\n\t}\r\n\tinit() {\r\n\t\tconst DND = this.$gantt.$services.getService(\"dnd\");\r\n\t\tthis._dnd = new DND(this.$grid.$grid_scale, { updates_per_second: 60 });\r\n\t\tthis._scrollableGrid = new ScrollableGrid({\r\n\t\t\tgantt: this.$gantt,\r\n\t\t\tgrid: this.$grid,\r\n\t\t\tdnd: this._dnd,\r\n\t\t\tgetCurrentX: this.calculateCurrentPosition\r\n\t\t});\r\n\t\tthis.attachEvents();\r\n\t}\r\n\tattachEvents() {\r\n\t\tthis._dnd.attachEvent(\"onBeforeDragStart\", (obj, e) => {\r\n\t\t\tthis._draggedCell = this.$gantt.utils.dom.closest(e.target, \".gantt_grid_head_cell\");\r\n\t\t\tif(!this._draggedCell){\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tconst columns = this.$grid.$getConfig().columns;\r\n\t\t\tconst columnName = this._draggedCell.getAttribute(COLUMN_ID_ATTR_NAME);\r\n\t\t\tlet draggedColumn;\r\n\t\t\tlet draggedIndex;\r\n\t\t\tcolumns.map(function(column, index){\r\n\t\t\t\tif(column.name === columnName){\r\n\t\t\t\t\tdraggedColumn = column;\r\n\t\t\t\t\tdraggedIndex = index;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\tif (this.$grid.callEvent(\"onBeforeColumnDragStart\", [{ draggedColumn, draggedIndex}]) === false) {\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\r\n\t\t\tif (!this._draggedCell || !draggedColumn) {\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\r\n\t\t\tthis._gridConfig = this.$grid.$getConfig();\r\n\t\t\tthis._originAutoscroll = this.$gantt.config.autoscroll;\r\n\t\t\tthis.$gantt.config.autoscroll = false;\r\n\t\t\treturn true;\r\n\t\t});\r\n\r\n\t\tthis._dnd.attachEvent(\"onAfterDragStart\", (obj, e) => {\r\n\t\t\tif (!this._draggedCell) {\r\n\t\t\t\treturn; // GS-1333: don't try to reorder a column when we resize it\r\n\t\t\t}\r\n\t\t\tthis._dnd.config.column = this._draggedCell.getAttribute(COLUMN_ID_ATTR_NAME);\r\n\t\t\tthis._dnd.config.marker.innerHTML = this._draggedCell.outerHTML;\r\n\t\t\tthis._dnd.config.marker.classList.add(\"gantt_column_drag_marker\");\r\n\t\t\tthis._dnd.config.marker.style.height = this._gridConfig.scale_height + \"px\";\r\n\t\t\tthis._dnd.config.marker.style.lineHeight = this._gridConfig.scale_height + \"px\";\r\n\t\t\tthis._draggedCell.classList.add(\"gantt_grid_head_cell_dragged\");\r\n\t\t});\r\n\r\n\t\tthis._dnd.attachEvent(\"onDragMove\", (obj, e) => {\r\n\t\t\tif(!this._draggedCell){\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tthis._dragX = e.clientX;\r\n\t\t\tconst x = this.calculateCurrentPosition(e.clientX);\r\n\t\t\tconst columnIndexes = this.findColumnsIndexes();\r\n\t\t\tconst targetIndex = columnIndexes.targetIndex;\r\n\t\t\tconst draggedIndex = columnIndexes.draggedIndex;\r\n\t\t\tconst columns = this.$grid.$getConfig().columns;\r\n\r\n\t\t\tconst draggedColumn = columns[draggedIndex];\r\n\t\t\tconst targetColumn = columns[targetIndex];\r\n\t\t\tif (this.$grid.callEvent(\"onColumnDragMove\", [{ draggedColumn, targetColumn, draggedIndex, targetIndex }]) === false) {\r\n\t\t\t\tthis.cleanTargetMarker();\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t\tthis.setMarkerPosition(x);\r\n\t\t\tthis.drawTargetMarker(columnIndexes);\r\n\t\t\treturn true;\r\n\t\t});\r\n\r\n\t\tthis._dnd.attachEvent(\"onDragEnd\", () => {\r\n\t\t\tif (!this._draggedCell) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\tthis.$gantt.config.autoscroll = this._originAutoscroll;\r\n\t\t\tthis._draggedCell.classList.remove(\"gantt_grid_head_cell_dragged\");\r\n\t\t\tthis.cleanTargetMarker();\r\n\t\t\tthis.reorderColumns();\r\n\t\t});\r\n\r\n\t}\r\n\treorderColumns() {\r\n\t\tconst { targetIndex, draggedIndex } = this.findColumnsIndexes();\r\n\r\n\t\tconst columns = this.$grid.$getConfig().columns;\r\n\t\tconst draggedColumn = columns[draggedIndex];\r\n\t\tconst targetColumn = columns[targetIndex];\r\n\r\n\t\tif (this.$grid.callEvent(\"onBeforeColumnReorder\", [{ draggedColumn, targetColumn, draggedIndex, targetIndex }]) === false) {\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tif (targetIndex === draggedIndex) {\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tcolumns.splice(draggedIndex, 1);\r\n\t\tcolumns.splice(targetIndex, 0, draggedColumn);\r\n\t\tthis.$gantt.render();\r\n\t\tthis.$grid.callEvent(\"onAfterColumnReorder\", [{ draggedColumn, targetColumn, draggedIndex, targetIndex }]);\r\n\t}\r\n\tfindColumnsIndexes() {\r\n\t\tconst draggedId = this._dnd.config.column;\r\n\t\tconst columns = this.$grid.$getConfig().columns;\r\n\t\tlet targetIndex: number;\r\n\t\tlet draggedIndex: number;\r\n\t\tlet xBefore: number;\r\n\t\tlet xAfter: number;\r\n\t\tconst currentColumn = { startX: 0, endX: 0 };\r\n\r\n\t\tlet start = 0;\r\n\t\tlet end = columns.length - 1;\r\n\t\tlet compare = (a, b) => a <= b;\r\n\t\tlet next = (index) => ++index;\r\n\t\tif (this.$gantt.config.rtl) {\r\n\t\t\tstart = columns.length - 1;\r\n\t\t\tend = 0;\r\n\t\t\tcompare = (a, b) => a >= b;\r\n\t\t\tnext = (index) => --index;\r\n\t\t}\r\n\r\n\t\tlet columnRelativePos: number;\r\n\r\n\t\tconst relativeX = this._dragX - this.$grid.$grid.getBoundingClientRect().left + this._scrollableGrid.getCorrection();\r\n\t\tfor (let i = start; compare(i, end); i = next(i)) {\r\n\t\t\tif (targetIndex !== undefined && draggedIndex !== undefined) {\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t\tif(!columns[i].hide) {\r\n\t\t\t\tcurrentColumn.startX = currentColumn.endX;\r\n\t\t\t\tcurrentColumn.endX += columns[i].width;\r\n\r\n\t\t\t\t// if drop on a column or drop after the last column\r\n\t\t\t\tif (relativeX >= currentColumn.startX && (relativeX <= currentColumn.endX || !compare(next(i), end))) {\r\n\t\t\t\t\ttargetIndex = i;\r\n\t\t\t\t\txBefore = currentColumn.startX;\r\n\t\t\t\t\txAfter = currentColumn.endX;\r\n\t\t\t\t\tcolumnRelativePos = (relativeX - currentColumn.startX) / (currentColumn.endX - currentColumn.startX);\r\n\t\t\t\t}\r\n\t\t\t\tif (draggedId === columns[i].name) {\r\n\t\t\t\t\tdraggedIndex = i;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn {\r\n\t\t\ttargetIndex,\r\n\t\t\tdraggedIndex,\r\n\t\t\txBefore,\r\n\t\t\txAfter,\r\n\t\t\tcolumnRelativePos\r\n\t\t};\r\n\t}\r\n\tsetMarkerPosition(x: number, y: number = 10) {\r\n\t\tconst { marker } = this._dnd.config;\r\n\t\tconst gridOffset = this._dnd._obj.getBoundingClientRect();\r\n\t\tmarker.style.top = `${gridOffset.y + y}px`;\r\n\t\tmarker.style.left = `${x}px`;\r\n\t}\r\n\tcalculateCurrentPosition = (eventX: number) => {\r\n\t\tconst gridBoundingRect = this.$grid.$grid.getBoundingClientRect();\r\n\t\tconst maxLeft = gridBoundingRect.right;\r\n\t\tconst minLeft = gridBoundingRect.left;\r\n\t\tlet x = eventX;\r\n\t\tif (x > maxLeft) {\r\n\t\t\tx = maxLeft;\r\n\t\t}\r\n\t\tif (x < minLeft) {\r\n\t\t\tx = minLeft;\r\n\t\t}\r\n\t\treturn x;\r\n\t}\r\n\tdrawTargetMarker({ targetIndex, draggedIndex, xBefore, xAfter, columnRelativePos }) {\r\n\t\tif (!this._targetMarker) {\r\n\t\t\tthis._targetMarker = document.createElement(\"div\");\r\n\t\t\tdomHelpers.addClassName(this._targetMarker, \"gantt_grid_target_marker\");\r\n\t\t\tthis._targetMarker.style.display = \"none\";\r\n\t\t\tthis._targetMarker.style.height = `${this._gridConfig.scale_height}px`;\r\n\t\t}\r\n\r\n\t\t// marker can be detached after gantt.render\r\n\t\tif(!this._targetMarker.parentNode){\r\n\t\t\tthis.$grid.$grid_scale.appendChild(this._targetMarker);\r\n\t\t}\r\n\r\n\t\tlet nextPosition: number;\r\n\t\tif (targetIndex > draggedIndex) {\r\n\t\t\tnextPosition = xAfter;\r\n\t\t} else if (targetIndex < draggedIndex) {\r\n\t\t\tnextPosition = xBefore;\r\n\t\t} else {\r\n\t\t\tif(columnRelativePos > 0.5){\r\n\t\t\t\tnextPosition = xAfter;\r\n\t\t\t}else{\r\n\t\t\t\tnextPosition = xBefore;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis._targetMarker.style.left = `${nextPosition}px`;\r\n\t\tthis._targetMarker.style.display = \"block\";\r\n\t}\r\n\tcleanTargetMarker() {\r\n\t\tif (this._targetMarker && this._targetMarker.parentNode) {\r\n\t\t\tthis.$grid.$grid_scale.removeChild(this._targetMarker);\r\n\t\t}\r\n\t\tthis._targetMarker = null;\r\n\t}\r\n}","import {ColumnsGridDnd} from \"./column_grid_dnd\";\r\nexport default ColumnsGridDnd;","var domHelpers = require(\"../utils/dom_helpers\");\n\nfunction createRowResizer(gantt, grid) {\n  var _task_grid_row_resize = {\n    row_before_start: gantt.bind(function (dnd, obj, e) {\n      var config = grid.$getConfig();\n      var store = grid.$config.rowStore;\n      var el = domHelpers.locateAttribute(e, config.task_grid_row_resizer_attribute);\n      if (!el) return false;\n      var row_id = this.locate(e, config.task_grid_row_resizer_attribute),\n          row = store.getItem(row_id);\n      if (grid.callEvent(\"onBeforeRowResize\", [row]) === false) return false;\n    }, gantt),\n    row_after_start: gantt.bind(function (dnd, obj, e) {\n      var config = grid.$getConfig();\n      var row_id = this.locate(e, config.task_grid_row_resizer_attribute);\n      dnd.config.marker.innerHTML = \"\";\n      dnd.config.marker.className += \" gantt_row_grid_resize_area\";\n      dnd.config.marker.style.width = grid.$grid.offsetWidth + \"px\";\n      dnd.config.drag_id = row_id;\n    }, gantt),\n    row_drag_move: gantt.bind(function (dnd, obj, e) {\n      var store = grid.$config.rowStore;\n      var config = grid.$getConfig();\n      var dd = dnd.config;\n      var id = dd.drag_id,\n          itemHeight = grid.getItemHeight(id),\n          itemTop = grid.getItemTop(id);\n      var pos = domHelpers.getNodePosition(grid.$grid_data),\n          pointerPosition = parseInt(dd.marker.style.top, 10),\n          markerStartPosition = itemTop + pos.y,\n          marker_height = 0,\n          minPointerPosition = config.min_task_grid_row_height;\n      marker_height = pointerPosition - markerStartPosition;\n\n      if (marker_height < minPointerPosition) {\n        marker_height = minPointerPosition;\n      }\n\n      dd.marker.style.left = pos.x + \"px\";\n      dd.marker.style.top = markerStartPosition - 1 + \"px\";\n      dd.marker.style.height = Math.abs(marker_height) + 1 + \"px\";\n      dd.marker_height = marker_height;\n      grid.callEvent(\"onRowResize\", [id, store.getItem(id), marker_height + itemHeight]);\n      return true;\n    }, gantt),\n    row_drag_end: gantt.bind(function (dnd, obj, e) {\n      var store = grid.$config.rowStore;\n      var dd = dnd.config;\n      var id = dd.drag_id,\n          item = store.getItem(id),\n          oldItemHeight = grid.getItemHeight(id);\n      var finalHeight = dd.marker_height;\n      if (grid.callEvent(\"onBeforeRowResizeEnd\", [id, item, finalHeight]) === false) return;\n      if (item.row_height == finalHeight) return;\n      item.row_height = finalHeight;\n      gantt.updateTask(id);\n      grid.callEvent(\"onAfterRowResize\", [id, item, oldItemHeight, finalHeight]);\n      this.render();\n    }, gantt)\n  }; // calls the initialization of the D'n'D events for resize elements\n\n  var _init_resize = function _init_resize() {\n    var DnD = gantt.$services.getService(\"dnd\");\n    var config = grid.$getConfig();\n    var dnd = new DnD(grid.$grid_data, {\n      updates_per_second: 60\n    });\n    if (gantt.defined(config.dnd_sensitivity)) dnd.config.sensitivity = config.dnd_sensitivity;\n    dnd.attachEvent(\"onBeforeDragStart\", function (obj, e) {\n      return _task_grid_row_resize.row_before_start(dnd, obj, e);\n    });\n    dnd.attachEvent(\"onAfterDragStart\", function (obj, e) {\n      return _task_grid_row_resize.row_after_start(dnd, obj, e);\n    });\n    dnd.attachEvent(\"onDragMove\", function (obj, e) {\n      return _task_grid_row_resize.row_drag_move(dnd, obj, e);\n    });\n    dnd.attachEvent(\"onDragEnd\", function (obj, e) {\n      return _task_grid_row_resize.row_drag_end(dnd, obj, e);\n    });\n  };\n\n  return {\n    init: _init_resize\n  };\n}\n\nmodule.exports = createRowResizer;","function createHelper(view) {\n  var cachedRowHeight = -1;\n  var canUseSimpleCalc = -1;\n  return {\n    resetCache: function resetCache() {\n      cachedRowHeight = -1;\n      canUseSimpleCalc = -1;\n    },\n    _getRowHeight: function _getRowHeight() {\n      if (cachedRowHeight === -1) {\n        cachedRowHeight = view.$getConfig().row_height;\n      }\n\n      return cachedRowHeight;\n    },\n    _refreshState: function _refreshState() {\n      this.resetCache();\n      canUseSimpleCalc = true;\n      var store = view.$config.rowStore;\n\n      if (!store) {\n        return;\n      }\n\n      var globalRowHeight = this._getRowHeight();\n\n      for (var i = 0; i < store.fullOrder.length; i++) {\n        var item = store.getItem(store.fullOrder[i]); // GS-1491: ignore the task when it is filtered:\n\n        if (!item) {\n          continue;\n        }\n\n        if (item.row_height && item.row_height !== globalRowHeight) {\n          canUseSimpleCalc = false;\n          break;\n        }\n      }\n    },\n    canUseSimpleCalculation: function canUseSimpleCalculation() {\n      if (canUseSimpleCalc === -1) {\n        this._refreshState();\n      }\n\n      return canUseSimpleCalc;\n    },\n\n    /**\r\n     * Get top coordinate by row index (order)\r\n     * @param {number} index\r\n     */\n    getRowTop: function getRowTop(index) {\n      var store = view.$config.rowStore;\n\n      if (!store) {\n        return 0;\n      }\n\n      return index * this._getRowHeight();\n    },\n\n    /**\r\n     * Get height of the item by item id\r\n     * @param {*} itemId\r\n     */\n    getItemHeight: function getItemHeight(itemId) {\n      return this._getRowHeight();\n    },\n\n    /**\r\n     * Get total height of items\r\n     */\n    getTotalHeight: function getTotalHeight() {\n      if (view.$config.rowStore) {\n        var store = view.$config.rowStore;\n        return store.countVisible() * this._getRowHeight();\n      } else {\n        return 0;\n      }\n    },\n\n    /**\r\n     * Get item by top position\r\n     * @param {*} top\r\n     */\n    getItemIndexByTopPosition: function getItemIndexByTopPosition(top) {\n      if (view.$config.rowStore) {\n        return Math.floor(top / this._getRowHeight());\n      } else {\n        return 0;\n      }\n    }\n  };\n}\n\nmodule.exports = createHelper;","function createResizer(gantt, grid) {\n  return {\n    init: function init() {},\n    doOnRender: function doOnRender() {}\n  };\n}\n\nmodule.exports = createResizer;","var Grid = require(\"./ui/grid/grid\");\n\nmodule.exports = function (gantt) {\n  require(\"./grid_column_api.gpl\")(gantt);\n\n  Grid.prototype.getGridColumns = function () {\n    var config = this.$getConfig();\n    var columns = config.columns,\n        visibleColumns = [];\n\n    for (var i = 0; i < columns.length; i++) {\n      if (!columns[i].hide) visibleColumns.push(columns[i]);\n    }\n\n    return visibleColumns;\n  };\n};","module.exports = function (gantt) {\n  var TreeDataStore = require(\"./datastore/treedatastore\");\n\n  var loadedBranches = {};\n  gantt.attachEvent(\"onClearAll\", function () {\n    loadedBranches = {};\n  });\n  var oldHasChildren = TreeDataStore.prototype.hasChild;\n\n  gantt.$data.tasksStore.hasChild = function (id) {\n    if (!gantt.config.branch_loading) {\n      return oldHasChildren.call(this, id);\n    } else {\n      if (oldHasChildren.call(this, id)) return true;\n\n      if (this.exists(id)) {\n        return this.getItem(id)[gantt.config.branch_loading_property];\n      }\n    }\n\n    return false;\n  };\n\n  function needLoading(id) {\n    if (gantt.config.branch_loading && gantt._load_url) {\n      var alreadyLoaded = !!loadedBranches[id]; // call ajax only if branch has children\n\n      if (!alreadyLoaded && !gantt.getChildren(id).length && gantt.hasChild(id)) {\n        return true;\n      }\n    }\n\n    return false;\n  }\n\n  gantt.attachEvent(\"onTaskOpened\", function (id) {\n    if (gantt.config.branch_loading && gantt._load_url) {\n      // call ajax only if branch has children\n      if (needLoading(id)) {\n        var url = gantt._load_url;\n        url = url.replace(/(\\?|&)?parent_id=.+&?/, \"\");\n        var param = url.indexOf(\"?\") >= 0 ? \"&\" : \"?\";\n        var y = gantt.getScrollState().y || 0;\n        var requestData = {\n          taskId: id,\n          url: url + param + \"parent_id=\" + encodeURIComponent(id)\n        };\n\n        if (gantt.callEvent(\"onBeforeBranchLoading\", [requestData]) === false) {\n          return;\n        }\n\n        gantt.load(requestData.url, this._load_type, function () {\n          if (y) {\n            gantt.scrollTo(null, y);\n          }\n\n          gantt.callEvent(\"onAfterBranchLoading\", [requestData]);\n        });\n        loadedBranches[id] = true;\n      }\n    }\n  });\n};","export default function(gantt: any){\r\n\r\n\tgantt.ext = gantt.ext || {};\r\n\tgantt.config.show_empty_state = false;\r\n\r\n\tgantt.ext.emptyStateElement = gantt.ext.emptyStateElement || {\r\n\t\tisEnabled() {\r\n\t\t\treturn gantt.config.show_empty_state === true;\r\n\t\t},\r\n\t\tisGanttEmpty(){\r\n\t\t\treturn !gantt.getTaskByTime().length;\r\n\t\t},\r\n\t\trenderContent(container){\r\n\t\t\tconst placeholderTextElement = `<div class='gantt_empty_state_text'>\r\n    <div class='gantt_empty_state_text_link' data-empty-state-create-task>${gantt.locale.labels.empty_state_text_link}</div>\r\n    <div class='gantt_empty_state_text_description'>${gantt.locale.labels.empty_state_text_description}</div>\r\n    </div>`;\r\n\t\t\tconst placeholderImageElement = \"<div class='gantt_empty_state_image'></div>\";\r\n\r\n\t\t\tconst placeholderContainer = `<div class='gantt_empty_state'>${placeholderImageElement}${placeholderTextElement}</div>`;\r\n\t\t\tcontainer.innerHTML = placeholderContainer;\r\n\t\t},\r\n\r\n\t\tclickEvents: [],\r\n\t\tattachAddTaskEvent(){\r\n\t\t\tconst id = gantt.attachEvent(\"onEmptyClick\", function(e){\r\n\t\t\t\tconst domHelpers = gantt.utils.dom;\r\n\t\t\t\tconst gridPlaceholder = domHelpers.closest(e.target, \"[data-empty-state-create-task]\");\r\n\t\t\t\tif (gridPlaceholder){\r\n\t\t\t\t\tgantt.createTask({\r\n\t\t\t\t\t\tid: gantt.uid(),\r\n\t\t\t\t\t\ttext: \"New Task\"\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t\tthis.clickEvents.push(id);\r\n\t\t},\r\n\t\tdetachAddTaskEvents(){\r\n\t\t\tthis.clickEvents.forEach(function(event){\r\n\t\t\t\tgantt.detachEvent(event);\r\n\t\t\t});\r\n\t\t\tthis.clickEvents = [];\r\n\t\t},\r\n\r\n\t\tgetContainer(){\r\n\t\t\tif (gantt.$container) {\r\n\t\t\t\tconst domHelpers = gantt.utils.dom;\r\n\t\t\t\tif (gantt.$container.contains(gantt.$grid_data)) {\r\n\t\t\t\t\treturn domHelpers.closest(gantt.$grid_data, \".gantt_layout_content\");\r\n\t\t\t\t}\r\n\t\t\t\tif (gantt.$container.contains(gantt.$task_data)){\r\n\t\t\t\t\treturn domHelpers.closest(gantt.$task_data, \".gantt_layout_content\");\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\treturn null;\r\n\t\t},\r\n\r\n\t\tgetNode(){\r\n\t\t\tconst container = this.getContainer();\r\n\t\t\tif (!container){\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t\tconst emptyStateElementNode = container.querySelector(\".gantt_empty_state_wrapper\");\r\n\t\t\treturn emptyStateElementNode;\r\n\t\t},\r\n\r\n\t\tshow(){\r\n\t\t\tconst container = this.getContainer();\r\n\t\t\tif (!container && this.isGanttEmpty()){\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\r\n\t\t\tconst wrapper = document.createElement(\"div\");\r\n\t\t\twrapper.className = \"gantt_empty_state_wrapper\";\r\n\t\t\twrapper.style.marginTop = (gantt.config.scale_height - container.offsetHeight) + \"px\";\r\n\t\t\tconst oldNodes = gantt.$container.querySelectorAll(\".gantt_empty_state_wrapper\");\r\n\t\t\t// for IE11\r\n\t\t\tArray.prototype.forEach.call(oldNodes, function(node){\r\n\t\t\t\tnode.parentNode.removeChild(node);\r\n\t\t\t});\r\n\r\n\t\t\tthis.detachAddTaskEvents();\r\n\t\t\tthis.attachAddTaskEvent();\r\n\r\n\t\t\tcontainer.appendChild(wrapper);\r\n\t\t\tthis.renderContent(wrapper);\r\n\t\t},\r\n\t\thide(){\r\n\t\t\tconst emptyStateElementNode = this.getNode();\r\n\t\t\tif (emptyStateElementNode){\r\n\t\t\t\temptyStateElementNode.parentNode.removeChild(emptyStateElementNode);\r\n\t\t\t} else{\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\r\n\t\t},\r\n\t\tinit(){ }\r\n\t};\r\n\r\n\tgantt.attachEvent(\"onDataRender\", function() {\r\n\t\tconst emptyStateElement = gantt.ext.emptyStateElement;\r\n\t\tif (emptyStateElement.isEnabled() && emptyStateElement.isGanttEmpty()) {\r\n\t\t\temptyStateElement.show();\r\n\t\t} else {\r\n\t\t\temptyStateElement.hide();\r\n\t\t}\r\n\t});\r\n\r\n\r\n\r\n\r\n}\r\n","export default class LinkFormatterSimple implements ILinkFormatter {\r\n\tstatic create = (settings: ILinkFormatterConfig = null, gantt: any): LinkFormatterSimple => {\r\n\t\treturn new LinkFormatterSimple(gantt);\r\n\t}\r\n\tprotected _linkReg: RegExp;\r\n\tprotected _gantt: any;\r\n\r\n\tconstructor(gantt: any) {\r\n\t\tthis._linkReg = /^[0-9\\.]+/;\r\n\t\tthis._gantt = gantt;\r\n\t}\r\n\r\n\tformat = (link: ILink) : string => {\r\n\t\tconst wbs = this._getWBSCode(link.source);\r\n\t\treturn wbs;\r\n\t}\r\n\r\n\tcanParse = (value: string) : boolean => {\r\n\t\treturn this._linkReg.test(value);\r\n\t}\r\n\tparse = (value: string) : ILink => {\r\n\t\tif(!this.canParse(value)){\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\tconst linkPart = this._linkReg.exec(value)[0].trim();\r\n\r\n\t\tconst source = this._findSource(linkPart) || null;\r\n\r\n\t\treturn {\r\n\t\t\tid: undefined,\r\n\t\t\tsource,\r\n\t\t\ttarget: null,\r\n\t\t\ttype: this._gantt.config.links.finish_to_start,\r\n\t\t\tlag: 0\r\n\t\t};\r\n\t}\r\n\r\n\tprotected _getWBSCode = (source: number | string) => {\r\n\t\tconst pred = this._gantt.getTask(source);\r\n\t\treturn this._gantt.getWBSCode(pred);\r\n\t}\r\n\r\n\tprotected _findSource = (value: string) => {\r\n\t\tconst reqTemplate = new RegExp(\"^[0-9\\.]+\", \"i\");\r\n\t\tif(reqTemplate.exec(value)){\r\n\t\t\tconst wbs = reqTemplate.exec(value)[0];\r\n\t\t\tconst task = this._gantt.getTaskByWBSCode(wbs);\r\n\t\t\tif(task){\r\n\t\t\t\treturn task.id;\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn null;\r\n\t}\r\n}","var DurationFormatter = require(\"../common/duration_formatter\")[\"default\"];\n\nvar LinkFormatter = require(\"../common/link_formatter\")[\"default\"];\n\nmodule.exports = function (gantt) {\n  gantt.ext.formatters = {\n    durationFormatter: function durationFormatter(settings) {\n      if (!settings) {\n        settings = {};\n      }\n\n      if (!settings.store) {\n        settings.store = gantt.config.duration_unit;\n      }\n\n      if (!settings.enter) {\n        settings.enter = gantt.config.duration_unit;\n      }\n\n      return DurationFormatter.create(settings, gantt);\n    },\n    linkFormatter: function linkFormatter(settings) {\n      return LinkFormatter.create(settings, gantt);\n    }\n  };\n};","module.exports = function (gantt) {\n  function isEnabled() {\n    return gantt.config.auto_types && // if enabled\n    gantt.getTaskType(gantt.config.types.project) == gantt.config.types.project; // and supported\n  }\n\n  function callIfEnabled(callback) {\n    return function () {\n      if (!isEnabled()) {\n        return true;\n      }\n\n      return callback.apply(this, arguments);\n    };\n  }\n\n  function checkTaskType(id, changedTypes) {\n    var task = gantt.getTask(id);\n    var targetType = getTaskTypeToUpdate(task);\n\n    if (targetType !== false && gantt.getTaskType(task) !== targetType) {\n      changedTypes.$needsUpdate = true;\n      changedTypes[task.id] = {\n        task: task,\n        type: targetType\n      };\n    }\n  }\n\n  function getUpdatedTypes(id, changedTypes) {\n    changedTypes = changedTypes || {};\n    checkTaskType(id, changedTypes);\n    gantt.eachParent(function (parent) {\n      checkTaskType(parent.id, changedTypes);\n    }, id);\n    return changedTypes;\n  }\n\n  function applyChanges(changedTypes) {\n    for (var i in changedTypes) {\n      if (changedTypes[i] && changedTypes[i].task) {\n        var task = changedTypes[i].task;\n        task.type = changedTypes[i].type;\n        gantt.updateTask(task.id);\n      }\n    }\n  }\n\n  function updateParentTypes(startId) {\n    if (gantt.getState().group_mode) {\n      return;\n    }\n\n    var changedTypes = getUpdatedTypes(startId);\n\n    if (changedTypes.$needsUpdate) {\n      gantt.batchUpdate(function () {\n        applyChanges(changedTypes);\n      });\n    }\n  }\n\n  var delTaskParent;\n\n  function updateTaskType(task, targetType) {\n    if (!gantt.getState().group_mode) {\n      task.type = targetType;\n      gantt.updateTask(task.id);\n    }\n  }\n\n  function getTaskTypeToUpdate(task) {\n    var allTypes = gantt.config.types;\n    var hasChildren = gantt.hasChild(task.id);\n    var taskType = gantt.getTaskType(task.type);\n\n    if (hasChildren && taskType === allTypes.task) {\n      return allTypes.project;\n    }\n\n    if (!hasChildren && taskType === allTypes.project) {\n      return allTypes.task;\n    }\n\n    return false;\n  }\n\n  var isParsingDone = true;\n  gantt.attachEvent(\"onParse\", callIfEnabled(function () {\n    isParsingDone = false;\n\n    if (gantt.getState().group_mode) {\n      return;\n    }\n\n    gantt.batchUpdate(function () {\n      gantt.eachTask(function (task) {\n        var targetType = getTaskTypeToUpdate(task);\n\n        if (targetType !== false) {\n          updateTaskType(task, targetType);\n        }\n      });\n    });\n    isParsingDone = true;\n  }));\n  gantt.attachEvent(\"onAfterTaskAdd\", callIfEnabled(function (id) {\n    if (isParsingDone) {\n      updateParentTypes(id);\n    }\n  }));\n  gantt.attachEvent(\"onAfterTaskUpdate\", callIfEnabled(function (id) {\n    if (isParsingDone) {\n      updateParentTypes(id);\n    }\n  }));\n\n  function updateAfterRemoveChild(id) {\n    if (id != gantt.config.root_id && gantt.isTaskExists(id)) {\n      updateParentTypes(id);\n    }\n  }\n\n  gantt.attachEvent(\"onBeforeTaskDelete\", callIfEnabled(function (id, task) {\n    delTaskParent = gantt.getParent(id);\n    return true;\n  }));\n  gantt.attachEvent(\"onAfterTaskDelete\", callIfEnabled(function (id, task) {\n    updateAfterRemoveChild(delTaskParent);\n  }));\n  var originalRowDndParent;\n  gantt.attachEvent(\"onRowDragStart\", callIfEnabled(function (id, target, e) {\n    originalRowDndParent = gantt.getParent(id);\n    return true;\n  }));\n  gantt.attachEvent(\"onRowDragEnd\", callIfEnabled(function (id, target) {\n    updateAfterRemoveChild(originalRowDndParent);\n    updateParentTypes(id);\n  }));\n  var originalMoveTaskParent;\n  gantt.attachEvent(\"onBeforeTaskMove\", callIfEnabled(function (sid, parent, tindex) {\n    originalMoveTaskParent = gantt.getParent(sid);\n    return true;\n  }));\n  gantt.attachEvent(\"onAfterTaskMove\", callIfEnabled(function (id, parent, tindex) {\n    if (document.querySelector(\".gantt_drag_marker\")) {\n      // vertical dnd in progress\n      return;\n    }\n\n    updateAfterRemoveChild(originalMoveTaskParent);\n    updateParentTypes(id);\n  }));\n};","module.exports = function addPlaceholder(gantt) {\n  function isEnabled() {\n    return gantt.config.placeholder_task;\n  }\n\n  function callIfEnabled(callback) {\n    return function () {\n      if (!isEnabled()) {\n        return true;\n      }\n\n      return callback.apply(this, arguments);\n    };\n  }\n\n  function silenceDataProcessor(dataProcessor) {\n    if (dataProcessor && !dataProcessor._silencedPlaceholder) {\n      dataProcessor._silencedPlaceholder = true;\n      dataProcessor.attachEvent(\"onBeforeUpdate\", callIfEnabled(function (id, state, data) {\n        if (data.type == gantt.config.types.placeholder) {\n          dataProcessor.setUpdated(id, false);\n          return false;\n        }\n\n        return true;\n      }));\n    }\n  }\n\n  function insertPlaceholder() {\n    var placeholders = gantt.getTaskBy(\"type\", gantt.config.types.placeholder);\n\n    if (!placeholders.length || !gantt.isTaskExists(placeholders[0].id)) {\n      var placeholder = {\n        unscheduled: true,\n        type: gantt.config.types.placeholder,\n        duration: 0,\n        text: gantt.locale.labels.new_task\n      };\n\n      if (gantt.callEvent(\"onTaskCreated\", [placeholder]) === false) {\n        return;\n      }\n\n      gantt.addTask(placeholder);\n    }\n  }\n\n  function afterEdit(id) {\n    var item = gantt.getTask(id);\n\n    if (item.type == gantt.config.types.placeholder) {\n      if (item.start_date && item.end_date && item.unscheduled) {\n        item.unscheduled = false;\n      }\n\n      gantt.batchUpdate(function () {\n        var newTask = gantt.copy(item);\n        gantt.silent(function () {\n          gantt.deleteTask(item.id);\n        });\n        delete newTask[\"!nativeeditor_status\"];\n        newTask.type = gantt.config.types.task;\n        newTask.id = gantt.uid();\n        gantt.addTask(newTask); //insertPlaceholder();\n      });\n    }\n  }\n\n  gantt.config.types.placeholder = \"placeholder\";\n  gantt.attachEvent(\"onDataProcessorReady\", callIfEnabled(silenceDataProcessor));\n  var ready = false;\n  gantt.attachEvent(\"onGanttReady\", function () {\n    if (ready) {\n      return;\n    }\n\n    ready = true;\n    gantt.attachEvent(\"onAfterTaskUpdate\", callIfEnabled(afterEdit));\n    gantt.attachEvent(\"onAfterTaskAdd\", callIfEnabled(function (id, task) {\n      if (task.type != gantt.config.types.placeholder) {\n        var placeholders = gantt.getTaskBy(\"type\", gantt.config.types.placeholder);\n        placeholders.forEach(function (p) {\n          gantt.silent(function () {\n            if (gantt.isTaskExists(p.id)) gantt.deleteTask(p.id);\n          });\n        });\n        insertPlaceholder();\n      }\n    }));\n    gantt.attachEvent(\"onParse\", callIfEnabled(insertPlaceholder));\n  });\n\n  function isPlaceholderTask(taskId) {\n    if (gantt.config.types.placeholder && gantt.isTaskExists(taskId)) {\n      var task = gantt.getTask(taskId);\n\n      if (task.type == gantt.config.types.placeholder) {\n        return true;\n      }\n    }\n\n    return false;\n  }\n\n  function isPlaceholderLink(link) {\n    if (isPlaceholderTask(link.source) || isPlaceholderTask(link.target)) {\n      return true;\n    }\n\n    return false;\n  }\n\n  gantt.attachEvent(\"onLinkValidation\", function (link) {\n    if (isPlaceholderLink(link)) {\n      return false;\n    }\n\n    return true;\n  });\n  gantt.attachEvent(\"onBeforeLinkAdd\", function (id, link) {\n    if (isPlaceholderLink(link)) {\n      return false;\n    }\n\n    return true;\n  });\n  gantt.attachEvent(\"onBeforeUndoStack\", function (action) {\n    for (var i = 0; i < action.commands.length; i++) {\n      var command = action.commands[i];\n\n      if (command.entity === \"task\" && command.value.type === gantt.config.types.placeholder) {\n        action.commands.splice(i, 1);\n        i--;\n      }\n    }\n\n    return true;\n  });\n};","module.exports = function (gantt) {\n  var resourceAssignmentsProperty = \"$resourceAssignments\";\n  gantt.config.resource_assignment_store = \"resourceAssignments\";\n  gantt.config.process_resource_assignments = true;\n  var resourceAssignmentFormats = {\n    auto: \"auto\",\n    singleValue: \"singleValue\",\n    valueArray: \"valueArray\",\n    resourceValueArray: \"resourceValueArray\",\n    assignmentsArray: \"assignmentsArray\"\n  };\n  var resourceAssignmentFormat = resourceAssignmentFormats.auto; //\"primitiveSingle\";//\"primitive\";//\"object\"|\"assignment\"\n\n  var assignmentModes = {\n    fixedDates: \"fixedDates\",\n    fixedDuration: \"fixedDuration\",\n    \"default\": \"default\"\n  };\n\n  function initAssignmentFields(item, task) {\n    if (item.start_date) {\n      item.start_date = gantt.date.parseDate(item.start_date, \"parse_date\");\n    } else {\n      item.start_date = null;\n    }\n\n    if (item.end_date) {\n      item.end_date = gantt.date.parseDate(item.end_date, \"parse_date\");\n    } else {\n      item.end_date = null;\n    }\n\n    var delay = Number(item.delay);\n    var initDelay = false;\n\n    if (!isNaN(delay)) {\n      item.delay = delay;\n    } else {\n      item.delay = 0;\n      initDelay = true;\n    }\n\n    if (!gantt.defined(item.value)) {\n      item.value = null;\n    }\n\n    if (!item.task_id || !item.resource_id) {\n      return false;\n    }\n\n    item.mode = item.mode || assignmentModes[\"default\"];\n\n    if (item.mode === assignmentModes.fixedDuration) {\n      if (isNaN(Number(item.duration))) {\n        task = task || gantt.getTask(item.task_id);\n        item.duration = gantt.calculateDuration({\n          start_date: item.start_date,\n          end_date: item.end_date,\n          id: task\n        });\n      }\n\n      if (initDelay) {\n        task = task || gantt.getTask(item.task_id);\n        item.delay = gantt.calculateDuration({\n          start_date: task.start_date,\n          end_date: item.start_date,\n          id: task\n        });\n      }\n    }\n\n    if (item.mode !== assignmentModes.fixedDates && (task || gantt.isTaskExists(item.task_id))) {\n      task = task || gantt.getTask(item.task_id);\n\n      var timing = _assignmentTimeFromTask(item, task);\n\n      item.start_date = timing.start_date;\n      item.end_date = timing.end_date;\n      item.duration = timing.duration;\n    }\n  } // gantt init\n\n\n  var resourceAssignmentsStore = gantt.createDatastore({\n    name: gantt.config.resource_assignment_store,\n    initItem: function initItem(item) {\n      if (!item.id) {\n        item.id = gantt.uid();\n      }\n\n      initAssignmentFields(item);\n      return item;\n    }\n  });\n  gantt.$data.assignmentsStore = resourceAssignmentsStore;\n\n  function _assignmentTimeFromTask(assignment, task) {\n    if (assignment.mode === assignmentModes.fixedDates) {\n      return {\n        start_date: assignment.start_date,\n        end_date: assignment.end_date,\n        duration: assignment.duration\n      };\n    } else {\n      var start = assignment.delay ? gantt.calculateEndDate({\n        start_date: task.start_date,\n        duration: assignment.delay,\n        task: task\n      }) : new Date(task.start_date);\n      var end;\n      var duration;\n\n      if (assignment.mode === assignmentModes.fixedDuration) {\n        end = gantt.calculateEndDate({\n          start_date: start,\n          duration: assignment.duration,\n          task: task\n        });\n        duration = assignment.duration;\n      } else {\n        end = new Date(task.end_date);\n        duration = task.duration - assignment.delay;\n      }\n    }\n\n    return {\n      start_date: start,\n      end_date: end,\n      duration: duration\n    };\n  } // data loading\n\n\n  function _makeAssignmentsFromTask(task) {\n    var property = gantt.config.resource_property;\n    var assignments = task[property];\n    var resourceAssignments = [];\n    var detectFormat = resourceAssignmentFormat === resourceAssignmentFormats.auto;\n\n    if (gantt.defined(assignments) && assignments) {\n      if (!Array.isArray(assignments)) {\n        assignments = [assignments];\n\n        if (detectFormat) {\n          resourceAssignmentFormat = resourceAssignmentFormats.singleValue;\n          detectFormat = false;\n        }\n      }\n\n      var usedIds = {};\n      assignments.forEach(function (res) {\n        if (!res.resource_id) {\n          // when resource is a string/number\n          res = {\n            resource_id: res\n          };\n\n          if (detectFormat) {\n            resourceAssignmentFormat = resourceAssignmentFormats.valueArray;\n            detectFormat = false;\n          } //\tisSimpleArray = true;\n\n        }\n\n        if (detectFormat) {\n          if (res.id && res.resource_id) {\n            resourceAssignmentFormat = resourceAssignmentFormats.assignmentsArray;\n            detectFormat = false;\n          } else {\n            resourceAssignmentFormat = resourceAssignmentFormats.resourceValueArray;\n            detectFormat = false;\n          }\n        }\n\n        var defaultMode = assignmentModes[\"default\"];\n\n        if (!res.mode) {\n          if (res.start_date && res.end_date || res.start_date && res.duration) {\n            defaultMode = assignmentModes.fixedDuration;\n          }\n        }\n\n        var id;\n\n        if (!res.id && res.$id && !usedIds[res.$id]) {\n          id = res.$id;\n        } else if (res.id && !usedIds[res.id]) {\n          id = res.id;\n        } else {\n          id = gantt.uid();\n        }\n\n        usedIds[id] = true;\n        var assignment = {\n          id: id,\n          start_date: res.start_date,\n          duration: res.duration,\n          end_date: res.end_date,\n          delay: res.delay,\n          task_id: task.id,\n          resource_id: res.resource_id,\n          value: res.value,\n          mode: res.mode || defaultMode\n        };\n\n        if (!(assignment.start_date && assignment.start_date.getMonth && assignment.end_date && assignment.end_date.getMonth && typeof assignment.duration === \"number\")) {\n          initAssignmentFields(assignment, task);\n        }\n\n        resourceAssignments.push(assignment);\n      });\n    }\n\n    return resourceAssignments;\n  }\n\n  function _updateTaskBack(taskId) {\n    // GS-1493. In some cases, the resource assignment store has the tasks that no longer exist\n    if (!gantt.isTaskExists(taskId)) {\n      return;\n    }\n\n    var task = gantt.getTask(taskId);\n    var assignments = gantt.getTaskAssignments(task.id);\n\n    _assignAssignments(task, assignments);\n  }\n\n  function _assignAssignments(task, assignments) {\n    assignments.sort(function (a, b) {\n      if (a.start_date && b.start_date && a.start_date.valueOf() != b.start_date.valueOf()) {\n        return a.start_date - b.start_date;\n      } else {\n        return 0;\n      }\n    });\n\n    if (resourceAssignmentFormat == resourceAssignmentFormats.assignmentsArray) {\n      task[gantt.config.resource_property] = assignments;\n    } else if (resourceAssignmentFormat == resourceAssignmentFormats.resourceValueArray) {\n      task[gantt.config.resource_property] = assignments.map(function (a) {\n        return {\n          $id: a.id,\n          start_date: a.start_date,\n          duration: a.duration,\n          end_date: a.end_date,\n          delay: a.delay,\n          resource_id: a.resource_id,\n          value: a.value,\n          mode: a.mode\n        };\n      });\n    }\n\n    task[resourceAssignmentsProperty] = assignments;\n  }\n\n  function _loadAssignmentsFromTask(task) {\n    var assignments = _makeAssignmentsFromTask(task);\n\n    var taskAssignments = [];\n    assignments.forEach(function (a) {\n      a.id = a.id || gantt.uid(); //var newId = resourceAssignmentsStore.addItem(a);\n\n      taskAssignments.push(a);\n    });\n    return assignments;\n  }\n\n  function diffAssignments(taskValues, assignmentsStoreValues) {\n    var result = {\n      inBoth: [],\n      inTaskNotInStore: [],\n      inStoreNotInTask: []\n    };\n\n    if (resourceAssignmentFormat == resourceAssignmentFormats.singleValue) {\n      var taskOwner = taskValues[0];\n      var ownerId = taskOwner ? taskOwner.resource_id : null;\n      var foundOwnerAssignment = false;\n      assignmentsStoreValues.forEach(function (a) {\n        if (a.resource_id != ownerId) {\n          result.inStoreNotInTask.push(a);\n        } else if (a.resource_id == ownerId) {\n          result.inBoth.push({\n            store: a,\n            task: taskOwner\n          });\n          foundOwnerAssignment = true;\n        }\n      });\n\n      if (!foundOwnerAssignment && taskOwner) {\n        result.inTaskNotInStore.push(taskOwner);\n      }\n    } else if (resourceAssignmentFormat == resourceAssignmentFormats.valueArray) {\n      var taskSearch = {};\n      var storeSearch = {};\n      var processedIds = {};\n      taskValues.forEach(function (a) {\n        taskSearch[a.resource_id] = a;\n      });\n      assignmentsStoreValues.forEach(function (a) {\n        storeSearch[a.resource_id] = a;\n      });\n      taskValues.concat(assignmentsStoreValues).forEach(function (a) {\n        if (processedIds[a.resource_id]) {\n          return;\n        }\n\n        processedIds[a.resource_id] = true;\n        var inTask = taskSearch[a.resource_id];\n        var inStore = storeSearch[a.resource_id];\n\n        if (inTask && inStore) {\n          result.inBoth.push({\n            store: inStore,\n            task: inTask\n          });\n        } else if (inTask && !inStore) {\n          result.inTaskNotInStore.push(inTask);\n        } else if (!inTask && inStore) {\n          result.inStoreNotInTask.push(inStore);\n        }\n      });\n    } else if (resourceAssignmentFormat == resourceAssignmentFormats.assignmentsArray || resourceAssignmentFormat == resourceAssignmentFormats.resourceValueArray) {\n      var taskSearch = {};\n      var storeSearch = {};\n      var processedIds = {};\n      taskValues.forEach(function (a) {\n        taskSearch[a.id || a.$id] = a;\n      });\n      assignmentsStoreValues.forEach(function (a) {\n        storeSearch[a.id] = a;\n      });\n      taskValues.concat(assignmentsStoreValues).forEach(function (a) {\n        var id = a.id || a.$id;\n\n        if (processedIds[id]) {\n          return;\n        }\n\n        processedIds[id] = true;\n        var inTask = taskSearch[id];\n        var inStore = storeSearch[id];\n\n        if (inTask && inStore) {\n          result.inBoth.push({\n            store: inStore,\n            task: inTask\n          });\n        } else if (inTask && !inStore) {\n          result.inTaskNotInStore.push(inTask);\n        } else if (!inTask && inStore) {\n          result.inStoreNotInTask.push(inStore);\n        }\n      });\n    }\n\n    return result;\n  }\n\n  function assignmentHasChanged(source, target) {\n    var ignoreFields = {\n      id: true\n    };\n\n    for (var i in source) {\n      if (!ignoreFields[i]) {\n        if (String(source[i]) !== String(target[i])) {\n          return true;\n        }\n      }\n    }\n\n    return false;\n  }\n\n  function updateAssignment(source, target) {\n    var ignoreFields = {\n      id: true\n    };\n\n    for (var i in source) {\n      if (!ignoreFields[i]) {\n        target[i] = source[i];\n      }\n    }\n  }\n\n  function _syncAssignments(task, storeAssignments) {\n    var tasksAssignments = _makeAssignmentsFromTask(task);\n\n    var diff = diffAssignments(tasksAssignments, storeAssignments);\n    diff.inStoreNotInTask.forEach(function (a) {\n      resourceAssignmentsStore.removeItem(a.id);\n    });\n    diff.inTaskNotInStore.forEach(function (a) {\n      resourceAssignmentsStore.addItem(a);\n    });\n    diff.inBoth.forEach(function (a) {\n      if (assignmentHasChanged(a.task, a.store)) {\n        updateAssignment(a.task, a.store);\n        resourceAssignmentsStore.updateItem(a.store.id);\n      } else {\n        if (a.task.start_date && a.task.end_date && a.task.mode !== assignmentModes.fixedDates) {\n          var timing = _assignmentTimeFromTask(a.store, task);\n\n          if (a.store.start_date.valueOf() != timing.start_date.valueOf() || a.store.end_date.valueOf() != timing.end_date.valueOf()) {\n            a.store.start_date = timing.start_date;\n            a.store.end_date = timing.end_date;\n            a.store.duration = timing.duration;\n            resourceAssignmentsStore.updateItem(a.store.id);\n          }\n        }\n      }\n    });\n\n    _updateTaskBack(task.id);\n  }\n\n  function _syncOnTaskUpdate(task) {\n    var storeAssignments = task[resourceAssignmentsProperty] || resourceAssignmentsStore.find(function (a) {\n      return a.task_id == task.id;\n    });\n\n    _syncAssignments(task, storeAssignments);\n  }\n\n  function _syncOnTaskDelete(ids) {\n    var idsSearch = {};\n    ids.forEach(function (id) {\n      idsSearch[id] = true;\n    });\n    var taskResources = resourceAssignmentsStore.find(function (a) {\n      return idsSearch[a.task_id];\n    });\n    taskResources.forEach(function (a) {\n      resourceAssignmentsStore.removeItem(a.id);\n    });\n  }\n\n  gantt.attachEvent(\"onGanttReady\", function () {\n    if (gantt.config.process_resource_assignments) {\n      gantt.attachEvent(\"onParse\", function () {\n        gantt.silent(function () {\n          resourceAssignmentsStore.clearAll();\n          var totalAssignments = [];\n          gantt.eachTask(function (task) {\n            if (task.type === gantt.config.types.project) {\n              return;\n            }\n\n            var assignments = _loadAssignmentsFromTask(task);\n\n            _assignAssignments(task, assignments);\n\n            assignments.forEach(function (a) {\n              totalAssignments.push(a);\n            });\n          });\n          resourceAssignmentsStore.parse(totalAssignments);\n        });\n      });\n      var batchUpdate = false;\n      var needUpdate = false;\n      var needUpdateFor = {};\n      var undoBatchCancel = false;\n      gantt.attachEvent(\"onBeforeBatchUpdate\", function () {\n        batchUpdate = true;\n      });\n      gantt.attachEvent(\"onAfterBatchUpdate\", function () {\n        if (needUpdate) {\n          var assignmentsHash = {};\n\n          for (var i in needUpdateFor) {\n            assignmentsHash[i] = gantt.getTaskAssignments(needUpdateFor[i].id);\n          }\n\n          for (var i in needUpdateFor) {\n            _syncAssignments(needUpdateFor[i], assignmentsHash[i]);\n          }\n        }\n\n        needUpdate = false;\n        batchUpdate = false;\n        needUpdateFor = {};\n      });\n      gantt.attachEvent(\"onTaskCreated\", function (item) {\n        var assignments = _loadAssignmentsFromTask(item);\n\n        resourceAssignmentsStore.parse(assignments);\n\n        _assignAssignments(item, assignments);\n\n        return true;\n      });\n      gantt.attachEvent(\"onAfterTaskUpdate\", function (id, item) {\n        if (batchUpdate) {\n          needUpdate = true;\n          needUpdateFor[id] = item;\n        } else {\n          _syncOnTaskUpdate(item);\n        }\n      });\n      gantt.attachEvent(\"onAfterTaskAdd\", function (id, item) {\n        if (batchUpdate) {\n          needUpdate = true;\n          needUpdateFor[id] = item;\n        } else {\n          _syncOnTaskUpdate(item);\n        }\n      });\n      /*\tgantt.attachEvent(\"onRowDragMove\", function (id) {\r\n      \t\t_syncOnTaskUpdate(gantt.getTask(id));\r\n      \t});*/\n\n      gantt.attachEvent(\"onRowDragEnd\", function (id) {\n        _syncOnTaskUpdate(gantt.getTask(id));\n      });\n      gantt.$data.tasksStore.attachEvent(\"onAfterDeleteConfirmed\", function (id, item) {\n        var deleteIds = [id];\n        gantt.eachTask(function (task) {\n          deleteIds.push(task.id);\n        }, id);\n\n        _syncOnTaskDelete(deleteIds);\n      });\n      gantt.$data.tasksStore.attachEvent(\"onClearAll\", function () {\n        resourceAssignmentsCache = null;\n        resourceTaskAssignmentsCache = null;\n        taskAssignmentsCache = null;\n        resourceAssignmentsStore.clearAll();\n        return true;\n      });\n      gantt.attachEvent(\"onTaskIdChange\", function (id, new_id) {\n        var taskResources = resourceAssignmentsStore.find(function (a) {\n          return a.task_id == id;\n        });\n        taskResources.forEach(function (a) {\n          a.task_id = new_id;\n          resourceAssignmentsStore.updateItem(a.id);\n        });\n\n        _updateTaskBack(new_id); //any custom logic here\n\n      }); // GS-2144. When we Undo something, the cache should be reset\n      // during the `onStoreUpdated` event to properly update the assignments\n\n      gantt.attachEvent(\"onBeforeUndo\", function (action) {\n        undoBatchCancel = true;\n        return true;\n      });\n      gantt.attachEvent(\"onAfterUndo\", function (action) {\n        undoBatchCancel = true;\n      });\n      var resourceAssignmentsCache = null;\n      var resourceTaskAssignmentsCache = null;\n      var taskAssignmentsCache = null;\n      resourceAssignmentsStore.attachEvent(\"onStoreUpdated\", function resetCache() {\n        if (batchUpdate && !undoBatchCancel) {\n          return true;\n        }\n\n        resourceAssignmentsCache = null;\n        resourceTaskAssignmentsCache = null;\n        taskAssignmentsCache = null;\n        return true;\n      });\n\n      gantt.getResourceAssignments = function (resourceId, taskId) {\n        var searchTaskId = gantt.defined(taskId) && taskId !== null;\n\n        if (resourceAssignmentsCache === null) {\n          resourceAssignmentsCache = {};\n          resourceTaskAssignmentsCache = {};\n          resourceAssignmentsStore.eachItem(function (a) {\n            if (!resourceAssignmentsCache[a.resource_id]) {\n              resourceAssignmentsCache[a.resource_id] = [];\n            }\n\n            resourceAssignmentsCache[a.resource_id].push(a);\n            var resourceTaskCacheKey = a.resource_id + \"-\" + a.task_id;\n\n            if (!resourceTaskAssignmentsCache[resourceTaskCacheKey]) {\n              resourceTaskAssignmentsCache[resourceTaskCacheKey] = [];\n            }\n\n            resourceTaskAssignmentsCache[resourceTaskCacheKey].push(a);\n          });\n        }\n\n        if (searchTaskId) {\n          return (resourceTaskAssignmentsCache[resourceId + \"-\" + taskId] || []).slice();\n        } else {\n          return (resourceAssignmentsCache[resourceId] || []).slice();\n        }\n      };\n\n      gantt.getTaskAssignments = function (taskId) {\n        if (taskAssignmentsCache === null) {\n          var result = [];\n          taskAssignmentsCache = {};\n          resourceAssignmentsStore.eachItem(function (a) {\n            if (!taskAssignmentsCache[a.task_id]) {\n              taskAssignmentsCache[a.task_id] = [];\n            }\n\n            taskAssignmentsCache[a.task_id].push(a);\n\n            if (a.task_id == taskId) {\n              result.push(a);\n            }\n          });\n        }\n\n        return (taskAssignmentsCache[taskId] || []).slice();\n      };\n\n      gantt.getTaskResources = function (taskId) {\n        var store = gantt.getDatastore(\"resource\");\n        var assignments = gantt.getTaskAssignments(taskId);\n        var uniqueResources = {};\n        assignments.forEach(function (a) {\n          if (!uniqueResources[a.resource_id]) {\n            uniqueResources[a.resource_id] = a.resource_id;\n          }\n        });\n        var resources = [];\n\n        for (var i in uniqueResources) {\n          var res = store.getItem(uniqueResources[i]);\n\n          if (res) {\n            resources.push(res);\n          }\n        }\n\n        return resources;\n      };\n\n      gantt.updateTaskAssignments = _updateTaskBack;\n    }\n  }, {\n    once: true\n  });\n};","var helpers = require(\"../../utils/helpers\");\n\nfunction createResourceMethods(gantt) {\n  var resourceTaskCache = {};\n  var singleResourceCacheBuilt = false;\n  gantt.$data.tasksStore.attachEvent(\"onStoreUpdated\", function () {\n    resourceTaskCache = {};\n    singleResourceCacheBuilt = false;\n  });\n  gantt.attachEvent(\"onBeforeGanttRender\", function () {\n    resourceTaskCache = {};\n  });\n\n  function getTaskBy(propertyName, propertyValue, typeFilter) {\n    if (typeof propertyName == \"function\") {\n      return filterResourceTasks(propertyName);\n    } else {\n      if (helpers.isArray(propertyValue)) {\n        return getResourceTasks(propertyName, propertyValue, typeFilter);\n      } else {\n        return getResourceTasks(propertyName, [propertyValue], typeFilter);\n      }\n    }\n  }\n\n  function filterResourceTasks(filter) {\n    var res = [];\n    gantt.eachTask(function (task) {\n      if (filter(task)) {\n        res.push(task);\n      }\n    });\n    return res;\n  }\n\n  var falsyValuePrefix = String(Math.random());\n\n  function resourceHashFunction(value) {\n    if (value === null) {\n      return falsyValuePrefix + String(value);\n    }\n\n    return String(value);\n  }\n\n  function getCacheKey(resourceIds, property, typeFilter) {\n    if (Array.isArray(resourceIds)) {\n      return resourceIds.map(function (value) {\n        return resourceHashFunction(value);\n      }).join(\"_\") + \"_\".concat(property, \"_\").concat(typeFilter);\n    } else {\n      return resourceHashFunction(resourceIds) + \"_\".concat(property, \"_\").concat(typeFilter);\n    }\n  }\n\n  function getResourceTasks(property, resourceIds, typeFilter) {\n    var res;\n    var cacheKey = getCacheKey(resourceIds, property, JSON.stringify(typeFilter));\n    var matchingResources = {};\n    helpers.forEach(resourceIds, function (resourceId) {\n      matchingResources[resourceHashFunction(resourceId)] = true;\n    });\n\n    if (!resourceTaskCache[cacheKey]) {\n      res = resourceTaskCache[cacheKey] = [];\n      gantt.eachTask(function (task) {\n        if (typeFilter) {\n          if (!typeFilter[gantt.getTaskType(task)]) {\n            return;\n          }\n        } else if (task.type == gantt.config.types.project) {\n          return;\n        }\n\n        if (property in task) {\n          var resourceValue;\n\n          if (!helpers.isArray(task[property])) {\n            resourceValue = [task[property]];\n          } else {\n            resourceValue = task[property];\n          }\n\n          helpers.forEach(resourceValue, function (value) {\n            var resourceValue = value && value.resource_id ? value.resource_id : value;\n\n            if (matchingResources[resourceHashFunction(resourceValue)]) {\n              res.push(task);\n            } else if (!singleResourceCacheBuilt) {\n              var key = getCacheKey(value, property);\n\n              if (!resourceTaskCache[key]) {\n                resourceTaskCache[key] = [];\n              }\n\n              resourceTaskCache[key].push(task);\n            }\n          });\n        }\n      });\n      singleResourceCacheBuilt = true;\n    } else {\n      res = resourceTaskCache[cacheKey];\n    }\n\n    return res;\n  }\n\n  function selectAssignments(resourceId, taskId, result) {\n    var property = gantt.config.resource_property;\n    var owners = [];\n\n    if (gantt.getDatastore(\"task\").exists(taskId)) {\n      var task = gantt.getTask(taskId);\n      owners = task[property] || [];\n    }\n\n    if (!Array.isArray(owners)) {\n      owners = [owners];\n    }\n\n    for (var i = 0; i < owners.length; i++) {\n      if (owners[i].resource_id == resourceId) {\n        result.push({\n          task_id: task.id,\n          resource_id: owners[i].resource_id,\n          value: owners[i].value\n        });\n      }\n    }\n  }\n\n  function getResourceAssignments(resourceId, taskId) {\n    // resource assignment as an independent module:\n    // {taskId:, resourceId, value}\n    // TODO: probably should add a separate datastore for these\n    var assignments = [];\n    var property = gantt.config.resource_property;\n\n    if (taskId !== undefined) {\n      selectAssignments(resourceId, taskId, assignments);\n    } else {\n      var tasks = gantt.getTaskBy(property, resourceId);\n      tasks.forEach(function (task) {\n        selectAssignments(resourceId, task.id, assignments);\n      });\n    }\n\n    return assignments;\n  }\n\n  return {\n    getTaskBy: getTaskBy,\n    getResourceAssignments: getResourceAssignments\n  };\n}\n\nfunction createHelper(gantt) {\n  var resourcePlugin = {\n    renderEditableLabel: function renderEditableLabel(start_date, end_date, resource, tasks, assignments) {\n      var editable = gantt.config.readonly ? \"\" : \"contenteditable\";\n\n      if (start_date < resource.end_date && end_date > resource.start_date) {\n        for (var i = 0; i < assignments.length; i++) {\n          var a = assignments[i];\n          return \"<div \" + editable + \" data-assignment-cell data-assignment-id='\" + a.id + \"'\" + \" data-row-id='\" + resource.id + \"'\" + \" data-task='\" + resource.$task_id + \"'\" + \" data-start-date='\" + gantt.templates.format_date(start_date) + \"'\" + \" data-end-date='\" + gantt.templates.format_date(end_date) + \"'>\" + a.value + \"</div>\";\n        }\n\n        return \"<div \" + editable + \" data-assignment-cell data-empty \" + \" data-row-id='\" + resource.id + \"'\" + \" data-resource-id='\" + resource.$resource_id + \"'\" + \" data-task='\" + resource.$task_id + \"'\" + \" data-start-date='\" + gantt.templates.format_date(start_date) + \"'\" + \"'  data-end-date='\" + gantt.templates.format_date(end_date) + \"'>-</div>\";\n      }\n\n      return \"\";\n    },\n    renderSummaryLabel: function renderSummaryLabel(start_date, end_date, resource, tasks, assignments) {\n      var sum = assignments.reduce(function (total, assignment) {\n        return total + Number(assignment.value);\n      }, 0);\n\n      if (sum % 1) {\n        sum = Math.round(sum * 10) / 10;\n      }\n\n      if (sum) {\n        return \"<div>\" + sum + \"</div>\";\n      }\n\n      return \"\";\n    },\n    editableResourceCellTemplate: function editableResourceCellTemplate(start_date, end_date, resource, tasks, assignments) {\n      if (resource.$role === \"task\") {\n        return resourcePlugin.renderEditableLabel(start_date, end_date, resource, tasks, assignments);\n      } else {\n        return resourcePlugin.renderSummaryLabel(start_date, end_date, resource, tasks, assignments);\n      }\n    },\n    editableResourceCellClass: function editableResourceCellClass(start_date, end_date, resource, tasks, assignments) {\n      var css = [];\n      css.push(\"resource_marker\");\n\n      if (resource.$role === \"task\") {\n        css.push(\"task_cell\");\n      } else {\n        css.push(\"resource_cell\");\n      }\n\n      var sum = assignments.reduce(function (total, assignment) {\n        return total + Number(assignment.value);\n      }, 0);\n      var capacity = Number(resource.capacity);\n\n      if (isNaN(capacity)) {\n        capacity = 8;\n      }\n\n      if (sum <= capacity) {\n        css.push(\"workday_ok\");\n      } else {\n        css.push(\"workday_over\");\n      }\n\n      return css.join(\" \");\n    },\n    getSummaryResourceAssignments: function getResourceAssignments(resourceId) {\n      var assignments;\n      var store = gantt.getDatastore(gantt.config.resource_store);\n      var resource = store.getItem(resourceId);\n\n      if (resource.$role === \"task\") {\n        assignments = gantt.getResourceAssignments(resource.$resource_id, resource.$task_id);\n      } else {\n        assignments = gantt.getResourceAssignments(resourceId);\n\n        if (store.eachItem) {\n          store.eachItem(function (childResource) {\n            if (childResource.$role !== \"task\") {\n              assignments = assignments.concat(gantt.getResourceAssignments(childResource.id));\n            }\n          }, resourceId);\n        }\n      }\n\n      return assignments;\n    },\n    initEditableDiagram: function initEditableDiagram() {\n      gantt.config.resource_render_empty_cells = true;\n\n      (function () {\n        /// salesforce locker workaround\n        // SF removes 'contenteditable' attribute from cells\n        // restore it on render\n        var timeoutId = null;\n\n        function makeEditable() {\n          if (timeoutId) {\n            cancelAnimationFrame(timeoutId);\n          }\n\n          timeoutId = requestAnimationFrame(function () {\n            var cells = Array.prototype.slice.call(gantt.$container.querySelectorAll(\".resourceTimeline_cell [data-assignment-cell]\"));\n            cells.forEach(function (cell) {\n              cell.contentEditable = true;\n            });\n          });\n          return true;\n        }\n\n        gantt.attachEvent(\"onGanttReady\", function () {\n          gantt.getDatastore(gantt.config.resource_assignment_store).attachEvent(\"onStoreUpdated\", makeEditable);\n          gantt.getDatastore(gantt.config.resource_store).attachEvent(\"onStoreUpdated\", makeEditable);\n        }, {\n          once: true\n        });\n        gantt.attachEvent(\"onGanttLayoutReady\", function () {\n          var ganttViews = gantt.$layout.getCellsByType(\"viewCell\");\n          ganttViews.forEach(function (view) {\n            if (view.$config && view.$config.view === \"resourceTimeline\" && view.$content) {\n              view.$content.attachEvent(\"onScroll\", makeEditable);\n            }\n          });\n        });\n      })();\n\n      gantt.attachEvent(\"onGanttReady\", function () {\n        var assignmentEditInProcess = false;\n        gantt.event(gantt.$container, \"keypress\", function (e) {\n          var target = e.target.closest(\".resourceTimeline_cell [data-assignment-cell]\");\n\n          if (target) {\n            if (e.keyCode === 13 || e.keyCode === 27) {\n              target.blur();\n            }\n          }\n        });\n        gantt.event(gantt.$container, \"focusout\", function (e) {\n          if (assignmentEditInProcess) {\n            return;\n          }\n\n          assignmentEditInProcess = true;\n          setTimeout(function () {\n            assignmentEditInProcess = false;\n          }, 300);\n          var target = e.target.closest(\".resourceTimeline_cell [data-assignment-cell]\");\n\n          if (target) {\n            var strValue = (target.innerText || \"\").trim();\n\n            if (strValue == \"-\") {\n              strValue = \"0\";\n            }\n\n            var value = Number(strValue);\n            var rowId = target.getAttribute(\"data-row-id\");\n            var assignmentId = target.getAttribute(\"data-assignment-id\");\n            var taskId = target.getAttribute(\"data-task\");\n            var resourceId = target.getAttribute(\"data-resource-id\");\n            var startDate = gantt.templates.parse_date(target.getAttribute(\"data-start-date\"));\n            var endDate = gantt.templates.parse_date(target.getAttribute(\"data-end-date\"));\n            var assignmentStore = gantt.getDatastore(gantt.config.resource_assignment_store);\n\n            if (isNaN(value)) {\n              gantt.getDatastore(gantt.config.resource_store).refresh(rowId);\n            } else {\n              var task = gantt.getTask(taskId); // GS-2141. Track the changes by the Undo extension\n\n              if (gantt.plugins().undo) {\n                gantt.ext.undo.saveState(taskId, \"task\");\n              }\n\n              if (assignmentId) {\n                var assignment = assignmentStore.getItem(assignmentId);\n\n                if (value === assignment.value) {\n                  return;\n                }\n\n                if (assignment.start_date.valueOf() === startDate.valueOf() && assignment.end_date.valueOf() === endDate.valueOf()) {\n                  assignment.value = value;\n\n                  if (!value) {\n                    assignmentStore.removeItem(assignment.id);\n                  } else {\n                    assignmentStore.updateItem(assignment.id);\n                  }\n                } else {\n                  if (assignment.end_date.valueOf() > endDate.valueOf()) {\n                    var nextChunk = gantt.copy(assignment);\n                    nextChunk.id = gantt.uid();\n                    nextChunk.start_date = endDate;\n                    nextChunk.duration = gantt.calculateDuration({\n                      start_date: nextChunk.start_date,\n                      end_date: nextChunk.end_date,\n                      task: task\n                    });\n                    nextChunk.delay = gantt.calculateDuration({\n                      start_date: task.start_date,\n                      end_date: nextChunk.start_date,\n                      task: task\n                    });\n                    nextChunk.mode = assignment.mode || \"default\";\n\n                    if (nextChunk.duration !== 0) {\n                      assignmentStore.addItem(nextChunk);\n                    }\n                  }\n\n                  if (assignment.start_date.valueOf() < startDate.valueOf()) {\n                    assignment.end_date = startDate;\n                    assignment.duration = gantt.calculateDuration({\n                      start_date: assignment.start_date,\n                      end_date: assignment.end_date,\n                      task: task\n                    });\n                    assignment.mode = \"fixedDuration\";\n\n                    if (assignment.duration === 0) {\n                      assignmentStore.removeItem(assignment.id);\n                    } else {\n                      assignmentStore.updateItem(assignment.id);\n                    }\n                  } else {\n                    assignmentStore.removeItem(assignment.id);\n                  }\n\n                  if (value) {\n                    assignmentStore.addItem({\n                      task_id: assignment.task_id,\n                      resource_id: assignment.resource_id,\n                      value: value,\n                      start_date: startDate,\n                      end_date: endDate,\n                      duration: gantt.calculateDuration({\n                        start_date: startDate,\n                        end_date: endDate,\n                        task: task\n                      }),\n                      delay: gantt.calculateDuration({\n                        start_date: task.start_date,\n                        end_date: startDate,\n                        task: task\n                      }),\n                      mode: \"fixedDuration\"\n                    });\n                  }\n                }\n\n                gantt.updateTaskAssignments(task.id);\n                gantt.updateTask(task.id);\n              } else if (value) {\n                var assignment = {\n                  task_id: taskId,\n                  resource_id: resourceId,\n                  value: value,\n                  start_date: startDate,\n                  end_date: endDate,\n                  duration: gantt.calculateDuration({\n                    start_date: startDate,\n                    end_date: endDate,\n                    task: task\n                  }),\n                  delay: gantt.calculateDuration({\n                    start_date: task.start_date,\n                    end_date: startDate,\n                    task: task\n                  }),\n                  mode: \"fixedDuration\"\n                };\n                assignmentStore.addItem(assignment);\n                gantt.updateTaskAssignments(task.id);\n                gantt.updateTask(task.id);\n              }\n            }\n          }\n        });\n      }, {\n        once: true\n      });\n    }\n  };\n  return resourcePlugin;\n}\n\nmodule.exports = function (gantt) {\n  var methods = createResourceMethods(gantt);\n  gantt.ext.resources = createHelper(gantt);\n  gantt.config.resources = {\n    dataprocessor_assignments: false,\n    dataprocessor_resources: false,\n    editable_resource_diagram: false,\n    resource_store: {\n      type: \"treeDataStore\",\n      fetchTasks: false,\n      initItem: function initItem(item) {\n        item.parent = item.parent || gantt.config.root_id;\n        item[gantt.config.resource_property] = item.parent;\n        item.open = true;\n        return item;\n      }\n    },\n    lightbox_resources: function selectResourceControlOptions(resources) {\n      var lightboxOptions = [];\n      var store = gantt.getDatastore(gantt.config.resource_store);\n      resources.forEach(function (res) {\n        if (!store.hasChild(res.id)) {\n          var copy = gantt.copy(res);\n          copy.key = res.id;\n          copy.label = res.text;\n          lightboxOptions.push(copy);\n        }\n      });\n      return lightboxOptions;\n    }\n  };\n  gantt.attachEvent(\"onBeforeGanttReady\", function () {\n    if (gantt.getDatastore(gantt.config.resource_store)) {\n      return;\n    }\n\n    var resourceStoreConfig = gantt.config.resources ? gantt.config.resources.resource_store : undefined;\n    var fetchTasks = resourceStoreConfig ? resourceStoreConfig.fetchTasks : undefined;\n\n    if (gantt.config.resources && gantt.config.resources.editable_resource_diagram) {\n      fetchTasks = true;\n    }\n\n    var initItems = function initItems(item) {\n      item.parent = item.parent || gantt.config.root_id;\n      item[gantt.config.resource_property] = item.parent;\n      item.open = true;\n      return item;\n    };\n\n    if (resourceStoreConfig && resourceStoreConfig.initItem) {\n      initItems = resourceStoreConfig.initItem;\n    }\n\n    var storeType = resourceStoreConfig && resourceStoreConfig.type ? resourceStoreConfig.type : \"treeDatastore\";\n    gantt.$resourcesStore = gantt.createDatastore({\n      name: gantt.config.resource_store,\n      type: storeType,\n      fetchTasks: fetchTasks !== undefined ? fetchTasks : false,\n      initItem: initItems\n    });\n    gantt.$data.resourcesStore = gantt.$resourcesStore;\n    gantt.$resourcesStore.attachEvent(\"onParse\", function () {\n      function selectResourceControlOptions(resources) {\n        var lightboxOptions = [];\n        resources.forEach(function (res) {\n          if (!gantt.$resourcesStore.hasChild(res.id)) {\n            var copy = gantt.copy(res);\n            copy.key = res.id;\n            copy.label = res.text;\n            lightboxOptions.push(copy);\n          }\n        });\n        return lightboxOptions;\n      }\n\n      var lightboxOptionsFnc = selectResourceControlOptions;\n\n      if (gantt.config.resources && gantt.config.resources.lightbox_resources) {\n        lightboxOptionsFnc = gantt.config.resources.lightbox_resources;\n      }\n\n      var options = lightboxOptionsFnc(gantt.$resourcesStore.getItems());\n      gantt.updateCollection(\"resourceOptions\", options);\n    });\n  });\n  gantt.getTaskBy = methods.getTaskBy;\n  gantt.getResourceAssignments = methods.getResourceAssignments;\n  gantt.config.resource_property = \"owner_id\";\n  gantt.config.resource_store = \"resource\";\n  gantt.config.resource_render_empty_cells = false;\n  /**\r\n   * these are placeholder functions that should be redefined by the user\r\n  */\n\n  gantt.templates.histogram_cell_class = function (start_date, end_date, resource, tasks, assignments) {};\n\n  gantt.templates.histogram_cell_label = function (start_date, end_date, resource, tasks, assignments) {\n    return tasks.length + \"/3\";\n  };\n\n  gantt.templates.histogram_cell_allocated = function (start_date, end_date, resource, tasks, assignments) {\n    return tasks.length / 3;\n  };\n\n  gantt.templates.histogram_cell_capacity = function (start_date, end_date, resource, tasks, assignments) {\n    return 0;\n  };\n\n  var defaultResourceCellClass = function defaultResourceCellClass(start, end, resource, tasks, assignments) {\n    var css = \"\";\n\n    if (tasks.length <= 1) {\n      css = \"gantt_resource_marker_ok\";\n    } else {\n      css = \"gantt_resource_marker_overtime\";\n    }\n\n    return css;\n  };\n\n  var defaultResourceCellTemplate = function defaultResourceCellTemplate(start, end, resource, tasks, assignments) {\n    return tasks.length * 8;\n  };\n\n  gantt.templates.resource_cell_value = defaultResourceCellTemplate;\n  gantt.templates.resource_cell_class = defaultResourceCellClass; //editable_resource_diagram\n\n  gantt.attachEvent(\"onBeforeGanttReady\", function () {\n    if (gantt.config.resources && gantt.config.resources.editable_resource_diagram) {\n      gantt.config.resource_render_empty_cells = true;\n\n      if (gantt.templates.resource_cell_value === defaultResourceCellTemplate) {\n        gantt.templates.resource_cell_value = gantt.ext.resources.editableResourceCellTemplate;\n      }\n\n      if (gantt.templates.resource_cell_class === defaultResourceCellClass) {\n        gantt.templates.resource_cell_class = gantt.ext.resources.editableResourceCellClass;\n      }\n\n      gantt.ext.resources.initEditableDiagram(gantt);\n    }\n  });\n};","var createWbs = function createWbs(gantt) {\n  return {\n    _needRecalc: true,\n    reset: function reset() {\n      this._needRecalc = true;\n    },\n    _isRecalcNeeded: function _isRecalcNeeded() {\n      return !this._isGroupSort() && this._needRecalc;\n    },\n    _isGroupSort: function _isGroupSort() {\n      return !!gantt.getState().group_mode;\n    },\n    _getWBSCode: function _getWBSCode(task) {\n      if (!task) return \"\";\n\n      if (this._isRecalcNeeded()) {\n        this._calcWBS();\n      }\n\n      if (task.$virtual) return \"\";\n      if (this._isGroupSort()) return task.$wbs || \"\";\n\n      if (!task.$wbs) {\n        this.reset();\n\n        this._calcWBS();\n      }\n\n      return task.$wbs;\n    },\n    _setWBSCode: function _setWBSCode(task, value) {\n      task.$wbs = value;\n    },\n    getWBSCode: function getWBSCode(task) {\n      return this._getWBSCode(task);\n    },\n    getByWBSCode: function getByWBSCode(code) {\n      var parts = code.split(\".\");\n      var currentNode = gantt.config.root_id;\n\n      for (var i = 0; i < parts.length; i++) {\n        var children = gantt.getChildren(currentNode);\n        var index = parts[i] * 1 - 1;\n\n        if (gantt.isTaskExists(children[index])) {\n          currentNode = children[index];\n        } else {\n          return null;\n        }\n      }\n\n      if (gantt.isTaskExists(currentNode)) {\n        return gantt.getTask(currentNode);\n      } else {\n        return null;\n      }\n    },\n    _calcWBS: function _calcWBS() {\n      if (!this._isRecalcNeeded()) return;\n      var _isFirst = true;\n      gantt.eachTask(function (ch) {\n        if (_isFirst) {\n          _isFirst = false;\n\n          this._setWBSCode(ch, \"1\");\n\n          return;\n        }\n\n        var _prevSibling = gantt.getPrevSibling(ch.id);\n\n        if (_prevSibling !== null) {\n          var _wbs = gantt.getTask(_prevSibling).$wbs;\n\n          if (_wbs) {\n            _wbs = _wbs.split(\".\");\n            _wbs[_wbs.length - 1]++;\n\n            this._setWBSCode(ch, _wbs.join(\".\"));\n          }\n        } else {\n          var _parent = gantt.getParent(ch.id);\n\n          this._setWBSCode(ch, gantt.getTask(_parent).$wbs + \".1\");\n        }\n      }, gantt.config.root_id, this);\n      this._needRecalc = false;\n    }\n  };\n};\n\nmodule.exports = function (gantt) {\n  var wbs = createWbs(gantt);\n\n  gantt.getWBSCode = function getWBSCode(task) {\n    return wbs.getWBSCode(task);\n  };\n\n  gantt.getTaskByWBSCode = function (code) {\n    return wbs.getByWBSCode(code);\n  };\n\n  function resetCache() {\n    wbs.reset();\n    return true;\n  }\n\n  gantt.attachEvent(\"onAfterTaskMove\", resetCache);\n  gantt.attachEvent(\"onBeforeParse\", resetCache);\n  gantt.attachEvent(\"onAfterTaskDelete\", resetCache);\n  gantt.attachEvent(\"onAfterTaskAdd\", resetCache);\n  gantt.attachEvent(\"onAfterSort\", resetCache);\n};","var global = require(\"../../utils/global\");\n\nfunction createMethod(gantt) {\n  var methods = {};\n  var isActive = false;\n\n  function disableMethod(methodName, dummyMethod) {\n    dummyMethod = typeof dummyMethod == \"function\" ? dummyMethod : function () {};\n\n    if (!methods[methodName]) {\n      methods[methodName] = this[methodName];\n      this[methodName] = dummyMethod;\n    }\n  }\n\n  function restoreMethod(methodName) {\n    if (methods[methodName]) {\n      this[methodName] = methods[methodName];\n      methods[methodName] = null;\n    }\n  }\n\n  function disableMethods(methodsHash) {\n    for (var i in methodsHash) {\n      disableMethod.call(this, i, methodsHash[i]);\n    }\n  }\n\n  function restoreMethods() {\n    for (var i in methods) {\n      restoreMethod.call(this, i);\n    }\n  }\n\n  function batchUpdatePayload(callback) {\n    try {\n      callback();\n    } catch (e) {\n      global.console.error(e);\n    }\n  }\n\n  var state = gantt.$services.getService(\"state\");\n  state.registerProvider(\"batchUpdate\", function () {\n    return {\n      batch_update: isActive\n    };\n  }, false);\n  return function batchUpdate(callback, noRedraw) {\n    if (isActive) {\n      // batch mode is already active\n      batchUpdatePayload(callback);\n      return;\n    }\n\n    var call_dp = this._dp && this._dp.updateMode != \"off\";\n    var dp_mode;\n\n    if (call_dp) {\n      dp_mode = this._dp.updateMode;\n\n      this._dp.setUpdateMode(\"off\");\n    } // temporary disable some methods while updating multiple tasks\n\n\n    var resetProjects = {};\n    var methods = {\n      \"render\": true,\n      \"refreshData\": true,\n      \"refreshTask\": true,\n      \"refreshLink\": true,\n      \"resetProjectDates\": function resetProjectDates(task) {\n        resetProjects[task.id] = task;\n      }\n    };\n    disableMethods.call(this, methods);\n    isActive = true;\n    this.callEvent(\"onBeforeBatchUpdate\", []);\n    batchUpdatePayload(callback);\n    this.callEvent(\"onAfterBatchUpdate\", []);\n    restoreMethods.call(this); // do required updates after changes applied\n\n    for (var i in resetProjects) {\n      this.resetProjectDates(resetProjects[i]);\n    }\n\n    isActive = false;\n\n    if (!noRedraw) {\n      this.render();\n    }\n\n    if (call_dp) {\n      this._dp.setUpdateMode(dp_mode);\n\n      this._dp.setGanttMode(\"task\");\n\n      this._dp.sendData();\n\n      this._dp.setGanttMode(\"link\");\n\n      this._dp.sendData();\n    }\n  };\n}\n\nmodule.exports = function (gantt) {\n  gantt.batchUpdate = createMethod(gantt);\n};","module.exports = function (gantt) {\n  if (!gantt.ext) {\n    gantt.ext = {};\n  }\n\n  var modules = [require(\"./batch_update\"), require(\"./wbs\"), require(\"./resources\"), require(\"./resource_assignments\"), require(\"./new_task_placeholder\"), require(\"./auto_task_types\"), require(\"./formatters\"), require(\"./empty_state_screen\")[\"default\"]];\n\n  for (var i = 0; i < modules.length; i++) {\n    if (modules[i]) modules[i](gantt);\n  }\n};","import * as utils from \"../../utils/utils\";\r\n\r\nexport default class SimpleStorage {\r\n\tpublic static create = () : SimpleStorage => {\r\n\t\treturn new SimpleStorage();\r\n\t}\r\n\r\n\tprotected _storage: { [id: string]: any; };\r\n\r\n\tprotected constructor() {\r\n\t\tthis._storage = {};\r\n\t}\r\n\r\n\tpublic clear = (): void => {\r\n\t\tthis._storage = {};\r\n\t}\r\n\r\n\tpublic storeItem = (item: any): void => {\r\n\t\tthis._storage[item.id] = utils.copy(item);\r\n\t}\r\n\r\n\tpublic getStoredItem = (id: string): any => {\r\n\t\treturn this._storage[id] || null;\r\n\t}\r\n}","\r\nexport default function extendGantt(gantt: any, dp: any) {\r\n\tgantt.getUserData = function(id, name, store) {\r\n\t\tif (!this.userdata) {\r\n\t\t\tthis.userdata = {};\r\n\t\t}\r\n\t\tthis.userdata[store] = this.userdata[store] || {};\r\n\t\tif (this.userdata[store][id] && this.userdata[store][id][name]) {\r\n\t\t\treturn this.userdata[store][id][name];\r\n\t\t}\r\n\t\treturn \"\";\r\n\t};\r\n\tgantt.setUserData = function(id, name, value, store) {\r\n\t\tif (!this.userdata) {\r\n\t\t\tthis.userdata = {};\r\n\t\t}\r\n\t\tthis.userdata[store] = this.userdata[store] || {};\r\n\t\tthis.userdata[store][id] = this.userdata[store][id] || {};\r\n\t\tthis.userdata[store][id][name] = value;\r\n\t};\r\n\r\n\tgantt._change_id = function(oldId, newId) {\r\n\t\tswitch (this._dp._ganttMode) {\r\n\t\t\tcase \"task\":\r\n\t\t\t\tthis.changeTaskId(oldId, newId);\r\n\t\t\t\tbreak;\r\n\t\t\tcase \"link\":\r\n\t\t\t\tthis.changeLinkId(oldId, newId);\r\n\t\t\t\tbreak;\r\n\t\t\tcase \"assignment\":\r\n\t\t\t\tthis.$data.assignmentsStore.changeId(oldId, newId);\r\n\t\t\t\tbreak;\r\n\t\t\tcase \"resource\":\r\n\t\t\t\tthis.$data.resourcesStore.changeId(oldId, newId);\r\n\t\t\t\tbreak;\r\n\t\t\tdefault:\r\n\t\t\t\tthrow new Error(`Invalid mode of the dataProcessor after database id is received: ${this._dp._ganttMode}, new id: ${newId}`);\r\n\t\t}\r\n\t};\r\n\r\n\tgantt._row_style = function(rowId, classname){\r\n\t\tif (this._dp._ganttMode !== \"task\") {\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tif (!gantt.isTaskExists(rowId)) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tconst task = gantt.getTask(rowId);\r\n\t\ttask.$dataprocessor_class = classname;\r\n\t\tgantt.refreshTask(rowId);\r\n\t};\r\n\r\n\t// fake method for dataprocessor\r\n\tgantt._delete_task = function(rowId, node) {}; // tslint:disable-line\r\n\r\n\tgantt._sendTaskOrder = function(id, item){\r\n\t\tif (item.$drop_target) {\r\n\t\t\tthis._dp.setGanttMode(\"task\");\r\n\t\t\tthis.getTask(id).target = item.$drop_target;\r\n\t\t\tthis._dp.setUpdated(id, true,\"order\");\r\n\t\t\tdelete this.getTask(id).$drop_target;\r\n\t\t}\r\n\t};\r\n\r\n\tgantt.setDp = function() {\r\n\t\tthis._dp = dp;\r\n\t};\r\n\r\n\tgantt.setDp();\r\n}","import * as helpers from \"../../utils/helpers\";\r\n\r\nexport default class DataProcessorEvents {\r\n\tprotected _dataProcessorHandlers: any[];\r\n\tprotected $gantt: any;\r\n\tprotected $dp: any;\r\n\r\n\tconstructor(gantt: any, dp: any) {\r\n\t\tthis.$gantt = gantt;\r\n\t\tthis.$dp = dp;\r\n\t\tthis._dataProcessorHandlers = [];\r\n\t}\r\n\r\n\tattach() {\r\n\t\tconst dp = this.$dp;\r\n\t\tconst gantt = this.$gantt;\r\n\t\tconst treeHelper = require(\"../../utils/task_tree_helpers\");\r\n\t\tconst cascadeDelete = {};\r\n\r\n\t\tconst clientSideDelete = (id) => {\r\n\t\t\treturn this.clientSideDelete(id, dp, gantt);\r\n\t\t};\r\n\r\n\t\tfunction getTaskLinks(task) {\r\n\t\t\tlet _links = [];\r\n\r\n\t\t\tif (task.$source) {\r\n\t\t\t\t_links = _links.concat(task.$source);\r\n\t\t\t}\r\n\t\t\tif (task.$target) {\r\n\t\t\t\t_links = _links.concat(task.$target);\r\n\t\t\t}\r\n\r\n\t\t\treturn _links;\r\n\t\t}\r\n\r\n\t\tthis._dataProcessorHandlers.push(gantt.attachEvent(\"onAfterTaskAdd\", function(id, item) { // tslint:disable-line\r\n\t\t\tif (gantt.isTaskExists(id)) {\r\n\t\t\t\tdp.setGanttMode(\"tasks\");\r\n\t\t\t\tdp.setUpdated(id, true, \"inserted\");\r\n\t\t\t}\r\n\t\t}));\r\n\r\n\t\tthis._dataProcessorHandlers.push(gantt.attachEvent(\"onAfterTaskUpdate\", function(id, item) { // tslint:disable-line\r\n\t\t\tif (gantt.isTaskExists(id)) {\r\n\t\t\t\tdp.setGanttMode(\"tasks\");\r\n\t\t\t\tdp.setUpdated(id, true);\r\n\r\n\t\t\t\t// gantt can be destroyed/reinitialized after dp.setUpdated\r\n\t\t\t\tif(gantt._sendTaskOrder){\r\n\t\t\t\t\tgantt._sendTaskOrder(id, item);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}));\r\n\r\n\t\tthis._dataProcessorHandlers.push(gantt.attachEvent(\"onBeforeTaskDelete\", function(id, item) { // tslint:disable-line\r\n\t\t\tif (gantt.config.cascade_delete) {\r\n\t\t\t\tcascadeDelete[id] = {\r\n\t\t\t\t\ttasks: treeHelper.getSubtreeTasks(gantt, id),\r\n\t\t\t\t\tlinks: treeHelper.getSubtreeLinks(gantt, id)\r\n\t\t\t\t};\r\n\t\t\t}\r\n\t\t\t// GS-631. Keep the deleted item in Gantt until we receive the successful response from the server\r\n\t\t\tif (dp.deleteAfterConfirmation) {\r\n\t\t\t\tdp.setGanttMode(\"tasks\");\r\n\t\t\t\tdp.setUpdated(id, true, \"deleted\");\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t\treturn true;\r\n\t\t}));\r\n\r\n\t\tthis._dataProcessorHandlers.push(gantt.attachEvent(\"onAfterTaskDelete\", function(id, item) { // tslint:disable-line\r\n\t\t\tdp.setGanttMode(\"tasks\");\r\n\r\n\t\t\t// not send delete request if item is not inserted into the db - just remove it from the client\r\n\t\t\tconst needDbDelete = !clientSideDelete(id);\r\n\t\t\tconst needCascadeDelete = gantt.config.cascade_delete && cascadeDelete[id];\r\n\t\t\tif (!needDbDelete && !needCascadeDelete) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tif (needCascadeDelete) {\r\n\t\t\t\tconst dpMode = dp.updateMode;\r\n\t\t\t\tdp.setUpdateMode(\"off\");\r\n\r\n\t\t\t\tconst cascade = cascadeDelete[id];\r\n\t\t\t\tfor (const i in cascade.tasks) {\r\n\t\t\t\t\tif (!clientSideDelete(i)) {\r\n\t\t\t\t\t\tdp.storeItem(cascade.tasks[i]);\r\n\t\t\t\t\t\tdp.setUpdated(i, true, \"deleted\");\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tdp.setGanttMode(\"links\");\r\n\t\t\t\tfor (const i in cascade.links) {\r\n\t\t\t\t\tif (!clientSideDelete(i)) {\r\n\t\t\t\t\t\tdp.storeItem(cascade.links[i]);\r\n\t\t\t\t\t\tdp.setUpdated(i, true, \"deleted\");\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tcascadeDelete[id] = null;\r\n\r\n\t\t\t\tif (dpMode !== \"off\") {\r\n\t\t\t\t\tdp.sendAllData();\r\n\t\t\t\t}\r\n\t\t\t\tdp.setGanttMode(\"tasks\");\r\n\t\t\t\tdp.setUpdateMode(dpMode);\r\n\t\t\t}\r\n\r\n\t\t\tif (needDbDelete){\r\n\t\t\t\tdp.storeItem(item);\r\n\t\t\t\tif (!dp.deleteAfterConfirmation){\r\n\t\t\t\t\tdp.setUpdated(id, true, \"deleted\");\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\r\n\t\t\tif (dp.updateMode !== \"off\" && !dp._tSend) {\r\n\t\t\t\tdp.sendAllData();\r\n\t\t\t}\r\n\t\t}));\r\n\r\n\t\tthis._dataProcessorHandlers.push(gantt.attachEvent(\"onAfterLinkUpdate\", function(id, item) { // tslint:disable-line\r\n\t\t\tif (gantt.isLinkExists(id)) {\r\n\t\t\t\tdp.setGanttMode(\"links\");\r\n\t\t\t\tdp.setUpdated(id, true);\r\n\t\t\t}\r\n\t\t}));\r\n\r\n\t\tthis._dataProcessorHandlers.push(gantt.attachEvent(\"onAfterLinkAdd\", function(id, item) { // tslint:disable-line\r\n\t\t\tif (gantt.isLinkExists(id)) {\r\n\t\t\t\tdp.setGanttMode(\"links\");\r\n\t\t\t\tdp.setUpdated(id, true,\"inserted\");\r\n\t\t\t}\r\n\t\t}));\r\n\r\n\t\tthis._dataProcessorHandlers.push(gantt.attachEvent(\"onAfterLinkDelete\", function(id, item) { // tslint:disable-line\r\n\t\t\tdp.setGanttMode(\"links\");\r\n\r\n\t\t\tconst needDbDelete = !clientSideDelete(id);\r\n\t\t\tif (!needDbDelete) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\tdp.storeItem(item);\r\n\t\t\tdp.setUpdated(id, true,\"deleted\");\r\n\t\t}));\r\n\r\n\t\tthis._dataProcessorHandlers.push(gantt.attachEvent(\"onRowDragEnd\", function(id, target) { // tslint:disable-line\r\n\t\t\tgantt._sendTaskOrder(id, gantt.getTask(id));\r\n\t\t}));\r\n\r\n\t\tlet tasks = null;\r\n\t\tlet links = null;\r\n\r\n\t\tthis._dataProcessorHandlers.push(gantt.attachEvent(\"onTaskIdChange\", function(oldId, newId) { // tslint:disable-line\r\n\t\t\tif (!dp._waitMode) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tconst children = gantt.getChildren(newId);\r\n\t\t\tif (children.length) {\r\n\t\t\t\ttasks = tasks || {};\r\n\r\n\t\t\t\tfor (let i = 0; i < children.length; i++) {\r\n\t\t\t\t\tconst ch = this.getTask(children[i]);\r\n\t\t\t\t\ttasks[ch.id] = ch;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tconst item = this.getTask(newId);\r\n\t\t\tconst itemLinks = getTaskLinks(item);\r\n\r\n\t\t\tif (itemLinks.length) {\r\n\t\t\t\tlinks = links || {};\r\n\r\n\t\t\t\tfor (let i = 0; i < itemLinks.length; i++) {\r\n\t\t\t\t\tconst link = this.getLink(itemLinks[i]);\r\n\t\t\t\t\tlinks[link.id] = link;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}));\r\n\r\n\t\tdp.attachEvent(\"onAfterUpdateFinish\", function() {\r\n\t\t\tif (tasks || links) {\r\n\t\t\t\tgantt.batchUpdate(function() {\r\n\t\t\t\t\tfor (const id in tasks) {\r\n\t\t\t\t\t\tgantt.updateTask(tasks[id].id);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tfor (const id in links) {\r\n\t\t\t\t\t\tgantt.updateLink(links[id].id);\r\n\t\t\t\t\t}\r\n\t\t\t\t\ttasks = null;\r\n\t\t\t\t\tlinks = null;\r\n\t\t\t\t});\r\n\t\t\t\tif (tasks) {\r\n\t\t\t\t\tgantt._dp.setGanttMode(\"tasks\");\r\n\t\t\t\t} else {\r\n\t\t\t\t\tgantt._dp.setGanttMode(\"links\");\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tdp.attachEvent(\"onBeforeDataSending\", function() {\r\n\t\t\tif (this._tMode === \"CUSTOM\") {\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t\tlet url = this._serverProcessor;\r\n\t\t\tif (this._tMode === \"REST-JSON\" || this._tMode === \"REST\") {\r\n\t\t\t\tconst mode = this._ganttMode;\r\n\r\n\t\t\t\turl = url.substring(0, url.indexOf(\"?\") > -1 ? url.indexOf(\"?\") : url.length);\r\n\t\t\t\t// editing=true&\r\n\t\t\t\tthis.serverProcessor = url + (url.slice(-1) === \"/\" ? \"\" : \"/\") + mode;\r\n\t\t\t} else {\r\n\t\t\t\tconst pluralizedMode = this._ganttMode + \"s\";\r\n\t\t\t\tthis.serverProcessor = url + gantt.ajax.urlSeparator(url) + \"gantt_mode=\" + pluralizedMode;\r\n\t\t\t}\r\n\r\n\t\t\treturn true;\r\n\t\t});\r\n\r\n\t\tdp.attachEvent(\"insertCallback\", function insertCallback(upd, id, parent, mode) { // tslint:disable-line\r\n\t\t\tconst data = upd.data || gantt.xml._xmlNodeToJSON(upd.firstChild);\r\n\t\t\tconst methods = {\r\n\t\t\t\tadd: gantt.addTask,\r\n\t\t\t\tisExist: gantt.isTaskExists\r\n\t\t\t};\r\n\t\t\tif (mode === \"links\") {\r\n\t\t\t\tmethods.add = gantt.addLink;\r\n\t\t\t\tmethods.isExist = gantt.isLinkExists;\r\n\t\t\t}\r\n\t\t\tif (methods.isExist.call(gantt, id)) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\tdata.id = id;\r\n\t\t\tmethods.add.call(gantt, data);\r\n\t\t});\r\n\r\n\t\tdp.attachEvent(\"updateCallback\", function updateCallback(upd, id) {\r\n\t\t\tconst data = upd.data || gantt.xml._xmlNodeToJSON(upd.firstChild);\r\n\t\t\tif (!gantt.isTaskExists(id)) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\tconst objData = gantt.getTask(id);\r\n\t\t\tfor (const key in data) {\r\n\t\t\t\tlet property = data[key];\r\n\t\t\t\tswitch (key) {\r\n\t\t\t\t\tcase \"id\":\r\n\t\t\t\t\t\tcontinue;\r\n\t\t\t\t\tcase \"start_date\":\r\n\t\t\t\t\tcase \"end_date\":\r\n\t\t\t\t\t\tproperty = gantt.defined(gantt.templates.xml_date) ? gantt.templates.xml_date(property) : gantt.templates.parse_date(property);\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase \"duration\":\r\n\t\t\t\t\t\tobjData.end_date = gantt.calculateEndDate({start_date: objData.start_date, duration: property, task:objData});\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t\tobjData[key] = property;\r\n\t\t\t}\r\n\t\t\tgantt.updateTask(id);\r\n\t\t\tgantt.refreshData();\r\n\t\t});\r\n\t\tdp.attachEvent(\"deleteCallback\", function deleteCallback(upd, id, parent, mode) { // tslint:disable-line\r\n\t\t\tconst methods = {\r\n\t\t\t\tdelete: gantt.deleteTask,\r\n\t\t\t\tisExist: gantt.isTaskExists\r\n\t\t\t};\r\n\t\t\tif (mode === \"links\") {\r\n\t\t\t\tmethods.delete = gantt.deleteLink;\r\n\t\t\t\tmethods.isExist = gantt.isLinkExists;\r\n\t\t\t} else if(mode === \"assignment\") {\r\n\t\t\t\tmethods.delete = function(val) {\r\n\t\t\t\t\tgantt.$data.assignmentsStore.remove(val);\r\n\t\t\t\t};\r\n\t\t\t\tmethods.isExist = function(val){\r\n\t\t\t\t\treturn gantt.$data.assignmentsStore.exists(val);\r\n\t\t\t\t};\r\n\t\t\t}\r\n\t\t\tif (methods.isExist.call(gantt, id)) {\r\n\t\t\t\tmethods.delete.call(gantt, id);\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tthis.handleResourceCRUD(dp, gantt);\r\n\t\tthis.handleResourceAssignmentCRUD(dp, gantt);\r\n\t}\r\n\r\n\tclientSideDelete(id, dp, gantt){\r\n\t\tconst updated = dp.updatedRows.slice();\r\n\t\tlet clientOnly = false;\r\n\r\n\t\tif(gantt.getUserData(id, \"!nativeeditor_status\", dp._ganttMode) === \"true_deleted\"){\r\n\t\t\tclientOnly = true;\r\n\t\t\tdp.setUpdated(id,false);\r\n\t\t}\r\n\r\n\t\tfor (let i = 0; i < updated.length && !dp._in_progress[id]; i++) {\r\n\t\t\tif (updated[i] === id) {\r\n\t\t\t\tif (gantt.getUserData(id, \"!nativeeditor_status\", dp._ganttMode) === \"inserted\") {\r\n\t\t\t\t\tclientOnly = true;\r\n\t\t\t\t}\r\n\t\t\t\tdp.setUpdated(id,false);\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn clientOnly;\r\n\t}\r\n\r\n\thandleResourceAssignmentCRUD(dp, gantt){\r\n\t\tif(!gantt.config.resources || gantt.config.resources.dataprocessor_assignments !== true){\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tconst assignmentsStore = gantt.getDatastore(gantt.config.resource_assignment_store);\r\n\t\tconst insertedTasks = {};\r\n\t\tconst pendingAssignments = {};\r\n\r\n\t\tgantt.attachEvent(\"onBeforeTaskAdd\", function(id, task){\r\n\t\t\tinsertedTasks[id] = true;\r\n\t\t\treturn true;\r\n\t\t});\r\n\r\n\t\tfunction putAssignmentToQueue(item){\r\n\t\t\tpendingAssignments[item.id] = item;\r\n\t\t\tinsertedTasks[item.task_id] = true;\r\n\t\t}\r\n\r\n\t\tfunction insertResourceAssignment(assignment){\r\n\t\t\tconst id = assignment.id;\r\n\t\t\tif (assignmentsStore.exists(id)) {\r\n\t\t\t\tdp.setGanttMode(\"assignment\");\r\n\t\t\t\tdp.setUpdated(id, true,\"inserted\");\r\n\t\t\t}\r\n\t\t\tdelete pendingAssignments[id];\r\n\t\t}\r\n\r\n\t\tgantt.attachEvent(\"onTaskIdChange\", function(id, newId){\r\n\t\t\tdelete insertedTasks[id];\r\n\t\t});\r\n\r\n\t\tassignmentsStore.attachEvent(\"onAfterAdd\", (id, item) => {\r\n\t\t\tif(insertedTasks[item.task_id]){\r\n\t\t\t\t// inserting assignment of new task\r\n\t\t\t\t// task is not saved yet, need to wait till it gets permanent id and save assigmnents after that\r\n\t\t\t\tputAssignmentToQueue(item);\r\n\t\t\t}else{\r\n\t\t\t\tinsertResourceAssignment(item);\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tassignmentsStore.attachEvent(\"onAfterUpdate\", (id, item) => {\r\n\t\t\tif (assignmentsStore.exists(id)) {\r\n\t\t\t\tif(pendingAssignments[id]){\r\n\t\t\t\t\tinsertResourceAssignment(item);\r\n\t\t\t\t}else{\r\n\t\t\t\t\tdp.setGanttMode(\"assignment\");\r\n\t\t\t\t\tdp.setUpdated(id, true);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tassignmentsStore.attachEvent(\"onAfterDelete\", (id, item) => {\r\n\t\t\tdp.setGanttMode(\"assignment\");\r\n\r\n\t\t\tconst needDbDelete = !this.clientSideDelete(id, dp, gantt);\r\n\t\t\tif (!needDbDelete) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\tdp.storeItem(item);\r\n\t\t\tdp.setUpdated(id, true,\"deleted\");\r\n\t\t});\r\n\r\n\t}\r\n\r\n\thandleResourceCRUD(dp, gantt){\r\n\t\tif(!gantt.config.resources || gantt.config.resources.dataprocessor_resources !== true){\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tconst resourcesStore = gantt.getDatastore(gantt.config.resource_store);\r\n\r\n\t\tfunction insertResource(resource){\r\n\t\t\tconst id = resource.id;\r\n\t\t\tif (resourcesStore.exists(id)) {\r\n\t\t\t\tdp.setGanttMode(\"resource\");\r\n\t\t\t\tdp.setUpdated(id, true,\"inserted\");\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tresourcesStore.attachEvent(\"onAfterAdd\", (id, item) => {\r\n\t\t\tinsertResource(item);\r\n\t\t});\r\n\r\n\t\tresourcesStore.attachEvent(\"onAfterUpdate\", (id, item) => {\r\n\t\t\tif (resourcesStore.exists(id)) {\r\n\t\t\t\tdp.setGanttMode(\"resource\");\r\n\t\t\t\tdp.setUpdated(id, true);\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tresourcesStore.attachEvent(\"onAfterDelete\", (id, item) => {\r\n\t\t\tdp.setGanttMode(\"resource\");\r\n\r\n\t\t\tconst needDbDelete = !this.clientSideDelete(id, dp, gantt);\r\n\t\t\tif (!needDbDelete) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\tdp.storeItem(item);\r\n\t\t\tdp.setUpdated(id, true,\"deleted\");\r\n\t\t});\r\n\r\n\t}\r\n\r\n\r\n\tdetach() {\r\n\t\thelpers.forEach(this._dataProcessorHandlers, (e) => {\r\n\t\t\tthis.$gantt.detachEvent(e);\r\n\t\t});\r\n\t\tthis._dataProcessorHandlers = [];\r\n\t}\r\n}\r\n","import * as eventable from \"../../utils/eventable\";\r\nimport * as helpers from \"../../utils/helpers\";\r\nimport * as utils from \"../../utils/utils\";\r\nimport DataProcessorEvents from \"./data_processor_events\";\r\nimport extendGantt from \"./extend_gantt\";\r\nimport SimpleStorage from \"./simple_storage\";\r\n\r\nexport interface DataProcessor { // tslint:disable-line\r\n\t$gantt: any;\r\n\tdetachAllEvents: any;\r\n\tattachEvent: any;\r\n\tcallEvent: any;\r\n\r\n\tserverProcessor: string;\r\n\taction_param: string;\r\n\tupdatedRows: any[];\r\n\tautoUpdate: boolean;\r\n\tupdateMode: string;\r\n\tmessages: any[];\r\n\tstyles: object;\r\n\tdnd: any;\r\n\tdeleteAfterConfirmation?: any;\r\n}\r\n\r\nexport function createDataProcessor(config: any) {\r\n\tlet router;\r\n\tlet tMode;\r\n\tif (config instanceof Function) {\r\n\t\trouter = config;\r\n\t} else if (config.hasOwnProperty(\"router\")) {\r\n\t\trouter = config.router;\r\n\t} else if (config.hasOwnProperty(\"assignment\") || config.hasOwnProperty(\"link\") || config.hasOwnProperty(\"task\")) {\r\n\t\trouter = config;\r\n\t}\r\n\tif (router) {\r\n\t\ttMode = \"CUSTOM\";\r\n\t} else {\r\n\t\ttMode = config.mode || \"REST-JSON\";\r\n\t}\r\n\tconst gantt = this; // tslint:disable-line\r\n\tconst dp = new DataProcessor(config.url);\r\n\r\n\r\n\tdp.init(gantt);\r\n\tdp.setTransactionMode({\r\n\t\tmode: tMode,\r\n\t\trouter\r\n\t}, config.batchUpdate);\r\n\tif(config.deleteAfterConfirmation){\r\n\t\tdp.deleteAfterConfirmation = config.deleteAfterConfirmation;\r\n\t}\r\n\treturn dp;\r\n}\r\n\r\nexport class DataProcessor {\r\n\tpublic modes: object;\r\n\tpublic serverProcessor: string;\r\n\tpublic action_param: string; // tslint:disable-line\r\n\tpublic updatedRows: any[];\r\n\tpublic autoUpdate: boolean;\r\n\tpublic updateMode: string;\r\n\tpublic messages: any[];\r\n\tpublic styles: object;\r\n\tpublic dnd: any;\r\n\r\n\tprotected _tMode: string;\r\n\tprotected _headers: any;\r\n\tprotected _payload: any;\r\n\tprotected _postDelim: string;\r\n\tprotected _waitMode: number;\r\n\tprotected _in_progress: object; // tslint:disable-line\r\n\tprotected _invalid: object;\r\n\tprotected _storage: SimpleStorage;\r\n\tprotected _tSend: boolean;\r\n\tprotected _serializeAsJson: boolean;\r\n\tprotected _router: any;\r\n\tprotected _utf: boolean;\r\n\tprotected _methods: any[];\r\n\tprotected _user: any;\r\n\tprotected _uActions: object;\r\n\tprotected _needUpdate: boolean;\r\n\tprotected _ganttMode: \"task\"|\"link\";\r\n\tprotected _routerParametersFormat: \"parameters\"|\"object\";\r\n\r\n\tprotected _silent_mode: any; // tslint:disable-line\r\n\tprotected _updateBusy: any;\r\n\tprotected _serverProcessor: any;\r\n\tprotected _initialized: boolean;\r\n\r\n\tconstructor(serverProcessorURL?) {\r\n\t\tthis.serverProcessor = serverProcessorURL;\r\n\t\tthis.action_param = \"!nativeeditor_status\";\r\n\r\n\t\tthis.updatedRows = []; // ids of updated rows\r\n\r\n\t\tthis.autoUpdate = true;\r\n\t\tthis.updateMode = \"cell\";\r\n\t\tthis._headers = null;\r\n\t\tthis._payload = null;\r\n\t\tthis._postDelim = \"_\";\r\n\t\tthis._routerParametersFormat = \"parameters\";\r\n\r\n\t\tthis._waitMode = 0;\r\n\t\tthis._in_progress = {}; // ?\r\n\t\tthis._storage = SimpleStorage.create();\r\n\t\tthis._invalid = {};\r\n\t\tthis.messages = [];\r\n\r\n\t\tthis.styles = {\r\n\t\t\tupdated: \"font-weight:bold;\",\r\n\t\t\tinserted: \"font-weight:bold;\",\r\n\t\t\tdeleted: \"text-decoration : line-through;\",\r\n\t\t\tinvalid: \"background-color:FFE0E0;\",\r\n\t\t\tinvalid_cell: \"border-bottom:2px solid red;\",\r\n\t\t\terror: \"color:red;\",\r\n\t\t\tclear: \"font-weight:normal;text-decoration:none;\"\r\n\t\t};\r\n\t\tthis.enableUTFencoding(true);\r\n\t\teventable(this);\r\n\t}\r\n\r\n\tsetTransactionMode(mode:any, total?:any) {\r\n\t\tif (typeof mode === \"object\") {\r\n\t\t\tthis._tMode = mode.mode || this._tMode;\r\n\r\n\t\t\tif (utils.defined(mode.headers)) {\r\n\t\t\t\tthis._headers = mode.headers;\r\n\t\t\t}\r\n\r\n\t\t\tif (utils.defined(mode.payload)) {\r\n\t\t\t\tthis._payload = mode.payload;\r\n\t\t\t}\r\n\t\t\tthis._tSend = !!total;\r\n\t\t} else {\r\n\t\t\tthis._tMode = mode;\r\n\t\t\tthis._tSend = total;\r\n\t\t}\r\n\r\n\t\tif (this._tMode === \"REST\") {\r\n\t\t\tthis._tSend = false;\r\n\t\t}\r\n\r\n\t\tif (this._tMode === \"JSON\" || this._tMode === \"REST-JSON\") {\r\n\t\t\tthis._tSend = false;\r\n\t\t\tthis._serializeAsJson = true;\r\n\t\t\tthis._headers = this._headers || {};\r\n\t\t\tthis._headers[\"Content-Type\"] = \"application/json\";\r\n\t\t}else{\r\n\t\t\tif(this._headers && !this._headers[\"Content-Type\"]){\r\n\t\t\t\tthis._headers[\"Content-Type\"] = \"application/x-www-form-urlencoded\";\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif (this._tMode === \"CUSTOM\") {\r\n\t\t\tthis._tSend = false;\r\n\t\t\tthis._router = mode.router;\r\n\t\t}\r\n\t}\r\n\r\n\tescape(data:any) {\r\n\t\tif (this._utf) {\r\n\t\t\treturn encodeURIComponent(data);\r\n\t\t} else {\r\n\t\t\treturn escape(data);\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @desc: allows to set escaping mode\r\n\t * @param: true - utf based escaping, simple - use current page encoding\r\n\t * @type: public\r\n\t */\r\n\tenableUTFencoding(mode:boolean) {\r\n\t\tthis._utf = !!mode;\r\n\t}\r\n\r\n\t/**\r\n\t * @desc: get state of updating\r\n\t * @returns:   true - all in sync with server, false - some items not updated yet.\r\n\t * @type: public\r\n\t */\r\n\tgetSyncState() {\r\n\t\treturn !this.updatedRows.length;\r\n\t}\r\n\r\n\t/**\r\n\t * @desc: set if rows should be send to server automatically\r\n\t * @param: mode - \"row\" - based on row selection changed, \"cell\" - based on cell editing finished, \"off\" - manual data sending\r\n\t * @type: public\r\n\t */\r\n\tsetUpdateMode(mode: string, dnd: any) {\r\n\t\tthis.autoUpdate = (mode === \"cell\");\r\n\t\tthis.updateMode = mode;\r\n\t\tthis.dnd = dnd;\r\n\t}\r\n\r\n\tignore(code: any, master: any) {\r\n\t\tthis._silent_mode = true;\r\n\t\tcode.call(master || window);\r\n\t\tthis._silent_mode = false;\r\n\t}\r\n\r\n\t/**\r\n\t * @desc: mark row as updated/normal. check mandatory fields, initiate autoupdate (if turned on)\r\n\t * @param: rowId - id of row to set update-status for\r\n\t * @param: state - true for \"updated\", false for \"not updated\"\r\n\t * @param: mode - update mode name\r\n\t * @type: public\r\n\t */\r\n\tsetUpdated(rowId:number|string, state: boolean, mode?: string) {\r\n\t\tif (this._silent_mode) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tconst ind = this.findRow(rowId);\r\n\r\n\t\tmode = mode || \"updated\";\r\n\t\tconst existing = this.$gantt.getUserData(rowId, this.action_param, this._ganttMode);\r\n\t\tif (existing && mode === \"updated\") {\r\n\t\t\tmode = existing;\r\n\t\t}\r\n\t\tif (state) {\r\n\t\t\tthis.set_invalid(rowId, false); // clear previous error flag\r\n\t\t\tthis.updatedRows[ind] = rowId;\r\n\t\t\tthis.$gantt.setUserData(rowId, this.action_param, mode, this._ganttMode);\r\n\t\t\tif (this._in_progress[rowId]) {\r\n\t\t\t\tthis._in_progress[rowId] = \"wait\";\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\tif (!this.is_invalid(rowId)) {\r\n\t\t\t\tthis.updatedRows.splice(ind, 1);\r\n\t\t\t\tthis.$gantt.setUserData(rowId, this.action_param, \"\", this._ganttMode);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis.markRow(rowId, state, mode);\r\n\t\tif (state && this.autoUpdate) {\r\n\t\t\tthis.sendData(rowId);\r\n\t\t}\r\n\t}\r\n\r\n\tmarkRow(id: number | string, state: boolean, mode: string) {\r\n\t\tlet str = \"\";\r\n\t\tconst invalid = this.is_invalid(id);\r\n\t\tif (invalid) {\r\n\t\t\tstr = this.styles[invalid];\r\n\t\t\tstate = true;\r\n\t\t}\r\n\t\tif (this.callEvent(\"onRowMark\", [id, state, mode, invalid])) {\r\n\t\t\t// default logic\r\n\t\t\tstr = this.styles[state ? mode : \"clear\"] + \" \" + str;\r\n\r\n\t\t\tthis.$gantt[this._methods[0]](id, str);\r\n\r\n\t\t\tif (invalid && invalid.details) {\r\n\t\t\t\tstr += this.styles[invalid + \"_cell\"];\r\n\t\t\t\tfor (let i = 0; i < invalid.details.length; i++) {\r\n\t\t\t\t\tif (invalid.details[i]) {\r\n\t\t\t\t\t\tthis.$gantt[this._methods[1]](id, i, str);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tgetActionByState(state: string):string {\r\n\t\tif (state === \"inserted\") {\r\n\t\t\treturn \"create\";\r\n\t\t}\r\n\r\n\t\tif (state === \"updated\") {\r\n\t\t\treturn \"update\";\r\n\t\t}\r\n\r\n\t\tif (state === \"deleted\") {\r\n\t\t\treturn \"delete\";\r\n\t\t}\r\n\r\n\t\t// reorder\r\n\t\treturn \"update\";\r\n\t}\r\n\r\n\tgetState(id: number | string) {\r\n\t\treturn this.$gantt.getUserData(id, this.action_param, this._ganttMode);\r\n\t}\r\n\r\n\tis_invalid(id: number | string) {\r\n\t\treturn this._invalid[id];\r\n\t}\r\n\r\n\tset_invalid(id: number | string, mode: any, details?) {\r\n\t\tif (details) {\r\n\t\t\tmode = {\r\n\t\t\t\tvalue: mode,\r\n\t\t\t\tdetails,\r\n\t\t\t\ttoString: function() { // tslint:disable-line\r\n\t\t\t\t\treturn this.value.toString();\r\n\t\t\t\t}\r\n\t\t\t};\r\n\t\t}\r\n\t\tthis._invalid[id] = mode;\r\n\t}\r\n\r\n\t/**\r\n\t * @desc: check mandatory fields and verify values of cells, initiate update (if specified). Can be redefined in order to provide custom validation\r\n\t * @param: rowId - id of row to set update-status for\r\n\t * @type: public\r\n\t */\r\n\t// tslint:disable-next-line\r\n\tcheckBeforeUpdate(rowId: number | string) {\r\n\t\treturn true;\r\n\t}\r\n\r\n\t/**\r\n\t * @desc: send row(s) values to server\r\n\t * @param: rowId - id of row which data to send. If not specified, then all \"updated\" rows will be send\r\n\t * @type: public\r\n\t */\r\n\tsendData(rowId?: any) {\r\n\t\tif (this.$gantt.editStop) {\r\n\t\t\tthis.$gantt.editStop();\r\n\t\t}\r\n\r\n\t\tif (typeof rowId === \"undefined\" || this._tSend) {\r\n\r\n\t\t\tconst pendingUpdateModes = [];\r\n\t\t\tif(this.modes){\r\n\t\t\t\tconst knownModes = [\"task\", \"link\", \"assignment\"];\r\n\t\t\t\tknownModes.forEach((mode) => {\r\n\t\t\t\t\tif(this.modes[mode] && this.modes[mode].updatedRows.length){\r\n\t\t\t\t\t\tpendingUpdateModes.push(mode);\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\t\t\t}\r\n\r\n\t\t\tif (pendingUpdateModes.length){\r\n\t\t\t\tfor(let i = 0; i < pendingUpdateModes.length; i++){\r\n\t\t\t\t\tthis.setGanttMode(pendingUpdateModes[i]);\r\n\t\t\t\t\tthis.sendAllData();\r\n\t\t\t\t}\r\n\t\t\t\treturn;\r\n\t\t\t} else {\r\n\t\t\t\treturn this.sendAllData();\r\n\t\t\t}\r\n\t\t}\r\n\t\tif (this._in_progress[rowId]) {\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t\tthis.messages = [];\r\n\t\tif (!this.checkBeforeUpdate(rowId) && this.callEvent(\"onValidationError\", [rowId, this.messages])) {\r\n\t\t\treturn false;\r\n\t\t}\r\n\t\tthis._beforeSendData(this._getRowData(rowId), rowId);\r\n\t}\r\n\r\n\tserialize(data: any, id: any) {\r\n\t\tif (this._serializeAsJson) {\r\n\t\t\treturn  this._serializeAsJSON(data);\r\n\t\t}\r\n\r\n\t\tif (typeof data === \"string\") {\r\n\t\t\treturn data;\r\n\t\t}\r\n\t\tif (typeof id !== \"undefined\") {\r\n\t\t\treturn this.serialize_one(data, \"\");\r\n\t\t} else {\r\n\t\t\tconst stack = [];\r\n\t\t\tconst keys = [];\r\n\t\t\tfor (const key in data) {\r\n\t\t\t\tif (data.hasOwnProperty(key)) {\r\n\t\t\t\t\tstack.push(this.serialize_one(data[key], key + this._postDelim));\r\n\t\t\t\t\tkeys.push(key);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tstack.push(\"ids=\" + this.escape(keys.join(\",\")));\r\n\t\t\tif (this.$gantt.security_key) {\r\n\t\t\t\tstack.push(\"dhx_security=\" + this.$gantt.security_key);\r\n\t\t\t}\r\n\t\t\treturn stack.join(\"&\");\r\n\t\t}\r\n\t}\r\n\r\n\tserialize_one(data: any, pref: string) {\r\n\t\tif (typeof data === \"string\") {\r\n\t\t\treturn data;\r\n\t\t}\r\n\t\tconst stack = [];\r\n\t\tlet serialized = \"\";\r\n\t\tfor (const key in data)\r\n\t\t\tif (data.hasOwnProperty(key)) {\r\n\t\t\t\tif ((key === \"id\" ||\r\n\t\t\t\t\tkey == this.action_param) && // tslint:disable-line\r\n\t\t\t\t\tthis._tMode === \"REST\") {\r\n\t\t\t\t\tcontinue;\r\n\t\t\t\t}\r\n\t\t\t\tif (typeof data[key] === \"string\" || typeof data[key] === \"number\") {\r\n\t\t\t\t\tserialized = data[key];\r\n\t\t\t\t} else {\r\n\t\t\t\t\tserialized = JSON.stringify(data[key]);\r\n\t\t\t\t}\r\n\t\t\t\tstack.push(this.escape((pref || \"\") + key) + \"=\" + this.escape(serialized));\r\n\t\t\t}\r\n\t\treturn stack.join(\"&\");\r\n\t}\r\n\r\n\tsendAllData() {\r\n\t\tif (!this.updatedRows.length) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis.messages = [];\r\n\t\tlet valid: any = true;\r\n\r\n\t\tthis._forEachUpdatedRow(function(rowId) {\r\n\t\t\tvalid = valid && this.checkBeforeUpdate(rowId);\r\n\t\t});\r\n\r\n\t\tif (!valid && !this.callEvent(\"onValidationError\", [\"\", this.messages])) {\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t\tif (this._tSend) {\r\n\t\t\tthis._sendData(this._getAllData());\r\n\t\t} else {\r\n\t\t\t// this.updatedRows can be spliced from onBeforeUpdate via dp.setUpdated false\r\n\t\t\t// use an iterator instead of for(var i = 0; i < this.updatedRows; i++) then\r\n\t\t\tthis._forEachUpdatedRow(function(rowId) {\r\n\t\t\t\tif (!this._in_progress[rowId]) {\r\n\t\t\t\t\tif (this.is_invalid(rowId)) {\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tthis._beforeSendData(this._getRowData(rowId), rowId);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\tfindRow(pattern: any) {\r\n\t\tlet i = 0;\r\n\t\tfor (i = 0; i < this.updatedRows.length; i++) {\r\n\t\t\tif (pattern == this.updatedRows[i]) { // tslint:disable-line\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn i;\r\n\t}\r\n\r\n\t/**\r\n\t * @desc: define custom actions\r\n\t * @param: name - name of action, same as value of action attribute\r\n\t * @param: handler - custom function, which receives a XMl response content for action\r\n\t * @type: private\r\n\t */\r\n\tdefineAction(name: string, handler: any) {\r\n\t\tif (!this._uActions) {\r\n\t\t\tthis._uActions = {};\r\n\t\t}\r\n\t\tthis._uActions[name] = handler;\r\n\t}\r\n\r\n\t/**\r\n\t * @desc: used in combination with setOnBeforeUpdateHandler to create custom client-server transport system\r\n\t * @param: sid - id of item before update\r\n\t * @param: tid - id of item after up0ate\r\n\t * @param: action - action name\r\n\t * @type: public\r\n\t * @topic: 0\r\n\t */\r\n\tafterUpdateCallback(sid: number | string, tid: number | string, action: string, btag: any, ganttMode: string) {\r\n\t\tif(!this.$gantt){\r\n\t\t\t// destructor has been called before the callback\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis.setGanttMode(ganttMode);\r\n\r\n\t\tconst marker = sid;\r\n\t\tconst correct = (action !== \"error\" && action !== \"invalid\");\r\n\t\tif (!correct) {\r\n\t\t\tthis.set_invalid(sid, action);\r\n\t\t}\r\n\t\tif ((this._uActions) && (this._uActions[action]) && (!this._uActions[action](btag))) {\r\n\t\t\treturn (delete this._in_progress[marker]);\r\n\t\t}\r\n\r\n\t\tif (this._in_progress[marker] !== \"wait\") {\r\n\t\t\tthis.setUpdated(sid, false);\r\n\t\t}\r\n\r\n\t\tconst originalSid = sid;\r\n\r\n\t\tswitch (action) {\r\n\t\t\tcase \"inserted\":\r\n\t\t\tcase \"insert\":\r\n\t\t\t\tif (tid != sid) { // tslint:disable-line\r\n\t\t\t\t\tthis.setUpdated(sid, false);\r\n\t\t\t\t\tthis.$gantt[this._methods[2]](sid, tid);\r\n\t\t\t\t\tsid = tid;\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t\tcase \"delete\":\r\n\t\t\tcase \"deleted\":\r\n\t\t\t\tif(!this.deleteAfterConfirmation || this._ganttMode !== \"task\"){\r\n\t\t\t\t\tthis.$gantt.setUserData(sid, this.action_param, \"true_deleted\", this._ganttMode);\r\n\t\t\t\t\tthis.$gantt[this._methods[3]](sid);\r\n\t\t\t\t\tdelete this._in_progress[marker];\r\n\t\t\t\t\treturn this.callEvent(\"onAfterUpdate\", [sid, action, tid, btag]);\r\n\t\t\t\t}else{\r\n\t\t\t\t\tif (this._ganttMode === \"task\" && this.$gantt.isTaskExists(sid)) {\r\n\t\t\t\t\t\tthis.$gantt.setUserData(sid, this.action_param, \"true_deleted\", this._ganttMode);\r\n\t\t\t\t\t\tconst task = this.$gantt.getTask(sid);\r\n\t\t\t\t\t\tthis.$gantt.silent(() => {\r\n\t\t\t\t\t\t\tthis.$gantt.deleteTask(sid);\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t\tthis.$gantt.callEvent(\"onAfterTaskDelete\", [sid, task]);\r\n\t\t\t\t\t\tthis.$gantt.render();\r\n\t\t\t\t\t\tdelete this._in_progress[marker];\r\n\t\t\t\t\t}\r\n\t\t\t\t\treturn this.callEvent(\"onAfterUpdate\", [sid, action, tid, btag]);\r\n\t\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\tif (this._in_progress[marker] !== \"wait\") {\r\n\t\t\tif (correct) {\r\n\t\t\t\tthis.$gantt.setUserData(sid, this.action_param, \"\", this._ganttMode);\r\n\t\t\t}\r\n\t\t\tdelete this._in_progress[marker];\r\n\t\t} else {\r\n\t\t\tdelete this._in_progress[marker];\r\n\t\t\tthis.setUpdated(tid, true, this.$gantt.getUserData(sid, this.action_param, this._ganttMode));\r\n\t\t}\r\n\r\n\t\tthis.callEvent(\"onAfterUpdate\", [originalSid, action, tid, btag]);\r\n\t}\r\n\r\n\t/**\r\n\t * @desc: response from server\r\n\t * @param: xml - XMLLoader object with response XML\r\n\t * @type: private\r\n\t */\r\n\tafterUpdate(that: any, xml: any, id?:any) {\r\n\t\tlet _xml;\r\n\t\tif (arguments.length === 3) {\r\n\t\t\t_xml = arguments[1];\r\n\t\t} else {\r\n\t\t\t// old dataprocessor\r\n\t\t\t_xml = arguments[4];\r\n\t\t}\r\n\t\tlet mode = this.getGanttMode();\r\n\t\tconst reqUrl = _xml.filePath || _xml.url;\r\n\r\n\t\tif (this._tMode !== \"REST\" && this._tMode !== \"REST-JSON\") {\r\n\t\t\tif (reqUrl.indexOf(\"gantt_mode=links\") !== -1) {\r\n\t\t\t\tmode = \"link\";\r\n\t\t\t} else if (reqUrl.indexOf(\"gantt_mode=assignments\") !== -1) {\r\n\t\t\t\tmode = \"assignment\";\r\n\t\t\t} else {\r\n\t\t\t\tmode = \"task\";\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\tif (reqUrl.indexOf(\"/link\") >= 0) {\r\n\t\t\t\tmode = \"link\";\r\n\t\t\t} else if(reqUrl.indexOf(\"/assignment\") >= 0){\r\n\t\t\t\tmode = \"assignment\";\r\n\t\t\t} else {\r\n\t\t\t\tmode = \"task\";\r\n\t\t\t}\r\n\t\t}\r\n\t\tthis.setGanttMode(mode);\r\n\r\n\t\tconst ajax = this.$gantt.ajax;\r\n\t\t// try to use json first\r\n\t\tlet tag;\r\n\r\n\t\ttry {\r\n\t\t\ttag = JSON.parse(xml.xmlDoc.responseText);\r\n\t\t} catch (e) {\r\n\r\n\t\t\t// empty response also can be processed by json handler\r\n\t\t\tif (!xml.xmlDoc.responseText.length) {\r\n\t\t\t\ttag = {};\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tconst processCallback = (itemId: any) => {\r\n\t\t\tconst action = tag.action || this.getState(itemId) || \"updated\";\r\n\t\t\tconst sid = tag.sid || itemId[0];\r\n\t\t\tconst tid = tag.tid || itemId[0];\r\n\t\t\tthat.afterUpdateCallback(sid, tid, action, tag, mode);\r\n\t\t};\r\n\t\tif (tag) {\r\n\t\t\t// GS-753. When multiple tasks are updated, unhighlight all of them\r\n\t\t\tif (Array.isArray(id) && id.length > 1) {\r\n\t\t\t\tid.forEach((taskId) => processCallback(taskId));\r\n\t\t\t} else {\r\n\t\t\t\tprocessCallback(id);\r\n\t\t\t}\r\n\t\t\tthat.finalizeUpdate();\r\n\t\t\tthis.setGanttMode(mode);\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\t// xml response\r\n\t\tconst top = ajax.xmltop(\"data\", xml.xmlDoc); // fix incorrect content type in IE\r\n\t\tif (!top) {\r\n\t\t\treturn this.cleanUpdate(id);\r\n\t\t}\r\n\t\tconst atag = ajax.xpath(\"//data/action\", top);\r\n\t\tif (!atag.length) {\r\n\t\t\treturn this.cleanUpdate(id);\r\n\t\t}\r\n\r\n\t\tfor (let i = 0; i < atag.length; i++) {\r\n\t\t\tconst btag = atag[i];\r\n\t\t\tconst action = btag.getAttribute(\"type\");\r\n\t\t\tconst sid = btag.getAttribute(\"sid\");\r\n\t\t\tconst tid = btag.getAttribute(\"tid\");\r\n\r\n\t\t\tthat.afterUpdateCallback(sid, tid, action, btag, mode);\r\n\t\t}\r\n\t\tthat.finalizeUpdate();\r\n\t}\r\n\r\n\tcleanUpdate(id: any[]) {\r\n\t\tif (id) {\r\n\t\t\tfor (let i = 0; i < id.length; i++) {\r\n\t\t\t\tdelete this._in_progress[id[i]];\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tfinalizeUpdate() {\r\n\t\tif (this._waitMode) {\r\n\t\t\tthis._waitMode--;\r\n\t\t}\r\n\r\n\t\tthis.callEvent(\"onAfterUpdateFinish\", []);\r\n\t\tif (!this.updatedRows.length) {\r\n\t\t\tthis.callEvent(\"onFullSync\", []);\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @desc: initializes data-processor\r\n\t * @param: gantt - dhtmlxGantt object to attach this data-processor to\r\n\t * @type: public\r\n\t */\r\n\tinit(gantt: any) {\r\n\t\tif (this._initialized) {\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tthis.$gantt = gantt;\r\n\t\tif (this.$gantt._dp_init) {\r\n\t\t\tthis.$gantt._dp_init(this);\r\n\t\t}\r\n\r\n\t\tthis._setDefaultTransactionMode();\r\n\r\n\t\tthis.styles = {\r\n\t\t\tupdated:\"gantt_updated\",\r\n\t\t\torder:\"gantt_updated\",\r\n\t\t\tinserted:\"gantt_inserted\",\r\n\t\t\tdeleted:\"gantt_deleted\",\r\n\t\t\tdelete_confirmation:\"gantt_deleted\",\r\n\t\t\tinvalid:\"gantt_invalid\",\r\n\t\t\terror:\"gantt_error\",\r\n\t\t\tclear:\"\"\r\n\t\t};\r\n\r\n\t\tthis._methods=[\"_row_style\",\"setCellTextStyle\",\"_change_id\",\"_delete_task\"];\r\n\t\textendGantt(this.$gantt, this);\r\n\t\tconst dataProcessorEvents = new DataProcessorEvents(this.$gantt, this);\r\n\t\tdataProcessorEvents.attach();\r\n\t\tthis.attachEvent(\"onDestroy\", function() {\r\n\t\t\tdelete this.setGanttMode;\r\n\t\t\tdelete this._getRowData;\r\n\r\n\t\t\tdelete this.$gantt._dp;\r\n\t\t\tdelete this.$gantt._change_id;\r\n\t\t\tdelete this.$gantt._row_style;\r\n\t\t\tdelete this.$gantt._delete_task;\r\n\t\t\tdelete this.$gantt._sendTaskOrder;\r\n\t\t\tdelete this.$gantt;\r\n\r\n\t\t\tdataProcessorEvents.detach();\r\n\t\t});\r\n\t\tthis.$gantt.callEvent(\"onDataProcessorReady\", [this]);\r\n\t\tthis._initialized = true;\r\n\t}\r\n\r\n\tsetOnAfterUpdate(handler) {\r\n\t\tthis.attachEvent(\"onAfterUpdate\", handler);\r\n\t}\r\n\r\n\tsetOnBeforeUpdateHandler(handler) {\r\n\t\tthis.attachEvent(\"onBeforeDataSending\", handler);\r\n\t}\r\n\r\n\t/* starts autoupdate mode\r\n\t\t@param interval time interval for sending update requests\r\n\t*/\r\n\tsetAutoUpdate(interval, user) {\r\n\t\tinterval = interval || 2000;\r\n\r\n\t\tthis._user = user || (new Date()).valueOf();\r\n\t\tthis._needUpdate = false;\r\n\r\n\t\tthis._updateBusy = false;\r\n\r\n\t\tthis.attachEvent(\"onAfterUpdate\", this.afterAutoUpdate); // arguments sid, action, tid, xml_node;\r\n\r\n\t\tthis.attachEvent(\"onFullSync\", this.fullSync);\r\n\r\n\t\tsetInterval(() => {\r\n\t\t\tthis.loadUpdate();\r\n\t\t}, interval);\r\n\t}\r\n\r\n\t/* process updating request response\r\n\t\tif status == collision version is deprecated\r\n\t\tset flag for autoupdating immediately\r\n\t*/\r\n\tafterAutoUpdate(sid, action, tid, xml_node) { // tslint:disable-line\r\n\t\tif (action === \"collision\") {\r\n\t\t\tthis._needUpdate = true;\r\n\t\t\treturn false;\r\n\t\t} else {\r\n\t\t\treturn true;\r\n\t\t}\r\n\t}\r\n\r\n\t/* callback function for onFillSync event\r\n\t\tcall update function if it's need\r\n\t*/\r\n\tfullSync() {\r\n\t\tif (this._needUpdate) {\r\n\t\t\tthis._needUpdate = false;\r\n\t\t\tthis.loadUpdate();\r\n\t\t}\r\n\t\treturn true;\r\n\t}\r\n\r\n\t/* sends query to the server and call callback function\r\n\t*/\r\n\tgetUpdates(url, callback) {\r\n\t\tconst ajax = this.$gantt.ajax;\r\n\t\tif (this._updateBusy) {\r\n\t\t\treturn false;\r\n\t\t} else {\r\n\t\t\tthis._updateBusy = true;\r\n\t\t}\r\n\r\n\t\tajax.get(url, callback);\r\n\r\n\t}\r\n\r\n\t/* loads updates and processes them\r\n\t*/\r\n\tloadUpdate() {\r\n\t\tconst ajax = this.$gantt.ajax;\r\n\t\tconst version = this.$gantt.getUserData(0, \"version\", this._ganttMode);\r\n\t\tlet url = this.serverProcessor + ajax.urlSeparator(this.serverProcessor) + [\"dhx_user=\" + this._user, \"dhx_version=\" + version].join(\"&\");\r\n\t\turl = url.replace(\"editing=true&\", \"\");\r\n\t\tthis.getUpdates(url, (xml) => {\r\n\t\t\tconst vers = ajax.xpath(\"//userdata\", xml);\r\n\t\t\tthis.$gantt.setUserData(0, \"version\", this._getXmlNodeValue(vers[0]), this._ganttMode);\r\n\r\n\t\t\tconst updates = ajax.xpath(\"//update\", xml);\r\n\t\t\tif (updates.length) {\r\n\t\t\t\tthis._silent_mode = true;\r\n\r\n\t\t\t\tfor (let i = 0; i < updates.length; i++) {\r\n\t\t\t\t\tconst status = updates[i].getAttribute(\"status\");\r\n\t\t\t\t\tconst id = updates[i].getAttribute(\"id\");\r\n\t\t\t\t\tconst parent = updates[i].getAttribute(\"parent\");\r\n\t\t\t\t\tswitch (status) {\r\n\t\t\t\t\t\tcase \"inserted\":\r\n\t\t\t\t\t\t\tthis.callEvent(\"insertCallback\", [updates[i], id, parent]);\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\tcase \"updated\":\r\n\t\t\t\t\t\t\tthis.callEvent(\"updateCallback\", [updates[i], id, parent]);\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\tcase \"deleted\":\r\n\t\t\t\t\t\t\tthis.callEvent(\"deleteCallback\", [updates[i], id, parent]);\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tthis._silent_mode = false;\r\n\t\t\t}\r\n\r\n\t\t\tthis._updateBusy = false;\r\n\t\t});\r\n\t}\r\n\r\n\tdestructor() {\r\n\t\tthis.callEvent(\"onDestroy\", []);\r\n\t\tthis.detachAllEvents();\r\n\r\n\t\tthis.updatedRows = [];\r\n\t\tthis._in_progress = {}; // ?\r\n\t\tthis._invalid = {};\r\n\t\tthis._storage.clear();\r\n\t\tthis._storage = null;\r\n\t\tthis._headers = null;\r\n\t\tthis._payload = null;\r\n\t\tdelete this._initialized;\r\n\t}\r\n\r\n\tsetGanttMode(mode) {\r\n\t\tif (mode === \"tasks\") {\r\n\t\t\tmode = \"task\";\r\n\t\t} else if (mode === \"links\") {\r\n\t\t\tmode = \"link\";\r\n\t\t}\r\n\r\n\t\tconst modes = this.modes || {};\r\n\t\tconst ganttMode = this.getGanttMode();\r\n\t\tif (ganttMode) {\r\n\t\t\tmodes[ganttMode] = {\r\n\t\t\t\t_in_progress : this._in_progress,\r\n\t\t\t\t_invalid: this._invalid,\r\n\t\t\t\t_storage: this._storage,\r\n\t\t\t\tupdatedRows : this.updatedRows\r\n\t\t\t};\r\n\t\t}\r\n\r\n\t\tlet newState = modes[mode];\r\n\t\tif (!newState) {\r\n\t\t\tnewState = modes[mode] = {\r\n\t\t\t\t_in_progress : {},\r\n\t\t\t\t_invalid : {},\r\n\t\t\t\t_storage : SimpleStorage.create(),\r\n\t\t\t\tupdatedRows : []\r\n\t\t\t};\r\n\t\t}\r\n\t\tthis._in_progress = newState._in_progress;\r\n\t\tthis._invalid = newState._invalid;\r\n\t\tthis._storage = newState._storage;\r\n\t\tthis.updatedRows = newState.updatedRows;\r\n\t\tthis.modes = modes;\r\n\t\tthis._ganttMode = mode;\r\n\t}\r\n\tgetGanttMode():string {\r\n\t\treturn this._ganttMode;\r\n\t}\r\n\r\n\tstoreItem(item) {\r\n\t\tthis._storage.storeItem(item);\r\n\t}\r\n\r\n\turl(url: string) {\r\n\t\tthis.serverProcessor = this._serverProcessor = url;\r\n\t}\r\n\r\n\tprotected _beforeSendData(data: any, rowId: any) {\r\n\t\tif (!this.callEvent(\"onBeforeUpdate\", [rowId, this.getState(rowId), data])) {\r\n\t\t\treturn false;\r\n\t\t}\r\n\t\tthis._sendData(data, rowId);\r\n\t}\r\n\r\n\tprotected _serializeAsJSON(data: any) {\r\n\t\tif (typeof data === \"string\") {\r\n\t\t\treturn data;\r\n\t\t}\r\n\r\n\t\tconst copy = utils.copy(data);\r\n\t\tif (this._tMode === \"REST-JSON\") {\r\n\t\t\tdelete copy.id;\r\n\t\t\tdelete copy[this.action_param];\r\n\t\t}\r\n\r\n\t\treturn JSON.stringify(copy);\r\n\t}\r\n\r\n\tprotected _applyPayload(url: string) {\r\n\t\tconst ajax = this.$gantt.ajax;\r\n\t\tif (this._payload) {\r\n\t\t\tfor (const key in this._payload) {\r\n\t\t\t\turl = url + ajax.urlSeparator(url) + this.escape(key) + \"=\" + this.escape(this._payload[key]);\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn url;\r\n\t}\r\n\r\n\t// GET/POST/JSON modes of the dataProcessor didn't send the whole data items in 'delete' requests\r\n\t// clear extra info from the data in order not to change the request format\r\n\tprotected _cleanupArgumentsBeforeSend(dataToSend: any) {\r\n\t\tlet processedData;\r\n\t\tif(dataToSend[this.action_param] === undefined){// hash of updated items, and not an individual item\r\n\t\t\tprocessedData = {};\r\n\t\t\tfor(const i in dataToSend) {\r\n\t\t\t\tprocessedData[i] = this._cleanupArgumentsBeforeSend(dataToSend[i]);\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\tprocessedData = this._cleanupItemBeforeSend(dataToSend);\r\n\t\t}\r\n\t\treturn processedData;\r\n\t}\r\n\tprotected _cleanupItemBeforeSend(updatedItem: any) {\r\n\t\tlet output = null;\r\n\t\tif(updatedItem){\r\n\t\t\tif(updatedItem[this.action_param] === \"deleted\"){\r\n\t\t\t\toutput = {};\r\n\t\t\t\toutput.id = updatedItem.id;\r\n\t\t\t\toutput[this.action_param] = updatedItem[this.action_param];\r\n\t\t\t}else{\r\n\t\t\t\toutput = updatedItem;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn output;\r\n\t}\r\n\r\n\tprotected _sendData(dataToSend: any, rowId?: any) {\r\n\t\tif (!dataToSend) {\r\n\t\t\treturn; // nothing to send\r\n\t\t}\r\n\t\tif (!this.callEvent(\"onBeforeDataSending\", rowId ? [rowId, this.getState(rowId), dataToSend] : [null, null, dataToSend])) {\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t\tif (rowId) {\r\n\t\t\tthis._in_progress[rowId] = (new Date()).valueOf();\r\n\t\t}\r\n\r\n\t\tconst ajax = this.$gantt.ajax;\r\n\r\n\t\tif (this._tMode === \"CUSTOM\") {\r\n\t\t\tconst taskState = this.getState(rowId);\r\n\t\t\tconst taskAction = this.getActionByState(taskState);\r\n\t\t\tconst ganttMode = this.getGanttMode();\r\n\t\t\tconst _onResolvedCreateUpdate = (tag) => {\r\n\t\t\t\tlet action = taskState || \"updated\";\r\n\t\t\t\tlet sid = rowId;\r\n\t\t\t\tlet tid = rowId;\r\n\r\n\t\t\t\tif (tag) {\r\n\t\t\t\t\taction = tag.action || taskState;\r\n\t\t\t\t\tsid = tag.sid || sid;\r\n\t\t\t\t\ttid = tag.id || tag.tid || tid;\r\n\t\t\t\t}\r\n\t\t\t\tthis.afterUpdateCallback(sid, tid, action, tag, ganttMode);\r\n\t\t\t};\r\n\r\n\t\t\tlet actionPromise;\r\n\t\t\tif (this._router instanceof Function) {\r\n\t\t\t\tif(this._routerParametersFormat === \"object\"){\r\n\t\t\t\t\tconst obj = {\r\n\t\t\t\t\t\tentity: ganttMode,\r\n\t\t\t\t\t\taction: taskAction,\r\n\t\t\t\t\t\tdata: dataToSend,\r\n\t\t\t\t\t\tid: rowId\r\n\t\t\t\t\t};\r\n\t\t\t\t\tactionPromise = this._router(obj);\r\n\t\t\t\t} else {\r\n\t\t\t\t\tactionPromise = this._router(ganttMode, taskAction, dataToSend, rowId);\r\n\t\t\t\t}\r\n\t\t\t} else if (this._router[ganttMode] instanceof Function) {\r\n\t\t\t\tactionPromise = this._router[ganttMode](taskAction, dataToSend, rowId);\r\n\t\t\t} else {\r\n\r\n\t\t\t\tconst errorMsgStart = \"Incorrect configuration of gantt.createDataProcessor\";\r\n\t\t\t\tconst errorMsgEnd = `\r\nYou need to either add missing properties to the dataProcessor router object or to use a router function.\r\nSee https://docs.dhtmlx.com/gantt/desktop__server_side.html#customrouting and https://docs.dhtmlx.com/gantt/api__gantt_createdataprocessor.html for details.`;\r\n\r\n\t\t\t\tif(!this._router[ganttMode]){\r\n\t\t\t\t\tthrow new Error(`${errorMsgStart}: router for the **${ganttMode}** entity is not defined. ${errorMsgEnd}`);\r\n\t\t\t\t}\r\n\t\t\t\tswitch (taskState) {\r\n\t\t\t\t\tcase \"inserted\":\r\n\t\t\t\t\t\tif(!this._router[ganttMode].create){\r\n\t\t\t\t\t\t\tthrow new Error(`${errorMsgStart}: **create** action for the **${ganttMode}** entity is not defined. ${errorMsgEnd}`);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tactionPromise = this._router[ganttMode].create(dataToSend);\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase \"deleted\":\r\n\t\t\t\t\t\tif(!this._router[ganttMode].delete){\r\n\t\t\t\t\t\t\tthrow new Error(`${errorMsgStart}: **delete** action for the **${ganttMode}** entity is not defined. ${errorMsgEnd}`);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tactionPromise = this._router[ganttMode].delete(rowId);\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tdefault:\r\n\t\t\t\t\t\tif(!this._router[ganttMode].update){\r\n\t\t\t\t\t\t\tthrow new Error(`${errorMsgStart}: **update**\" action for the **${ganttMode}** entity is not defined. ${errorMsgEnd}`);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tactionPromise = this._router[ganttMode].update(dataToSend, rowId);\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tif(actionPromise){\r\n\t\t\t\t// neither promise nor {tid: newId} response object\r\n\t\t\t\tif(!actionPromise.then &&\r\n\t\t\t\t\t(actionPromise.id === undefined && actionPromise.tid === undefined && actionPromise.action === undefined)){\r\n\t\t\t\t\tthrow new Error(\"Incorrect router return value. A Promise or a response object is expected\");\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif(actionPromise.then){\r\n\t\t\t\t\tactionPromise.then(_onResolvedCreateUpdate).catch((error) => {\r\n\t\t\t\t\t\tif(error && error.action){\r\n\t\t\t\t\t\t\t_onResolvedCreateUpdate(error);\r\n\t\t\t\t\t\t}else{\r\n\t\t\t\t\t\t\t_onResolvedCreateUpdate({ action: \"error\", value: error});\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t});\r\n\t\t\t\t}else{\r\n\t\t\t\t\t// custom method may return a response object in case of sync action\r\n\t\t\t\t\t_onResolvedCreateUpdate(actionPromise);\r\n\t\t\t\t}\r\n\t\t\t}else{\r\n\t\t\t\t_onResolvedCreateUpdate(null);\r\n\t\t\t}\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tlet queryParams: any;\r\n\t\tqueryParams = {\r\n\t\t\tcallback: (xml) => {\r\n\t\t\t\tconst ids = [];\r\n\r\n\t\t\t\tif (rowId) {\r\n\t\t\t\t\tids.push(rowId);\r\n\t\t\t\t} else if (dataToSend) {\r\n\t\t\t\t\tfor (const key in dataToSend) {\r\n\t\t\t\t\t\tids.push(key);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\treturn this.afterUpdate(this, xml, ids);\r\n\t\t\t},\r\n\t\t\theaders: this._headers\r\n\t\t};\r\n\r\n\t\tconst dhxVersion = \"dhx_version=\" + this.$gantt.getUserData(0, \"version\", this._ganttMode);\r\n\t\tconst urlParams = this.serverProcessor + (this._user ? (ajax.urlSeparator(this.serverProcessor) + [\"dhx_user=\" + this._user, dhxVersion].join(\"&\")) : \"\");\r\n\t\tlet url: any = this._applyPayload(urlParams);\r\n\t\tlet data;\r\n\r\n\t\tswitch (this._tMode) {\r\n\t\t\tcase \"GET\":\r\n\t\t\t\tdata = this._cleanupArgumentsBeforeSend(dataToSend);\r\n\t\t\t\tqueryParams.url = url + ajax.urlSeparator(url) + this.serialize(data, rowId);\r\n\t\t\t\tqueryParams.method = \"GET\";\r\n\t\t\t\tbreak;\r\n\t\t\tcase \"POST\":\r\n\t\t\t\tdata = this._cleanupArgumentsBeforeSend(dataToSend);\r\n\t\t\t\tqueryParams.url = url;\r\n\t\t\t\tqueryParams.method = \"POST\";\r\n\t\t\t\tqueryParams.data = this.serialize(data, rowId);\r\n\t\t\t\tbreak;\r\n\t\t\tcase \"JSON\":\r\n\t\t\t\tdata = {};\r\n\t\t\t\tconst preprocessedData = this._cleanupItemBeforeSend(dataToSend);\r\n\t\t\t\tfor (const key in preprocessedData) {\r\n\t\t\t\t\tif (key === this.action_param || key === \"id\" || key === \"gr_id\") {\r\n\t\t\t\t\t\tcontinue;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tdata[key] = preprocessedData[key];\r\n\t\t\t\t}\r\n\r\n\t\t\t\tqueryParams.url = url;\r\n\t\t\t\tqueryParams.method = \"POST\";\r\n\t\t\t\tqueryParams.data = JSON.stringify({\r\n\t\t\t\t\tid: rowId,\r\n\t\t\t\t\taction: dataToSend[this.action_param],\r\n\t\t\t\t\tdata\r\n\t\t\t\t});\r\n\t\t\t\tbreak;\r\n\t\t\tcase \"REST\":\r\n\t\t\tcase \"REST-JSON\":\r\n\t\t\t\turl = urlParams.replace(/(&|\\?)editing=true/, \"\");\r\n\t\t\t\tdata = \"\";\r\n\r\n\t\t\t\tswitch (this.getState(rowId)) {\r\n\t\t\t\t\tcase \"inserted\":\r\n\t\t\t\t\t\tqueryParams.method = \"POST\";\r\n\t\t\t\t\t\tqueryParams.data = this.serialize(dataToSend, rowId);\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase \"deleted\":\r\n\t\t\t\t\t\tqueryParams.method = \"DELETE\";\r\n\t\t\t\t\t\turl = url + (url.slice(-1) === \"/\" ? \"\" : \"/\") + rowId;\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tdefault:\r\n\t\t\t\t\t\tqueryParams.method = \"PUT\";\r\n\t\t\t\t\t\tqueryParams.data = this.serialize(dataToSend, rowId);\r\n\t\t\t\t\t\turl = url + (url.slice(-1) === \"/\" ? \"\" : \"/\") + rowId;\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t\tqueryParams.url = this._applyPayload(url);\r\n\t\t\t\tbreak;\r\n\t\t}\r\n\r\n\t\tthis._waitMode++;\r\n\t\treturn ajax.query(queryParams);\r\n\t}\r\n\r\n\tprotected _forEachUpdatedRow(code: any) {\r\n\t\tconst updatedRows = this.updatedRows.slice();\r\n\t\tfor (let i = 0; i < updatedRows.length; i++) {\r\n\t\t\tconst rowId = updatedRows[i];\r\n\t\t\tif (this.$gantt.getUserData(rowId, this.action_param, this._ganttMode)) {\r\n\t\t\t\tcode.call(this, rowId);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tprotected _setDefaultTransactionMode() {\r\n\t\tif (this.serverProcessor) {\r\n\t\t\tthis.setTransactionMode(\"POST\", true);\r\n\t\t\tthis.serverProcessor += (this.serverProcessor.indexOf(\"?\") !== -1 ? \"&\" : \"?\") + \"editing=true\";\r\n\t\t\tthis._serverProcessor = this.serverProcessor;\r\n\t\t}\r\n\t}\r\n\r\n\t/* returns xml node value\r\n\t\t@param node\r\n\t\t\txml node\r\n\t*/\r\n\tprotected _getXmlNodeValue(node) {\r\n\t\tif (node.firstChild) {\r\n\t\t\treturn node.firstChild.nodeValue;\r\n\t\t}\r\n\t\treturn \"\";\r\n\t}\r\n\r\n\tprotected _getAllData() {\r\n\t\tconst out = {};\r\n\t\tlet hasOne = false;\r\n\r\n\t\tthis._forEachUpdatedRow(function(id) {\r\n\t\t\tif (this._in_progress[id] || this.is_invalid(id)){\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\tconst row = this._getRowData(id);\r\n\t\t\tif (!this.callEvent(\"onBeforeUpdate\", [id, this.getState(id), row])) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\tout[id] = row;\r\n\t\t\thasOne = true;\r\n\t\t\tthis._in_progress[id] = (new Date()).valueOf();\r\n\t\t});\r\n\r\n\t\treturn hasOne ? out : null;\r\n\t}\r\n\r\n\tprotected _prepareDate(value: Date) : string {\r\n\t\treturn this.$gantt.defined(this.$gantt.templates.xml_format) ? this.$gantt.templates.xml_format(value) : this.$gantt.templates.format_date(value);\r\n\t}\r\n\r\n\tprotected _prepareArray(value: any[], traversedObjects: object[]) : any[] {\r\n\t\ttraversedObjects.push(value);\r\n\r\n\t\treturn value.map((item) => {\r\n\t\t\tif(helpers.isDate(item)){\r\n\t\t\t\treturn this._prepareDate(item);\r\n\t\t\t} else if (Array.isArray(item) && !helpers.arrayIncludes(traversedObjects, item)){\r\n\t\t\t\treturn this._prepareArray(item, traversedObjects);\r\n\t\t\t} else if (item && typeof item === \"object\" && !helpers.arrayIncludes(traversedObjects, item)) {\r\n\t\t\t\treturn this._prepareObject(item, traversedObjects);\r\n\t\t\t} else {\r\n\t\t\t\treturn item;\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\tprotected _prepareObject(rawItem: any, traversedObjects: object[]) : any {\r\n\t\tconst processedItem = {};\r\n\t\ttraversedObjects.push(rawItem);\r\n\r\n\t\tfor (const key in rawItem) {\r\n\t\t\tif (key.substr(0, 1) === \"$\") {\r\n\t\t\t\tcontinue;\r\n\t\t\t}\r\n\r\n\t\t\tconst value = rawItem[key];\r\n\t\t\tif (helpers.isDate(value)) {\r\n\t\t\t\tprocessedItem[key] = this._prepareDate(value);\r\n\t\t\t} else if(value === null) {\r\n\t\t\t\tprocessedItem[key] = \"\";\r\n\t\t\t} else if (Array.isArray(value) && !helpers.arrayIncludes(traversedObjects, value)){\r\n\t\t\t\tprocessedItem[key] = this._prepareArray(value, traversedObjects);\r\n\t\t\t} else if (value && typeof value === \"object\" && !helpers.arrayIncludes(traversedObjects, value)) {\r\n\t\t\t\tprocessedItem[key] = this._prepareObject(value, traversedObjects);\r\n\t\t\t} else {\r\n\t\t\t\tprocessedItem[key] = value;\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn processedItem;\r\n\t}\r\n\r\n\tprotected _prepareDataItem(rawItem: any): any {\r\n\t\tconst processedItem = this._prepareObject(rawItem, []);\r\n\r\n\t\tprocessedItem[this.action_param] = this.$gantt.getUserData(rawItem.id, this.action_param, this._ganttMode);\r\n\t\treturn processedItem;\r\n\t}\r\n\r\n\tprotected getStoredItem(id){\r\n\t\treturn this._storage.getStoredItem(id);\r\n\t}\r\n\r\n\tprotected _getRowData(id) {\r\n\t\tlet dataItem;\r\n\t\tconst gantt = this.$gantt;\r\n\t\tif (this.getGanttMode() === \"task\") {\r\n\t\t\tif(gantt.isTaskExists(id)){\r\n\t\t\t\tdataItem =this.$gantt.getTask(id);\r\n\t\t\t}\r\n\t\t} else if (this.getGanttMode() === \"assignment\") {\r\n\t\t\tif(this.$gantt.$data.assignmentsStore.exists(id)){\r\n\t\t\t\tdataItem =this.$gantt.$data.assignmentsStore.getItem(id);\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\tif(gantt.isLinkExists(id)){\r\n\t\t\t\tdataItem =this.$gantt.getLink(id);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif (!dataItem) {\r\n\t\t\tdataItem = this.getStoredItem(id);\r\n\t\t}\r\n\r\n\t\tif (!dataItem) {\r\n\t\t\tdataItem = { id };\r\n\t\t}\r\n\r\n\t\treturn this._prepareDataItem(dataItem);\r\n\t}\r\n}","var DataProcessor = require(\"./data_processor\");\n\nmodule.exports = {\n  DEPRECATED_api: function DEPRECATED_api(server) {\n    return new DataProcessor.DataProcessor(server);\n  },\n  createDataProcessor: DataProcessor.createDataProcessor,\n  getDataProcessorModes: DataProcessor.getAvailableModes\n};","var isHeadless = require(\"../../utils/is_headless\");\n\nvar storeRenderCreator = function storeRenderCreator(name, gantt) {\n  var store = gantt.getDatastore(name);\n  var itemRepainter = {\n    renderItem: function renderItem(id, renderer) {\n      var renders = renderer.getLayers();\n      var item = store.getItem(id);\n\n      if (item && store.isVisible(id)) {\n        for (var i = 0; i < renders.length; i++) {\n          renders[i].render_item(item);\n        }\n      }\n    },\n    renderItems: function renderItems(renderer) {\n      var renderers = renderer.getLayers();\n\n      for (var i = 0; i < renderers.length; i++) {\n        renderers[i].clear();\n      }\n\n      var allData = null;\n      var loadedRanges = {};\n\n      for (var _i = 0; _i < renderers.length; _i++) {\n        var layer = renderers[_i];\n        var layerData = void 0;\n\n        if (layer.get_visible_range) {\n          var range = layer.get_visible_range(store);\n\n          if (range.start !== undefined && range.end !== undefined) {\n            var key = range.start + \" - \" + range.end;\n\n            if (loadedRanges[key]) {\n              layerData = loadedRanges[key];\n            } else {\n              layerData = store.getIndexRange(range.start, range.end);\n              loadedRanges[key] = layerData;\n            }\n          } else if (range.ids !== undefined) {\n            layerData = range.ids.map(function (id) {\n              return store.getItem(id);\n            });\n          } else {\n            throw new Error(\"Invalid range returned from 'getVisibleRange' of the layer\");\n          }\n        } else {\n          if (!allData) {\n            allData = store.getVisibleItems();\n          }\n\n          layerData = allData;\n        }\n\n        if (layer.prepare_data) {\n          // GS-1605. Highlight timeline cells below tasks and in an empty chart\n          layer.prepare_data(layerData);\n        }\n\n        renderers[_i].render_items(layerData);\n      }\n    },\n    updateItems: function updateItems(layer) {\n      if (layer.update_items) {\n        var data;\n\n        if (layer.get_visible_range) {\n          var range = layer.get_visible_range(store);\n\n          if (range.start !== undefined && range.end !== undefined) {\n            data = store.getIndexRange(range.start, range.end);\n          } else if (range.ids !== undefined) {\n            data = range.ids.map(function (id) {\n              return store.getItem(id);\n            });\n          } else {\n            throw new Error(\"Invalid range returned from 'getVisibleRange' of the layer\");\n          }\n        } else {\n          data = store.getVisibleItems();\n        }\n\n        if (layer.prepare_data) {\n          // GS-1605. Highlight timeline cells below tasks and in an empty chart\n          layer.prepare_data(data, layer);\n        }\n\n        layer.update_items(data);\n      }\n    }\n  };\n  store.attachEvent(\"onStoreUpdated\", function (id, item, action) {\n    if (isHeadless(gantt)) {\n      return true;\n    }\n\n    var renderer = gantt.$services.getService(\"layers\").getDataRender(name);\n\n    if (renderer) {\n      renderer.onUpdateRequest = function (layer) {\n        itemRepainter.updateItems(layer);\n      };\n    }\n  });\n\n  function skipRepaint(gantt) {\n    var state = gantt.$services.getService(\"state\");\n\n    if (state.getState(\"batchUpdate\").batch_update) {\n      return true;\n    } else {\n      return false;\n    }\n  }\n\n  store.attachEvent(\"onStoreUpdated\", function (id, item, action) {\n    if (skipRepaint(gantt)) {\n      return;\n    }\n\n    if (!id || action == \"move\" || action == \"delete\") {\n      store.callEvent(\"onBeforeRefreshAll\", []);\n      store.callEvent(\"onAfterRefreshAll\", []);\n    } else {\n      store.callEvent(\"onBeforeRefreshItem\", [item.id]);\n      store.callEvent(\"onAfterRefreshItem\", [item.id]);\n    }\n  });\n  store.attachEvent(\"onAfterRefreshAll\", function () {\n    if (isHeadless(gantt)) {\n      return true;\n    }\n\n    var renderer = gantt.$services.getService(\"layers\").getDataRender(name);\n\n    if (renderer && !skipRepaint(gantt)) {\n      itemRepainter.renderItems(renderer);\n    }\n  });\n  store.attachEvent(\"onAfterRefreshItem\", function (id) {\n    if (isHeadless(gantt)) {\n      return true;\n    }\n\n    var renderer = gantt.$services.getService(\"layers\").getDataRender(name);\n\n    if (renderer) {\n      itemRepainter.renderItem(id, renderer);\n    }\n  }); // TODO: probably can be done more in a more efficient way\n\n  store.attachEvent(\"onItemOpen\", function () {\n    if (isHeadless(gantt)) {\n      return true;\n    }\n\n    gantt.render();\n  });\n  store.attachEvent(\"onItemClose\", function () {\n    if (isHeadless(gantt)) {\n      return true;\n    }\n\n    gantt.render();\n  });\n\n  function refreshId(renders, oldId, newId, item) {\n    for (var i = 0; i < renders.length; i++) {\n      renders[i].change_id(oldId, newId);\n    }\n  }\n\n  store.attachEvent(\"onIdChange\", function (oldId, newId) {\n    if (isHeadless(gantt)) {\n      return true;\n    } // in case of linked datastores (tasks <-> links), id change should recalculate something in linked datastore before any repaint\n    // use onBeforeIdChange for this hook.\n    // TODO: use something more reasonable instead\n\n\n    store.callEvent(\"onBeforeIdChange\", [oldId, newId]);\n\n    if (skipRepaint(gantt)) {\n      return;\n    }\n\n    if (!store.isSilent()) {\n      var renderer = gantt.$services.getService(\"layers\").getDataRender(name);\n\n      if (renderer) {\n        // missing check for renderer GS-1814\n        refreshId(renderer.getLayers(), oldId, newId, store.getItem(newId));\n        itemRepainter.renderItem(newId, renderer);\n      } else {\n        // GS-1814 repaint ui to apply new id when the datastore don't have own renderer\n        gantt.render();\n      }\n    }\n  });\n};\n\nmodule.exports = {\n  bindDataStore: storeRenderCreator\n};","function createDataStoreSelectMixin(store) {\n  var selectedId = null;\n  var deleteItem = store._removeItemInner;\n\n  function _unselect(id) {\n    selectedId = null;\n    this.callEvent(\"onAfterUnselect\", [id]);\n  }\n\n  store._removeItemInner = function (id) {\n    if (selectedId == id) {\n      _unselect.call(this, id);\n    }\n\n    if (selectedId && this.eachItem) {\n      this.eachItem(function (subItem) {\n        if (subItem.id == selectedId) {\n          _unselect.call(this, subItem.id);\n        }\n      }, id);\n    }\n\n    return deleteItem.apply(this, arguments);\n  };\n\n  store.attachEvent(\"onIdChange\", function (oldId, newId) {\n    if (store.getSelectedId() == oldId) {\n      store.silent(function () {\n        store.unselect(oldId);\n        store.select(newId);\n      });\n    }\n  });\n  return {\n    select: function select(id) {\n      if (id) {\n        if (selectedId == id) return selectedId;\n\n        if (!this._skip_refresh) {\n          if (!this.callEvent(\"onBeforeSelect\", [id])) {\n            return false;\n          }\n        }\n\n        this.unselect();\n        selectedId = id;\n\n        if (!this._skip_refresh) {\n          this.refresh(id);\n          this.callEvent(\"onAfterSelect\", [id]);\n        }\n      }\n\n      return selectedId;\n    },\n    getSelectedId: function getSelectedId() {\n      return selectedId;\n    },\n    isSelected: function isSelected(id) {\n      return id == selectedId;\n    },\n    unselect: function unselect(id) {\n      var id = id || selectedId;\n      if (!id) return;\n      selectedId = null;\n\n      if (!this._skip_refresh) {\n        this.refresh(id);\n\n        _unselect.call(this, id);\n      }\n    }\n  };\n}\n\nmodule.exports = createDataStoreSelectMixin;","var utils = require(\"../../utils/utils\");\n\nvar createLinksStoreFacade = function createLinksStoreFacade() {\n  return {\n    getLinkCount: function getLinkCount() {\n      return this.$data.linksStore.count();\n    },\n    getLink: function getLink(id) {\n      return this.$data.linksStore.getItem(id);\n    },\n    getLinks: function getLinks() {\n      return this.$data.linksStore.getItems();\n    },\n    isLinkExists: function isLinkExists(id) {\n      return this.$data.linksStore.exists(id);\n    },\n    addLink: function addLink(link) {\n      var newLink = this.$data.linksStore.addItem(link); // GS-1222. Update fullOrder otherwise the link won't appear after render\n\n      if (this.$data.linksStore.isSilent()) {\n        this.$data.linksStore.fullOrder.push(newLink);\n      }\n\n      return newLink;\n    },\n    updateLink: function updateLink(id, data) {\n      if (!utils.defined(data)) data = this.getLink(id);\n      this.$data.linksStore.updateItem(id, data);\n    },\n    deleteLink: function deleteLink(id) {\n      return this.$data.linksStore.removeItem(id);\n    },\n    changeLinkId: function changeLinkId(oldid, newid) {\n      return this.$data.linksStore.changeId(oldid, newid);\n    }\n  };\n};\n\nmodule.exports = createLinksStoreFacade;","var utils = require(\"../../utils/utils\");\n\nvar _require = require(\"../../utils/helpers\"),\n    replaceValidZeroId = _require.replaceValidZeroId;\n\nvar createTasksDatastoreFacade = function createTasksDatastoreFacade() {\n  return {\n    getTask: function getTask(id) {\n      id = replaceValidZeroId(id, this.config.root_id);\n      this.assert(id, \"Invalid argument for gantt.getTask\");\n      var task = this.$data.tasksStore.getItem(id);\n      this.assert(task, \"Task not found id=\" + id);\n      return task;\n    },\n    getTaskByTime: function getTaskByTime(from, to) {\n      var p = this.$data.tasksStore.getItems();\n      var res = [];\n\n      if (!(from || to)) {\n        res = p;\n      } else {\n        from = +from || -Infinity;\n        to = +to || Infinity;\n\n        for (var t = 0; t < p.length; t++) {\n          var task = p[t];\n          if (+task.start_date < to && +task.end_date > from) res.push(task);\n        }\n      }\n\n      return res;\n    },\n    isTaskExists: function isTaskExists(id) {\n      if (!this.$data || !this.$data.tasksStore) {\n        return false;\n      }\n\n      return this.$data.tasksStore.exists(id);\n    },\n    updateTask: function updateTask(id, item) {\n      if (!utils.defined(item)) item = this.getTask(id);\n      this.$data.tasksStore.updateItem(id, item);\n      if (this.isTaskExists(id)) this.refreshTask(id);\n    },\n    addTask: function addTask(item, parent, index) {\n      if (!utils.defined(item.id)) item.id = utils.uid(); //GS-761: assert unique ID\n\n      if (this.isTaskExists(item.id)) {\n        var task = this.getTask(item.id);\n\n        if (task.$index != item.$index) {\n          // Someone may try to mistakenly add a task with the same ID, and most likely\n          // use the string format for the dates. Gantt shouldn't break in this scenario\n          if (item.start_date && typeof item.start_date === \"string\") {\n            item.start_date = this.date.parseDate(item.start_date, \"parse_date\");\n          }\n\n          if (item.end_date && typeof item.end_date === \"string\") {\n            item.end_date = this.date.parseDate(item.end_date, \"parse_date\");\n          }\n\n          return this.$data.tasksStore.updateItem(item.id, item);\n        }\n      }\n\n      if (!utils.defined(parent)) parent = this.getParent(item) || 0;\n      if (!this.isTaskExists(parent)) parent = this.config.root_id;\n      this.setParent(item, parent);\n      return this.$data.tasksStore.addItem(item, index, parent);\n    },\n    deleteTask: function deleteTask(id) {\n      id = replaceValidZeroId(id, this.config.root_id);\n      return this.$data.tasksStore.removeItem(id);\n    },\n    getTaskCount: function getTaskCount() {\n      return this.$data.tasksStore.count();\n    },\n    getVisibleTaskCount: function getVisibleTaskCount() {\n      return this.$data.tasksStore.countVisible();\n    },\n    getTaskIndex: function getTaskIndex(id) {\n      return this.$data.tasksStore.getBranchIndex(id);\n    },\n    getGlobalTaskIndex: function getGlobalTaskIndex(id) {\n      id = replaceValidZeroId(id, this.config.root_id);\n      this.assert(id, \"Invalid argument\");\n      return this.$data.tasksStore.getIndexById(id);\n    },\n    eachTask: function eachTask(code, parent, master) {\n      return this.$data.tasksStore.eachItem(utils.bind(code, master || this), parent);\n    },\n    eachParent: function eachParent(callback, startTask, master) {\n      return this.$data.tasksStore.eachParent(utils.bind(callback, master || this), startTask);\n    },\n    changeTaskId: function changeTaskId(oldid, newid) {\n      this.$data.tasksStore.changeId(oldid, newid);\n      var task = this.$data.tasksStore.getItem(newid);\n      var links = [];\n\n      if (task.$source) {\n        links = links.concat(task.$source);\n      }\n\n      if (task.$target) {\n        links = links.concat(task.$target);\n      }\n\n      for (var i = 0; i < links.length; i++) {\n        var link = this.getLink(links[i]);\n\n        if (link.source == oldid) {\n          link.source = newid;\n        }\n\n        if (link.target == oldid) {\n          link.target = newid;\n        }\n      }\n    },\n    calculateTaskLevel: function calculateTaskLevel(item) {\n      return this.$data.tasksStore.calculateItemLevel(item);\n    },\n    getNext: function getNext(id) {\n      return this.$data.tasksStore.getNext(id);\n    },\n    getPrev: function getPrev(id) {\n      return this.$data.tasksStore.getPrev(id);\n    },\n    getParent: function getParent(id) {\n      return this.$data.tasksStore.getParent(id);\n    },\n    setParent: function setParent(task, new_pid, silent) {\n      return this.$data.tasksStore.setParent(task, new_pid, silent);\n    },\n    getSiblings: function getSiblings(id) {\n      return this.$data.tasksStore.getSiblings(id).slice();\n    },\n    getNextSibling: function getNextSibling(id) {\n      return this.$data.tasksStore.getNextSibling(id);\n    },\n    getPrevSibling: function getPrevSibling(id) {\n      return this.$data.tasksStore.getPrevSibling(id);\n    },\n    getTaskByIndex: function getTaskByIndex(index) {\n      var id = this.$data.tasksStore.getIdByIndex(index);\n\n      if (this.isTaskExists(id)) {\n        return this.getTask(id);\n      } else {\n        return null;\n      }\n    },\n    getChildren: function getChildren(id) {\n      if (!this.hasChild(id)) {\n        return [];\n      } else {\n        return this.$data.tasksStore.getChildren(id).slice();\n      }\n    },\n    hasChild: function hasChild(id) {\n      return this.$data.tasksStore.hasChild(id);\n    },\n    open: function open(id) {\n      this.$data.tasksStore.open(id);\n    },\n    close: function close(id) {\n      this.$data.tasksStore.close(id);\n    },\n    moveTask: function moveTask(sid, tindex, parent) {\n      parent = replaceValidZeroId(parent, this.config.root_id);\n      return this.$data.tasksStore.move.apply(this.$data.tasksStore, arguments);\n    },\n    sort: function sort(field, desc, parent, silent) {\n      var render = !silent; //4th argument to cancel redraw after sorting\n\n      this.$data.tasksStore.sort(field, desc, parent);\n      this.callEvent(\"onAfterSort\", [field, desc, parent]);\n\n      if (render) {\n        this.render();\n      }\n    }\n  };\n};\n\nmodule.exports = createTasksDatastoreFacade;","var utils = require(\"../../utils/utils\");\n\nvar createTasksFacade = require(\"./datastore_tasks\"),\n    createLinksFacade = require(\"./datastore_links\"),\n    DataStore = require(\"../datastore/datastore\"),\n    TreeDataStore = require(\"../datastore/treedatastore\"),\n    createDatastoreSelect = require(\"../datastore/select\");\n\nvar datastoreRender = require(\"../datastore/datastore_render\");\n\nvar isHeadless = require(\"../../utils/is_headless\");\n\nvar _require = require(\"../../utils/helpers\"),\n    replaceValidZeroId = _require.replaceValidZeroId; // TODO: remove workaround for mixup with es5 and ts imports\n\n\nif (DataStore[\"default\"]) {\n  DataStore = DataStore[\"default\"];\n}\n\nfunction getDatastores() {\n  var storeNames = this.$services.getService(\"datastores\");\n  var res = [];\n\n  for (var i = 0; i < storeNames.length; i++) {\n    var store = this.getDatastore(storeNames[i]);\n\n    if (!store.$destroyed) {\n      res.push(store);\n    }\n  }\n\n  return res;\n}\n\nvar createDatastoreFacade = function createDatastoreFacade() {\n  return {\n    createDatastore: function createDatastore(config) {\n      var $StoreType = (config.type || \"\").toLowerCase() == \"treedatastore\" ? TreeDataStore : DataStore;\n\n      if (config) {\n        var self = this;\n\n        config.openInitially = function () {\n          return self.config.open_tree_initially;\n        };\n\n        config.copyOnParse = function () {\n          return self.config.deepcopy_on_parse;\n        };\n      }\n\n      var store = new $StoreType(config);\n      this.mixin(store, createDatastoreSelect(store));\n\n      if (config.name) {\n        var servicePrefix = \"datastore:\";\n        var storeAccessName = servicePrefix + config.name;\n        store.attachEvent(\"onDestroy\", function () {\n          this.$services.dropService(storeAccessName);\n          var storeList = this.$services.getService(\"datastores\");\n\n          for (var i = 0; i < storeList.length; i++) {\n            if (storeList[i] === config.name) {\n              storeList.splice(i, 1);\n              break;\n            }\n          }\n        }.bind(this));\n        this.$services.dropService(storeAccessName);\n        this.$services.setService(storeAccessName, function () {\n          return store;\n        });\n        var storeList = this.$services.getService(\"datastores\");\n\n        if (!storeList) {\n          storeList = [];\n          this.$services.setService(\"datastores\", function () {\n            return storeList;\n          });\n          storeList.push(config.name);\n        } else if (storeList.indexOf(config.name) < 0) {\n          storeList.push(config.name);\n        }\n\n        datastoreRender.bindDataStore(config.name, this);\n      }\n\n      return store;\n    },\n    getDatastore: function getDatastore(name) {\n      return this.$services.getService(\"datastore:\" + name);\n    },\n    _getDatastores: getDatastores,\n    refreshData: function refreshData() {\n      var scrollState;\n\n      if (!isHeadless(this)) {\n        scrollState = this.getScrollState();\n      }\n\n      this.callEvent(\"onBeforeDataRender\", []);\n      var stores = getDatastores.call(this);\n\n      for (var i = 0; i < stores.length; i++) {\n        stores[i].refresh();\n      }\n\n      if (this.config.preserve_scroll && !isHeadless(this) && (scrollState.x || scrollState.y)) {\n        this.scrollTo(scrollState.x, scrollState.y);\n      }\n\n      this.callEvent(\"onDataRender\", []);\n    },\n    isChildOf: function isChildOf(childId, parentId) {\n      return this.$data.tasksStore.isChildOf(childId, parentId);\n    },\n    refreshTask: function refreshTask(taskId, refresh_links) {\n      var task = this.getTask(taskId);\n      var self = this;\n\n      function refreshLinks() {\n        if (refresh_links !== undefined && !refresh_links) return;\n\n        for (var i = 0; i < task.$source.length; i++) {\n          self.refreshLink(task.$source[i]);\n        }\n\n        for (var i = 0; i < task.$target.length; i++) {\n          self.refreshLink(task.$target[i]);\n        }\n      }\n\n      if (task && this.isTaskVisible(taskId)) {\n        this.$data.tasksStore.refresh(taskId, !!this.getState(\"tasksDnd\").drag_id || refresh_links === false); // do quick refresh during drag and drop\n\n        refreshLinks();\n      } else if (this.isTaskExists(taskId) && this.isTaskExists(this.getParent(taskId)) && !this._bulk_dnd) {\n        this.refreshTask(this.getParent(taskId));\n        var hasSplitParent = false;\n        this.eachParent(function (parent) {\n          if (hasSplitParent || this.isSplitTask(parent)) {\n            hasSplitParent = true;\n          }\n        }, taskId);\n\n        if (hasSplitParent) {\n          refreshLinks();\n        }\n      }\n    },\n    refreshLink: function refreshLink(linkId) {\n      this.$data.linksStore.refresh(linkId, !!this.getState(\"tasksDnd\").drag_id); // do quick refresh during drag and drop\n    },\n    silent: function silent(code) {\n      var gantt = this;\n      gantt.$data.tasksStore.silent(function () {\n        gantt.$data.linksStore.silent(function () {\n          code();\n        });\n      });\n    },\n    clearAll: function clearAll() {\n      var stores = getDatastores.call(this); // clear all stores without invoking clearAll event\n      // in order to prevent calling handlers when only some stores are cleared\n\n      for (var i = 0; i < stores.length; i++) {\n        stores[i].silent(function () {\n          stores[i].clearAll();\n        });\n      } // run clearAll again to invoke events\n\n\n      for (var i = 0; i < stores.length; i++) {\n        stores[i].clearAll();\n      }\n\n      this._update_flags();\n\n      this.userdata = {};\n      this.callEvent(\"onClear\", []);\n      this.render();\n    },\n    _clear_data: function _clear_data() {\n      this.$data.tasksStore.clearAll();\n      this.$data.linksStore.clearAll();\n\n      this._update_flags();\n\n      this.userdata = {};\n    },\n    selectTask: function selectTask(id) {\n      var store = this.$data.tasksStore;\n      if (!this.config.select_task) return false;\n      id = replaceValidZeroId(id, this.config.root_id);\n\n      if (id) {\n        var oldSelectId = this.getSelectedId(); // Don't repaint the resource panel as the data didn't change\n\n        store._skipResourceRepaint = true;\n        store.select(id);\n        store._skipResourceRepaint = false; // GS-730. Split task is not included in the tree, \n        // so the datastore renderer will think that the task is not visible\n\n        if (oldSelectId && store.pull[oldSelectId].$split_subtask && oldSelectId != id) {\n          this.refreshTask(oldSelectId);\n        }\n\n        if (store.pull[id].$split_subtask && oldSelectId != id) {\n          // GS-1850. Do not repaint split task after double click\n          this.refreshTask(id);\n        }\n      }\n\n      return store.getSelectedId();\n    },\n    unselectTask: function unselectTask(id) {\n      var store = this.$data.tasksStore;\n      store.unselect(id); // GS-730. Split task is not included in the tree, \n      // so the datastore renderer will think that the task is not visible\n\n      if (id && store.pull[id].$split_subtask) {\n        this.refreshTask(id);\n      }\n    },\n    isSelectedTask: function isSelectedTask(id) {\n      return this.$data.tasksStore.isSelected(id);\n    },\n    getSelectedId: function getSelectedId() {\n      return this.$data.tasksStore.getSelectedId();\n    }\n  };\n};\n\nfunction createFacade() {\n  var res = utils.mixin({}, createDatastoreFacade());\n  utils.mixin(res, createTasksFacade());\n  utils.mixin(res, createLinksFacade());\n  return res;\n}\n\nmodule.exports = {\n  create: createFacade\n};","var utils = require(\"../../utils/utils\");\n\nvar facadeFactory = require(\"./../facades/datastore\");\n\nvar calculateScaleRange = require(\"../gantt_data_range\");\n\nvar isPlaceholderTask = require(\"../../utils/placeholder_task\");\n\nfunction initDataStores(gantt) {\n  var facade = facadeFactory.create();\n  utils.mixin(gantt, facade);\n  var tasksStore = gantt.createDatastore({\n    name: \"task\",\n    type: \"treeDatastore\",\n    rootId: function rootId() {\n      return gantt.config.root_id;\n    },\n    initItem: utils.bind(_init_task, gantt),\n    getConfig: function getConfig() {\n      return gantt.config;\n    }\n  });\n  var linksStore = gantt.createDatastore({\n    name: \"link\",\n    initItem: utils.bind(_init_link, gantt)\n  });\n  gantt.attachEvent(\"onDestroy\", function () {\n    tasksStore.destructor();\n    linksStore.destructor();\n  });\n  gantt.attachEvent(\"onLinkValidation\", function (link) {\n    if (gantt.isLinkExists(link.id) || link.id === \"predecessor_generated\") {\n      // link was already added into gantt\n      return true;\n    }\n\n    var source = gantt.getTask(link.source);\n    var taskLinks = source.$source;\n\n    for (var i = 0; i < taskLinks.length; i++) {\n      var existingLink = gantt.getLink(taskLinks[i]);\n      var sourceMatch = link.source == existingLink.source;\n      var targetMatch = link.target == existingLink.target;\n      var typeMatch = link.type == existingLink.type; // prevent creating duplicated links from the UI\n\n      if (sourceMatch && targetMatch && typeMatch) {\n        return false;\n      }\n    }\n\n    return true;\n  });\n  tasksStore.attachEvent(\"onBeforeRefreshAll\", function () {\n    // GS-2170 do not recalculate indexes and dates as the event will be called later in the onStoreUpdate event\n    if (tasksStore._skipTaskRecalculation) {\n      return;\n    }\n\n    var order = tasksStore.getVisibleItems();\n\n    for (var i = 0; i < order.length; i++) {\n      var item = order[i];\n      item.$index = i;\n      item.$local_index = gantt.getTaskIndex(item.id);\n      gantt.resetProjectDates(item);\n    }\n  });\n  tasksStore.attachEvent(\"onFilterItem\", function (id, task) {\n    if (gantt.config.show_tasks_outside_timescale) {\n      return true;\n    }\n\n    var min = null,\n        max = null;\n\n    if (gantt.config.start_date && gantt.config.end_date) {\n      if (gantt._isAllowedUnscheduledTask(task)) return true;\n      min = gantt.config.start_date.valueOf();\n      max = gantt.config.end_date.valueOf();\n      if (+task.start_date > max || +task.end_date < +min) return false;\n    }\n\n    return true;\n  });\n  tasksStore.attachEvent(\"onIdChange\", function (oldId, newId) {\n    gantt._update_flags(oldId, newId);\n\n    var changedTask = gantt.getTask(newId);\n\n    if (!tasksStore.isSilent()) {\n      if (changedTask.$split_subtask || changedTask.rollup) {\n        gantt.eachParent(function (parent) {\n          gantt.refreshTask(parent.id);\n        }, newId);\n      }\n    }\n  });\n  tasksStore.attachEvent(\"onAfterUpdate\", function (id) {\n    gantt._update_parents(id);\n\n    if (gantt.getState(\"batchUpdate\").batch_update) {\n      return true;\n    }\n\n    var task = tasksStore.getItem(id);\n    if (!task.$source) task.$source = [];\n\n    for (var i = 0; i < task.$source.length; i++) {\n      linksStore.refresh(task.$source[i]);\n    }\n\n    if (!task.$target) task.$target = [];\n\n    for (var i = 0; i < task.$target.length; i++) {\n      linksStore.refresh(task.$target[i]);\n    }\n  });\n  tasksStore.attachEvent(\"onBeforeItemMove\", function (sid, parent, tindex) {\n    // GS-125. Don't allow users to move the placeholder task\n    if (isPlaceholderTask(sid, gantt, tasksStore)) {\n      //eslint-disable-next-line\n      console.log(\"The placeholder task cannot be moved to another position.\");\n      return false;\n    }\n\n    return true;\n  });\n  tasksStore.attachEvent(\"onAfterItemMove\", function (sid, parent, tindex) {\n    var source = gantt.getTask(sid);\n\n    if (this.getNextSibling(sid) !== null) {\n      source.$drop_target = this.getNextSibling(sid);\n    } else if (this.getPrevSibling(sid) !== null) {\n      source.$drop_target = \"next:\" + this.getPrevSibling(sid);\n    } else {\n      source.$drop_target = \"next:null\";\n    }\n  });\n  tasksStore.attachEvent(\"onStoreUpdated\", function (id, item, action) {\n    if (action == \"delete\") {\n      gantt._update_flags(id, null);\n    }\n\n    var state = gantt.$services.getService(\"state\");\n\n    if (state.getState(\"batchUpdate\").batch_update) {\n      return;\n    }\n\n    if (gantt.config.fit_tasks && action !== \"paint\") {\n      var oldState = gantt.getState();\n      calculateScaleRange(gantt);\n      var newState = gantt.getState(); //this._init_tasks_range();\n\n      if (+oldState.min_date != +newState.min_date || +oldState.max_date != +newState.max_date) {\n        gantt.render();\n        gantt.callEvent(\"onScaleAdjusted\", []);\n        return true;\n      }\n    }\n\n    if (action == \"add\" || action == \"move\" || action == \"delete\") {\n      if (gantt.$layout) {\n        // GS-2170. Do not recalculate the indexes and dates of other tasks in the\n        // onBeforeResize layout event, but do it later. If lightbox is opened, it will\n        // trigger the refreshData, so the indexes and dates will be recalculated there\n        if (this.$config.name == \"task\" && (action == \"add\" || action == \"delete\")) {\n          if (this._skipTaskRecalculation != \"lightbox\") {\n            this._skipTaskRecalculation = true;\n          }\n        }\n\n        gantt.$layout.resize();\n      }\n    } else if (!id) {\n      linksStore.refresh();\n    }\n  });\n  linksStore.attachEvent(\"onAfterAdd\", function (id, link) {\n    sync_link(link);\n  });\n  linksStore.attachEvent(\"onAfterUpdate\", function (id, link) {\n    sync_links();\n  });\n  linksStore.attachEvent(\"onAfterDelete\", function (id, link) {\n    sync_link_delete(link);\n  });\n  linksStore.attachEvent(\"onBeforeIdChange\", function (oldId, newId) {\n    sync_link_delete(gantt.mixin({\n      id: oldId\n    }, gantt.$data.linksStore.getItem(newId)));\n    sync_link(gantt.$data.linksStore.getItem(newId));\n  });\n\n  function checkLinkedTaskVisibility(taskId) {\n    var isVisible = gantt.isTaskVisible(taskId);\n\n    if (!isVisible && gantt.isTaskExists(taskId)) {\n      var parent = gantt.getParent(taskId);\n\n      if (gantt.isTaskExists(parent) && gantt.isTaskVisible(parent)) {\n        parent = gantt.getTask(parent);\n\n        if (gantt.isSplitTask(parent)) {\n          isVisible = true;\n        }\n      }\n    }\n\n    return isVisible;\n  }\n\n  linksStore.attachEvent(\"onFilterItem\", function (id, link) {\n    if (!gantt.config.show_links) {\n      return false;\n    }\n\n    var sourceVisible = checkLinkedTaskVisibility(link.source);\n    var targetVisible = checkLinkedTaskVisibility(link.target);\n    if (!(sourceVisible && targetVisible) || gantt._isAllowedUnscheduledTask(gantt.getTask(link.source)) || gantt._isAllowedUnscheduledTask(gantt.getTask(link.target))) return false;\n    return gantt.callEvent(\"onBeforeLinkDisplay\", [id, link]);\n  });\n\n  (function () {\n    // delete all connected links after task is deleted\n    var treeHelper = require(\"../../utils/task_tree_helpers\");\n\n    var deletedLinks = {};\n    gantt.attachEvent(\"onBeforeTaskDelete\", function (id, item) {\n      deletedLinks[id] = treeHelper.getSubtreeLinks(gantt, id);\n      return true;\n    });\n    gantt.attachEvent(\"onAfterTaskDelete\", function (id, item) {\n      if (deletedLinks[id]) {\n        gantt.$data.linksStore.silent(function () {\n          for (var i in deletedLinks[id]) {\n            if (gantt.isLinkExists(i)) {\n              gantt.$data.linksStore.removeItem(i);\n            }\n\n            sync_link_delete(deletedLinks[id][i]);\n          }\n\n          deletedLinks[id] = null;\n        });\n      }\n    });\n  })();\n\n  gantt.attachEvent(\"onAfterLinkDelete\", function (id, link) {\n    gantt.refreshTask(link.source);\n    gantt.refreshTask(link.target);\n  });\n  gantt.attachEvent(\"onParse\", sync_links);\n  mapEvents({\n    source: linksStore,\n    target: gantt,\n    events: {\n      \"onItemLoading\": \"onLinkLoading\",\n      \"onBeforeAdd\": \"onBeforeLinkAdd\",\n      \"onAfterAdd\": \"onAfterLinkAdd\",\n      \"onBeforeUpdate\": \"onBeforeLinkUpdate\",\n      \"onAfterUpdate\": \"onAfterLinkUpdate\",\n      \"onBeforeDelete\": \"onBeforeLinkDelete\",\n      \"onAfterDelete\": \"onAfterLinkDelete\",\n      \"onIdChange\": \"onLinkIdChange\"\n    }\n  });\n  mapEvents({\n    source: tasksStore,\n    target: gantt,\n    events: {\n      \"onItemLoading\": \"onTaskLoading\",\n      \"onBeforeAdd\": \"onBeforeTaskAdd\",\n      \"onAfterAdd\": \"onAfterTaskAdd\",\n      \"onBeforeUpdate\": \"onBeforeTaskUpdate\",\n      \"onAfterUpdate\": \"onAfterTaskUpdate\",\n      \"onBeforeDelete\": \"onBeforeTaskDelete\",\n      \"onAfterDelete\": \"onAfterTaskDelete\",\n      \"onIdChange\": \"onTaskIdChange\",\n      \"onBeforeItemMove\": \"onBeforeTaskMove\",\n      \"onAfterItemMove\": \"onAfterTaskMove\",\n      \"onFilterItem\": \"onBeforeTaskDisplay\",\n      \"onItemOpen\": \"onTaskOpened\",\n      \"onItemClose\": \"onTaskClosed\",\n      \"onBeforeSelect\": \"onBeforeTaskSelected\",\n      \"onAfterSelect\": \"onTaskSelected\",\n      \"onAfterUnselect\": \"onTaskUnselected\"\n    }\n  });\n  gantt.$data = {\n    tasksStore: tasksStore,\n    linksStore: linksStore\n  };\n\n  function sync_link(link) {\n    if (gantt.isTaskExists(link.source)) {\n      var sourceTask = gantt.getTask(link.source);\n      sourceTask.$source = sourceTask.$source || [];\n      sourceTask.$source.push(link.id);\n    }\n\n    if (gantt.isTaskExists(link.target)) {\n      var targetTask = gantt.getTask(link.target);\n      targetTask.$target = targetTask.$target || [];\n      targetTask.$target.push(link.id);\n    }\n  }\n\n  function sync_link_delete(link) {\n    if (gantt.isTaskExists(link.source)) {\n      var sourceTask = gantt.getTask(link.source);\n\n      for (var i = 0; i < sourceTask.$source.length; i++) {\n        if (sourceTask.$source[i] == link.id) {\n          sourceTask.$source.splice(i, 1);\n          break;\n        }\n      }\n    }\n\n    if (gantt.isTaskExists(link.target)) {\n      var targetTask = gantt.getTask(link.target);\n\n      for (var i = 0; i < targetTask.$target.length; i++) {\n        if (targetTask.$target[i] == link.id) {\n          targetTask.$target.splice(i, 1);\n          break;\n        }\n      }\n    }\n  }\n\n  function sync_links() {\n    var task = null;\n    var tasks = gantt.$data.tasksStore.getItems();\n\n    for (var i = 0, len = tasks.length; i < len; i++) {\n      task = tasks[i];\n      task.$source = [];\n      task.$target = [];\n    }\n\n    var links = gantt.$data.linksStore.getItems();\n\n    for (var i = 0, len = links.length; i < len; i++) {\n      var link = links[i];\n      sync_link(link);\n    }\n  }\n\n  function mapEvents(conf) {\n    var mapFrom = conf.source;\n    var mapTo = conf.target;\n\n    for (var i in conf.events) {\n      (function (sourceEvent, targetEvent) {\n        mapFrom.attachEvent(sourceEvent, function () {\n          return mapTo.callEvent(targetEvent, Array.prototype.slice.call(arguments));\n        }, targetEvent);\n      })(i, conf.events[i]);\n    }\n  }\n\n  function _init_task(task) {\n    if (!this.defined(task.id)) task.id = this.uid();\n    if (task.start_date) task.start_date = gantt.date.parseDate(task.start_date, \"parse_date\");\n    if (task.end_date) task.end_date = gantt.date.parseDate(task.end_date, \"parse_date\");\n    var duration = null;\n\n    if (task.duration || task.duration === 0) {\n      task.duration = duration = task.duration * 1;\n    }\n\n    if (duration) {\n      if (task.start_date && !task.end_date) {\n        task.end_date = this.calculateEndDate(task);\n      } else if (!task.start_date && task.end_date) {\n        task.start_date = this.calculateEndDate({\n          start_date: task.end_date,\n          duration: -task.duration,\n          task: task\n        });\n      } //task.$calculate_duration = false;\n\n    }\n\n    task.progress = Number(task.progress) || 0;\n\n    if (this._isAllowedUnscheduledTask(task)) {\n      this._set_default_task_timing(task);\n    }\n\n    this._init_task_timing(task);\n\n    if (task.start_date && task.end_date) this.correctTaskWorkTime(task);\n    task.$source = [];\n    task.$target = [];\n    var originalTask = this.$data.tasksStore.getItem(task.id);\n\n    if (originalTask && !utils.defined(task.open)) {\n      // if a task with the same id is already in the gantt and the new object doesn't specify the `open` state -\n      // restore the `open` state we already have in the chart\n      task.$open = originalTask.$open;\n    }\n\n    if (task.parent === undefined) {\n      task.parent = this.config.root_id;\n    }\n\n    return task;\n  }\n\n  function _init_link(link) {\n    if (!this.defined(link.id)) link.id = this.uid();\n    return link;\n  }\n}\n\nmodule.exports = initDataStores;","function _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\n/* @preserve\n * The MIT License (MIT)\n * \n * Copyright (c) 2013-2018 Petka Antonov\n * \n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n * \n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n * \n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n * THE SOFTWARE.\n * \n */\n\n/**\n * bluebird build version 3.5.4\n * Features enabled: core, race, call_get, generators, map, nodeify, promisify, props, reduce, settle, some, using, timers, filter, any, each\n*/\n!function (e) {\n  if (\"object\" == (typeof exports === \"undefined\" ? \"undefined\" : _typeof(exports)) && \"undefined\" != typeof module) module.exports = e();else if (\"function\" == typeof define && define.amd) define([], e);else {\n    var f;\n    \"undefined\" != typeof window ? f = window : \"undefined\" != typeof global ? f = global : \"undefined\" != typeof self && (f = self), f.Promise = e();\n  }\n}(function () {\n  var define, module, exports;\n  return function e(t, n, r) {\n    function s(o, u) {\n      if (!n[o]) {\n        if (!t[o]) {\n          var a = typeof _dereq_ == \"function\" && _dereq_;\n          if (!u && a) return a(o, !0);\n          if (i) return i(o, !0);\n          var f = new Error(\"Cannot find module '\" + o + \"'\");\n          throw f.code = \"MODULE_NOT_FOUND\", f;\n        }\n\n        var l = n[o] = {\n          exports: {}\n        };\n        t[o][0].call(l.exports, function (e) {\n          var n = t[o][1][e];\n          return s(n ? n : e);\n        }, l, l.exports, e, t, n, r);\n      }\n\n      return n[o].exports;\n    }\n\n    var i = typeof _dereq_ == \"function\" && _dereq_;\n\n    for (var o = 0; o < r.length; o++) {\n      s(r[o]);\n    }\n\n    return s;\n  }({\n    1: [function (_dereq_, module, exports) {\n      \"use strict\";\n\n      module.exports = function (Promise) {\n        var SomePromiseArray = Promise._SomePromiseArray;\n\n        function any(promises) {\n          var ret = new SomePromiseArray(promises);\n          var promise = ret.promise();\n          ret.setHowMany(1);\n          ret.setUnwrap();\n          ret.init();\n          return promise;\n        }\n\n        Promise.any = function (promises) {\n          return any(promises);\n        };\n\n        Promise.prototype.any = function () {\n          return any(this);\n        };\n      };\n    }, {}],\n    2: [function (_dereq_, module, exports) {\n      \"use strict\";\n\n      var firstLineError;\n\n      try {\n        throw new Error();\n      } catch (e) {\n        firstLineError = e;\n      }\n\n      var schedule = _dereq_(\"./schedule\");\n\n      var Queue = _dereq_(\"./queue\");\n\n      var util = _dereq_(\"./util\");\n\n      function Async() {\n        this._customScheduler = false;\n        this._isTickUsed = false;\n        this._lateQueue = new Queue(16);\n        this._normalQueue = new Queue(16);\n        this._haveDrainedQueues = false;\n        this._trampolineEnabled = true;\n        var self = this;\n\n        this.drainQueues = function () {\n          self._drainQueues();\n        };\n\n        this._schedule = schedule;\n      }\n\n      Async.prototype.setScheduler = function (fn) {\n        var prev = this._schedule;\n        this._schedule = fn;\n        this._customScheduler = true;\n        return prev;\n      };\n\n      Async.prototype.hasCustomScheduler = function () {\n        return this._customScheduler;\n      };\n\n      Async.prototype.enableTrampoline = function () {\n        this._trampolineEnabled = true;\n      };\n\n      Async.prototype.disableTrampolineIfNecessary = function () {\n        if (util.hasDevTools) {\n          this._trampolineEnabled = false;\n        }\n      };\n\n      Async.prototype.haveItemsQueued = function () {\n        return this._isTickUsed || this._haveDrainedQueues;\n      };\n\n      Async.prototype.fatalError = function (e, isNode) {\n        if (isNode) {\n          process.stderr.write(\"Fatal \" + (e instanceof Error ? e.stack : e) + \"\\n\");\n          process.exit(2);\n        } else {\n          this.throwLater(e);\n        }\n      };\n\n      Async.prototype.throwLater = function (fn, arg) {\n        if (arguments.length === 1) {\n          arg = fn;\n\n          fn = function fn() {\n            throw arg;\n          };\n        }\n\n        if (typeof setTimeout !== \"undefined\") {\n          setTimeout(function () {\n            fn(arg);\n          }, 0);\n        } else try {\n          this._schedule(function () {\n            fn(arg);\n          });\n        } catch (e) {\n          throw new Error(\"No async scheduler available\\n\\n    See http://goo.gl/MqrFmX\\n\");\n        }\n      };\n\n      function AsyncInvokeLater(fn, receiver, arg) {\n        this._lateQueue.push(fn, receiver, arg);\n\n        this._queueTick();\n      }\n\n      function AsyncInvoke(fn, receiver, arg) {\n        this._normalQueue.push(fn, receiver, arg);\n\n        this._queueTick();\n      }\n\n      function AsyncSettlePromises(promise) {\n        this._normalQueue._pushOne(promise);\n\n        this._queueTick();\n      }\n\n      if (!util.hasDevTools) {\n        Async.prototype.invokeLater = AsyncInvokeLater;\n        Async.prototype.invoke = AsyncInvoke;\n        Async.prototype.settlePromises = AsyncSettlePromises;\n      } else {\n        Async.prototype.invokeLater = function (fn, receiver, arg) {\n          if (this._trampolineEnabled) {\n            AsyncInvokeLater.call(this, fn, receiver, arg);\n          } else {\n            this._schedule(function () {\n              setTimeout(function () {\n                fn.call(receiver, arg);\n              }, 100);\n            });\n          }\n        };\n\n        Async.prototype.invoke = function (fn, receiver, arg) {\n          if (this._trampolineEnabled) {\n            AsyncInvoke.call(this, fn, receiver, arg);\n          } else {\n            this._schedule(function () {\n              fn.call(receiver, arg);\n            });\n          }\n        };\n\n        Async.prototype.settlePromises = function (promise) {\n          if (this._trampolineEnabled) {\n            AsyncSettlePromises.call(this, promise);\n          } else {\n            this._schedule(function () {\n              promise._settlePromises();\n            });\n          }\n        };\n      }\n\n      function _drainQueue(queue) {\n        while (queue.length() > 0) {\n          _drainQueueStep(queue);\n        }\n      }\n\n      function _drainQueueStep(queue) {\n        var fn = queue.shift();\n\n        if (typeof fn !== \"function\") {\n          fn._settlePromises();\n        } else {\n          var receiver = queue.shift();\n          var arg = queue.shift();\n          fn.call(receiver, arg);\n        }\n      }\n\n      Async.prototype._drainQueues = function () {\n        _drainQueue(this._normalQueue);\n\n        this._reset();\n\n        this._haveDrainedQueues = true;\n\n        _drainQueue(this._lateQueue);\n      };\n\n      Async.prototype._queueTick = function () {\n        if (!this._isTickUsed) {\n          this._isTickUsed = true;\n\n          this._schedule(this.drainQueues);\n        }\n      };\n\n      Async.prototype._reset = function () {\n        this._isTickUsed = false;\n      };\n\n      module.exports = Async;\n      module.exports.firstLineError = firstLineError;\n    }, {\n      \"./queue\": 26,\n      \"./schedule\": 29,\n      \"./util\": 36\n    }],\n    3: [function (_dereq_, module, exports) {\n      \"use strict\";\n\n      module.exports = function (Promise, INTERNAL, tryConvertToPromise, debug) {\n        var calledBind = false;\n\n        var rejectThis = function rejectThis(_, e) {\n          this._reject(e);\n        };\n\n        var targetRejected = function targetRejected(e, context) {\n          context.promiseRejectionQueued = true;\n\n          context.bindingPromise._then(rejectThis, rejectThis, null, this, e);\n        };\n\n        var bindingResolved = function bindingResolved(thisArg, context) {\n          if ((this._bitField & 50397184) === 0) {\n            this._resolveCallback(context.target);\n          }\n        };\n\n        var bindingRejected = function bindingRejected(e, context) {\n          if (!context.promiseRejectionQueued) this._reject(e);\n        };\n\n        Promise.prototype.bind = function (thisArg) {\n          if (!calledBind) {\n            calledBind = true;\n            Promise.prototype._propagateFrom = debug.propagateFromFunction();\n            Promise.prototype._boundValue = debug.boundValueFunction();\n          }\n\n          var maybePromise = tryConvertToPromise(thisArg);\n          var ret = new Promise(INTERNAL);\n\n          ret._propagateFrom(this, 1);\n\n          var target = this._target();\n\n          ret._setBoundTo(maybePromise);\n\n          if (maybePromise instanceof Promise) {\n            var context = {\n              promiseRejectionQueued: false,\n              promise: ret,\n              target: target,\n              bindingPromise: maybePromise\n            };\n\n            target._then(INTERNAL, targetRejected, undefined, ret, context);\n\n            maybePromise._then(bindingResolved, bindingRejected, undefined, ret, context);\n\n            ret._setOnCancel(maybePromise);\n          } else {\n            ret._resolveCallback(target);\n          }\n\n          return ret;\n        };\n\n        Promise.prototype._setBoundTo = function (obj) {\n          if (obj !== undefined) {\n            this._bitField = this._bitField | 2097152;\n            this._boundTo = obj;\n          } else {\n            this._bitField = this._bitField & ~2097152;\n          }\n        };\n\n        Promise.prototype._isBound = function () {\n          return (this._bitField & 2097152) === 2097152;\n        };\n\n        Promise.bind = function (thisArg, value) {\n          return Promise.resolve(value).bind(thisArg);\n        };\n      };\n    }, {}],\n    4: [function (_dereq_, module, exports) {\n      \"use strict\";\n\n      var old;\n      if (typeof Promise !== \"undefined\") old = Promise;\n\n      function noConflict() {\n        try {\n          if (Promise === bluebird) Promise = old;\n        } catch (e) {}\n\n        return bluebird;\n      }\n\n      var bluebird = _dereq_(\"./promise\")();\n\n      bluebird.noConflict = noConflict;\n      module.exports = bluebird;\n    }, {\n      \"./promise\": 22\n    }],\n    5: [function (_dereq_, module, exports) {\n      \"use strict\";\n\n      var cr = Object.create;\n\n      if (cr) {\n        var callerCache = cr(null);\n        var getterCache = cr(null);\n        callerCache[\" size\"] = getterCache[\" size\"] = 0;\n      }\n\n      module.exports = function (Promise) {\n        var util = _dereq_(\"./util\");\n\n        var canEvaluate = util.canEvaluate;\n        var isIdentifier = util.isIdentifier;\n        var getMethodCaller;\n        var getGetter;\n\n        if (!true) {\n          var makeMethodCaller = function makeMethodCaller(methodName) {\n            return new Function(\"ensureMethod\", \"                                    \\n\\\n        return function(obj) {                                               \\n\\\n            'use strict'                                                     \\n\\\n            var len = this.length;                                           \\n\\\n            ensureMethod(obj, 'methodName');                                 \\n\\\n            switch(len) {                                                    \\n\\\n                case 1: return obj.methodName(this[0]);                      \\n\\\n                case 2: return obj.methodName(this[0], this[1]);             \\n\\\n                case 3: return obj.methodName(this[0], this[1], this[2]);    \\n\\\n                case 0: return obj.methodName();                             \\n\\\n                default:                                                     \\n\\\n                    return obj.methodName.apply(obj, this);                  \\n\\\n            }                                                                \\n\\\n        };                                                                   \\n\\\n        \".replace(/methodName/g, methodName))(ensureMethod);\n          };\n\n          var makeGetter = function makeGetter(propertyName) {\n            return new Function(\"obj\", \"                                             \\n\\\n        'use strict';                                                        \\n\\\n        return obj.propertyName;                                             \\n\\\n        \".replace(\"propertyName\", propertyName));\n          };\n\n          var getCompiled = function getCompiled(name, compiler, cache) {\n            var ret = cache[name];\n\n            if (typeof ret !== \"function\") {\n              if (!isIdentifier(name)) {\n                return null;\n              }\n\n              ret = compiler(name);\n              cache[name] = ret;\n              cache[\" size\"]++;\n\n              if (cache[\" size\"] > 512) {\n                var keys = Object.keys(cache);\n\n                for (var i = 0; i < 256; ++i) {\n                  delete cache[keys[i]];\n                }\n\n                cache[\" size\"] = keys.length - 256;\n              }\n            }\n\n            return ret;\n          };\n\n          getMethodCaller = function getMethodCaller(name) {\n            return getCompiled(name, makeMethodCaller, callerCache);\n          };\n\n          getGetter = function getGetter(name) {\n            return getCompiled(name, makeGetter, getterCache);\n          };\n        }\n\n        function ensureMethod(obj, methodName) {\n          var fn;\n          if (obj != null) fn = obj[methodName];\n\n          if (typeof fn !== \"function\") {\n            var message = \"Object \" + util.classString(obj) + \" has no method '\" + util.toString(methodName) + \"'\";\n            throw new Promise.TypeError(message);\n          }\n\n          return fn;\n        }\n\n        function caller(obj) {\n          var methodName = this.pop();\n          var fn = ensureMethod(obj, methodName);\n          return fn.apply(obj, this);\n        }\n\n        Promise.prototype.call = function (methodName) {\n          var args = [].slice.call(arguments, 1);\n          ;\n\n          if (!true) {\n            if (canEvaluate) {\n              var maybeCaller = getMethodCaller(methodName);\n\n              if (maybeCaller !== null) {\n                return this._then(maybeCaller, undefined, undefined, args, undefined);\n              }\n            }\n          }\n\n          args.push(methodName);\n          return this._then(caller, undefined, undefined, args, undefined);\n        };\n\n        function namedGetter(obj) {\n          return obj[this];\n        }\n\n        function indexedGetter(obj) {\n          var index = +this;\n          if (index < 0) index = Math.max(0, index + obj.length);\n          return obj[index];\n        }\n\n        Promise.prototype.get = function (propertyName) {\n          var isIndex = typeof propertyName === \"number\";\n          var getter;\n\n          if (!isIndex) {\n            if (canEvaluate) {\n              var maybeGetter = getGetter(propertyName);\n              getter = maybeGetter !== null ? maybeGetter : namedGetter;\n            } else {\n              getter = namedGetter;\n            }\n          } else {\n            getter = indexedGetter;\n          }\n\n          return this._then(getter, undefined, undefined, propertyName, undefined);\n        };\n      };\n    }, {\n      \"./util\": 36\n    }],\n    6: [function (_dereq_, module, exports) {\n      \"use strict\";\n\n      module.exports = function (Promise, PromiseArray, apiRejection, debug) {\n        var util = _dereq_(\"./util\");\n\n        var tryCatch = util.tryCatch;\n        var errorObj = util.errorObj;\n        var async = Promise._async;\n\n        Promise.prototype[\"break\"] = Promise.prototype.cancel = function () {\n          if (!debug.cancellation()) return this._warn(\"cancellation is disabled\");\n          var promise = this;\n          var child = promise;\n\n          while (promise._isCancellable()) {\n            if (!promise._cancelBy(child)) {\n              if (child._isFollowing()) {\n                child._followee().cancel();\n              } else {\n                child._cancelBranched();\n              }\n\n              break;\n            }\n\n            var parent = promise._cancellationParent;\n\n            if (parent == null || !parent._isCancellable()) {\n              if (promise._isFollowing()) {\n                promise._followee().cancel();\n              } else {\n                promise._cancelBranched();\n              }\n\n              break;\n            } else {\n              if (promise._isFollowing()) promise._followee().cancel();\n\n              promise._setWillBeCancelled();\n\n              child = promise;\n              promise = parent;\n            }\n          }\n        };\n\n        Promise.prototype._branchHasCancelled = function () {\n          this._branchesRemainingToCancel--;\n        };\n\n        Promise.prototype._enoughBranchesHaveCancelled = function () {\n          return this._branchesRemainingToCancel === undefined || this._branchesRemainingToCancel <= 0;\n        };\n\n        Promise.prototype._cancelBy = function (canceller) {\n          if (canceller === this) {\n            this._branchesRemainingToCancel = 0;\n\n            this._invokeOnCancel();\n\n            return true;\n          } else {\n            this._branchHasCancelled();\n\n            if (this._enoughBranchesHaveCancelled()) {\n              this._invokeOnCancel();\n\n              return true;\n            }\n          }\n\n          return false;\n        };\n\n        Promise.prototype._cancelBranched = function () {\n          if (this._enoughBranchesHaveCancelled()) {\n            this._cancel();\n          }\n        };\n\n        Promise.prototype._cancel = function () {\n          if (!this._isCancellable()) return;\n\n          this._setCancelled();\n\n          async.invoke(this._cancelPromises, this, undefined);\n        };\n\n        Promise.prototype._cancelPromises = function () {\n          if (this._length() > 0) this._settlePromises();\n        };\n\n        Promise.prototype._unsetOnCancel = function () {\n          this._onCancelField = undefined;\n        };\n\n        Promise.prototype._isCancellable = function () {\n          return this.isPending() && !this._isCancelled();\n        };\n\n        Promise.prototype.isCancellable = function () {\n          return this.isPending() && !this.isCancelled();\n        };\n\n        Promise.prototype._doInvokeOnCancel = function (onCancelCallback, internalOnly) {\n          if (util.isArray(onCancelCallback)) {\n            for (var i = 0; i < onCancelCallback.length; ++i) {\n              this._doInvokeOnCancel(onCancelCallback[i], internalOnly);\n            }\n          } else if (onCancelCallback !== undefined) {\n            if (typeof onCancelCallback === \"function\") {\n              if (!internalOnly) {\n                var e = tryCatch(onCancelCallback).call(this._boundValue());\n\n                if (e === errorObj) {\n                  this._attachExtraTrace(e.e);\n\n                  async.throwLater(e.e);\n                }\n              }\n            } else {\n              onCancelCallback._resultCancelled(this);\n            }\n          }\n        };\n\n        Promise.prototype._invokeOnCancel = function () {\n          var onCancelCallback = this._onCancel();\n\n          this._unsetOnCancel();\n\n          async.invoke(this._doInvokeOnCancel, this, onCancelCallback);\n        };\n\n        Promise.prototype._invokeInternalOnCancel = function () {\n          if (this._isCancellable()) {\n            this._doInvokeOnCancel(this._onCancel(), true);\n\n            this._unsetOnCancel();\n          }\n        };\n\n        Promise.prototype._resultCancelled = function () {\n          this.cancel();\n        };\n      };\n    }, {\n      \"./util\": 36\n    }],\n    7: [function (_dereq_, module, exports) {\n      \"use strict\";\n\n      module.exports = function (NEXT_FILTER) {\n        var util = _dereq_(\"./util\");\n\n        var getKeys = _dereq_(\"./es5\").keys;\n\n        var tryCatch = util.tryCatch;\n        var errorObj = util.errorObj;\n\n        function catchFilter(instances, cb, promise) {\n          return function (e) {\n            var boundTo = promise._boundValue();\n\n            predicateLoop: for (var i = 0; i < instances.length; ++i) {\n              var item = instances[i];\n\n              if (item === Error || item != null && item.prototype instanceof Error) {\n                if (e instanceof item) {\n                  return tryCatch(cb).call(boundTo, e);\n                }\n              } else if (typeof item === \"function\") {\n                var matchesPredicate = tryCatch(item).call(boundTo, e);\n\n                if (matchesPredicate === errorObj) {\n                  return matchesPredicate;\n                } else if (matchesPredicate) {\n                  return tryCatch(cb).call(boundTo, e);\n                }\n              } else if (util.isObject(e)) {\n                var keys = getKeys(item);\n\n                for (var j = 0; j < keys.length; ++j) {\n                  var key = keys[j];\n\n                  if (item[key] != e[key]) {\n                    continue predicateLoop;\n                  }\n                }\n\n                return tryCatch(cb).call(boundTo, e);\n              }\n            }\n\n            return NEXT_FILTER;\n          };\n        }\n\n        return catchFilter;\n      };\n    }, {\n      \"./es5\": 13,\n      \"./util\": 36\n    }],\n    8: [function (_dereq_, module, exports) {\n      \"use strict\";\n\n      module.exports = function (Promise) {\n        var longStackTraces = false;\n        var contextStack = [];\n\n        Promise.prototype._promiseCreated = function () {};\n\n        Promise.prototype._pushContext = function () {};\n\n        Promise.prototype._popContext = function () {\n          return null;\n        };\n\n        Promise._peekContext = Promise.prototype._peekContext = function () {};\n\n        function Context() {\n          this._trace = new Context.CapturedTrace(peekContext());\n        }\n\n        Context.prototype._pushContext = function () {\n          if (this._trace !== undefined) {\n            this._trace._promiseCreated = null;\n            contextStack.push(this._trace);\n          }\n        };\n\n        Context.prototype._popContext = function () {\n          if (this._trace !== undefined) {\n            var trace = contextStack.pop();\n            var ret = trace._promiseCreated;\n            trace._promiseCreated = null;\n            return ret;\n          }\n\n          return null;\n        };\n\n        function createContext() {\n          if (longStackTraces) return new Context();\n        }\n\n        function peekContext() {\n          var lastIndex = contextStack.length - 1;\n\n          if (lastIndex >= 0) {\n            return contextStack[lastIndex];\n          }\n\n          return undefined;\n        }\n\n        Context.CapturedTrace = null;\n        Context.create = createContext;\n\n        Context.deactivateLongStackTraces = function () {};\n\n        Context.activateLongStackTraces = function () {\n          var Promise_pushContext = Promise.prototype._pushContext;\n          var Promise_popContext = Promise.prototype._popContext;\n          var Promise_PeekContext = Promise._peekContext;\n          var Promise_peekContext = Promise.prototype._peekContext;\n          var Promise_promiseCreated = Promise.prototype._promiseCreated;\n\n          Context.deactivateLongStackTraces = function () {\n            Promise.prototype._pushContext = Promise_pushContext;\n            Promise.prototype._popContext = Promise_popContext;\n            Promise._peekContext = Promise_PeekContext;\n            Promise.prototype._peekContext = Promise_peekContext;\n            Promise.prototype._promiseCreated = Promise_promiseCreated;\n            longStackTraces = false;\n          };\n\n          longStackTraces = true;\n          Promise.prototype._pushContext = Context.prototype._pushContext;\n          Promise.prototype._popContext = Context.prototype._popContext;\n          Promise._peekContext = Promise.prototype._peekContext = peekContext;\n\n          Promise.prototype._promiseCreated = function () {\n            var ctx = this._peekContext();\n\n            if (ctx && ctx._promiseCreated == null) ctx._promiseCreated = this;\n          };\n        };\n\n        return Context;\n      };\n    }, {}],\n    9: [function (_dereq_, module, exports) {\n      \"use strict\";\n\n      module.exports = function (Promise, Context) {\n        var getDomain = Promise._getDomain;\n        var async = Promise._async;\n\n        var Warning = _dereq_(\"./errors\").Warning;\n\n        var util = _dereq_(\"./util\");\n\n        var es5 = _dereq_(\"./es5\");\n\n        var canAttachTrace = util.canAttachTrace;\n        var unhandledRejectionHandled;\n        var possiblyUnhandledRejection;\n        var bluebirdFramePattern = /[\\\\\\/]bluebird[\\\\\\/]js[\\\\\\/](release|debug|instrumented)/;\n        var nodeFramePattern = /\\((?:timers\\.js):\\d+:\\d+\\)/;\n        var parseLinePattern = /[\\/<\\(](.+?):(\\d+):(\\d+)\\)?\\s*$/;\n        var stackFramePattern = null;\n        var formatStack = null;\n        var indentStackFrames = false;\n        var printWarning;\n        var debugging = !!(util.env(\"BLUEBIRD_DEBUG\") != 0 && (true || util.env(\"BLUEBIRD_DEBUG\") || util.env(\"NODE_ENV\") === \"development\"));\n        var warnings = !!(util.env(\"BLUEBIRD_WARNINGS\") != 0 && (debugging || util.env(\"BLUEBIRD_WARNINGS\")));\n        var longStackTraces = !!(util.env(\"BLUEBIRD_LONG_STACK_TRACES\") != 0 && (debugging || util.env(\"BLUEBIRD_LONG_STACK_TRACES\")));\n        var wForgottenReturn = util.env(\"BLUEBIRD_W_FORGOTTEN_RETURN\") != 0 && (warnings || !!util.env(\"BLUEBIRD_W_FORGOTTEN_RETURN\"));\n\n        Promise.prototype.suppressUnhandledRejections = function () {\n          var target = this._target();\n\n          target._bitField = target._bitField & ~1048576 | 524288;\n        };\n\n        Promise.prototype._ensurePossibleRejectionHandled = function () {\n          if ((this._bitField & 524288) !== 0) return;\n\n          this._setRejectionIsUnhandled();\n\n          var self = this;\n          setTimeout(function () {\n            self._notifyUnhandledRejection();\n          }, 1);\n        };\n\n        Promise.prototype._notifyUnhandledRejectionIsHandled = function () {\n          fireRejectionEvent(\"rejectionHandled\", unhandledRejectionHandled, undefined, this);\n        };\n\n        Promise.prototype._setReturnedNonUndefined = function () {\n          this._bitField = this._bitField | 268435456;\n        };\n\n        Promise.prototype._returnedNonUndefined = function () {\n          return (this._bitField & 268435456) !== 0;\n        };\n\n        Promise.prototype._notifyUnhandledRejection = function () {\n          if (this._isRejectionUnhandled()) {\n            var reason = this._settledValue();\n\n            this._setUnhandledRejectionIsNotified();\n\n            fireRejectionEvent(\"unhandledRejection\", possiblyUnhandledRejection, reason, this);\n          }\n        };\n\n        Promise.prototype._setUnhandledRejectionIsNotified = function () {\n          this._bitField = this._bitField | 262144;\n        };\n\n        Promise.prototype._unsetUnhandledRejectionIsNotified = function () {\n          this._bitField = this._bitField & ~262144;\n        };\n\n        Promise.prototype._isUnhandledRejectionNotified = function () {\n          return (this._bitField & 262144) > 0;\n        };\n\n        Promise.prototype._setRejectionIsUnhandled = function () {\n          this._bitField = this._bitField | 1048576;\n        };\n\n        Promise.prototype._unsetRejectionIsUnhandled = function () {\n          this._bitField = this._bitField & ~1048576;\n\n          if (this._isUnhandledRejectionNotified()) {\n            this._unsetUnhandledRejectionIsNotified();\n\n            this._notifyUnhandledRejectionIsHandled();\n          }\n        };\n\n        Promise.prototype._isRejectionUnhandled = function () {\n          return (this._bitField & 1048576) > 0;\n        };\n\n        Promise.prototype._warn = function (message, shouldUseOwnTrace, promise) {\n          return warn(message, shouldUseOwnTrace, promise || this);\n        };\n\n        Promise.onPossiblyUnhandledRejection = function (fn) {\n          var domain = getDomain();\n          possiblyUnhandledRejection = typeof fn === \"function\" ? domain === null ? fn : util.domainBind(domain, fn) : undefined;\n        };\n\n        Promise.onUnhandledRejectionHandled = function (fn) {\n          var domain = getDomain();\n          unhandledRejectionHandled = typeof fn === \"function\" ? domain === null ? fn : util.domainBind(domain, fn) : undefined;\n        };\n\n        var disableLongStackTraces = function disableLongStackTraces() {};\n\n        Promise.longStackTraces = function () {\n          if (async.haveItemsQueued() && !config.longStackTraces) {\n            throw new Error(\"cannot enable long stack traces after promises have been created\\n\\n    See http://goo.gl/MqrFmX\\n\");\n          }\n\n          if (!config.longStackTraces && longStackTracesIsSupported()) {\n            var Promise_captureStackTrace = Promise.prototype._captureStackTrace;\n            var Promise_attachExtraTrace = Promise.prototype._attachExtraTrace;\n            var Promise_dereferenceTrace = Promise.prototype._dereferenceTrace;\n            config.longStackTraces = true;\n\n            disableLongStackTraces = function disableLongStackTraces() {\n              if (async.haveItemsQueued() && !config.longStackTraces) {\n                throw new Error(\"cannot enable long stack traces after promises have been created\\n\\n    See http://goo.gl/MqrFmX\\n\");\n              }\n\n              Promise.prototype._captureStackTrace = Promise_captureStackTrace;\n              Promise.prototype._attachExtraTrace = Promise_attachExtraTrace;\n              Promise.prototype._dereferenceTrace = Promise_dereferenceTrace;\n              Context.deactivateLongStackTraces();\n              async.enableTrampoline();\n              config.longStackTraces = false;\n            };\n\n            Promise.prototype._captureStackTrace = longStackTracesCaptureStackTrace;\n            Promise.prototype._attachExtraTrace = longStackTracesAttachExtraTrace;\n            Promise.prototype._dereferenceTrace = longStackTracesDereferenceTrace;\n            Context.activateLongStackTraces();\n            async.disableTrampolineIfNecessary();\n          }\n        };\n\n        Promise.hasLongStackTraces = function () {\n          return config.longStackTraces && longStackTracesIsSupported();\n        };\n\n        var fireDomEvent = function () {\n          try {\n            if (typeof CustomEvent === \"function\") {\n              var event = new CustomEvent(\"CustomEvent\");\n              util.global.dispatchEvent(event);\n              return function (name, event) {\n                var eventData = {\n                  detail: event,\n                  cancelable: true\n                };\n                es5.defineProperty(eventData, \"promise\", {\n                  value: event.promise\n                });\n                es5.defineProperty(eventData, \"reason\", {\n                  value: event.reason\n                });\n                var domEvent = new CustomEvent(name.toLowerCase(), eventData);\n                return !util.global.dispatchEvent(domEvent);\n              };\n            } else if (typeof Event === \"function\") {\n              var event = new Event(\"CustomEvent\");\n              util.global.dispatchEvent(event);\n              return function (name, event) {\n                var domEvent = new Event(name.toLowerCase(), {\n                  cancelable: true\n                });\n                domEvent.detail = event;\n                es5.defineProperty(domEvent, \"promise\", {\n                  value: event.promise\n                });\n                es5.defineProperty(domEvent, \"reason\", {\n                  value: event.reason\n                });\n                return !util.global.dispatchEvent(domEvent);\n              };\n            } else {\n              var event = document.createEvent(\"CustomEvent\");\n              event.initCustomEvent(\"testingtheevent\", false, true, {});\n              util.global.dispatchEvent(event);\n              return function (name, event) {\n                var domEvent = document.createEvent(\"CustomEvent\");\n                domEvent.initCustomEvent(name.toLowerCase(), false, true, event);\n                return !util.global.dispatchEvent(domEvent);\n              };\n            }\n          } catch (e) {}\n\n          return function () {\n            return false;\n          };\n        }();\n\n        var fireGlobalEvent = function () {\n          if (util.isNode) {\n            return function () {\n              return process.emit.apply(process, arguments);\n            };\n          } else {\n            if (!util.global) {\n              return function () {\n                return false;\n              };\n            }\n\n            return function (name) {\n              var methodName = \"on\" + name.toLowerCase();\n              var method = util.global[methodName];\n              if (!method) return false;\n              method.apply(util.global, [].slice.call(arguments, 1));\n              return true;\n            };\n          }\n        }();\n\n        function generatePromiseLifecycleEventObject(name, promise) {\n          return {\n            promise: promise\n          };\n        }\n\n        var eventToObjectGenerator = {\n          promiseCreated: generatePromiseLifecycleEventObject,\n          promiseFulfilled: generatePromiseLifecycleEventObject,\n          promiseRejected: generatePromiseLifecycleEventObject,\n          promiseResolved: generatePromiseLifecycleEventObject,\n          promiseCancelled: generatePromiseLifecycleEventObject,\n          promiseChained: function promiseChained(name, promise, child) {\n            return {\n              promise: promise,\n              child: child\n            };\n          },\n          warning: function warning(name, _warning) {\n            return {\n              warning: _warning\n            };\n          },\n          unhandledRejection: function unhandledRejection(name, reason, promise) {\n            return {\n              reason: reason,\n              promise: promise\n            };\n          },\n          rejectionHandled: generatePromiseLifecycleEventObject\n        };\n\n        var activeFireEvent = function activeFireEvent(name) {\n          var globalEventFired = false;\n\n          try {\n            globalEventFired = fireGlobalEvent.apply(null, arguments);\n          } catch (e) {\n            async.throwLater(e);\n            globalEventFired = true;\n          }\n\n          var domEventFired = false;\n\n          try {\n            domEventFired = fireDomEvent(name, eventToObjectGenerator[name].apply(null, arguments));\n          } catch (e) {\n            async.throwLater(e);\n            domEventFired = true;\n          }\n\n          return domEventFired || globalEventFired;\n        };\n\n        Promise.config = function (opts) {\n          opts = Object(opts);\n\n          if (\"longStackTraces\" in opts) {\n            if (opts.longStackTraces) {\n              Promise.longStackTraces();\n            } else if (!opts.longStackTraces && Promise.hasLongStackTraces()) {\n              disableLongStackTraces();\n            }\n          }\n\n          if (\"warnings\" in opts) {\n            var warningsOption = opts.warnings;\n            config.warnings = !!warningsOption;\n            wForgottenReturn = config.warnings;\n\n            if (util.isObject(warningsOption)) {\n              if (\"wForgottenReturn\" in warningsOption) {\n                wForgottenReturn = !!warningsOption.wForgottenReturn;\n              }\n            }\n          }\n\n          if (\"cancellation\" in opts && opts.cancellation && !config.cancellation) {\n            if (async.haveItemsQueued()) {\n              throw new Error(\"cannot enable cancellation after promises are in use\");\n            }\n\n            Promise.prototype._clearCancellationData = cancellationClearCancellationData;\n            Promise.prototype._propagateFrom = cancellationPropagateFrom;\n            Promise.prototype._onCancel = cancellationOnCancel;\n            Promise.prototype._setOnCancel = cancellationSetOnCancel;\n            Promise.prototype._attachCancellationCallback = cancellationAttachCancellationCallback;\n            Promise.prototype._execute = cancellationExecute;\n            _propagateFromFunction = cancellationPropagateFrom;\n            config.cancellation = true;\n          }\n\n          if (\"monitoring\" in opts) {\n            if (opts.monitoring && !config.monitoring) {\n              config.monitoring = true;\n              Promise.prototype._fireEvent = activeFireEvent;\n            } else if (!opts.monitoring && config.monitoring) {\n              config.monitoring = false;\n              Promise.prototype._fireEvent = defaultFireEvent;\n            }\n          }\n\n          return Promise;\n        };\n\n        function defaultFireEvent() {\n          return false;\n        }\n\n        Promise.prototype._fireEvent = defaultFireEvent;\n\n        Promise.prototype._execute = function (executor, resolve, reject) {\n          try {\n            executor(resolve, reject);\n          } catch (e) {\n            return e;\n          }\n        };\n\n        Promise.prototype._onCancel = function () {};\n\n        Promise.prototype._setOnCancel = function (handler) {\n          ;\n        };\n\n        Promise.prototype._attachCancellationCallback = function (onCancel) {\n          ;\n        };\n\n        Promise.prototype._captureStackTrace = function () {};\n\n        Promise.prototype._attachExtraTrace = function () {};\n\n        Promise.prototype._dereferenceTrace = function () {};\n\n        Promise.prototype._clearCancellationData = function () {};\n\n        Promise.prototype._propagateFrom = function (parent, flags) {\n          ;\n          ;\n        };\n\n        function cancellationExecute(executor, resolve, reject) {\n          var promise = this;\n\n          try {\n            executor(resolve, reject, function (onCancel) {\n              if (typeof onCancel !== \"function\") {\n                throw new TypeError(\"onCancel must be a function, got: \" + util.toString(onCancel));\n              }\n\n              promise._attachCancellationCallback(onCancel);\n            });\n          } catch (e) {\n            return e;\n          }\n        }\n\n        function cancellationAttachCancellationCallback(onCancel) {\n          if (!this._isCancellable()) return this;\n\n          var previousOnCancel = this._onCancel();\n\n          if (previousOnCancel !== undefined) {\n            if (util.isArray(previousOnCancel)) {\n              previousOnCancel.push(onCancel);\n            } else {\n              this._setOnCancel([previousOnCancel, onCancel]);\n            }\n          } else {\n            this._setOnCancel(onCancel);\n          }\n        }\n\n        function cancellationOnCancel() {\n          return this._onCancelField;\n        }\n\n        function cancellationSetOnCancel(onCancel) {\n          this._onCancelField = onCancel;\n        }\n\n        function cancellationClearCancellationData() {\n          this._cancellationParent = undefined;\n          this._onCancelField = undefined;\n        }\n\n        function cancellationPropagateFrom(parent, flags) {\n          if ((flags & 1) !== 0) {\n            this._cancellationParent = parent;\n            var branchesRemainingToCancel = parent._branchesRemainingToCancel;\n\n            if (branchesRemainingToCancel === undefined) {\n              branchesRemainingToCancel = 0;\n            }\n\n            parent._branchesRemainingToCancel = branchesRemainingToCancel + 1;\n          }\n\n          if ((flags & 2) !== 0 && parent._isBound()) {\n            this._setBoundTo(parent._boundTo);\n          }\n        }\n\n        function bindingPropagateFrom(parent, flags) {\n          if ((flags & 2) !== 0 && parent._isBound()) {\n            this._setBoundTo(parent._boundTo);\n          }\n        }\n\n        var _propagateFromFunction = bindingPropagateFrom;\n\n        function _boundValueFunction() {\n          var ret = this._boundTo;\n\n          if (ret !== undefined) {\n            if (ret instanceof Promise) {\n              if (ret.isFulfilled()) {\n                return ret.value();\n              } else {\n                return undefined;\n              }\n            }\n          }\n\n          return ret;\n        }\n\n        function longStackTracesCaptureStackTrace() {\n          this._trace = new CapturedTrace(this._peekContext());\n        }\n\n        function longStackTracesAttachExtraTrace(error, ignoreSelf) {\n          if (canAttachTrace(error)) {\n            var trace = this._trace;\n\n            if (trace !== undefined) {\n              if (ignoreSelf) trace = trace._parent;\n            }\n\n            if (trace !== undefined) {\n              trace.attachExtraTrace(error);\n            } else if (!error.__stackCleaned__) {\n              var parsed = parseStackAndMessage(error);\n              util.notEnumerableProp(error, \"stack\", parsed.message + \"\\n\" + parsed.stack.join(\"\\n\"));\n              util.notEnumerableProp(error, \"__stackCleaned__\", true);\n            }\n          }\n        }\n\n        function longStackTracesDereferenceTrace() {\n          this._trace = undefined;\n        }\n\n        function checkForgottenReturns(returnValue, promiseCreated, name, promise, parent) {\n          if (returnValue === undefined && promiseCreated !== null && wForgottenReturn) {\n            if (parent !== undefined && parent._returnedNonUndefined()) return;\n            if ((promise._bitField & 65535) === 0) return;\n            if (name) name = name + \" \";\n            var handlerLine = \"\";\n            var creatorLine = \"\";\n\n            if (promiseCreated._trace) {\n              var traceLines = promiseCreated._trace.stack.split(\"\\n\");\n\n              var stack = cleanStack(traceLines);\n\n              for (var i = stack.length - 1; i >= 0; --i) {\n                var line = stack[i];\n\n                if (!nodeFramePattern.test(line)) {\n                  var lineMatches = line.match(parseLinePattern);\n\n                  if (lineMatches) {\n                    handlerLine = \"at \" + lineMatches[1] + \":\" + lineMatches[2] + \":\" + lineMatches[3] + \" \";\n                  }\n\n                  break;\n                }\n              }\n\n              if (stack.length > 0) {\n                var firstUserLine = stack[0];\n\n                for (var i = 0; i < traceLines.length; ++i) {\n                  if (traceLines[i] === firstUserLine) {\n                    if (i > 0) {\n                      creatorLine = \"\\n\" + traceLines[i - 1];\n                    }\n\n                    break;\n                  }\n                }\n              }\n            }\n\n            var msg = \"a promise was created in a \" + name + \"handler \" + handlerLine + \"but was not returned from it, \" + \"see http://goo.gl/rRqMUw\" + creatorLine;\n\n            promise._warn(msg, true, promiseCreated);\n          }\n        }\n\n        function deprecated(name, replacement) {\n          var message = name + \" is deprecated and will be removed in a future version.\";\n          if (replacement) message += \" Use \" + replacement + \" instead.\";\n          return warn(message);\n        }\n\n        function warn(message, shouldUseOwnTrace, promise) {\n          if (!config.warnings) return;\n          var warning = new Warning(message);\n          var ctx;\n\n          if (shouldUseOwnTrace) {\n            promise._attachExtraTrace(warning);\n          } else if (config.longStackTraces && (ctx = Promise._peekContext())) {\n            ctx.attachExtraTrace(warning);\n          } else {\n            var parsed = parseStackAndMessage(warning);\n            warning.stack = parsed.message + \"\\n\" + parsed.stack.join(\"\\n\");\n          }\n\n          if (!activeFireEvent(\"warning\", warning)) {\n            formatAndLogError(warning, \"\", true);\n          }\n        }\n\n        function reconstructStack(message, stacks) {\n          for (var i = 0; i < stacks.length - 1; ++i) {\n            stacks[i].push(\"From previous event:\");\n            stacks[i] = stacks[i].join(\"\\n\");\n          }\n\n          if (i < stacks.length) {\n            stacks[i] = stacks[i].join(\"\\n\");\n          }\n\n          return message + \"\\n\" + stacks.join(\"\\n\");\n        }\n\n        function removeDuplicateOrEmptyJumps(stacks) {\n          for (var i = 0; i < stacks.length; ++i) {\n            if (stacks[i].length === 0 || i + 1 < stacks.length && stacks[i][0] === stacks[i + 1][0]) {\n              stacks.splice(i, 1);\n              i--;\n            }\n          }\n        }\n\n        function removeCommonRoots(stacks) {\n          var current = stacks[0];\n\n          for (var i = 1; i < stacks.length; ++i) {\n            var prev = stacks[i];\n            var currentLastIndex = current.length - 1;\n            var currentLastLine = current[currentLastIndex];\n            var commonRootMeetPoint = -1;\n\n            for (var j = prev.length - 1; j >= 0; --j) {\n              if (prev[j] === currentLastLine) {\n                commonRootMeetPoint = j;\n                break;\n              }\n            }\n\n            for (var j = commonRootMeetPoint; j >= 0; --j) {\n              var line = prev[j];\n\n              if (current[currentLastIndex] === line) {\n                current.pop();\n                currentLastIndex--;\n              } else {\n                break;\n              }\n            }\n\n            current = prev;\n          }\n        }\n\n        function cleanStack(stack) {\n          var ret = [];\n\n          for (var i = 0; i < stack.length; ++i) {\n            var line = stack[i];\n            var isTraceLine = \"    (No stack trace)\" === line || stackFramePattern.test(line);\n            var isInternalFrame = isTraceLine && shouldIgnore(line);\n\n            if (isTraceLine && !isInternalFrame) {\n              if (indentStackFrames && line.charAt(0) !== \" \") {\n                line = \"    \" + line;\n              }\n\n              ret.push(line);\n            }\n          }\n\n          return ret;\n        }\n\n        function stackFramesAsArray(error) {\n          var stack = error.stack.replace(/\\s+$/g, \"\").split(\"\\n\");\n\n          for (var i = 0; i < stack.length; ++i) {\n            var line = stack[i];\n\n            if (\"    (No stack trace)\" === line || stackFramePattern.test(line)) {\n              break;\n            }\n          }\n\n          if (i > 0 && error.name != \"SyntaxError\") {\n            stack = stack.slice(i);\n          }\n\n          return stack;\n        }\n\n        function parseStackAndMessage(error) {\n          var stack = error.stack;\n          var message = error.toString();\n          stack = typeof stack === \"string\" && stack.length > 0 ? stackFramesAsArray(error) : [\"    (No stack trace)\"];\n          return {\n            message: message,\n            stack: error.name == \"SyntaxError\" ? stack : cleanStack(stack)\n          };\n        }\n\n        function formatAndLogError(error, title, isSoft) {\n          if (typeof console !== \"undefined\") {\n            var message;\n\n            if (util.isObject(error)) {\n              var stack = error.stack;\n              message = title + formatStack(stack, error);\n            } else {\n              message = title + String(error);\n            }\n\n            if (typeof printWarning === \"function\") {\n              printWarning(message, isSoft);\n            } else if (typeof console.log === \"function\" || _typeof(console.log) === \"object\") {\n              console.log(message);\n            }\n          }\n        }\n\n        function fireRejectionEvent(name, localHandler, reason, promise) {\n          var localEventFired = false;\n\n          try {\n            if (typeof localHandler === \"function\") {\n              localEventFired = true;\n\n              if (name === \"rejectionHandled\") {\n                localHandler(promise);\n              } else {\n                localHandler(reason, promise);\n              }\n            }\n          } catch (e) {\n            async.throwLater(e);\n          }\n\n          if (name === \"unhandledRejection\") {\n            if (!activeFireEvent(name, reason, promise) && !localEventFired) {\n              formatAndLogError(reason, \"Unhandled rejection \");\n            }\n          } else {\n            activeFireEvent(name, promise);\n          }\n        }\n\n        function formatNonError(obj) {\n          var str;\n\n          if (typeof obj === \"function\") {\n            str = \"[function \" + (obj.name || \"anonymous\") + \"]\";\n          } else {\n            str = obj && typeof obj.toString === \"function\" ? obj.toString() : util.toString(obj);\n            var ruselessToString = /\\[object [a-zA-Z0-9$_]+\\]/;\n\n            if (ruselessToString.test(str)) {\n              try {\n                var newStr = JSON.stringify(obj);\n                str = newStr;\n              } catch (e) {}\n            }\n\n            if (str.length === 0) {\n              str = \"(empty array)\";\n            }\n          }\n\n          return \"(<\" + snip(str) + \">, no stack trace)\";\n        }\n\n        function snip(str) {\n          var maxChars = 41;\n\n          if (str.length < maxChars) {\n            return str;\n          }\n\n          return str.substr(0, maxChars - 3) + \"...\";\n        }\n\n        function longStackTracesIsSupported() {\n          return typeof captureStackTrace === \"function\";\n        }\n\n        var shouldIgnore = function shouldIgnore() {\n          return false;\n        };\n\n        var parseLineInfoRegex = /[\\/<\\(]([^:\\/]+):(\\d+):(?:\\d+)\\)?\\s*$/;\n\n        function parseLineInfo(line) {\n          var matches = line.match(parseLineInfoRegex);\n\n          if (matches) {\n            return {\n              fileName: matches[1],\n              line: parseInt(matches[2], 10)\n            };\n          }\n        }\n\n        function setBounds(firstLineError, lastLineError) {\n          if (!longStackTracesIsSupported()) return;\n          var firstStackLines = firstLineError.stack.split(\"\\n\");\n          var lastStackLines = lastLineError.stack.split(\"\\n\");\n          var firstIndex = -1;\n          var lastIndex = -1;\n          var firstFileName;\n          var lastFileName;\n\n          for (var i = 0; i < firstStackLines.length; ++i) {\n            var result = parseLineInfo(firstStackLines[i]);\n\n            if (result) {\n              firstFileName = result.fileName;\n              firstIndex = result.line;\n              break;\n            }\n          }\n\n          for (var i = 0; i < lastStackLines.length; ++i) {\n            var result = parseLineInfo(lastStackLines[i]);\n\n            if (result) {\n              lastFileName = result.fileName;\n              lastIndex = result.line;\n              break;\n            }\n          }\n\n          if (firstIndex < 0 || lastIndex < 0 || !firstFileName || !lastFileName || firstFileName !== lastFileName || firstIndex >= lastIndex) {\n            return;\n          }\n\n          shouldIgnore = function shouldIgnore(line) {\n            if (bluebirdFramePattern.test(line)) return true;\n            var info = parseLineInfo(line);\n\n            if (info) {\n              if (info.fileName === firstFileName && firstIndex <= info.line && info.line <= lastIndex) {\n                return true;\n              }\n            }\n\n            return false;\n          };\n        }\n\n        function CapturedTrace(parent) {\n          this._parent = parent;\n          this._promisesCreated = 0;\n          var length = this._length = 1 + (parent === undefined ? 0 : parent._length);\n          captureStackTrace(this, CapturedTrace);\n          if (length > 32) this.uncycle();\n        }\n\n        util.inherits(CapturedTrace, Error);\n        Context.CapturedTrace = CapturedTrace;\n\n        CapturedTrace.prototype.uncycle = function () {\n          var length = this._length;\n          if (length < 2) return;\n          var nodes = [];\n          var stackToIndex = {};\n\n          for (var i = 0, node = this; node !== undefined; ++i) {\n            nodes.push(node);\n            node = node._parent;\n          }\n\n          length = this._length = i;\n\n          for (var i = length - 1; i >= 0; --i) {\n            var stack = nodes[i].stack;\n\n            if (stackToIndex[stack] === undefined) {\n              stackToIndex[stack] = i;\n            }\n          }\n\n          for (var i = 0; i < length; ++i) {\n            var currentStack = nodes[i].stack;\n            var index = stackToIndex[currentStack];\n\n            if (index !== undefined && index !== i) {\n              if (index > 0) {\n                nodes[index - 1]._parent = undefined;\n                nodes[index - 1]._length = 1;\n              }\n\n              nodes[i]._parent = undefined;\n              nodes[i]._length = 1;\n              var cycleEdgeNode = i > 0 ? nodes[i - 1] : this;\n\n              if (index < length - 1) {\n                cycleEdgeNode._parent = nodes[index + 1];\n\n                cycleEdgeNode._parent.uncycle();\n\n                cycleEdgeNode._length = cycleEdgeNode._parent._length + 1;\n              } else {\n                cycleEdgeNode._parent = undefined;\n                cycleEdgeNode._length = 1;\n              }\n\n              var currentChildLength = cycleEdgeNode._length + 1;\n\n              for (var j = i - 2; j >= 0; --j) {\n                nodes[j]._length = currentChildLength;\n                currentChildLength++;\n              }\n\n              return;\n            }\n          }\n        };\n\n        CapturedTrace.prototype.attachExtraTrace = function (error) {\n          if (error.__stackCleaned__) return;\n          this.uncycle();\n          var parsed = parseStackAndMessage(error);\n          var message = parsed.message;\n          var stacks = [parsed.stack];\n          var trace = this;\n\n          while (trace !== undefined) {\n            stacks.push(cleanStack(trace.stack.split(\"\\n\")));\n            trace = trace._parent;\n          }\n\n          removeCommonRoots(stacks);\n          removeDuplicateOrEmptyJumps(stacks);\n          util.notEnumerableProp(error, \"stack\", reconstructStack(message, stacks));\n          util.notEnumerableProp(error, \"__stackCleaned__\", true);\n        };\n\n        var captureStackTrace = function stackDetection() {\n          var v8stackFramePattern = /^\\s*at\\s*/;\n\n          var v8stackFormatter = function v8stackFormatter(stack, error) {\n            if (typeof stack === \"string\") return stack;\n\n            if (error.name !== undefined && error.message !== undefined) {\n              return error.toString();\n            }\n\n            return formatNonError(error);\n          };\n\n          if (typeof Error.stackTraceLimit === \"number\" && typeof Error.captureStackTrace === \"function\") {\n            Error.stackTraceLimit += 6;\n            stackFramePattern = v8stackFramePattern;\n            formatStack = v8stackFormatter;\n            var captureStackTrace = Error.captureStackTrace;\n\n            shouldIgnore = function shouldIgnore(line) {\n              return bluebirdFramePattern.test(line);\n            };\n\n            return function (receiver, ignoreUntil) {\n              Error.stackTraceLimit += 6;\n              captureStackTrace(receiver, ignoreUntil);\n              Error.stackTraceLimit -= 6;\n            };\n          }\n\n          var err = new Error();\n\n          if (typeof err.stack === \"string\" && err.stack.split(\"\\n\")[0].indexOf(\"stackDetection@\") >= 0) {\n            stackFramePattern = /@/;\n            formatStack = v8stackFormatter;\n            indentStackFrames = true;\n            return function captureStackTrace(o) {\n              o.stack = new Error().stack;\n            };\n          }\n\n          var hasStackAfterThrow;\n\n          try {\n            throw new Error();\n          } catch (e) {\n            hasStackAfterThrow = \"stack\" in e;\n          }\n\n          if (!(\"stack\" in err) && hasStackAfterThrow && typeof Error.stackTraceLimit === \"number\") {\n            stackFramePattern = v8stackFramePattern;\n            formatStack = v8stackFormatter;\n            return function captureStackTrace(o) {\n              Error.stackTraceLimit += 6;\n\n              try {\n                throw new Error();\n              } catch (e) {\n                o.stack = e.stack;\n              }\n\n              Error.stackTraceLimit -= 6;\n            };\n          }\n\n          formatStack = function formatStack(stack, error) {\n            if (typeof stack === \"string\") return stack;\n\n            if ((_typeof(error) === \"object\" || typeof error === \"function\") && error.name !== undefined && error.message !== undefined) {\n              return error.toString();\n            }\n\n            return formatNonError(error);\n          };\n\n          return null;\n        }([]);\n\n        if (typeof console !== \"undefined\" && typeof console.warn !== \"undefined\") {\n          printWarning = function printWarning(message) {\n            console.warn(message);\n          };\n\n          if (util.isNode && process.stderr.isTTY) {\n            printWarning = function printWarning(message, isSoft) {\n              var color = isSoft ? \"\\x1B[33m\" : \"\\x1B[31m\";\n              console.warn(color + message + \"\\x1B[0m\\n\");\n            };\n          } else if (!util.isNode && typeof new Error().stack === \"string\") {\n            printWarning = function printWarning(message, isSoft) {\n              console.warn(\"%c\" + message, isSoft ? \"color: darkorange\" : \"color: red\");\n            };\n          }\n        }\n\n        var config = {\n          warnings: warnings,\n          longStackTraces: false,\n          cancellation: false,\n          monitoring: false\n        };\n        if (longStackTraces) Promise.longStackTraces();\n        return {\n          longStackTraces: function longStackTraces() {\n            return config.longStackTraces;\n          },\n          warnings: function warnings() {\n            return config.warnings;\n          },\n          cancellation: function cancellation() {\n            return config.cancellation;\n          },\n          monitoring: function monitoring() {\n            return config.monitoring;\n          },\n          propagateFromFunction: function propagateFromFunction() {\n            return _propagateFromFunction;\n          },\n          boundValueFunction: function boundValueFunction() {\n            return _boundValueFunction;\n          },\n          checkForgottenReturns: checkForgottenReturns,\n          setBounds: setBounds,\n          warn: warn,\n          deprecated: deprecated,\n          CapturedTrace: CapturedTrace,\n          fireDomEvent: fireDomEvent,\n          fireGlobalEvent: fireGlobalEvent\n        };\n      };\n    }, {\n      \"./errors\": 12,\n      \"./es5\": 13,\n      \"./util\": 36\n    }],\n    10: [function (_dereq_, module, exports) {\n      \"use strict\";\n\n      module.exports = function (Promise) {\n        function returner() {\n          return this.value;\n        }\n\n        function thrower() {\n          throw this.reason;\n        }\n\n        Promise.prototype[\"return\"] = Promise.prototype.thenReturn = function (value) {\n          if (value instanceof Promise) value.suppressUnhandledRejections();\n          return this._then(returner, undefined, undefined, {\n            value: value\n          }, undefined);\n        };\n\n        Promise.prototype[\"throw\"] = Promise.prototype.thenThrow = function (reason) {\n          return this._then(thrower, undefined, undefined, {\n            reason: reason\n          }, undefined);\n        };\n\n        Promise.prototype.catchThrow = function (reason) {\n          if (arguments.length <= 1) {\n            return this._then(undefined, thrower, undefined, {\n              reason: reason\n            }, undefined);\n          } else {\n            var _reason = arguments[1];\n\n            var handler = function handler() {\n              throw _reason;\n            };\n\n            return this.caught(reason, handler);\n          }\n        };\n\n        Promise.prototype.catchReturn = function (value) {\n          if (arguments.length <= 1) {\n            if (value instanceof Promise) value.suppressUnhandledRejections();\n            return this._then(undefined, returner, undefined, {\n              value: value\n            }, undefined);\n          } else {\n            var _value = arguments[1];\n            if (_value instanceof Promise) _value.suppressUnhandledRejections();\n\n            var handler = function handler() {\n              return _value;\n            };\n\n            return this.caught(value, handler);\n          }\n        };\n      };\n    }, {}],\n    11: [function (_dereq_, module, exports) {\n      \"use strict\";\n\n      module.exports = function (Promise, INTERNAL) {\n        var PromiseReduce = Promise.reduce;\n        var PromiseAll = Promise.all;\n\n        function promiseAllThis() {\n          return PromiseAll(this);\n        }\n\n        function PromiseMapSeries(promises, fn) {\n          return PromiseReduce(promises, fn, INTERNAL, INTERNAL);\n        }\n\n        Promise.prototype.each = function (fn) {\n          return PromiseReduce(this, fn, INTERNAL, 0)._then(promiseAllThis, undefined, undefined, this, undefined);\n        };\n\n        Promise.prototype.mapSeries = function (fn) {\n          return PromiseReduce(this, fn, INTERNAL, INTERNAL);\n        };\n\n        Promise.each = function (promises, fn) {\n          return PromiseReduce(promises, fn, INTERNAL, 0)._then(promiseAllThis, undefined, undefined, promises, undefined);\n        };\n\n        Promise.mapSeries = PromiseMapSeries;\n      };\n    }, {}],\n    12: [function (_dereq_, module, exports) {\n      \"use strict\";\n\n      var es5 = _dereq_(\"./es5\");\n\n      var Objectfreeze = es5.freeze;\n\n      var util = _dereq_(\"./util\");\n\n      var inherits = util.inherits;\n      var notEnumerableProp = util.notEnumerableProp;\n\n      function subError(nameProperty, defaultMessage) {\n        function SubError(message) {\n          if (!(this instanceof SubError)) return new SubError(message);\n          notEnumerableProp(this, \"message\", typeof message === \"string\" ? message : defaultMessage);\n          notEnumerableProp(this, \"name\", nameProperty);\n\n          if (Error.captureStackTrace) {\n            Error.captureStackTrace(this, this.constructor);\n          } else {\n            Error.call(this);\n          }\n        }\n\n        inherits(SubError, Error);\n        return SubError;\n      }\n\n      var _TypeError, _RangeError;\n\n      var Warning = subError(\"Warning\", \"warning\");\n      var CancellationError = subError(\"CancellationError\", \"cancellation error\");\n      var TimeoutError = subError(\"TimeoutError\", \"timeout error\");\n      var AggregateError = subError(\"AggregateError\", \"aggregate error\");\n\n      try {\n        _TypeError = TypeError;\n        _RangeError = RangeError;\n      } catch (e) {\n        _TypeError = subError(\"TypeError\", \"type error\");\n        _RangeError = subError(\"RangeError\", \"range error\");\n      }\n\n      var methods = (\"join pop push shift unshift slice filter forEach some \" + \"every map indexOf lastIndexOf reduce reduceRight sort reverse\").split(\" \");\n\n      for (var i = 0; i < methods.length; ++i) {\n        if (typeof Array.prototype[methods[i]] === \"function\") {\n          AggregateError.prototype[methods[i]] = Array.prototype[methods[i]];\n        }\n      }\n\n      es5.defineProperty(AggregateError.prototype, \"length\", {\n        value: 0,\n        configurable: false,\n        writable: true,\n        enumerable: true\n      });\n      AggregateError.prototype[\"isOperational\"] = true;\n      var level = 0;\n\n      AggregateError.prototype.toString = function () {\n        var indent = Array(level * 4 + 1).join(\" \");\n        var ret = \"\\n\" + indent + \"AggregateError of:\" + \"\\n\";\n        level++;\n        indent = Array(level * 4 + 1).join(\" \");\n\n        for (var i = 0; i < this.length; ++i) {\n          var str = this[i] === this ? \"[Circular AggregateError]\" : this[i] + \"\";\n          var lines = str.split(\"\\n\");\n\n          for (var j = 0; j < lines.length; ++j) {\n            lines[j] = indent + lines[j];\n          }\n\n          str = lines.join(\"\\n\");\n          ret += str + \"\\n\";\n        }\n\n        level--;\n        return ret;\n      };\n\n      function OperationalError(message) {\n        if (!(this instanceof OperationalError)) return new OperationalError(message);\n        notEnumerableProp(this, \"name\", \"OperationalError\");\n        notEnumerableProp(this, \"message\", message);\n        this.cause = message;\n        this[\"isOperational\"] = true;\n\n        if (message instanceof Error) {\n          notEnumerableProp(this, \"message\", message.message);\n          notEnumerableProp(this, \"stack\", message.stack);\n        } else if (Error.captureStackTrace) {\n          Error.captureStackTrace(this, this.constructor);\n        }\n      }\n\n      inherits(OperationalError, Error);\n      var errorTypes = Error[\"__BluebirdErrorTypes__\"];\n\n      if (!errorTypes) {\n        errorTypes = Objectfreeze({\n          CancellationError: CancellationError,\n          TimeoutError: TimeoutError,\n          OperationalError: OperationalError,\n          RejectionError: OperationalError,\n          AggregateError: AggregateError\n        });\n        es5.defineProperty(Error, \"__BluebirdErrorTypes__\", {\n          value: errorTypes,\n          writable: false,\n          enumerable: false,\n          configurable: false\n        });\n      }\n\n      module.exports = {\n        Error: Error,\n        TypeError: _TypeError,\n        RangeError: _RangeError,\n        CancellationError: errorTypes.CancellationError,\n        OperationalError: errorTypes.OperationalError,\n        TimeoutError: errorTypes.TimeoutError,\n        AggregateError: errorTypes.AggregateError,\n        Warning: Warning\n      };\n    }, {\n      \"./es5\": 13,\n      \"./util\": 36\n    }],\n    13: [function (_dereq_, module, exports) {\n      var isES5 = function () {\n        \"use strict\";\n\n        return this === undefined;\n      }();\n\n      if (isES5) {\n        module.exports = {\n          freeze: Object.freeze,\n          defineProperty: Object.defineProperty,\n          getDescriptor: Object.getOwnPropertyDescriptor,\n          keys: Object.keys,\n          names: Object.getOwnPropertyNames,\n          getPrototypeOf: Object.getPrototypeOf,\n          isArray: Array.isArray,\n          isES5: isES5,\n          propertyIsWritable: function propertyIsWritable(obj, prop) {\n            var descriptor = Object.getOwnPropertyDescriptor(obj, prop);\n            return !!(!descriptor || descriptor.writable || descriptor.set);\n          }\n        };\n      } else {\n        var has = {}.hasOwnProperty;\n        var str = {}.toString;\n        var proto = {}.constructor.prototype;\n\n        var ObjectKeys = function ObjectKeys(o) {\n          var ret = [];\n\n          for (var key in o) {\n            if (has.call(o, key)) {\n              ret.push(key);\n            }\n          }\n\n          return ret;\n        };\n\n        var ObjectGetDescriptor = function ObjectGetDescriptor(o, key) {\n          return {\n            value: o[key]\n          };\n        };\n\n        var ObjectDefineProperty = function ObjectDefineProperty(o, key, desc) {\n          o[key] = desc.value;\n          return o;\n        };\n\n        var ObjectFreeze = function ObjectFreeze(obj) {\n          return obj;\n        };\n\n        var ObjectGetPrototypeOf = function ObjectGetPrototypeOf(obj) {\n          try {\n            return Object(obj).constructor.prototype;\n          } catch (e) {\n            return proto;\n          }\n        };\n\n        var ArrayIsArray = function ArrayIsArray(obj) {\n          try {\n            return str.call(obj) === \"[object Array]\";\n          } catch (e) {\n            return false;\n          }\n        };\n\n        module.exports = {\n          isArray: ArrayIsArray,\n          keys: ObjectKeys,\n          names: ObjectKeys,\n          defineProperty: ObjectDefineProperty,\n          getDescriptor: ObjectGetDescriptor,\n          freeze: ObjectFreeze,\n          getPrototypeOf: ObjectGetPrototypeOf,\n          isES5: isES5,\n          propertyIsWritable: function propertyIsWritable() {\n            return true;\n          }\n        };\n      }\n    }, {}],\n    14: [function (_dereq_, module, exports) {\n      \"use strict\";\n\n      module.exports = function (Promise, INTERNAL) {\n        var PromiseMap = Promise.map;\n\n        Promise.prototype.filter = function (fn, options) {\n          return PromiseMap(this, fn, options, INTERNAL);\n        };\n\n        Promise.filter = function (promises, fn, options) {\n          return PromiseMap(promises, fn, options, INTERNAL);\n        };\n      };\n    }, {}],\n    15: [function (_dereq_, module, exports) {\n      \"use strict\";\n\n      module.exports = function (Promise, tryConvertToPromise, NEXT_FILTER) {\n        var util = _dereq_(\"./util\");\n\n        var CancellationError = Promise.CancellationError;\n        var errorObj = util.errorObj;\n\n        var catchFilter = _dereq_(\"./catch_filter\")(NEXT_FILTER);\n\n        function PassThroughHandlerContext(promise, type, handler) {\n          this.promise = promise;\n          this.type = type;\n          this.handler = handler;\n          this.called = false;\n          this.cancelPromise = null;\n        }\n\n        PassThroughHandlerContext.prototype.isFinallyHandler = function () {\n          return this.type === 0;\n        };\n\n        function FinallyHandlerCancelReaction(finallyHandler) {\n          this.finallyHandler = finallyHandler;\n        }\n\n        FinallyHandlerCancelReaction.prototype._resultCancelled = function () {\n          checkCancel(this.finallyHandler);\n        };\n\n        function checkCancel(ctx, reason) {\n          if (ctx.cancelPromise != null) {\n            if (arguments.length > 1) {\n              ctx.cancelPromise._reject(reason);\n            } else {\n              ctx.cancelPromise._cancel();\n            }\n\n            ctx.cancelPromise = null;\n            return true;\n          }\n\n          return false;\n        }\n\n        function succeed() {\n          return finallyHandler.call(this, this.promise._target()._settledValue());\n        }\n\n        function fail(reason) {\n          if (checkCancel(this, reason)) return;\n          errorObj.e = reason;\n          return errorObj;\n        }\n\n        function finallyHandler(reasonOrValue) {\n          var promise = this.promise;\n          var handler = this.handler;\n\n          if (!this.called) {\n            this.called = true;\n            var ret = this.isFinallyHandler() ? handler.call(promise._boundValue()) : handler.call(promise._boundValue(), reasonOrValue);\n\n            if (ret === NEXT_FILTER) {\n              return ret;\n            } else if (ret !== undefined) {\n              promise._setReturnedNonUndefined();\n\n              var maybePromise = tryConvertToPromise(ret, promise);\n\n              if (maybePromise instanceof Promise) {\n                if (this.cancelPromise != null) {\n                  if (maybePromise._isCancelled()) {\n                    var reason = new CancellationError(\"late cancellation observer\");\n\n                    promise._attachExtraTrace(reason);\n\n                    errorObj.e = reason;\n                    return errorObj;\n                  } else if (maybePromise.isPending()) {\n                    maybePromise._attachCancellationCallback(new FinallyHandlerCancelReaction(this));\n                  }\n                }\n\n                return maybePromise._then(succeed, fail, undefined, this, undefined);\n              }\n            }\n          }\n\n          if (promise.isRejected()) {\n            checkCancel(this);\n            errorObj.e = reasonOrValue;\n            return errorObj;\n          } else {\n            checkCancel(this);\n            return reasonOrValue;\n          }\n        }\n\n        Promise.prototype._passThrough = function (handler, type, success, fail) {\n          if (typeof handler !== \"function\") return this.then();\n          return this._then(success, fail, undefined, new PassThroughHandlerContext(this, type, handler), undefined);\n        };\n\n        Promise.prototype.lastly = Promise.prototype[\"finally\"] = function (handler) {\n          return this._passThrough(handler, 0, finallyHandler, finallyHandler);\n        };\n\n        Promise.prototype.tap = function (handler) {\n          return this._passThrough(handler, 1, finallyHandler);\n        };\n\n        Promise.prototype.tapCatch = function (handlerOrPredicate) {\n          var len = arguments.length;\n\n          if (len === 1) {\n            return this._passThrough(handlerOrPredicate, 1, undefined, finallyHandler);\n          } else {\n            var catchInstances = new Array(len - 1),\n                j = 0,\n                i;\n\n            for (i = 0; i < len - 1; ++i) {\n              var item = arguments[i];\n\n              if (util.isObject(item)) {\n                catchInstances[j++] = item;\n              } else {\n                return Promise.reject(new TypeError(\"tapCatch statement predicate: \" + \"expecting an object but got \" + util.classString(item)));\n              }\n            }\n\n            catchInstances.length = j;\n            var handler = arguments[i];\n            return this._passThrough(catchFilter(catchInstances, handler, this), 1, undefined, finallyHandler);\n          }\n        };\n\n        return PassThroughHandlerContext;\n      };\n    }, {\n      \"./catch_filter\": 7,\n      \"./util\": 36\n    }],\n    16: [function (_dereq_, module, exports) {\n      \"use strict\";\n\n      module.exports = function (Promise, apiRejection, INTERNAL, tryConvertToPromise, Proxyable, debug) {\n        var errors = _dereq_(\"./errors\");\n\n        var TypeError = errors.TypeError;\n\n        var util = _dereq_(\"./util\");\n\n        var errorObj = util.errorObj;\n        var tryCatch = util.tryCatch;\n        var yieldHandlers = [];\n\n        function promiseFromYieldHandler(value, yieldHandlers, traceParent) {\n          for (var i = 0; i < yieldHandlers.length; ++i) {\n            traceParent._pushContext();\n\n            var result = tryCatch(yieldHandlers[i])(value);\n\n            traceParent._popContext();\n\n            if (result === errorObj) {\n              traceParent._pushContext();\n\n              var ret = Promise.reject(errorObj.e);\n\n              traceParent._popContext();\n\n              return ret;\n            }\n\n            var maybePromise = tryConvertToPromise(result, traceParent);\n            if (maybePromise instanceof Promise) return maybePromise;\n          }\n\n          return null;\n        }\n\n        function PromiseSpawn(generatorFunction, receiver, yieldHandler, stack) {\n          if (debug.cancellation()) {\n            var internal = new Promise(INTERNAL);\n\n            var _finallyPromise = this._finallyPromise = new Promise(INTERNAL);\n\n            this._promise = internal.lastly(function () {\n              return _finallyPromise;\n            });\n\n            internal._captureStackTrace();\n\n            internal._setOnCancel(this);\n          } else {\n            var promise = this._promise = new Promise(INTERNAL);\n\n            promise._captureStackTrace();\n          }\n\n          this._stack = stack;\n          this._generatorFunction = generatorFunction;\n          this._receiver = receiver;\n          this._generator = undefined;\n          this._yieldHandlers = typeof yieldHandler === \"function\" ? [yieldHandler].concat(yieldHandlers) : yieldHandlers;\n          this._yieldedPromise = null;\n          this._cancellationPhase = false;\n        }\n\n        util.inherits(PromiseSpawn, Proxyable);\n\n        PromiseSpawn.prototype._isResolved = function () {\n          return this._promise === null;\n        };\n\n        PromiseSpawn.prototype._cleanup = function () {\n          this._promise = this._generator = null;\n\n          if (debug.cancellation() && this._finallyPromise !== null) {\n            this._finallyPromise._fulfill();\n\n            this._finallyPromise = null;\n          }\n        };\n\n        PromiseSpawn.prototype._promiseCancelled = function () {\n          if (this._isResolved()) return;\n          var implementsReturn = typeof this._generator[\"return\"] !== \"undefined\";\n          var result;\n\n          if (!implementsReturn) {\n            var reason = new Promise.CancellationError(\"generator .return() sentinel\");\n            Promise.coroutine.returnSentinel = reason;\n\n            this._promise._attachExtraTrace(reason);\n\n            this._promise._pushContext();\n\n            result = tryCatch(this._generator[\"throw\"]).call(this._generator, reason);\n\n            this._promise._popContext();\n          } else {\n            this._promise._pushContext();\n\n            result = tryCatch(this._generator[\"return\"]).call(this._generator, undefined);\n\n            this._promise._popContext();\n          }\n\n          this._cancellationPhase = true;\n          this._yieldedPromise = null;\n\n          this._continue(result);\n        };\n\n        PromiseSpawn.prototype._promiseFulfilled = function (value) {\n          this._yieldedPromise = null;\n\n          this._promise._pushContext();\n\n          var result = tryCatch(this._generator.next).call(this._generator, value);\n\n          this._promise._popContext();\n\n          this._continue(result);\n        };\n\n        PromiseSpawn.prototype._promiseRejected = function (reason) {\n          this._yieldedPromise = null;\n\n          this._promise._attachExtraTrace(reason);\n\n          this._promise._pushContext();\n\n          var result = tryCatch(this._generator[\"throw\"]).call(this._generator, reason);\n\n          this._promise._popContext();\n\n          this._continue(result);\n        };\n\n        PromiseSpawn.prototype._resultCancelled = function () {\n          if (this._yieldedPromise instanceof Promise) {\n            var promise = this._yieldedPromise;\n            this._yieldedPromise = null;\n            promise.cancel();\n          }\n        };\n\n        PromiseSpawn.prototype.promise = function () {\n          return this._promise;\n        };\n\n        PromiseSpawn.prototype._run = function () {\n          this._generator = this._generatorFunction.call(this._receiver);\n          this._receiver = this._generatorFunction = undefined;\n\n          this._promiseFulfilled(undefined);\n        };\n\n        PromiseSpawn.prototype._continue = function (result) {\n          var promise = this._promise;\n\n          if (result === errorObj) {\n            this._cleanup();\n\n            if (this._cancellationPhase) {\n              return promise.cancel();\n            } else {\n              return promise._rejectCallback(result.e, false);\n            }\n          }\n\n          var value = result.value;\n\n          if (result.done === true) {\n            this._cleanup();\n\n            if (this._cancellationPhase) {\n              return promise.cancel();\n            } else {\n              return promise._resolveCallback(value);\n            }\n          } else {\n            var maybePromise = tryConvertToPromise(value, this._promise);\n\n            if (!(maybePromise instanceof Promise)) {\n              maybePromise = promiseFromYieldHandler(maybePromise, this._yieldHandlers, this._promise);\n\n              if (maybePromise === null) {\n                this._promiseRejected(new TypeError(\"A value %s was yielded that could not be treated as a promise\\n\\n    See http://goo.gl/MqrFmX\\n\\n\".replace(\"%s\", String(value)) + \"From coroutine:\\n\" + this._stack.split(\"\\n\").slice(1, -7).join(\"\\n\")));\n\n                return;\n              }\n            }\n\n            maybePromise = maybePromise._target();\n            var bitField = maybePromise._bitField;\n            ;\n\n            if ((bitField & 50397184) === 0) {\n              this._yieldedPromise = maybePromise;\n\n              maybePromise._proxy(this, null);\n            } else if ((bitField & 33554432) !== 0) {\n              Promise._async.invoke(this._promiseFulfilled, this, maybePromise._value());\n            } else if ((bitField & 16777216) !== 0) {\n              Promise._async.invoke(this._promiseRejected, this, maybePromise._reason());\n            } else {\n              this._promiseCancelled();\n            }\n          }\n        };\n\n        Promise.coroutine = function (generatorFunction, options) {\n          if (typeof generatorFunction !== \"function\") {\n            throw new TypeError(\"generatorFunction must be a function\\n\\n    See http://goo.gl/MqrFmX\\n\");\n          }\n\n          var yieldHandler = Object(options).yieldHandler;\n          var PromiseSpawn$ = PromiseSpawn;\n          var stack = new Error().stack;\n          return function () {\n            var generator = generatorFunction.apply(this, arguments);\n            var spawn = new PromiseSpawn$(undefined, undefined, yieldHandler, stack);\n            var ret = spawn.promise();\n            spawn._generator = generator;\n\n            spawn._promiseFulfilled(undefined);\n\n            return ret;\n          };\n        };\n\n        Promise.coroutine.addYieldHandler = function (fn) {\n          if (typeof fn !== \"function\") {\n            throw new TypeError(\"expecting a function but got \" + util.classString(fn));\n          }\n\n          yieldHandlers.push(fn);\n        };\n\n        Promise.spawn = function (generatorFunction) {\n          debug.deprecated(\"Promise.spawn()\", \"Promise.coroutine()\");\n\n          if (typeof generatorFunction !== \"function\") {\n            return apiRejection(\"generatorFunction must be a function\\n\\n    See http://goo.gl/MqrFmX\\n\");\n          }\n\n          var spawn = new PromiseSpawn(generatorFunction, this);\n          var ret = spawn.promise();\n\n          spawn._run(Promise.spawn);\n\n          return ret;\n        };\n      };\n    }, {\n      \"./errors\": 12,\n      \"./util\": 36\n    }],\n    17: [function (_dereq_, module, exports) {\n      \"use strict\";\n\n      module.exports = function (Promise, PromiseArray, tryConvertToPromise, INTERNAL, async, getDomain) {\n        var util = _dereq_(\"./util\");\n\n        var canEvaluate = util.canEvaluate;\n        var tryCatch = util.tryCatch;\n        var errorObj = util.errorObj;\n        var reject;\n\n        if (!true) {\n          if (canEvaluate) {\n            var thenCallback = function thenCallback(i) {\n              return new Function(\"value\", \"holder\", \"                             \\n\\\n            'use strict';                                                    \\n\\\n            holder.pIndex = value;                                           \\n\\\n            holder.checkFulfillment(this);                                   \\n\\\n            \".replace(/Index/g, i));\n            };\n\n            var promiseSetter = function promiseSetter(i) {\n              return new Function(\"promise\", \"holder\", \"                           \\n\\\n            'use strict';                                                    \\n\\\n            holder.pIndex = promise;                                         \\n\\\n            \".replace(/Index/g, i));\n            };\n\n            var generateHolderClass = function generateHolderClass(total) {\n              var props = new Array(total);\n\n              for (var i = 0; i < props.length; ++i) {\n                props[i] = \"this.p\" + (i + 1);\n              }\n\n              var assignment = props.join(\" = \") + \" = null;\";\n              var cancellationCode = \"var promise;\\n\" + props.map(function (prop) {\n                return \"                                                         \\n\\\n                promise = \" + prop + \";                                      \\n\\\n                if (promise instanceof Promise) {                            \\n\\\n                    promise.cancel();                                        \\n\\\n                }                                                            \\n\\\n            \";\n              }).join(\"\\n\");\n              var passedArguments = props.join(\", \");\n              var name = \"Holder$\" + total;\n              var code = \"return function(tryCatch, errorObj, Promise, async) {    \\n\\\n            'use strict';                                                    \\n\\\n            function [TheName](fn) {                                         \\n\\\n                [TheProperties]                                              \\n\\\n                this.fn = fn;                                                \\n\\\n                this.asyncNeeded = true;                                     \\n\\\n                this.now = 0;                                                \\n\\\n            }                                                                \\n\\\n                                                                             \\n\\\n            [TheName].prototype._callFunction = function(promise) {          \\n\\\n                promise._pushContext();                                      \\n\\\n                var ret = tryCatch(this.fn)([ThePassedArguments]);           \\n\\\n                promise._popContext();                                       \\n\\\n                if (ret === errorObj) {                                      \\n\\\n                    promise._rejectCallback(ret.e, false);                   \\n\\\n                } else {                                                     \\n\\\n                    promise._resolveCallback(ret);                           \\n\\\n                }                                                            \\n\\\n            };                                                               \\n\\\n                                                                             \\n\\\n            [TheName].prototype.checkFulfillment = function(promise) {       \\n\\\n                var now = ++this.now;                                        \\n\\\n                if (now === [TheTotal]) {                                    \\n\\\n                    if (this.asyncNeeded) {                                  \\n\\\n                        async.invoke(this._callFunction, this, promise);     \\n\\\n                    } else {                                                 \\n\\\n                        this._callFunction(promise);                         \\n\\\n                    }                                                        \\n\\\n                                                                             \\n\\\n                }                                                            \\n\\\n            };                                                               \\n\\\n                                                                             \\n\\\n            [TheName].prototype._resultCancelled = function() {              \\n\\\n                [CancellationCode]                                           \\n\\\n            };                                                               \\n\\\n                                                                             \\n\\\n            return [TheName];                                                \\n\\\n        }(tryCatch, errorObj, Promise, async);                               \\n\\\n        \";\n              code = code.replace(/\\[TheName\\]/g, name).replace(/\\[TheTotal\\]/g, total).replace(/\\[ThePassedArguments\\]/g, passedArguments).replace(/\\[TheProperties\\]/g, assignment).replace(/\\[CancellationCode\\]/g, cancellationCode);\n              return new Function(\"tryCatch\", \"errorObj\", \"Promise\", \"async\", code)(tryCatch, errorObj, Promise, async);\n            };\n\n            var holderClasses = [];\n            var thenCallbacks = [];\n            var promiseSetters = [];\n\n            for (var i = 0; i < 8; ++i) {\n              holderClasses.push(generateHolderClass(i + 1));\n              thenCallbacks.push(thenCallback(i + 1));\n              promiseSetters.push(promiseSetter(i + 1));\n            }\n\n            reject = function reject(reason) {\n              this._reject(reason);\n            };\n          }\n        }\n\n        Promise.join = function () {\n          var last = arguments.length - 1;\n          var fn;\n\n          if (last > 0 && typeof arguments[last] === \"function\") {\n            fn = arguments[last];\n\n            if (!true) {\n              if (last <= 8 && canEvaluate) {\n                var ret = new Promise(INTERNAL);\n\n                ret._captureStackTrace();\n\n                var HolderClass = holderClasses[last - 1];\n                var holder = new HolderClass(fn);\n                var callbacks = thenCallbacks;\n\n                for (var i = 0; i < last; ++i) {\n                  var maybePromise = tryConvertToPromise(arguments[i], ret);\n\n                  if (maybePromise instanceof Promise) {\n                    maybePromise = maybePromise._target();\n                    var bitField = maybePromise._bitField;\n                    ;\n\n                    if ((bitField & 50397184) === 0) {\n                      maybePromise._then(callbacks[i], reject, undefined, ret, holder);\n\n                      promiseSetters[i](maybePromise, holder);\n                      holder.asyncNeeded = false;\n                    } else if ((bitField & 33554432) !== 0) {\n                      callbacks[i].call(ret, maybePromise._value(), holder);\n                    } else if ((bitField & 16777216) !== 0) {\n                      ret._reject(maybePromise._reason());\n                    } else {\n                      ret._cancel();\n                    }\n                  } else {\n                    callbacks[i].call(ret, maybePromise, holder);\n                  }\n                }\n\n                if (!ret._isFateSealed()) {\n                  if (holder.asyncNeeded) {\n                    var domain = getDomain();\n\n                    if (domain !== null) {\n                      holder.fn = util.domainBind(domain, holder.fn);\n                    }\n                  }\n\n                  ret._setAsyncGuaranteed();\n\n                  ret._setOnCancel(holder);\n                }\n\n                return ret;\n              }\n            }\n          }\n\n          var args = [].slice.call(arguments);\n          ;\n          if (fn) args.pop();\n          var ret = new PromiseArray(args).promise();\n          return fn !== undefined ? ret.spread(fn) : ret;\n        };\n      };\n    }, {\n      \"./util\": 36\n    }],\n    18: [function (_dereq_, module, exports) {\n      \"use strict\";\n\n      module.exports = function (Promise, PromiseArray, apiRejection, tryConvertToPromise, INTERNAL, debug) {\n        var getDomain = Promise._getDomain;\n\n        var util = _dereq_(\"./util\");\n\n        var tryCatch = util.tryCatch;\n        var errorObj = util.errorObj;\n        var async = Promise._async;\n\n        function MappingPromiseArray(promises, fn, limit, _filter) {\n          this.constructor$(promises);\n\n          this._promise._captureStackTrace();\n\n          var domain = getDomain();\n          this._callback = domain === null ? fn : util.domainBind(domain, fn);\n          this._preservedValues = _filter === INTERNAL ? new Array(this.length()) : null;\n          this._limit = limit;\n          this._inFlight = 0;\n          this._queue = [];\n          async.invoke(this._asyncInit, this, undefined);\n        }\n\n        util.inherits(MappingPromiseArray, PromiseArray);\n\n        MappingPromiseArray.prototype._asyncInit = function () {\n          this._init$(undefined, -2);\n        };\n\n        MappingPromiseArray.prototype._init = function () {};\n\n        MappingPromiseArray.prototype._promiseFulfilled = function (value, index) {\n          var values = this._values;\n          var length = this.length();\n          var preservedValues = this._preservedValues;\n          var limit = this._limit;\n\n          if (index < 0) {\n            index = index * -1 - 1;\n            values[index] = value;\n\n            if (limit >= 1) {\n              this._inFlight--;\n\n              this._drainQueue();\n\n              if (this._isResolved()) return true;\n            }\n          } else {\n            if (limit >= 1 && this._inFlight >= limit) {\n              values[index] = value;\n\n              this._queue.push(index);\n\n              return false;\n            }\n\n            if (preservedValues !== null) preservedValues[index] = value;\n            var promise = this._promise;\n            var callback = this._callback;\n\n            var receiver = promise._boundValue();\n\n            promise._pushContext();\n\n            var ret = tryCatch(callback).call(receiver, value, index, length);\n\n            var promiseCreated = promise._popContext();\n\n            debug.checkForgottenReturns(ret, promiseCreated, preservedValues !== null ? \"Promise.filter\" : \"Promise.map\", promise);\n\n            if (ret === errorObj) {\n              this._reject(ret.e);\n\n              return true;\n            }\n\n            var maybePromise = tryConvertToPromise(ret, this._promise);\n\n            if (maybePromise instanceof Promise) {\n              maybePromise = maybePromise._target();\n              var bitField = maybePromise._bitField;\n              ;\n\n              if ((bitField & 50397184) === 0) {\n                if (limit >= 1) this._inFlight++;\n                values[index] = maybePromise;\n\n                maybePromise._proxy(this, (index + 1) * -1);\n\n                return false;\n              } else if ((bitField & 33554432) !== 0) {\n                ret = maybePromise._value();\n              } else if ((bitField & 16777216) !== 0) {\n                this._reject(maybePromise._reason());\n\n                return true;\n              } else {\n                this._cancel();\n\n                return true;\n              }\n            }\n\n            values[index] = ret;\n          }\n\n          var totalResolved = ++this._totalResolved;\n\n          if (totalResolved >= length) {\n            if (preservedValues !== null) {\n              this._filter(values, preservedValues);\n            } else {\n              this._resolve(values);\n            }\n\n            return true;\n          }\n\n          return false;\n        };\n\n        MappingPromiseArray.prototype._drainQueue = function () {\n          var queue = this._queue;\n          var limit = this._limit;\n          var values = this._values;\n\n          while (queue.length > 0 && this._inFlight < limit) {\n            if (this._isResolved()) return;\n            var index = queue.pop();\n\n            this._promiseFulfilled(values[index], index);\n          }\n        };\n\n        MappingPromiseArray.prototype._filter = function (booleans, values) {\n          var len = values.length;\n          var ret = new Array(len);\n          var j = 0;\n\n          for (var i = 0; i < len; ++i) {\n            if (booleans[i]) ret[j++] = values[i];\n          }\n\n          ret.length = j;\n\n          this._resolve(ret);\n        };\n\n        MappingPromiseArray.prototype.preservedValues = function () {\n          return this._preservedValues;\n        };\n\n        function map(promises, fn, options, _filter) {\n          if (typeof fn !== \"function\") {\n            return apiRejection(\"expecting a function but got \" + util.classString(fn));\n          }\n\n          var limit = 0;\n\n          if (options !== undefined) {\n            if (_typeof(options) === \"object\" && options !== null) {\n              if (typeof options.concurrency !== \"number\") {\n                return Promise.reject(new TypeError(\"'concurrency' must be a number but it is \" + util.classString(options.concurrency)));\n              }\n\n              limit = options.concurrency;\n            } else {\n              return Promise.reject(new TypeError(\"options argument must be an object but it is \" + util.classString(options)));\n            }\n          }\n\n          limit = typeof limit === \"number\" && isFinite(limit) && limit >= 1 ? limit : 0;\n          return new MappingPromiseArray(promises, fn, limit, _filter).promise();\n        }\n\n        Promise.prototype.map = function (fn, options) {\n          return map(this, fn, options, null);\n        };\n\n        Promise.map = function (promises, fn, options, _filter) {\n          return map(promises, fn, options, _filter);\n        };\n      };\n    }, {\n      \"./util\": 36\n    }],\n    19: [function (_dereq_, module, exports) {\n      \"use strict\";\n\n      module.exports = function (Promise, INTERNAL, tryConvertToPromise, apiRejection, debug) {\n        var util = _dereq_(\"./util\");\n\n        var tryCatch = util.tryCatch;\n\n        Promise.method = function (fn) {\n          if (typeof fn !== \"function\") {\n            throw new Promise.TypeError(\"expecting a function but got \" + util.classString(fn));\n          }\n\n          return function () {\n            var ret = new Promise(INTERNAL);\n\n            ret._captureStackTrace();\n\n            ret._pushContext();\n\n            var value = tryCatch(fn).apply(this, arguments);\n\n            var promiseCreated = ret._popContext();\n\n            debug.checkForgottenReturns(value, promiseCreated, \"Promise.method\", ret);\n\n            ret._resolveFromSyncValue(value);\n\n            return ret;\n          };\n        };\n\n        Promise.attempt = Promise[\"try\"] = function (fn) {\n          if (typeof fn !== \"function\") {\n            return apiRejection(\"expecting a function but got \" + util.classString(fn));\n          }\n\n          var ret = new Promise(INTERNAL);\n\n          ret._captureStackTrace();\n\n          ret._pushContext();\n\n          var value;\n\n          if (arguments.length > 1) {\n            debug.deprecated(\"calling Promise.try with more than 1 argument\");\n            var arg = arguments[1];\n            var ctx = arguments[2];\n            value = util.isArray(arg) ? tryCatch(fn).apply(ctx, arg) : tryCatch(fn).call(ctx, arg);\n          } else {\n            value = tryCatch(fn)();\n          }\n\n          var promiseCreated = ret._popContext();\n\n          debug.checkForgottenReturns(value, promiseCreated, \"Promise.try\", ret);\n\n          ret._resolveFromSyncValue(value);\n\n          return ret;\n        };\n\n        Promise.prototype._resolveFromSyncValue = function (value) {\n          if (value === util.errorObj) {\n            this._rejectCallback(value.e, false);\n          } else {\n            this._resolveCallback(value, true);\n          }\n        };\n      };\n    }, {\n      \"./util\": 36\n    }],\n    20: [function (_dereq_, module, exports) {\n      \"use strict\";\n\n      var util = _dereq_(\"./util\");\n\n      var maybeWrapAsError = util.maybeWrapAsError;\n\n      var errors = _dereq_(\"./errors\");\n\n      var OperationalError = errors.OperationalError;\n\n      var es5 = _dereq_(\"./es5\");\n\n      function isUntypedError(obj) {\n        return obj instanceof Error && es5.getPrototypeOf(obj) === Error.prototype;\n      }\n\n      var rErrorKey = /^(?:name|message|stack|cause)$/;\n\n      function wrapAsOperationalError(obj) {\n        var ret;\n\n        if (isUntypedError(obj)) {\n          ret = new OperationalError(obj);\n          ret.name = obj.name;\n          ret.message = obj.message;\n          ret.stack = obj.stack;\n          var keys = es5.keys(obj);\n\n          for (var i = 0; i < keys.length; ++i) {\n            var key = keys[i];\n\n            if (!rErrorKey.test(key)) {\n              ret[key] = obj[key];\n            }\n          }\n\n          return ret;\n        }\n\n        util.markAsOriginatingFromRejection(obj);\n        return obj;\n      }\n\n      function nodebackForPromise(promise, multiArgs) {\n        return function (err, value) {\n          if (promise === null) return;\n\n          if (err) {\n            var wrapped = wrapAsOperationalError(maybeWrapAsError(err));\n\n            promise._attachExtraTrace(wrapped);\n\n            promise._reject(wrapped);\n          } else if (!multiArgs) {\n            promise._fulfill(value);\n          } else {\n            var args = [].slice.call(arguments, 1);\n            ;\n\n            promise._fulfill(args);\n          }\n\n          promise = null;\n        };\n      }\n\n      module.exports = nodebackForPromise;\n    }, {\n      \"./errors\": 12,\n      \"./es5\": 13,\n      \"./util\": 36\n    }],\n    21: [function (_dereq_, module, exports) {\n      \"use strict\";\n\n      module.exports = function (Promise) {\n        var util = _dereq_(\"./util\");\n\n        var async = Promise._async;\n        var tryCatch = util.tryCatch;\n        var errorObj = util.errorObj;\n\n        function spreadAdapter(val, nodeback) {\n          var promise = this;\n          if (!util.isArray(val)) return successAdapter.call(promise, val, nodeback);\n          var ret = tryCatch(nodeback).apply(promise._boundValue(), [null].concat(val));\n\n          if (ret === errorObj) {\n            async.throwLater(ret.e);\n          }\n        }\n\n        function successAdapter(val, nodeback) {\n          var promise = this;\n\n          var receiver = promise._boundValue();\n\n          var ret = val === undefined ? tryCatch(nodeback).call(receiver, null) : tryCatch(nodeback).call(receiver, null, val);\n\n          if (ret === errorObj) {\n            async.throwLater(ret.e);\n          }\n        }\n\n        function errorAdapter(reason, nodeback) {\n          var promise = this;\n\n          if (!reason) {\n            var newReason = new Error(reason + \"\");\n            newReason.cause = reason;\n            reason = newReason;\n          }\n\n          var ret = tryCatch(nodeback).call(promise._boundValue(), reason);\n\n          if (ret === errorObj) {\n            async.throwLater(ret.e);\n          }\n        }\n\n        Promise.prototype.asCallback = Promise.prototype.nodeify = function (nodeback, options) {\n          if (typeof nodeback == \"function\") {\n            var adapter = successAdapter;\n\n            if (options !== undefined && Object(options).spread) {\n              adapter = spreadAdapter;\n            }\n\n            this._then(adapter, errorAdapter, undefined, this, nodeback);\n          }\n\n          return this;\n        };\n      };\n    }, {\n      \"./util\": 36\n    }],\n    22: [function (_dereq_, module, exports) {\n      \"use strict\";\n\n      module.exports = function () {\n        var makeSelfResolutionError = function makeSelfResolutionError() {\n          return new TypeError(\"circular promise resolution chain\\n\\n    See http://goo.gl/MqrFmX\\n\");\n        };\n\n        var reflectHandler = function reflectHandler() {\n          return new Promise.PromiseInspection(this._target());\n        };\n\n        var apiRejection = function apiRejection(msg) {\n          return Promise.reject(new TypeError(msg));\n        };\n\n        function Proxyable() {}\n\n        var UNDEFINED_BINDING = {};\n\n        var util = _dereq_(\"./util\");\n\n        var getDomain;\n\n        if (util.isNode) {\n          getDomain = function getDomain() {\n            var ret = process.domain;\n            if (ret === undefined) ret = null;\n            return ret;\n          };\n        } else {\n          getDomain = function getDomain() {\n            return null;\n          };\n        }\n\n        util.notEnumerableProp(Promise, \"_getDomain\", getDomain);\n\n        var es5 = _dereq_(\"./es5\");\n\n        var Async = _dereq_(\"./async\");\n\n        var async = new Async();\n        es5.defineProperty(Promise, \"_async\", {\n          value: async\n        });\n\n        var errors = _dereq_(\"./errors\");\n\n        var TypeError = Promise.TypeError = errors.TypeError;\n        Promise.RangeError = errors.RangeError;\n        var CancellationError = Promise.CancellationError = errors.CancellationError;\n        Promise.TimeoutError = errors.TimeoutError;\n        Promise.OperationalError = errors.OperationalError;\n        Promise.RejectionError = errors.OperationalError;\n        Promise.AggregateError = errors.AggregateError;\n\n        var INTERNAL = function INTERNAL() {};\n\n        var APPLY = {};\n        var NEXT_FILTER = {};\n\n        var tryConvertToPromise = _dereq_(\"./thenables\")(Promise, INTERNAL);\n\n        var PromiseArray = _dereq_(\"./promise_array\")(Promise, INTERNAL, tryConvertToPromise, apiRejection, Proxyable);\n\n        var Context = _dereq_(\"./context\")(Promise);\n        /*jshint unused:false*/\n\n\n        var createContext = Context.create;\n\n        var debug = _dereq_(\"./debuggability\")(Promise, Context);\n\n        var CapturedTrace = debug.CapturedTrace;\n\n        var PassThroughHandlerContext = _dereq_(\"./finally\")(Promise, tryConvertToPromise, NEXT_FILTER);\n\n        var catchFilter = _dereq_(\"./catch_filter\")(NEXT_FILTER);\n\n        var nodebackForPromise = _dereq_(\"./nodeback\");\n\n        var errorObj = util.errorObj;\n        var tryCatch = util.tryCatch;\n\n        function check(self, executor) {\n          if (self == null || self.constructor !== Promise) {\n            throw new TypeError(\"the promise constructor cannot be invoked directly\\n\\n    See http://goo.gl/MqrFmX\\n\");\n          }\n\n          if (typeof executor !== \"function\") {\n            throw new TypeError(\"expecting a function but got \" + util.classString(executor));\n          }\n        }\n\n        function Promise(executor) {\n          if (executor !== INTERNAL) {\n            check(this, executor);\n          }\n\n          this._bitField = 0;\n          this._fulfillmentHandler0 = undefined;\n          this._rejectionHandler0 = undefined;\n          this._promise0 = undefined;\n          this._receiver0 = undefined;\n\n          this._resolveFromExecutor(executor);\n\n          this._promiseCreated();\n\n          this._fireEvent(\"promiseCreated\", this);\n        }\n\n        Promise.prototype.toString = function () {\n          return \"[object Promise]\";\n        };\n\n        Promise.prototype.caught = Promise.prototype[\"catch\"] = function (fn) {\n          var len = arguments.length;\n\n          if (len > 1) {\n            var catchInstances = new Array(len - 1),\n                j = 0,\n                i;\n\n            for (i = 0; i < len - 1; ++i) {\n              var item = arguments[i];\n\n              if (util.isObject(item)) {\n                catchInstances[j++] = item;\n              } else {\n                return apiRejection(\"Catch statement predicate: \" + \"expecting an object but got \" + util.classString(item));\n              }\n            }\n\n            catchInstances.length = j;\n            fn = arguments[i];\n            return this.then(undefined, catchFilter(catchInstances, fn, this));\n          }\n\n          return this.then(undefined, fn);\n        };\n\n        Promise.prototype.reflect = function () {\n          return this._then(reflectHandler, reflectHandler, undefined, this, undefined);\n        };\n\n        Promise.prototype.then = function (didFulfill, didReject) {\n          if (debug.warnings() && arguments.length > 0 && typeof didFulfill !== \"function\" && typeof didReject !== \"function\") {\n            var msg = \".then() only accepts functions but was passed: \" + util.classString(didFulfill);\n\n            if (arguments.length > 1) {\n              msg += \", \" + util.classString(didReject);\n            }\n\n            this._warn(msg);\n          }\n\n          return this._then(didFulfill, didReject, undefined, undefined, undefined);\n        };\n\n        Promise.prototype.done = function (didFulfill, didReject) {\n          var promise = this._then(didFulfill, didReject, undefined, undefined, undefined);\n\n          promise._setIsFinal();\n        };\n\n        Promise.prototype.spread = function (fn) {\n          if (typeof fn !== \"function\") {\n            return apiRejection(\"expecting a function but got \" + util.classString(fn));\n          }\n\n          return this.all()._then(fn, undefined, undefined, APPLY, undefined);\n        };\n\n        Promise.prototype.toJSON = function () {\n          var ret = {\n            isFulfilled: false,\n            isRejected: false,\n            fulfillmentValue: undefined,\n            rejectionReason: undefined\n          };\n\n          if (this.isFulfilled()) {\n            ret.fulfillmentValue = this.value();\n            ret.isFulfilled = true;\n          } else if (this.isRejected()) {\n            ret.rejectionReason = this.reason();\n            ret.isRejected = true;\n          }\n\n          return ret;\n        };\n\n        Promise.prototype.all = function () {\n          if (arguments.length > 0) {\n            this._warn(\".all() was passed arguments but it does not take any\");\n          }\n\n          return new PromiseArray(this).promise();\n        };\n\n        Promise.prototype.error = function (fn) {\n          return this.caught(util.originatesFromRejection, fn);\n        };\n\n        Promise.getNewLibraryCopy = module.exports;\n\n        Promise.is = function (val) {\n          return val instanceof Promise;\n        };\n\n        Promise.fromNode = Promise.fromCallback = function (fn) {\n          var ret = new Promise(INTERNAL);\n\n          ret._captureStackTrace();\n\n          var multiArgs = arguments.length > 1 ? !!Object(arguments[1]).multiArgs : false;\n          var result = tryCatch(fn)(nodebackForPromise(ret, multiArgs));\n\n          if (result === errorObj) {\n            ret._rejectCallback(result.e, true);\n          }\n\n          if (!ret._isFateSealed()) ret._setAsyncGuaranteed();\n          return ret;\n        };\n\n        Promise.all = function (promises) {\n          return new PromiseArray(promises).promise();\n        };\n\n        Promise.cast = function (obj) {\n          var ret = tryConvertToPromise(obj);\n\n          if (!(ret instanceof Promise)) {\n            ret = new Promise(INTERNAL);\n\n            ret._captureStackTrace();\n\n            ret._setFulfilled();\n\n            ret._rejectionHandler0 = obj;\n          }\n\n          return ret;\n        };\n\n        Promise.resolve = Promise.fulfilled = Promise.cast;\n\n        Promise.reject = Promise.rejected = function (reason) {\n          var ret = new Promise(INTERNAL);\n\n          ret._captureStackTrace();\n\n          ret._rejectCallback(reason, true);\n\n          return ret;\n        };\n\n        Promise.setScheduler = function (fn) {\n          if (typeof fn !== \"function\") {\n            throw new TypeError(\"expecting a function but got \" + util.classString(fn));\n          }\n\n          return async.setScheduler(fn);\n        };\n\n        Promise.prototype._then = function (didFulfill, didReject, _, receiver, internalData) {\n          var haveInternalData = internalData !== undefined;\n          var promise = haveInternalData ? internalData : new Promise(INTERNAL);\n\n          var target = this._target();\n\n          var bitField = target._bitField;\n\n          if (!haveInternalData) {\n            promise._propagateFrom(this, 3);\n\n            promise._captureStackTrace();\n\n            if (receiver === undefined && (this._bitField & 2097152) !== 0) {\n              if (!((bitField & 50397184) === 0)) {\n                receiver = this._boundValue();\n              } else {\n                receiver = target === this ? undefined : this._boundTo;\n              }\n            }\n\n            this._fireEvent(\"promiseChained\", this, promise);\n          }\n\n          var domain = getDomain();\n\n          if (!((bitField & 50397184) === 0)) {\n            var handler,\n                value,\n                settler = target._settlePromiseCtx;\n\n            if ((bitField & 33554432) !== 0) {\n              value = target._rejectionHandler0;\n              handler = didFulfill;\n            } else if ((bitField & 16777216) !== 0) {\n              value = target._fulfillmentHandler0;\n              handler = didReject;\n\n              target._unsetRejectionIsUnhandled();\n            } else {\n              settler = target._settlePromiseLateCancellationObserver;\n              value = new CancellationError(\"late cancellation observer\");\n\n              target._attachExtraTrace(value);\n\n              handler = didReject;\n            }\n\n            async.invoke(settler, target, {\n              handler: domain === null ? handler : typeof handler === \"function\" && util.domainBind(domain, handler),\n              promise: promise,\n              receiver: receiver,\n              value: value\n            });\n          } else {\n            target._addCallbacks(didFulfill, didReject, promise, receiver, domain);\n          }\n\n          return promise;\n        };\n\n        Promise.prototype._length = function () {\n          return this._bitField & 65535;\n        };\n\n        Promise.prototype._isFateSealed = function () {\n          return (this._bitField & 117506048) !== 0;\n        };\n\n        Promise.prototype._isFollowing = function () {\n          return (this._bitField & 67108864) === 67108864;\n        };\n\n        Promise.prototype._setLength = function (len) {\n          this._bitField = this._bitField & -65536 | len & 65535;\n        };\n\n        Promise.prototype._setFulfilled = function () {\n          this._bitField = this._bitField | 33554432;\n\n          this._fireEvent(\"promiseFulfilled\", this);\n        };\n\n        Promise.prototype._setRejected = function () {\n          this._bitField = this._bitField | 16777216;\n\n          this._fireEvent(\"promiseRejected\", this);\n        };\n\n        Promise.prototype._setFollowing = function () {\n          this._bitField = this._bitField | 67108864;\n\n          this._fireEvent(\"promiseResolved\", this);\n        };\n\n        Promise.prototype._setIsFinal = function () {\n          this._bitField = this._bitField | 4194304;\n        };\n\n        Promise.prototype._isFinal = function () {\n          return (this._bitField & 4194304) > 0;\n        };\n\n        Promise.prototype._unsetCancelled = function () {\n          this._bitField = this._bitField & ~65536;\n        };\n\n        Promise.prototype._setCancelled = function () {\n          this._bitField = this._bitField | 65536;\n\n          this._fireEvent(\"promiseCancelled\", this);\n        };\n\n        Promise.prototype._setWillBeCancelled = function () {\n          this._bitField = this._bitField | 8388608;\n        };\n\n        Promise.prototype._setAsyncGuaranteed = function () {\n          if (async.hasCustomScheduler()) return;\n          this._bitField = this._bitField | 134217728;\n        };\n\n        Promise.prototype._receiverAt = function (index) {\n          var ret = index === 0 ? this._receiver0 : this[index * 4 - 4 + 3];\n\n          if (ret === UNDEFINED_BINDING) {\n            return undefined;\n          } else if (ret === undefined && this._isBound()) {\n            return this._boundValue();\n          }\n\n          return ret;\n        };\n\n        Promise.prototype._promiseAt = function (index) {\n          return this[index * 4 - 4 + 2];\n        };\n\n        Promise.prototype._fulfillmentHandlerAt = function (index) {\n          return this[index * 4 - 4 + 0];\n        };\n\n        Promise.prototype._rejectionHandlerAt = function (index) {\n          return this[index * 4 - 4 + 1];\n        };\n\n        Promise.prototype._boundValue = function () {};\n\n        Promise.prototype._migrateCallback0 = function (follower) {\n          var bitField = follower._bitField;\n          var fulfill = follower._fulfillmentHandler0;\n          var reject = follower._rejectionHandler0;\n          var promise = follower._promise0;\n\n          var receiver = follower._receiverAt(0);\n\n          if (receiver === undefined) receiver = UNDEFINED_BINDING;\n\n          this._addCallbacks(fulfill, reject, promise, receiver, null);\n        };\n\n        Promise.prototype._migrateCallbackAt = function (follower, index) {\n          var fulfill = follower._fulfillmentHandlerAt(index);\n\n          var reject = follower._rejectionHandlerAt(index);\n\n          var promise = follower._promiseAt(index);\n\n          var receiver = follower._receiverAt(index);\n\n          if (receiver === undefined) receiver = UNDEFINED_BINDING;\n\n          this._addCallbacks(fulfill, reject, promise, receiver, null);\n        };\n\n        Promise.prototype._addCallbacks = function (fulfill, reject, promise, receiver, domain) {\n          var index = this._length();\n\n          if (index >= 65535 - 4) {\n            index = 0;\n\n            this._setLength(0);\n          }\n\n          if (index === 0) {\n            this._promise0 = promise;\n            this._receiver0 = receiver;\n\n            if (typeof fulfill === \"function\") {\n              this._fulfillmentHandler0 = domain === null ? fulfill : util.domainBind(domain, fulfill);\n            }\n\n            if (typeof reject === \"function\") {\n              this._rejectionHandler0 = domain === null ? reject : util.domainBind(domain, reject);\n            }\n          } else {\n            var base = index * 4 - 4;\n            this[base + 2] = promise;\n            this[base + 3] = receiver;\n\n            if (typeof fulfill === \"function\") {\n              this[base + 0] = domain === null ? fulfill : util.domainBind(domain, fulfill);\n            }\n\n            if (typeof reject === \"function\") {\n              this[base + 1] = domain === null ? reject : util.domainBind(domain, reject);\n            }\n          }\n\n          this._setLength(index + 1);\n\n          return index;\n        };\n\n        Promise.prototype._proxy = function (proxyable, arg) {\n          this._addCallbacks(undefined, undefined, arg, proxyable, null);\n        };\n\n        Promise.prototype._resolveCallback = function (value, shouldBind) {\n          if ((this._bitField & 117506048) !== 0) return;\n          if (value === this) return this._rejectCallback(makeSelfResolutionError(), false);\n          var maybePromise = tryConvertToPromise(value, this);\n          if (!(maybePromise instanceof Promise)) return this._fulfill(value);\n          if (shouldBind) this._propagateFrom(maybePromise, 2);\n\n          var promise = maybePromise._target();\n\n          if (promise === this) {\n            this._reject(makeSelfResolutionError());\n\n            return;\n          }\n\n          var bitField = promise._bitField;\n\n          if ((bitField & 50397184) === 0) {\n            var len = this._length();\n\n            if (len > 0) promise._migrateCallback0(this);\n\n            for (var i = 1; i < len; ++i) {\n              promise._migrateCallbackAt(this, i);\n            }\n\n            this._setFollowing();\n\n            this._setLength(0);\n\n            this._setFollowee(promise);\n          } else if ((bitField & 33554432) !== 0) {\n            this._fulfill(promise._value());\n          } else if ((bitField & 16777216) !== 0) {\n            this._reject(promise._reason());\n          } else {\n            var reason = new CancellationError(\"late cancellation observer\");\n\n            promise._attachExtraTrace(reason);\n\n            this._reject(reason);\n          }\n        };\n\n        Promise.prototype._rejectCallback = function (reason, synchronous, ignoreNonErrorWarnings) {\n          var trace = util.ensureErrorObject(reason);\n          var hasStack = trace === reason;\n\n          if (!hasStack && !ignoreNonErrorWarnings && debug.warnings()) {\n            var message = \"a promise was rejected with a non-error: \" + util.classString(reason);\n\n            this._warn(message, true);\n          }\n\n          this._attachExtraTrace(trace, synchronous ? hasStack : false);\n\n          this._reject(reason);\n        };\n\n        Promise.prototype._resolveFromExecutor = function (executor) {\n          if (executor === INTERNAL) return;\n          var promise = this;\n\n          this._captureStackTrace();\n\n          this._pushContext();\n\n          var synchronous = true;\n\n          var r = this._execute(executor, function (value) {\n            promise._resolveCallback(value);\n          }, function (reason) {\n            promise._rejectCallback(reason, synchronous);\n          });\n\n          synchronous = false;\n\n          this._popContext();\n\n          if (r !== undefined) {\n            promise._rejectCallback(r, true);\n          }\n        };\n\n        Promise.prototype._settlePromiseFromHandler = function (handler, receiver, value, promise) {\n          var bitField = promise._bitField;\n          if ((bitField & 65536) !== 0) return;\n\n          promise._pushContext();\n\n          var x;\n\n          if (receiver === APPLY) {\n            if (!value || typeof value.length !== \"number\") {\n              x = errorObj;\n              x.e = new TypeError(\"cannot .spread() a non-array: \" + util.classString(value));\n            } else {\n              x = tryCatch(handler).apply(this._boundValue(), value);\n            }\n          } else {\n            x = tryCatch(handler).call(receiver, value);\n          }\n\n          var promiseCreated = promise._popContext();\n\n          bitField = promise._bitField;\n          if ((bitField & 65536) !== 0) return;\n\n          if (x === NEXT_FILTER) {\n            promise._reject(value);\n          } else if (x === errorObj) {\n            promise._rejectCallback(x.e, false);\n          } else {\n            debug.checkForgottenReturns(x, promiseCreated, \"\", promise, this);\n\n            promise._resolveCallback(x);\n          }\n        };\n\n        Promise.prototype._target = function () {\n          var ret = this;\n\n          while (ret._isFollowing()) {\n            ret = ret._followee();\n          }\n\n          return ret;\n        };\n\n        Promise.prototype._followee = function () {\n          return this._rejectionHandler0;\n        };\n\n        Promise.prototype._setFollowee = function (promise) {\n          this._rejectionHandler0 = promise;\n        };\n\n        Promise.prototype._settlePromise = function (promise, handler, receiver, value) {\n          var isPromise = promise instanceof Promise;\n          var bitField = this._bitField;\n          var asyncGuaranteed = (bitField & 134217728) !== 0;\n\n          if ((bitField & 65536) !== 0) {\n            if (isPromise) promise._invokeInternalOnCancel();\n\n            if (receiver instanceof PassThroughHandlerContext && receiver.isFinallyHandler()) {\n              receiver.cancelPromise = promise;\n\n              if (tryCatch(handler).call(receiver, value) === errorObj) {\n                promise._reject(errorObj.e);\n              }\n            } else if (handler === reflectHandler) {\n              promise._fulfill(reflectHandler.call(receiver));\n            } else if (receiver instanceof Proxyable) {\n              receiver._promiseCancelled(promise);\n            } else if (isPromise || promise instanceof PromiseArray) {\n              promise._cancel();\n            } else {\n              receiver.cancel();\n            }\n          } else if (typeof handler === \"function\") {\n            if (!isPromise) {\n              handler.call(receiver, value, promise);\n            } else {\n              if (asyncGuaranteed) promise._setAsyncGuaranteed();\n\n              this._settlePromiseFromHandler(handler, receiver, value, promise);\n            }\n          } else if (receiver instanceof Proxyable) {\n            if (!receiver._isResolved()) {\n              if ((bitField & 33554432) !== 0) {\n                receiver._promiseFulfilled(value, promise);\n              } else {\n                receiver._promiseRejected(value, promise);\n              }\n            }\n          } else if (isPromise) {\n            if (asyncGuaranteed) promise._setAsyncGuaranteed();\n\n            if ((bitField & 33554432) !== 0) {\n              promise._fulfill(value);\n            } else {\n              promise._reject(value);\n            }\n          }\n        };\n\n        Promise.prototype._settlePromiseLateCancellationObserver = function (ctx) {\n          var handler = ctx.handler;\n          var promise = ctx.promise;\n          var receiver = ctx.receiver;\n          var value = ctx.value;\n\n          if (typeof handler === \"function\") {\n            if (!(promise instanceof Promise)) {\n              handler.call(receiver, value, promise);\n            } else {\n              this._settlePromiseFromHandler(handler, receiver, value, promise);\n            }\n          } else if (promise instanceof Promise) {\n            promise._reject(value);\n          }\n        };\n\n        Promise.prototype._settlePromiseCtx = function (ctx) {\n          this._settlePromise(ctx.promise, ctx.handler, ctx.receiver, ctx.value);\n        };\n\n        Promise.prototype._settlePromise0 = function (handler, value, bitField) {\n          var promise = this._promise0;\n\n          var receiver = this._receiverAt(0);\n\n          this._promise0 = undefined;\n          this._receiver0 = undefined;\n\n          this._settlePromise(promise, handler, receiver, value);\n        };\n\n        Promise.prototype._clearCallbackDataAtIndex = function (index) {\n          var base = index * 4 - 4;\n          this[base + 2] = this[base + 3] = this[base + 0] = this[base + 1] = undefined;\n        };\n\n        Promise.prototype._fulfill = function (value) {\n          var bitField = this._bitField;\n          if ((bitField & 117506048) >>> 16) return;\n\n          if (value === this) {\n            var err = makeSelfResolutionError();\n\n            this._attachExtraTrace(err);\n\n            return this._reject(err);\n          }\n\n          this._setFulfilled();\n\n          this._rejectionHandler0 = value;\n\n          if ((bitField & 65535) > 0) {\n            if ((bitField & 134217728) !== 0) {\n              this._settlePromises();\n            } else {\n              async.settlePromises(this);\n            }\n\n            this._dereferenceTrace();\n          }\n        };\n\n        Promise.prototype._reject = function (reason) {\n          var bitField = this._bitField;\n          if ((bitField & 117506048) >>> 16) return;\n\n          this._setRejected();\n\n          this._fulfillmentHandler0 = reason;\n\n          if (this._isFinal()) {\n            return async.fatalError(reason, util.isNode);\n          }\n\n          if ((bitField & 65535) > 0) {\n            async.settlePromises(this);\n          } else {\n            this._ensurePossibleRejectionHandled();\n          }\n        };\n\n        Promise.prototype._fulfillPromises = function (len, value) {\n          for (var i = 1; i < len; i++) {\n            var handler = this._fulfillmentHandlerAt(i);\n\n            var promise = this._promiseAt(i);\n\n            var receiver = this._receiverAt(i);\n\n            this._clearCallbackDataAtIndex(i);\n\n            this._settlePromise(promise, handler, receiver, value);\n          }\n        };\n\n        Promise.prototype._rejectPromises = function (len, reason) {\n          for (var i = 1; i < len; i++) {\n            var handler = this._rejectionHandlerAt(i);\n\n            var promise = this._promiseAt(i);\n\n            var receiver = this._receiverAt(i);\n\n            this._clearCallbackDataAtIndex(i);\n\n            this._settlePromise(promise, handler, receiver, reason);\n          }\n        };\n\n        Promise.prototype._settlePromises = function () {\n          var bitField = this._bitField;\n          var len = bitField & 65535;\n\n          if (len > 0) {\n            if ((bitField & 16842752) !== 0) {\n              var reason = this._fulfillmentHandler0;\n\n              this._settlePromise0(this._rejectionHandler0, reason, bitField);\n\n              this._rejectPromises(len, reason);\n            } else {\n              var value = this._rejectionHandler0;\n\n              this._settlePromise0(this._fulfillmentHandler0, value, bitField);\n\n              this._fulfillPromises(len, value);\n            }\n\n            this._setLength(0);\n          }\n\n          this._clearCancellationData();\n        };\n\n        Promise.prototype._settledValue = function () {\n          var bitField = this._bitField;\n\n          if ((bitField & 33554432) !== 0) {\n            return this._rejectionHandler0;\n          } else if ((bitField & 16777216) !== 0) {\n            return this._fulfillmentHandler0;\n          }\n        };\n\n        function deferResolve(v) {\n          this.promise._resolveCallback(v);\n        }\n\n        function deferReject(v) {\n          this.promise._rejectCallback(v, false);\n        }\n\n        Promise.defer = Promise.pending = function () {\n          debug.deprecated(\"Promise.defer\", \"new Promise\");\n          var promise = new Promise(INTERNAL);\n          return {\n            promise: promise,\n            resolve: deferResolve,\n            reject: deferReject\n          };\n        };\n\n        util.notEnumerableProp(Promise, \"_makeSelfResolutionError\", makeSelfResolutionError);\n\n        _dereq_(\"./method\")(Promise, INTERNAL, tryConvertToPromise, apiRejection, debug);\n\n        _dereq_(\"./bind\")(Promise, INTERNAL, tryConvertToPromise, debug);\n\n        _dereq_(\"./cancel\")(Promise, PromiseArray, apiRejection, debug);\n\n        _dereq_(\"./direct_resolve\")(Promise);\n\n        _dereq_(\"./synchronous_inspection\")(Promise);\n\n        _dereq_(\"./join\")(Promise, PromiseArray, tryConvertToPromise, INTERNAL, async, getDomain);\n\n        Promise.Promise = Promise;\n        Promise.version = \"3.5.4\";\n\n        _dereq_('./map.js')(Promise, PromiseArray, apiRejection, tryConvertToPromise, INTERNAL, debug);\n\n        _dereq_('./call_get.js')(Promise);\n\n        _dereq_('./using.js')(Promise, apiRejection, tryConvertToPromise, createContext, INTERNAL, debug);\n\n        _dereq_('./timers.js')(Promise, INTERNAL, debug);\n\n        _dereq_('./generators.js')(Promise, apiRejection, INTERNAL, tryConvertToPromise, Proxyable, debug);\n\n        _dereq_('./nodeify.js')(Promise);\n\n        _dereq_('./promisify.js')(Promise, INTERNAL);\n\n        _dereq_('./props.js')(Promise, PromiseArray, tryConvertToPromise, apiRejection);\n\n        _dereq_('./race.js')(Promise, INTERNAL, tryConvertToPromise, apiRejection);\n\n        _dereq_('./reduce.js')(Promise, PromiseArray, apiRejection, tryConvertToPromise, INTERNAL, debug);\n\n        _dereq_('./settle.js')(Promise, PromiseArray, debug);\n\n        _dereq_('./some.js')(Promise, PromiseArray, apiRejection);\n\n        _dereq_('./filter.js')(Promise, INTERNAL);\n\n        _dereq_('./each.js')(Promise, INTERNAL);\n\n        _dereq_('./any.js')(Promise);\n\n        util.toFastProperties(Promise);\n        util.toFastProperties(Promise.prototype);\n\n        function fillTypes(value) {\n          var p = new Promise(INTERNAL);\n          p._fulfillmentHandler0 = value;\n          p._rejectionHandler0 = value;\n          p._promise0 = value;\n          p._receiver0 = value;\n        } // Complete slack tracking, opt out of field-type tracking and           \n        // stabilize map                                                         \n\n\n        fillTypes({\n          a: 1\n        });\n        fillTypes({\n          b: 2\n        });\n        fillTypes({\n          c: 3\n        });\n        fillTypes(1);\n        fillTypes(function () {});\n        fillTypes(undefined);\n        fillTypes(false);\n        fillTypes(new Promise(INTERNAL));\n        debug.setBounds(Async.firstLineError, util.lastLineError);\n        return Promise;\n      };\n    }, {\n      \"./any.js\": 1,\n      \"./async\": 2,\n      \"./bind\": 3,\n      \"./call_get.js\": 5,\n      \"./cancel\": 6,\n      \"./catch_filter\": 7,\n      \"./context\": 8,\n      \"./debuggability\": 9,\n      \"./direct_resolve\": 10,\n      \"./each.js\": 11,\n      \"./errors\": 12,\n      \"./es5\": 13,\n      \"./filter.js\": 14,\n      \"./finally\": 15,\n      \"./generators.js\": 16,\n      \"./join\": 17,\n      \"./map.js\": 18,\n      \"./method\": 19,\n      \"./nodeback\": 20,\n      \"./nodeify.js\": 21,\n      \"./promise_array\": 23,\n      \"./promisify.js\": 24,\n      \"./props.js\": 25,\n      \"./race.js\": 27,\n      \"./reduce.js\": 28,\n      \"./settle.js\": 30,\n      \"./some.js\": 31,\n      \"./synchronous_inspection\": 32,\n      \"./thenables\": 33,\n      \"./timers.js\": 34,\n      \"./using.js\": 35,\n      \"./util\": 36\n    }],\n    23: [function (_dereq_, module, exports) {\n      \"use strict\";\n\n      module.exports = function (Promise, INTERNAL, tryConvertToPromise, apiRejection, Proxyable) {\n        var util = _dereq_(\"./util\");\n\n        var isArray = util.isArray;\n\n        function toResolutionValue(val) {\n          switch (val) {\n            case -2:\n              return [];\n\n            case -3:\n              return {};\n\n            case -6:\n              return new Map();\n          }\n        }\n\n        function PromiseArray(values) {\n          var promise = this._promise = new Promise(INTERNAL);\n\n          if (values instanceof Promise) {\n            promise._propagateFrom(values, 3);\n          }\n\n          promise._setOnCancel(this);\n\n          this._values = values;\n          this._length = 0;\n          this._totalResolved = 0;\n\n          this._init(undefined, -2);\n        }\n\n        util.inherits(PromiseArray, Proxyable);\n\n        PromiseArray.prototype.length = function () {\n          return this._length;\n        };\n\n        PromiseArray.prototype.promise = function () {\n          return this._promise;\n        };\n\n        PromiseArray.prototype._init = function init(_, resolveValueIfEmpty) {\n          var values = tryConvertToPromise(this._values, this._promise);\n\n          if (values instanceof Promise) {\n            values = values._target();\n            var bitField = values._bitField;\n            ;\n            this._values = values;\n\n            if ((bitField & 50397184) === 0) {\n              this._promise._setAsyncGuaranteed();\n\n              return values._then(init, this._reject, undefined, this, resolveValueIfEmpty);\n            } else if ((bitField & 33554432) !== 0) {\n              values = values._value();\n            } else if ((bitField & 16777216) !== 0) {\n              return this._reject(values._reason());\n            } else {\n              return this._cancel();\n            }\n          }\n\n          values = util.asArray(values);\n\n          if (values === null) {\n            var err = apiRejection(\"expecting an array or an iterable object but got \" + util.classString(values)).reason();\n\n            this._promise._rejectCallback(err, false);\n\n            return;\n          }\n\n          if (values.length === 0) {\n            if (resolveValueIfEmpty === -5) {\n              this._resolveEmptyArray();\n            } else {\n              this._resolve(toResolutionValue(resolveValueIfEmpty));\n            }\n\n            return;\n          }\n\n          this._iterate(values);\n        };\n\n        PromiseArray.prototype._iterate = function (values) {\n          var len = this.getActualLength(values.length);\n          this._length = len;\n          this._values = this.shouldCopyValues() ? new Array(len) : this._values;\n          var result = this._promise;\n          var isResolved = false;\n          var bitField = null;\n\n          for (var i = 0; i < len; ++i) {\n            var maybePromise = tryConvertToPromise(values[i], result);\n\n            if (maybePromise instanceof Promise) {\n              maybePromise = maybePromise._target();\n              bitField = maybePromise._bitField;\n            } else {\n              bitField = null;\n            }\n\n            if (isResolved) {\n              if (bitField !== null) {\n                maybePromise.suppressUnhandledRejections();\n              }\n            } else if (bitField !== null) {\n              if ((bitField & 50397184) === 0) {\n                maybePromise._proxy(this, i);\n\n                this._values[i] = maybePromise;\n              } else if ((bitField & 33554432) !== 0) {\n                isResolved = this._promiseFulfilled(maybePromise._value(), i);\n              } else if ((bitField & 16777216) !== 0) {\n                isResolved = this._promiseRejected(maybePromise._reason(), i);\n              } else {\n                isResolved = this._promiseCancelled(i);\n              }\n            } else {\n              isResolved = this._promiseFulfilled(maybePromise, i);\n            }\n          }\n\n          if (!isResolved) result._setAsyncGuaranteed();\n        };\n\n        PromiseArray.prototype._isResolved = function () {\n          return this._values === null;\n        };\n\n        PromiseArray.prototype._resolve = function (value) {\n          this._values = null;\n\n          this._promise._fulfill(value);\n        };\n\n        PromiseArray.prototype._cancel = function () {\n          if (this._isResolved() || !this._promise._isCancellable()) return;\n          this._values = null;\n\n          this._promise._cancel();\n        };\n\n        PromiseArray.prototype._reject = function (reason) {\n          this._values = null;\n\n          this._promise._rejectCallback(reason, false);\n        };\n\n        PromiseArray.prototype._promiseFulfilled = function (value, index) {\n          this._values[index] = value;\n          var totalResolved = ++this._totalResolved;\n\n          if (totalResolved >= this._length) {\n            this._resolve(this._values);\n\n            return true;\n          }\n\n          return false;\n        };\n\n        PromiseArray.prototype._promiseCancelled = function () {\n          this._cancel();\n\n          return true;\n        };\n\n        PromiseArray.prototype._promiseRejected = function (reason) {\n          this._totalResolved++;\n\n          this._reject(reason);\n\n          return true;\n        };\n\n        PromiseArray.prototype._resultCancelled = function () {\n          if (this._isResolved()) return;\n          var values = this._values;\n\n          this._cancel();\n\n          if (values instanceof Promise) {\n            values.cancel();\n          } else {\n            for (var i = 0; i < values.length; ++i) {\n              if (values[i] instanceof Promise) {\n                values[i].cancel();\n              }\n            }\n          }\n        };\n\n        PromiseArray.prototype.shouldCopyValues = function () {\n          return true;\n        };\n\n        PromiseArray.prototype.getActualLength = function (len) {\n          return len;\n        };\n\n        return PromiseArray;\n      };\n    }, {\n      \"./util\": 36\n    }],\n    24: [function (_dereq_, module, exports) {\n      \"use strict\";\n\n      module.exports = function (Promise, INTERNAL) {\n        var THIS = {};\n\n        var util = _dereq_(\"./util\");\n\n        var nodebackForPromise = _dereq_(\"./nodeback\");\n\n        var withAppended = util.withAppended;\n        var maybeWrapAsError = util.maybeWrapAsError;\n        var canEvaluate = util.canEvaluate;\n\n        var TypeError = _dereq_(\"./errors\").TypeError;\n\n        var defaultSuffix = \"Async\";\n        var defaultPromisified = {\n          __isPromisified__: true\n        };\n        var noCopyProps = [\"arity\", \"length\", \"name\", \"arguments\", \"caller\", \"callee\", \"prototype\", \"__isPromisified__\"];\n        var noCopyPropsPattern = new RegExp(\"^(?:\" + noCopyProps.join(\"|\") + \")$\");\n\n        var defaultFilter = function defaultFilter(name) {\n          return util.isIdentifier(name) && name.charAt(0) !== \"_\" && name !== \"constructor\";\n        };\n\n        function propsFilter(key) {\n          return !noCopyPropsPattern.test(key);\n        }\n\n        function isPromisified(fn) {\n          try {\n            return fn.__isPromisified__ === true;\n          } catch (e) {\n            return false;\n          }\n        }\n\n        function hasPromisified(obj, key, suffix) {\n          var val = util.getDataPropertyOrDefault(obj, key + suffix, defaultPromisified);\n          return val ? isPromisified(val) : false;\n        }\n\n        function checkValid(ret, suffix, suffixRegexp) {\n          for (var i = 0; i < ret.length; i += 2) {\n            var key = ret[i];\n\n            if (suffixRegexp.test(key)) {\n              var keyWithoutAsyncSuffix = key.replace(suffixRegexp, \"\");\n\n              for (var j = 0; j < ret.length; j += 2) {\n                if (ret[j] === keyWithoutAsyncSuffix) {\n                  throw new TypeError(\"Cannot promisify an API that has normal methods with '%s'-suffix\\n\\n    See http://goo.gl/MqrFmX\\n\".replace(\"%s\", suffix));\n                }\n              }\n            }\n          }\n        }\n\n        function promisifiableMethods(obj, suffix, suffixRegexp, filter) {\n          var keys = util.inheritedDataKeys(obj);\n          var ret = [];\n\n          for (var i = 0; i < keys.length; ++i) {\n            var key = keys[i];\n            var value = obj[key];\n            var passesDefaultFilter = filter === defaultFilter ? true : defaultFilter(key, value, obj);\n\n            if (typeof value === \"function\" && !isPromisified(value) && !hasPromisified(obj, key, suffix) && filter(key, value, obj, passesDefaultFilter)) {\n              ret.push(key, value);\n            }\n          }\n\n          checkValid(ret, suffix, suffixRegexp);\n          return ret;\n        }\n\n        var escapeIdentRegex = function escapeIdentRegex(str) {\n          return str.replace(/([$])/, \"\\\\$\");\n        };\n\n        var makeNodePromisifiedEval;\n\n        if (!true) {\n          var switchCaseArgumentOrder = function switchCaseArgumentOrder(likelyArgumentCount) {\n            var ret = [likelyArgumentCount];\n            var min = Math.max(0, likelyArgumentCount - 1 - 3);\n\n            for (var i = likelyArgumentCount - 1; i >= min; --i) {\n              ret.push(i);\n            }\n\n            for (var i = likelyArgumentCount + 1; i <= 3; ++i) {\n              ret.push(i);\n            }\n\n            return ret;\n          };\n\n          var argumentSequence = function argumentSequence(argumentCount) {\n            return util.filledRange(argumentCount, \"_arg\", \"\");\n          };\n\n          var parameterDeclaration = function parameterDeclaration(parameterCount) {\n            return util.filledRange(Math.max(parameterCount, 3), \"_arg\", \"\");\n          };\n\n          var parameterCount = function parameterCount(fn) {\n            if (typeof fn.length === \"number\") {\n              return Math.max(Math.min(fn.length, 1023 + 1), 0);\n            }\n\n            return 0;\n          };\n\n          makeNodePromisifiedEval = function makeNodePromisifiedEval(callback, receiver, originalName, fn, _, multiArgs) {\n            var newParameterCount = Math.max(0, parameterCount(fn) - 1);\n            var argumentOrder = switchCaseArgumentOrder(newParameterCount);\n            var shouldProxyThis = typeof callback === \"string\" || receiver === THIS;\n\n            function generateCallForArgumentCount(count) {\n              var args = argumentSequence(count).join(\", \");\n              var comma = count > 0 ? \", \" : \"\";\n              var ret;\n\n              if (shouldProxyThis) {\n                ret = \"ret = callback.call(this, {{args}}, nodeback); break;\\n\";\n              } else {\n                ret = receiver === undefined ? \"ret = callback({{args}}, nodeback); break;\\n\" : \"ret = callback.call(receiver, {{args}}, nodeback); break;\\n\";\n              }\n\n              return ret.replace(\"{{args}}\", args).replace(\", \", comma);\n            }\n\n            function generateArgumentSwitchCase() {\n              var ret = \"\";\n\n              for (var i = 0; i < argumentOrder.length; ++i) {\n                ret += \"case \" + argumentOrder[i] + \":\" + generateCallForArgumentCount(argumentOrder[i]);\n              }\n\n              ret += \"                                                             \\n\\\n        default:                                                             \\n\\\n            var args = new Array(len + 1);                                   \\n\\\n            var i = 0;                                                       \\n\\\n            for (var i = 0; i < len; ++i) {                                  \\n\\\n               args[i] = arguments[i];                                       \\n\\\n            }                                                                \\n\\\n            args[i] = nodeback;                                              \\n\\\n            [CodeForCall]                                                    \\n\\\n            break;                                                           \\n\\\n        \".replace(\"[CodeForCall]\", shouldProxyThis ? \"ret = callback.apply(this, args);\\n\" : \"ret = callback.apply(receiver, args);\\n\");\n              return ret;\n            }\n\n            var getFunctionCode = typeof callback === \"string\" ? \"this != null ? this['\" + callback + \"'] : fn\" : \"fn\";\n            var body = \"'use strict';                                                \\n\\\n        var ret = function (Parameters) {                                    \\n\\\n            'use strict';                                                    \\n\\\n            var len = arguments.length;                                      \\n\\\n            var promise = new Promise(INTERNAL);                             \\n\\\n            promise._captureStackTrace();                                    \\n\\\n            var nodeback = nodebackForPromise(promise, \" + multiArgs + \");   \\n\\\n            var ret;                                                         \\n\\\n            var callback = tryCatch([GetFunctionCode]);                      \\n\\\n            switch(len) {                                                    \\n\\\n                [CodeForSwitchCase]                                          \\n\\\n            }                                                                \\n\\\n            if (ret === errorObj) {                                          \\n\\\n                promise._rejectCallback(maybeWrapAsError(ret.e), true, true);\\n\\\n            }                                                                \\n\\\n            if (!promise._isFateSealed()) promise._setAsyncGuaranteed();     \\n\\\n            return promise;                                                  \\n\\\n        };                                                                   \\n\\\n        notEnumerableProp(ret, '__isPromisified__', true);                   \\n\\\n        return ret;                                                          \\n\\\n    \".replace(\"[CodeForSwitchCase]\", generateArgumentSwitchCase()).replace(\"[GetFunctionCode]\", getFunctionCode);\n            body = body.replace(\"Parameters\", parameterDeclaration(newParameterCount));\n            return new Function(\"Promise\", \"fn\", \"receiver\", \"withAppended\", \"maybeWrapAsError\", \"nodebackForPromise\", \"tryCatch\", \"errorObj\", \"notEnumerableProp\", \"INTERNAL\", body)(Promise, fn, receiver, withAppended, maybeWrapAsError, nodebackForPromise, util.tryCatch, util.errorObj, util.notEnumerableProp, INTERNAL);\n          };\n        }\n\n        function makeNodePromisifiedClosure(callback, receiver, _, fn, __, multiArgs) {\n          var defaultThis = function () {\n            return this;\n          }();\n\n          var method = callback;\n\n          if (typeof method === \"string\") {\n            callback = fn;\n          }\n\n          function promisified() {\n            var _receiver = receiver;\n            if (receiver === THIS) _receiver = this;\n            var promise = new Promise(INTERNAL);\n\n            promise._captureStackTrace();\n\n            var cb = typeof method === \"string\" && this !== defaultThis ? this[method] : callback;\n            var fn = nodebackForPromise(promise, multiArgs);\n\n            try {\n              cb.apply(_receiver, withAppended(arguments, fn));\n            } catch (e) {\n              promise._rejectCallback(maybeWrapAsError(e), true, true);\n            }\n\n            if (!promise._isFateSealed()) promise._setAsyncGuaranteed();\n            return promise;\n          }\n\n          util.notEnumerableProp(promisified, \"__isPromisified__\", true);\n          return promisified;\n        }\n\n        var makeNodePromisified = canEvaluate ? makeNodePromisifiedEval : makeNodePromisifiedClosure;\n\n        function promisifyAll(obj, suffix, filter, promisifier, multiArgs) {\n          var suffixRegexp = new RegExp(escapeIdentRegex(suffix) + \"$\");\n          var methods = promisifiableMethods(obj, suffix, suffixRegexp, filter);\n\n          for (var i = 0, len = methods.length; i < len; i += 2) {\n            var key = methods[i];\n            var fn = methods[i + 1];\n            var promisifiedKey = key + suffix;\n\n            if (promisifier === makeNodePromisified) {\n              obj[promisifiedKey] = makeNodePromisified(key, THIS, key, fn, suffix, multiArgs);\n            } else {\n              var promisified = promisifier(fn, function () {\n                return makeNodePromisified(key, THIS, key, fn, suffix, multiArgs);\n              });\n              util.notEnumerableProp(promisified, \"__isPromisified__\", true);\n              obj[promisifiedKey] = promisified;\n            }\n          }\n\n          util.toFastProperties(obj);\n          return obj;\n        }\n\n        function promisify(callback, receiver, multiArgs) {\n          return makeNodePromisified(callback, receiver, undefined, callback, null, multiArgs);\n        }\n\n        Promise.promisify = function (fn, options) {\n          if (typeof fn !== \"function\") {\n            throw new TypeError(\"expecting a function but got \" + util.classString(fn));\n          }\n\n          if (isPromisified(fn)) {\n            return fn;\n          }\n\n          options = Object(options);\n          var receiver = options.context === undefined ? THIS : options.context;\n          var multiArgs = !!options.multiArgs;\n          var ret = promisify(fn, receiver, multiArgs);\n          util.copyDescriptors(fn, ret, propsFilter);\n          return ret;\n        };\n\n        Promise.promisifyAll = function (target, options) {\n          if (typeof target !== \"function\" && _typeof(target) !== \"object\") {\n            throw new TypeError(\"the target of promisifyAll must be an object or a function\\n\\n    See http://goo.gl/MqrFmX\\n\");\n          }\n\n          options = Object(options);\n          var multiArgs = !!options.multiArgs;\n          var suffix = options.suffix;\n          if (typeof suffix !== \"string\") suffix = defaultSuffix;\n          var filter = options.filter;\n          if (typeof filter !== \"function\") filter = defaultFilter;\n          var promisifier = options.promisifier;\n          if (typeof promisifier !== \"function\") promisifier = makeNodePromisified;\n\n          if (!util.isIdentifier(suffix)) {\n            throw new RangeError(\"suffix must be a valid identifier\\n\\n    See http://goo.gl/MqrFmX\\n\");\n          }\n\n          var keys = util.inheritedDataKeys(target);\n\n          for (var i = 0; i < keys.length; ++i) {\n            var value = target[keys[i]];\n\n            if (keys[i] !== \"constructor\" && util.isClass(value)) {\n              promisifyAll(value.prototype, suffix, filter, promisifier, multiArgs);\n              promisifyAll(value, suffix, filter, promisifier, multiArgs);\n            }\n          }\n\n          return promisifyAll(target, suffix, filter, promisifier, multiArgs);\n        };\n      };\n    }, {\n      \"./errors\": 12,\n      \"./nodeback\": 20,\n      \"./util\": 36\n    }],\n    25: [function (_dereq_, module, exports) {\n      \"use strict\";\n\n      module.exports = function (Promise, PromiseArray, tryConvertToPromise, apiRejection) {\n        var util = _dereq_(\"./util\");\n\n        var isObject = util.isObject;\n\n        var es5 = _dereq_(\"./es5\");\n\n        var Es6Map;\n        if (typeof Map === \"function\") Es6Map = Map;\n\n        var mapToEntries = function () {\n          var index = 0;\n          var size = 0;\n\n          function extractEntry(value, key) {\n            this[index] = value;\n            this[index + size] = key;\n            index++;\n          }\n\n          return function mapToEntries(map) {\n            size = map.size;\n            index = 0;\n            var ret = new Array(map.size * 2);\n            map.forEach(extractEntry, ret);\n            return ret;\n          };\n        }();\n\n        var entriesToMap = function entriesToMap(entries) {\n          var ret = new Es6Map();\n          var length = entries.length / 2 | 0;\n\n          for (var i = 0; i < length; ++i) {\n            var key = entries[length + i];\n            var value = entries[i];\n            ret.set(key, value);\n          }\n\n          return ret;\n        };\n\n        function PropertiesPromiseArray(obj) {\n          var isMap = false;\n          var entries;\n\n          if (Es6Map !== undefined && obj instanceof Es6Map) {\n            entries = mapToEntries(obj);\n            isMap = true;\n          } else {\n            var keys = es5.keys(obj);\n            var len = keys.length;\n            entries = new Array(len * 2);\n\n            for (var i = 0; i < len; ++i) {\n              var key = keys[i];\n              entries[i] = obj[key];\n              entries[i + len] = key;\n            }\n          }\n\n          this.constructor$(entries);\n          this._isMap = isMap;\n\n          this._init$(undefined, isMap ? -6 : -3);\n        }\n\n        util.inherits(PropertiesPromiseArray, PromiseArray);\n\n        PropertiesPromiseArray.prototype._init = function () {};\n\n        PropertiesPromiseArray.prototype._promiseFulfilled = function (value, index) {\n          this._values[index] = value;\n          var totalResolved = ++this._totalResolved;\n\n          if (totalResolved >= this._length) {\n            var val;\n\n            if (this._isMap) {\n              val = entriesToMap(this._values);\n            } else {\n              val = {};\n              var keyOffset = this.length();\n\n              for (var i = 0, len = this.length(); i < len; ++i) {\n                val[this._values[i + keyOffset]] = this._values[i];\n              }\n            }\n\n            this._resolve(val);\n\n            return true;\n          }\n\n          return false;\n        };\n\n        PropertiesPromiseArray.prototype.shouldCopyValues = function () {\n          return false;\n        };\n\n        PropertiesPromiseArray.prototype.getActualLength = function (len) {\n          return len >> 1;\n        };\n\n        function props(promises) {\n          var ret;\n          var castValue = tryConvertToPromise(promises);\n\n          if (!isObject(castValue)) {\n            return apiRejection(\"cannot await properties of a non-object\\n\\n    See http://goo.gl/MqrFmX\\n\");\n          } else if (castValue instanceof Promise) {\n            ret = castValue._then(Promise.props, undefined, undefined, undefined, undefined);\n          } else {\n            ret = new PropertiesPromiseArray(castValue).promise();\n          }\n\n          if (castValue instanceof Promise) {\n            ret._propagateFrom(castValue, 2);\n          }\n\n          return ret;\n        }\n\n        Promise.prototype.props = function () {\n          return props(this);\n        };\n\n        Promise.props = function (promises) {\n          return props(promises);\n        };\n      };\n    }, {\n      \"./es5\": 13,\n      \"./util\": 36\n    }],\n    26: [function (_dereq_, module, exports) {\n      \"use strict\";\n\n      function arrayMove(src, srcIndex, dst, dstIndex, len) {\n        for (var j = 0; j < len; ++j) {\n          dst[j + dstIndex] = src[j + srcIndex];\n          src[j + srcIndex] = void 0;\n        }\n      }\n\n      function Queue(capacity) {\n        this._capacity = capacity;\n        this._length = 0;\n        this._front = 0;\n      }\n\n      Queue.prototype._willBeOverCapacity = function (size) {\n        return this._capacity < size;\n      };\n\n      Queue.prototype._pushOne = function (arg) {\n        var length = this.length();\n\n        this._checkCapacity(length + 1);\n\n        var i = this._front + length & this._capacity - 1;\n        this[i] = arg;\n        this._length = length + 1;\n      };\n\n      Queue.prototype.push = function (fn, receiver, arg) {\n        var length = this.length() + 3;\n\n        if (this._willBeOverCapacity(length)) {\n          this._pushOne(fn);\n\n          this._pushOne(receiver);\n\n          this._pushOne(arg);\n\n          return;\n        }\n\n        var j = this._front + length - 3;\n\n        this._checkCapacity(length);\n\n        var wrapMask = this._capacity - 1;\n        this[j + 0 & wrapMask] = fn;\n        this[j + 1 & wrapMask] = receiver;\n        this[j + 2 & wrapMask] = arg;\n        this._length = length;\n      };\n\n      Queue.prototype.shift = function () {\n        var front = this._front,\n            ret = this[front];\n        this[front] = undefined;\n        this._front = front + 1 & this._capacity - 1;\n        this._length--;\n        return ret;\n      };\n\n      Queue.prototype.length = function () {\n        return this._length;\n      };\n\n      Queue.prototype._checkCapacity = function (size) {\n        if (this._capacity < size) {\n          this._resizeTo(this._capacity << 1);\n        }\n      };\n\n      Queue.prototype._resizeTo = function (capacity) {\n        var oldCapacity = this._capacity;\n        this._capacity = capacity;\n        var front = this._front;\n        var length = this._length;\n        var moveItemsCount = front + length & oldCapacity - 1;\n        arrayMove(this, 0, this, oldCapacity, moveItemsCount);\n      };\n\n      module.exports = Queue;\n    }, {}],\n    27: [function (_dereq_, module, exports) {\n      \"use strict\";\n\n      module.exports = function (Promise, INTERNAL, tryConvertToPromise, apiRejection) {\n        var util = _dereq_(\"./util\");\n\n        var raceLater = function raceLater(promise) {\n          return promise.then(function (array) {\n            return race(array, promise);\n          });\n        };\n\n        function race(promises, parent) {\n          var maybePromise = tryConvertToPromise(promises);\n\n          if (maybePromise instanceof Promise) {\n            return raceLater(maybePromise);\n          } else {\n            promises = util.asArray(promises);\n            if (promises === null) return apiRejection(\"expecting an array or an iterable object but got \" + util.classString(promises));\n          }\n\n          var ret = new Promise(INTERNAL);\n\n          if (parent !== undefined) {\n            ret._propagateFrom(parent, 3);\n          }\n\n          var fulfill = ret._fulfill;\n          var reject = ret._reject;\n\n          for (var i = 0, len = promises.length; i < len; ++i) {\n            var val = promises[i];\n\n            if (val === undefined && !(i in promises)) {\n              continue;\n            }\n\n            Promise.cast(val)._then(fulfill, reject, undefined, ret, null);\n          }\n\n          return ret;\n        }\n\n        Promise.race = function (promises) {\n          return race(promises, undefined);\n        };\n\n        Promise.prototype.race = function () {\n          return race(this, undefined);\n        };\n      };\n    }, {\n      \"./util\": 36\n    }],\n    28: [function (_dereq_, module, exports) {\n      \"use strict\";\n\n      module.exports = function (Promise, PromiseArray, apiRejection, tryConvertToPromise, INTERNAL, debug) {\n        var getDomain = Promise._getDomain;\n\n        var util = _dereq_(\"./util\");\n\n        var tryCatch = util.tryCatch;\n\n        function ReductionPromiseArray(promises, fn, initialValue, _each) {\n          this.constructor$(promises);\n          var domain = getDomain();\n          this._fn = domain === null ? fn : util.domainBind(domain, fn);\n\n          if (initialValue !== undefined) {\n            initialValue = Promise.resolve(initialValue);\n\n            initialValue._attachCancellationCallback(this);\n          }\n\n          this._initialValue = initialValue;\n          this._currentCancellable = null;\n\n          if (_each === INTERNAL) {\n            this._eachValues = Array(this._length);\n          } else if (_each === 0) {\n            this._eachValues = null;\n          } else {\n            this._eachValues = undefined;\n          }\n\n          this._promise._captureStackTrace();\n\n          this._init$(undefined, -5);\n        }\n\n        util.inherits(ReductionPromiseArray, PromiseArray);\n\n        ReductionPromiseArray.prototype._gotAccum = function (accum) {\n          if (this._eachValues !== undefined && this._eachValues !== null && accum !== INTERNAL) {\n            this._eachValues.push(accum);\n          }\n        };\n\n        ReductionPromiseArray.prototype._eachComplete = function (value) {\n          if (this._eachValues !== null) {\n            this._eachValues.push(value);\n          }\n\n          return this._eachValues;\n        };\n\n        ReductionPromiseArray.prototype._init = function () {};\n\n        ReductionPromiseArray.prototype._resolveEmptyArray = function () {\n          this._resolve(this._eachValues !== undefined ? this._eachValues : this._initialValue);\n        };\n\n        ReductionPromiseArray.prototype.shouldCopyValues = function () {\n          return false;\n        };\n\n        ReductionPromiseArray.prototype._resolve = function (value) {\n          this._promise._resolveCallback(value);\n\n          this._values = null;\n        };\n\n        ReductionPromiseArray.prototype._resultCancelled = function (sender) {\n          if (sender === this._initialValue) return this._cancel();\n          if (this._isResolved()) return;\n\n          this._resultCancelled$();\n\n          if (this._currentCancellable instanceof Promise) {\n            this._currentCancellable.cancel();\n          }\n\n          if (this._initialValue instanceof Promise) {\n            this._initialValue.cancel();\n          }\n        };\n\n        ReductionPromiseArray.prototype._iterate = function (values) {\n          this._values = values;\n          var value;\n          var i;\n          var length = values.length;\n\n          if (this._initialValue !== undefined) {\n            value = this._initialValue;\n            i = 0;\n          } else {\n            value = Promise.resolve(values[0]);\n            i = 1;\n          }\n\n          this._currentCancellable = value;\n\n          if (!value.isRejected()) {\n            for (; i < length; ++i) {\n              var ctx = {\n                accum: null,\n                value: values[i],\n                index: i,\n                length: length,\n                array: this\n              };\n              value = value._then(gotAccum, undefined, undefined, ctx, undefined);\n            }\n          }\n\n          if (this._eachValues !== undefined) {\n            value = value._then(this._eachComplete, undefined, undefined, this, undefined);\n          }\n\n          value._then(completed, completed, undefined, value, this);\n        };\n\n        Promise.prototype.reduce = function (fn, initialValue) {\n          return reduce(this, fn, initialValue, null);\n        };\n\n        Promise.reduce = function (promises, fn, initialValue, _each) {\n          return reduce(promises, fn, initialValue, _each);\n        };\n\n        function completed(valueOrReason, array) {\n          if (this.isFulfilled()) {\n            array._resolve(valueOrReason);\n          } else {\n            array._reject(valueOrReason);\n          }\n        }\n\n        function reduce(promises, fn, initialValue, _each) {\n          if (typeof fn !== \"function\") {\n            return apiRejection(\"expecting a function but got \" + util.classString(fn));\n          }\n\n          var array = new ReductionPromiseArray(promises, fn, initialValue, _each);\n          return array.promise();\n        }\n\n        function gotAccum(accum) {\n          this.accum = accum;\n\n          this.array._gotAccum(accum);\n\n          var value = tryConvertToPromise(this.value, this.array._promise);\n\n          if (value instanceof Promise) {\n            this.array._currentCancellable = value;\n            return value._then(gotValue, undefined, undefined, this, undefined);\n          } else {\n            return gotValue.call(this, value);\n          }\n        }\n\n        function gotValue(value) {\n          var array = this.array;\n          var promise = array._promise;\n          var fn = tryCatch(array._fn);\n\n          promise._pushContext();\n\n          var ret;\n\n          if (array._eachValues !== undefined) {\n            ret = fn.call(promise._boundValue(), value, this.index, this.length);\n          } else {\n            ret = fn.call(promise._boundValue(), this.accum, value, this.index, this.length);\n          }\n\n          if (ret instanceof Promise) {\n            array._currentCancellable = ret;\n          }\n\n          var promiseCreated = promise._popContext();\n\n          debug.checkForgottenReturns(ret, promiseCreated, array._eachValues !== undefined ? \"Promise.each\" : \"Promise.reduce\", promise);\n          return ret;\n        }\n      };\n    }, {\n      \"./util\": 36\n    }],\n    29: [function (_dereq_, module, exports) {\n      \"use strict\";\n\n      var util = _dereq_(\"./util\");\n\n      var schedule;\n\n      var noAsyncScheduler = function noAsyncScheduler() {\n        throw new Error(\"No async scheduler available\\n\\n    See http://goo.gl/MqrFmX\\n\");\n      };\n\n      var NativePromise = util.getNativePromise();\n\n      if (util.isNode && typeof MutationObserver === \"undefined\") {\n        var GlobalSetImmediate = global.setImmediate;\n        var ProcessNextTick = process.nextTick;\n        schedule = util.isRecentNode ? function (fn) {\n          GlobalSetImmediate.call(global, fn);\n        } : function (fn) {\n          ProcessNextTick.call(process, fn);\n        };\n      } else if (typeof NativePromise === \"function\" && typeof NativePromise.resolve === \"function\") {\n        var nativePromise = NativePromise.resolve();\n\n        schedule = function schedule(fn) {\n          nativePromise.then(fn);\n        };\n      } else if (typeof MutationObserver !== \"undefined\" && !(typeof window !== \"undefined\" && window.navigator && (window.navigator.standalone || window.cordova))) {\n        schedule = function () {\n          var div = document.createElement(\"div\");\n          var opts = {\n            attributes: true\n          };\n          var toggleScheduled = false;\n          var div2 = document.createElement(\"div\");\n          var o2 = new MutationObserver(function () {\n            div.classList.toggle(\"foo\");\n            toggleScheduled = false;\n          });\n          o2.observe(div2, opts);\n\n          var scheduleToggle = function scheduleToggle() {\n            if (toggleScheduled) return;\n            toggleScheduled = true;\n            div2.classList.toggle(\"foo\");\n          };\n\n          return function schedule(fn) {\n            var o = new MutationObserver(function () {\n              o.disconnect();\n              fn();\n            });\n            o.observe(div, opts);\n            scheduleToggle();\n          };\n        }();\n      } else if (typeof setImmediate !== \"undefined\") {\n        schedule = function schedule(fn) {\n          setImmediate(fn);\n        };\n      } else if (typeof setTimeout !== \"undefined\") {\n        schedule = function schedule(fn) {\n          setTimeout(fn, 0);\n        };\n      } else {\n        schedule = noAsyncScheduler;\n      }\n\n      module.exports = schedule;\n    }, {\n      \"./util\": 36\n    }],\n    30: [function (_dereq_, module, exports) {\n      \"use strict\";\n\n      module.exports = function (Promise, PromiseArray, debug) {\n        var PromiseInspection = Promise.PromiseInspection;\n\n        var util = _dereq_(\"./util\");\n\n        function SettledPromiseArray(values) {\n          this.constructor$(values);\n        }\n\n        util.inherits(SettledPromiseArray, PromiseArray);\n\n        SettledPromiseArray.prototype._promiseResolved = function (index, inspection) {\n          this._values[index] = inspection;\n          var totalResolved = ++this._totalResolved;\n\n          if (totalResolved >= this._length) {\n            this._resolve(this._values);\n\n            return true;\n          }\n\n          return false;\n        };\n\n        SettledPromiseArray.prototype._promiseFulfilled = function (value, index) {\n          var ret = new PromiseInspection();\n          ret._bitField = 33554432;\n          ret._settledValueField = value;\n          return this._promiseResolved(index, ret);\n        };\n\n        SettledPromiseArray.prototype._promiseRejected = function (reason, index) {\n          var ret = new PromiseInspection();\n          ret._bitField = 16777216;\n          ret._settledValueField = reason;\n          return this._promiseResolved(index, ret);\n        };\n\n        Promise.settle = function (promises) {\n          debug.deprecated(\".settle()\", \".reflect()\");\n          return new SettledPromiseArray(promises).promise();\n        };\n\n        Promise.prototype.settle = function () {\n          return Promise.settle(this);\n        };\n      };\n    }, {\n      \"./util\": 36\n    }],\n    31: [function (_dereq_, module, exports) {\n      \"use strict\";\n\n      module.exports = function (Promise, PromiseArray, apiRejection) {\n        var util = _dereq_(\"./util\");\n\n        var RangeError = _dereq_(\"./errors\").RangeError;\n\n        var AggregateError = _dereq_(\"./errors\").AggregateError;\n\n        var isArray = util.isArray;\n        var CANCELLATION = {};\n\n        function SomePromiseArray(values) {\n          this.constructor$(values);\n          this._howMany = 0;\n          this._unwrap = false;\n          this._initialized = false;\n        }\n\n        util.inherits(SomePromiseArray, PromiseArray);\n\n        SomePromiseArray.prototype._init = function () {\n          if (!this._initialized) {\n            return;\n          }\n\n          if (this._howMany === 0) {\n            this._resolve([]);\n\n            return;\n          }\n\n          this._init$(undefined, -5);\n\n          var isArrayResolved = isArray(this._values);\n\n          if (!this._isResolved() && isArrayResolved && this._howMany > this._canPossiblyFulfill()) {\n            this._reject(this._getRangeError(this.length()));\n          }\n        };\n\n        SomePromiseArray.prototype.init = function () {\n          this._initialized = true;\n\n          this._init();\n        };\n\n        SomePromiseArray.prototype.setUnwrap = function () {\n          this._unwrap = true;\n        };\n\n        SomePromiseArray.prototype.howMany = function () {\n          return this._howMany;\n        };\n\n        SomePromiseArray.prototype.setHowMany = function (count) {\n          this._howMany = count;\n        };\n\n        SomePromiseArray.prototype._promiseFulfilled = function (value) {\n          this._addFulfilled(value);\n\n          if (this._fulfilled() === this.howMany()) {\n            this._values.length = this.howMany();\n\n            if (this.howMany() === 1 && this._unwrap) {\n              this._resolve(this._values[0]);\n            } else {\n              this._resolve(this._values);\n            }\n\n            return true;\n          }\n\n          return false;\n        };\n\n        SomePromiseArray.prototype._promiseRejected = function (reason) {\n          this._addRejected(reason);\n\n          return this._checkOutcome();\n        };\n\n        SomePromiseArray.prototype._promiseCancelled = function () {\n          if (this._values instanceof Promise || this._values == null) {\n            return this._cancel();\n          }\n\n          this._addRejected(CANCELLATION);\n\n          return this._checkOutcome();\n        };\n\n        SomePromiseArray.prototype._checkOutcome = function () {\n          if (this.howMany() > this._canPossiblyFulfill()) {\n            var e = new AggregateError();\n\n            for (var i = this.length(); i < this._values.length; ++i) {\n              if (this._values[i] !== CANCELLATION) {\n                e.push(this._values[i]);\n              }\n            }\n\n            if (e.length > 0) {\n              this._reject(e);\n            } else {\n              this._cancel();\n            }\n\n            return true;\n          }\n\n          return false;\n        };\n\n        SomePromiseArray.prototype._fulfilled = function () {\n          return this._totalResolved;\n        };\n\n        SomePromiseArray.prototype._rejected = function () {\n          return this._values.length - this.length();\n        };\n\n        SomePromiseArray.prototype._addRejected = function (reason) {\n          this._values.push(reason);\n        };\n\n        SomePromiseArray.prototype._addFulfilled = function (value) {\n          this._values[this._totalResolved++] = value;\n        };\n\n        SomePromiseArray.prototype._canPossiblyFulfill = function () {\n          return this.length() - this._rejected();\n        };\n\n        SomePromiseArray.prototype._getRangeError = function (count) {\n          var message = \"Input array must contain at least \" + this._howMany + \" items but contains only \" + count + \" items\";\n          return new RangeError(message);\n        };\n\n        SomePromiseArray.prototype._resolveEmptyArray = function () {\n          this._reject(this._getRangeError(0));\n        };\n\n        function some(promises, howMany) {\n          if ((howMany | 0) !== howMany || howMany < 0) {\n            return apiRejection(\"expecting a positive integer\\n\\n    See http://goo.gl/MqrFmX\\n\");\n          }\n\n          var ret = new SomePromiseArray(promises);\n          var promise = ret.promise();\n          ret.setHowMany(howMany);\n          ret.init();\n          return promise;\n        }\n\n        Promise.some = function (promises, howMany) {\n          return some(promises, howMany);\n        };\n\n        Promise.prototype.some = function (howMany) {\n          return some(this, howMany);\n        };\n\n        Promise._SomePromiseArray = SomePromiseArray;\n      };\n    }, {\n      \"./errors\": 12,\n      \"./util\": 36\n    }],\n    32: [function (_dereq_, module, exports) {\n      \"use strict\";\n\n      module.exports = function (Promise) {\n        function PromiseInspection(promise) {\n          if (promise !== undefined) {\n            promise = promise._target();\n            this._bitField = promise._bitField;\n            this._settledValueField = promise._isFateSealed() ? promise._settledValue() : undefined;\n          } else {\n            this._bitField = 0;\n            this._settledValueField = undefined;\n          }\n        }\n\n        PromiseInspection.prototype._settledValue = function () {\n          return this._settledValueField;\n        };\n\n        var value = PromiseInspection.prototype.value = function () {\n          if (!this.isFulfilled()) {\n            throw new TypeError(\"cannot get fulfillment value of a non-fulfilled promise\\n\\n    See http://goo.gl/MqrFmX\\n\");\n          }\n\n          return this._settledValue();\n        };\n\n        var reason = PromiseInspection.prototype.error = PromiseInspection.prototype.reason = function () {\n          if (!this.isRejected()) {\n            throw new TypeError(\"cannot get rejection reason of a non-rejected promise\\n\\n    See http://goo.gl/MqrFmX\\n\");\n          }\n\n          return this._settledValue();\n        };\n\n        var isFulfilled = PromiseInspection.prototype.isFulfilled = function () {\n          return (this._bitField & 33554432) !== 0;\n        };\n\n        var isRejected = PromiseInspection.prototype.isRejected = function () {\n          return (this._bitField & 16777216) !== 0;\n        };\n\n        var isPending = PromiseInspection.prototype.isPending = function () {\n          return (this._bitField & 50397184) === 0;\n        };\n\n        var isResolved = PromiseInspection.prototype.isResolved = function () {\n          return (this._bitField & 50331648) !== 0;\n        };\n\n        PromiseInspection.prototype.isCancelled = function () {\n          return (this._bitField & 8454144) !== 0;\n        };\n\n        Promise.prototype.__isCancelled = function () {\n          return (this._bitField & 65536) === 65536;\n        };\n\n        Promise.prototype._isCancelled = function () {\n          return this._target().__isCancelled();\n        };\n\n        Promise.prototype.isCancelled = function () {\n          return (this._target()._bitField & 8454144) !== 0;\n        };\n\n        Promise.prototype.isPending = function () {\n          return isPending.call(this._target());\n        };\n\n        Promise.prototype.isRejected = function () {\n          return isRejected.call(this._target());\n        };\n\n        Promise.prototype.isFulfilled = function () {\n          return isFulfilled.call(this._target());\n        };\n\n        Promise.prototype.isResolved = function () {\n          return isResolved.call(this._target());\n        };\n\n        Promise.prototype.value = function () {\n          return value.call(this._target());\n        };\n\n        Promise.prototype.reason = function () {\n          var target = this._target();\n\n          target._unsetRejectionIsUnhandled();\n\n          return reason.call(target);\n        };\n\n        Promise.prototype._value = function () {\n          return this._settledValue();\n        };\n\n        Promise.prototype._reason = function () {\n          this._unsetRejectionIsUnhandled();\n\n          return this._settledValue();\n        };\n\n        Promise.PromiseInspection = PromiseInspection;\n      };\n    }, {}],\n    33: [function (_dereq_, module, exports) {\n      \"use strict\";\n\n      module.exports = function (Promise, INTERNAL) {\n        var util = _dereq_(\"./util\");\n\n        var errorObj = util.errorObj;\n        var isObject = util.isObject;\n\n        function tryConvertToPromise(obj, context) {\n          if (isObject(obj)) {\n            if (obj instanceof Promise) return obj;\n            var then = getThen(obj);\n\n            if (then === errorObj) {\n              if (context) context._pushContext();\n              var ret = Promise.reject(then.e);\n              if (context) context._popContext();\n              return ret;\n            } else if (typeof then === \"function\") {\n              if (isAnyBluebirdPromise(obj)) {\n                var ret = new Promise(INTERNAL);\n\n                obj._then(ret._fulfill, ret._reject, undefined, ret, null);\n\n                return ret;\n              }\n\n              return doThenable(obj, then, context);\n            }\n          }\n\n          return obj;\n        }\n\n        function doGetThen(obj) {\n          return obj.then;\n        }\n\n        function getThen(obj) {\n          try {\n            return doGetThen(obj);\n          } catch (e) {\n            errorObj.e = e;\n            return errorObj;\n          }\n        }\n\n        var hasProp = {}.hasOwnProperty;\n\n        function isAnyBluebirdPromise(obj) {\n          try {\n            return hasProp.call(obj, \"_promise0\");\n          } catch (e) {\n            return false;\n          }\n        }\n\n        function doThenable(x, then, context) {\n          var promise = new Promise(INTERNAL);\n          var ret = promise;\n          if (context) context._pushContext();\n\n          promise._captureStackTrace();\n\n          if (context) context._popContext();\n          var synchronous = true;\n          var result = util.tryCatch(then).call(x, resolve, reject);\n          synchronous = false;\n\n          if (promise && result === errorObj) {\n            promise._rejectCallback(result.e, true, true);\n\n            promise = null;\n          }\n\n          function resolve(value) {\n            if (!promise) return;\n\n            promise._resolveCallback(value);\n\n            promise = null;\n          }\n\n          function reject(reason) {\n            if (!promise) return;\n\n            promise._rejectCallback(reason, synchronous, true);\n\n            promise = null;\n          }\n\n          return ret;\n        }\n\n        return tryConvertToPromise;\n      };\n    }, {\n      \"./util\": 36\n    }],\n    34: [function (_dereq_, module, exports) {\n      \"use strict\";\n\n      module.exports = function (Promise, INTERNAL, debug) {\n        var util = _dereq_(\"./util\");\n\n        var TimeoutError = Promise.TimeoutError;\n\n        function HandleWrapper(handle) {\n          this.handle = handle;\n        }\n\n        HandleWrapper.prototype._resultCancelled = function () {\n          clearTimeout(this.handle);\n        };\n\n        var afterValue = function afterValue(value) {\n          return delay(+this).thenReturn(value);\n        };\n\n        var delay = Promise.delay = function (ms, value) {\n          var ret;\n          var handle;\n\n          if (value !== undefined) {\n            ret = Promise.resolve(value)._then(afterValue, null, null, ms, undefined);\n\n            if (debug.cancellation() && value instanceof Promise) {\n              ret._setOnCancel(value);\n            }\n          } else {\n            ret = new Promise(INTERNAL);\n            handle = setTimeout(function () {\n              ret._fulfill();\n            }, +ms);\n\n            if (debug.cancellation()) {\n              ret._setOnCancel(new HandleWrapper(handle));\n            }\n\n            ret._captureStackTrace();\n          }\n\n          ret._setAsyncGuaranteed();\n\n          return ret;\n        };\n\n        Promise.prototype.delay = function (ms) {\n          return delay(ms, this);\n        };\n\n        var afterTimeout = function afterTimeout(promise, message, parent) {\n          var err;\n\n          if (typeof message !== \"string\") {\n            if (message instanceof Error) {\n              err = message;\n            } else {\n              err = new TimeoutError(\"operation timed out\");\n            }\n          } else {\n            err = new TimeoutError(message);\n          }\n\n          util.markAsOriginatingFromRejection(err);\n\n          promise._attachExtraTrace(err);\n\n          promise._reject(err);\n\n          if (parent != null) {\n            parent.cancel();\n          }\n        };\n\n        function successClear(value) {\n          clearTimeout(this.handle);\n          return value;\n        }\n\n        function failureClear(reason) {\n          clearTimeout(this.handle);\n          throw reason;\n        }\n\n        Promise.prototype.timeout = function (ms, message) {\n          ms = +ms;\n          var ret, parent;\n          var handleWrapper = new HandleWrapper(setTimeout(function timeoutTimeout() {\n            if (ret.isPending()) {\n              afterTimeout(ret, message, parent);\n            }\n          }, ms));\n\n          if (debug.cancellation()) {\n            parent = this.then();\n            ret = parent._then(successClear, failureClear, undefined, handleWrapper, undefined);\n\n            ret._setOnCancel(handleWrapper);\n          } else {\n            ret = this._then(successClear, failureClear, undefined, handleWrapper, undefined);\n          }\n\n          return ret;\n        };\n      };\n    }, {\n      \"./util\": 36\n    }],\n    35: [function (_dereq_, module, exports) {\n      \"use strict\";\n\n      module.exports = function (Promise, apiRejection, tryConvertToPromise, createContext, INTERNAL, debug) {\n        var util = _dereq_(\"./util\");\n\n        var TypeError = _dereq_(\"./errors\").TypeError;\n\n        var inherits = _dereq_(\"./util\").inherits;\n\n        var errorObj = util.errorObj;\n        var tryCatch = util.tryCatch;\n        var NULL = {};\n\n        function thrower(e) {\n          setTimeout(function () {\n            throw e;\n          }, 0);\n        }\n\n        function castPreservingDisposable(thenable) {\n          var maybePromise = tryConvertToPromise(thenable);\n\n          if (maybePromise !== thenable && typeof thenable._isDisposable === \"function\" && typeof thenable._getDisposer === \"function\" && thenable._isDisposable()) {\n            maybePromise._setDisposable(thenable._getDisposer());\n          }\n\n          return maybePromise;\n        }\n\n        function dispose(resources, inspection) {\n          var i = 0;\n          var len = resources.length;\n          var ret = new Promise(INTERNAL);\n\n          function iterator() {\n            if (i >= len) return ret._fulfill();\n            var maybePromise = castPreservingDisposable(resources[i++]);\n\n            if (maybePromise instanceof Promise && maybePromise._isDisposable()) {\n              try {\n                maybePromise = tryConvertToPromise(maybePromise._getDisposer().tryDispose(inspection), resources.promise);\n              } catch (e) {\n                return thrower(e);\n              }\n\n              if (maybePromise instanceof Promise) {\n                return maybePromise._then(iterator, thrower, null, null, null);\n              }\n            }\n\n            iterator();\n          }\n\n          iterator();\n          return ret;\n        }\n\n        function Disposer(data, promise, context) {\n          this._data = data;\n          this._promise = promise;\n          this._context = context;\n        }\n\n        Disposer.prototype.data = function () {\n          return this._data;\n        };\n\n        Disposer.prototype.promise = function () {\n          return this._promise;\n        };\n\n        Disposer.prototype.resource = function () {\n          if (this.promise().isFulfilled()) {\n            return this.promise().value();\n          }\n\n          return NULL;\n        };\n\n        Disposer.prototype.tryDispose = function (inspection) {\n          var resource = this.resource();\n          var context = this._context;\n          if (context !== undefined) context._pushContext();\n          var ret = resource !== NULL ? this.doDispose(resource, inspection) : null;\n          if (context !== undefined) context._popContext();\n\n          this._promise._unsetDisposable();\n\n          this._data = null;\n          return ret;\n        };\n\n        Disposer.isDisposer = function (d) {\n          return d != null && typeof d.resource === \"function\" && typeof d.tryDispose === \"function\";\n        };\n\n        function FunctionDisposer(fn, promise, context) {\n          this.constructor$(fn, promise, context);\n        }\n\n        inherits(FunctionDisposer, Disposer);\n\n        FunctionDisposer.prototype.doDispose = function (resource, inspection) {\n          var fn = this.data();\n          return fn.call(resource, resource, inspection);\n        };\n\n        function maybeUnwrapDisposer(value) {\n          if (Disposer.isDisposer(value)) {\n            this.resources[this.index]._setDisposable(value);\n\n            return value.promise();\n          }\n\n          return value;\n        }\n\n        function ResourceList(length) {\n          this.length = length;\n          this.promise = null;\n          this[length - 1] = null;\n        }\n\n        ResourceList.prototype._resultCancelled = function () {\n          var len = this.length;\n\n          for (var i = 0; i < len; ++i) {\n            var item = this[i];\n\n            if (item instanceof Promise) {\n              item.cancel();\n            }\n          }\n        };\n\n        Promise.using = function () {\n          var len = arguments.length;\n          if (len < 2) return apiRejection(\"you must pass at least 2 arguments to Promise.using\");\n          var fn = arguments[len - 1];\n\n          if (typeof fn !== \"function\") {\n            return apiRejection(\"expecting a function but got \" + util.classString(fn));\n          }\n\n          var input;\n          var spreadArgs = true;\n\n          if (len === 2 && Array.isArray(arguments[0])) {\n            input = arguments[0];\n            len = input.length;\n            spreadArgs = false;\n          } else {\n            input = arguments;\n            len--;\n          }\n\n          var resources = new ResourceList(len);\n\n          for (var i = 0; i < len; ++i) {\n            var resource = input[i];\n\n            if (Disposer.isDisposer(resource)) {\n              var disposer = resource;\n              resource = resource.promise();\n\n              resource._setDisposable(disposer);\n            } else {\n              var maybePromise = tryConvertToPromise(resource);\n\n              if (maybePromise instanceof Promise) {\n                resource = maybePromise._then(maybeUnwrapDisposer, null, null, {\n                  resources: resources,\n                  index: i\n                }, undefined);\n              }\n            }\n\n            resources[i] = resource;\n          }\n\n          var reflectedResources = new Array(resources.length);\n\n          for (var i = 0; i < reflectedResources.length; ++i) {\n            reflectedResources[i] = Promise.resolve(resources[i]).reflect();\n          }\n\n          var resultPromise = Promise.all(reflectedResources).then(function (inspections) {\n            for (var i = 0; i < inspections.length; ++i) {\n              var inspection = inspections[i];\n\n              if (inspection.isRejected()) {\n                errorObj.e = inspection.error();\n                return errorObj;\n              } else if (!inspection.isFulfilled()) {\n                resultPromise.cancel();\n                return;\n              }\n\n              inspections[i] = inspection.value();\n            }\n\n            promise._pushContext();\n\n            fn = tryCatch(fn);\n            var ret = spreadArgs ? fn.apply(undefined, inspections) : fn(inspections);\n\n            var promiseCreated = promise._popContext();\n\n            debug.checkForgottenReturns(ret, promiseCreated, \"Promise.using\", promise);\n            return ret;\n          });\n          var promise = resultPromise.lastly(function () {\n            var inspection = new Promise.PromiseInspection(resultPromise);\n            return dispose(resources, inspection);\n          });\n          resources.promise = promise;\n\n          promise._setOnCancel(resources);\n\n          return promise;\n        };\n\n        Promise.prototype._setDisposable = function (disposer) {\n          this._bitField = this._bitField | 131072;\n          this._disposer = disposer;\n        };\n\n        Promise.prototype._isDisposable = function () {\n          return (this._bitField & 131072) > 0;\n        };\n\n        Promise.prototype._getDisposer = function () {\n          return this._disposer;\n        };\n\n        Promise.prototype._unsetDisposable = function () {\n          this._bitField = this._bitField & ~131072;\n          this._disposer = undefined;\n        };\n\n        Promise.prototype.disposer = function (fn) {\n          if (typeof fn === \"function\") {\n            return new FunctionDisposer(fn, this, createContext());\n          }\n\n          throw new TypeError();\n        };\n      };\n    }, {\n      \"./errors\": 12,\n      \"./util\": 36\n    }],\n    36: [function (_dereq_, module, exports) {\n      \"use strict\";\n\n      var es5 = _dereq_(\"./es5\");\n\n      var canEvaluate = typeof navigator == \"undefined\";\n      var errorObj = {\n        e: {}\n      };\n      var tryCatchTarget;\n      var globalObject = typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : typeof global !== \"undefined\" ? global : this !== undefined ? this : null;\n\n      function tryCatcher() {\n        try {\n          var target = tryCatchTarget;\n          tryCatchTarget = null;\n          return target.apply(this, arguments);\n        } catch (e) {\n          errorObj.e = e;\n          return errorObj;\n        }\n      }\n\n      function tryCatch(fn) {\n        tryCatchTarget = fn;\n        return tryCatcher;\n      }\n\n      var inherits = function inherits(Child, Parent) {\n        var hasProp = {}.hasOwnProperty;\n\n        function T() {\n          this.constructor = Child;\n          this.constructor$ = Parent;\n\n          for (var propertyName in Parent.prototype) {\n            if (hasProp.call(Parent.prototype, propertyName) && propertyName.charAt(propertyName.length - 1) !== \"$\") {\n              this[propertyName + \"$\"] = Parent.prototype[propertyName];\n            }\n          }\n        }\n\n        T.prototype = Parent.prototype;\n        Child.prototype = new T();\n        return Child.prototype;\n      };\n\n      function isPrimitive(val) {\n        return val == null || val === true || val === false || typeof val === \"string\" || typeof val === \"number\";\n      }\n\n      function isObject(value) {\n        return typeof value === \"function\" || _typeof(value) === \"object\" && value !== null;\n      }\n\n      function maybeWrapAsError(maybeError) {\n        if (!isPrimitive(maybeError)) return maybeError;\n        return new Error(safeToString(maybeError));\n      }\n\n      function withAppended(target, appendee) {\n        var len = target.length;\n        var ret = new Array(len + 1);\n        var i;\n\n        for (i = 0; i < len; ++i) {\n          ret[i] = target[i];\n        }\n\n        ret[i] = appendee;\n        return ret;\n      }\n\n      function getDataPropertyOrDefault(obj, key, defaultValue) {\n        if (es5.isES5) {\n          var desc = Object.getOwnPropertyDescriptor(obj, key);\n\n          if (desc != null) {\n            return desc.get == null && desc.set == null ? desc.value : defaultValue;\n          }\n        } else {\n          return {}.hasOwnProperty.call(obj, key) ? obj[key] : undefined;\n        }\n      }\n\n      function notEnumerableProp(obj, name, value) {\n        if (isPrimitive(obj)) return obj;\n        var descriptor = {\n          value: value,\n          configurable: true,\n          enumerable: false,\n          writable: true\n        };\n        es5.defineProperty(obj, name, descriptor);\n        return obj;\n      }\n\n      function thrower(r) {\n        throw r;\n      }\n\n      var inheritedDataKeys = function () {\n        var excludedPrototypes = [Array.prototype, Object.prototype, Function.prototype];\n\n        var isExcludedProto = function isExcludedProto(val) {\n          for (var i = 0; i < excludedPrototypes.length; ++i) {\n            if (excludedPrototypes[i] === val) {\n              return true;\n            }\n          }\n\n          return false;\n        };\n\n        if (es5.isES5) {\n          var getKeys = Object.getOwnPropertyNames;\n          return function (obj) {\n            var ret = [];\n            var visitedKeys = Object.create(null);\n\n            while (obj != null && !isExcludedProto(obj)) {\n              var keys;\n\n              try {\n                keys = getKeys(obj);\n              } catch (e) {\n                return ret;\n              }\n\n              for (var i = 0; i < keys.length; ++i) {\n                var key = keys[i];\n                if (visitedKeys[key]) continue;\n                visitedKeys[key] = true;\n                var desc = Object.getOwnPropertyDescriptor(obj, key);\n\n                if (desc != null && desc.get == null && desc.set == null) {\n                  ret.push(key);\n                }\n              }\n\n              obj = es5.getPrototypeOf(obj);\n            }\n\n            return ret;\n          };\n        } else {\n          var hasProp = {}.hasOwnProperty;\n          return function (obj) {\n            if (isExcludedProto(obj)) return [];\n            var ret = [];\n            /*jshint forin:false */\n\n            enumeration: for (var key in obj) {\n              if (hasProp.call(obj, key)) {\n                ret.push(key);\n              } else {\n                for (var i = 0; i < excludedPrototypes.length; ++i) {\n                  if (hasProp.call(excludedPrototypes[i], key)) {\n                    continue enumeration;\n                  }\n                }\n\n                ret.push(key);\n              }\n            }\n\n            return ret;\n          };\n        }\n      }();\n\n      var thisAssignmentPattern = /this\\s*\\.\\s*\\S+\\s*=/;\n\n      function isClass(fn) {\n        try {\n          if (typeof fn === \"function\") {\n            var keys = es5.names(fn.prototype);\n            var hasMethods = es5.isES5 && keys.length > 1;\n            var hasMethodsOtherThanConstructor = keys.length > 0 && !(keys.length === 1 && keys[0] === \"constructor\");\n            var hasThisAssignmentAndStaticMethods = thisAssignmentPattern.test(fn + \"\") && es5.names(fn).length > 0;\n\n            if (hasMethods || hasMethodsOtherThanConstructor || hasThisAssignmentAndStaticMethods) {\n              return true;\n            }\n          }\n\n          return false;\n        } catch (e) {\n          return false;\n        }\n      }\n\n      function toFastProperties(obj) {\n        /*jshint -W027,-W055,-W031*/\n        function FakeConstructor() {}\n\n        FakeConstructor.prototype = obj;\n        var receiver = new FakeConstructor();\n\n        function ic() {\n          return _typeof(receiver.foo);\n        }\n\n        ic();\n        ic();\n        return obj;\n        eval(obj);\n      }\n\n      var rident = /^[a-z$_][a-z$_0-9]*$/i;\n\n      function isIdentifier(str) {\n        return rident.test(str);\n      }\n\n      function filledRange(count, prefix, suffix) {\n        var ret = new Array(count);\n\n        for (var i = 0; i < count; ++i) {\n          ret[i] = prefix + i + suffix;\n        }\n\n        return ret;\n      }\n\n      function safeToString(obj) {\n        try {\n          return obj + \"\";\n        } catch (e) {\n          return \"[no string representation]\";\n        }\n      }\n\n      function isError(obj) {\n        return obj instanceof Error || obj !== null && _typeof(obj) === \"object\" && typeof obj.message === \"string\" && typeof obj.name === \"string\";\n      }\n\n      function markAsOriginatingFromRejection(e) {\n        try {\n          notEnumerableProp(e, \"isOperational\", true);\n        } catch (ignore) {}\n      }\n\n      function originatesFromRejection(e) {\n        if (e == null) return false;\n        return e instanceof Error[\"__BluebirdErrorTypes__\"].OperationalError || e[\"isOperational\"] === true;\n      }\n\n      function canAttachTrace(obj) {\n        return isError(obj) && es5.propertyIsWritable(obj, \"stack\");\n      }\n\n      var ensureErrorObject = function () {\n        if (!(\"stack\" in new Error())) {\n          return function (value) {\n            if (canAttachTrace(value)) return value;\n\n            try {\n              throw new Error(safeToString(value));\n            } catch (err) {\n              return err;\n            }\n          };\n        } else {\n          return function (value) {\n            if (canAttachTrace(value)) return value;\n            return new Error(safeToString(value));\n          };\n        }\n      }();\n\n      function classString(obj) {\n        return {}.toString.call(obj);\n      }\n\n      function copyDescriptors(from, to, filter) {\n        var keys = es5.names(from);\n\n        for (var i = 0; i < keys.length; ++i) {\n          var key = keys[i];\n\n          if (filter(key)) {\n            try {\n              es5.defineProperty(to, key, es5.getDescriptor(from, key));\n            } catch (ignore) {}\n          }\n        }\n      }\n\n      var asArray = function asArray(v) {\n        if (es5.isArray(v)) {\n          return v;\n        }\n\n        return null;\n      };\n\n      if (typeof Symbol !== \"undefined\" && Symbol.iterator) {\n        var ArrayFrom = typeof Array.from === \"function\" ? function (v) {\n          return Array.from(v);\n        } : function (v) {\n          var ret = [];\n          var it = v[Symbol.iterator]();\n          var itResult;\n\n          while (!(itResult = it.next()).done) {\n            ret.push(itResult.value);\n          }\n\n          return ret;\n        };\n\n        asArray = function asArray(v) {\n          if (es5.isArray(v)) {\n            return v;\n          } else if (v != null && typeof v[Symbol.iterator] === \"function\") {\n            return ArrayFrom(v);\n          }\n\n          return null;\n        };\n      }\n\n      var isNode = typeof process !== \"undefined\" && classString(process).toLowerCase() === \"[object process]\";\n      var hasEnvVariables = typeof process !== \"undefined\" && typeof process.env !== \"undefined\";\n\n      function env(key) {\n        return hasEnvVariables ? process.env[key] : undefined;\n      }\n\n      function getNativePromise() {\n        if (typeof Promise === \"function\") {\n          try {\n            var promise = new Promise(function () {});\n\n            if ({}.toString.call(promise) === \"[object Promise]\") {\n              return Promise;\n            }\n          } catch (e) {}\n        }\n      }\n\n      function domainBind(self, cb) {\n        return self.bind(cb);\n      }\n\n      var ret = {\n        isClass: isClass,\n        isIdentifier: isIdentifier,\n        inheritedDataKeys: inheritedDataKeys,\n        getDataPropertyOrDefault: getDataPropertyOrDefault,\n        thrower: thrower,\n        isArray: es5.isArray,\n        asArray: asArray,\n        notEnumerableProp: notEnumerableProp,\n        isPrimitive: isPrimitive,\n        isObject: isObject,\n        isError: isError,\n        canEvaluate: canEvaluate,\n        errorObj: errorObj,\n        tryCatch: tryCatch,\n        inherits: inherits,\n        withAppended: withAppended,\n        maybeWrapAsError: maybeWrapAsError,\n        toFastProperties: toFastProperties,\n        filledRange: filledRange,\n        toString: safeToString,\n        canAttachTrace: canAttachTrace,\n        ensureErrorObject: ensureErrorObject,\n        originatesFromRejection: originatesFromRejection,\n        markAsOriginatingFromRejection: markAsOriginatingFromRejection,\n        classString: classString,\n        copyDescriptors: copyDescriptors,\n        hasDevTools: typeof chrome !== \"undefined\" && chrome && typeof chrome.loadTimes === \"function\",\n        isNode: isNode,\n        hasEnvVariables: hasEnvVariables,\n        env: env,\n        global: globalObject,\n        getNativePromise: getNativePromise,\n        domainBind: domainBind\n      };\n\n      ret.isRecentNode = ret.isNode && function () {\n        var version;\n\n        if (process.versions && process.versions.node) {\n          version = process.versions.node.split(\".\").map(Number);\n        } else if (process.version) {\n          version = process.version.split(\".\").map(Number);\n        }\n\n        return version[0] === 0 && version[1] > 10 || version[0] > 0;\n      }();\n\n      if (ret.isNode) ret.toFastProperties(process);\n\n      try {\n        throw new Error();\n      } catch (e) {\n        ret.lastLineError = e;\n      }\n\n      module.exports = ret;\n    }, {\n      \"./es5\": 13\n    }]\n  }, {}, [4])(4);\n});\n;\n\nif (typeof window !== 'undefined' && window !== null) {\n  window.P = window.Promise;\n} else if (typeof self !== 'undefined' && self !== null) {\n  self.P = self.Promise;\n}","module.exports = require(\"bluebird\");","var utils = require(\"../../utils/utils\");\n\nvar StateService = function StateService() {\n  var stateProviders = {};\n\n  function getState(name) {\n    var provider = stateProviders[name];\n\n    if (provider) {\n      return stateProviders[name].method();\n    } else {\n      var res = {};\n\n      for (var i in stateProviders) {\n        if (!stateProviders[i].internal) utils.mixin(res, stateProviders[i].method(), true);\n      }\n\n      return res;\n    }\n  }\n\n  function registerProvider(name, provider, internal) {\n    stateProviders[name] = {\n      method: provider,\n      internal: internal\n    };\n  }\n\n  function unregisterProvider(name) {\n    delete stateProviders[name];\n  }\n\n  return {\n    getState: getState,\n    registerProvider: registerProvider,\n    unregisterProvider: unregisterProvider\n  };\n};\n\nmodule.exports = StateService;","module.exports = function (gantt) {\n  var regTemplates = {};\n\n  function initTemplate(name, initial, template_name) {\n    template_name = template_name || name;\n    var config = gantt.config,\n        templates = gantt.templates;\n\n    if (gantt.config[name] && regTemplates[template_name] != config[name]) {\n      if (!(initial && templates[template_name])) {\n        templates[template_name] = gantt.date.date_to_str(config[name]);\n        regTemplates[template_name] = config[name];\n      }\n    }\n  }\n\n  function initTemplates() {\n    var labels = gantt.locale.labels;\n    labels.gantt_save_btn = labels.icon_save;\n    labels.gantt_cancel_btn = labels.icon_cancel;\n    labels.gantt_delete_btn = labels.icon_delete;\n    var date = gantt.date; //build configuration based templates\n\n    var d = date.date_to_str;\n    var c = gantt.config;\n    var format_date = d(c.xml_date || c.date_format, c.server_utc);\n    var parse_date = date.str_to_date(c.xml_date || c.date_format, c.server_utc);\n    initTemplate(\"date_scale\", true, undefined, gantt.config, gantt.templates);\n    initTemplate(\"date_grid\", true, \"grid_date_format\", gantt.config, gantt.templates);\n    initTemplate(\"task_date\", true, undefined, gantt.config, gantt.templates);\n    gantt.mixin(gantt.templates, {\n      xml_format: undefined,\n      // deprecated\n      format_date: format_date,\n      xml_date: undefined,\n      // deprecated\n      parse_date: parse_date,\n      progress_text: function progress_text(start, end, task) {\n        return \"\";\n      },\n      grid_header_class: function grid_header_class(column, config) {\n        return \"\";\n      },\n      task_text: function task_text(start, end, task) {\n        return task.text;\n      },\n      task_class: function task_class(start, end, task) {\n        return \"\";\n      },\n      task_end_date: function task_end_date(date) {\n        return gantt.templates.task_date(date);\n      },\n      grid_row_class: function grid_row_class(start, end, task) {\n        return \"\";\n      },\n      task_row_class: function task_row_class(start, end, task) {\n        return \"\";\n      },\n      timeline_cell_class: function timeline_cell_class(item, date) {\n        return \"\";\n      },\n      timeline_cell_content: function timeline_cell_content(item, date) {\n        return \"\";\n      },\n      scale_cell_class: function scale_cell_class(date) {\n        return \"\";\n      },\n      scale_row_class: function scale_row_class(date) {\n        return \"\";\n      },\n      grid_indent: function grid_indent(item) {\n        return \"<div class='gantt_tree_indent'></div>\";\n      },\n      grid_folder: function grid_folder(item) {\n        return \"<div class='gantt_tree_icon gantt_folder_\" + (item.$open ? \"open\" : \"closed\") + \"'></div>\";\n      },\n      grid_file: function grid_file(item) {\n        return \"<div class='gantt_tree_icon gantt_file'></div>\";\n      },\n      grid_open: function grid_open(item) {\n        return \"<div class='gantt_tree_icon gantt_\" + (item.$open ? \"close\" : \"open\") + \"'></div>\";\n      },\n      grid_blank: function grid_blank(item) {\n        return \"<div class='gantt_tree_icon gantt_blank'></div>\";\n      },\n      date_grid: function date_grid(date, item, column) {\n        if (item && gantt.isUnscheduledTask(item) && gantt.config.show_unscheduled) {\n          return gantt.templates.task_unscheduled_time(item);\n        } else {\n          return gantt.templates.grid_date_format(date, column);\n        }\n      },\n      task_time: function task_time(start, end, ev) {\n        if (gantt.isUnscheduledTask(ev) && gantt.config.show_unscheduled) {\n          return gantt.templates.task_unscheduled_time(ev);\n        } else {\n          return gantt.templates.task_date(start) + \" - \" + gantt.templates.task_end_date(end);\n        }\n      },\n      task_unscheduled_time: function task_unscheduled_time(task) {\n        return \"\";\n      },\n      time_picker: d(c.time_picker),\n      link_class: function link_class(link) {\n        return \"\";\n      },\n      link_description: function link_description(link) {\n        var from = gantt.getTask(link.source),\n            to = gantt.getTask(link.target);\n        return \"<b>\" + from.text + \"</b> &ndash;  <b>\" + to.text + \"</b>\";\n      },\n      drag_link: function drag_link(from, from_start, to, to_start) {\n        from = gantt.getTask(from);\n        var labels = gantt.locale.labels;\n        var text = \"<b>\" + from.text + \"</b> \" + (from_start ? labels.link_start : labels.link_end) + \"<br/>\";\n\n        if (to) {\n          to = gantt.getTask(to);\n          text += \"<b> \" + to.text + \"</b> \" + (to_start ? labels.link_start : labels.link_end) + \"<br/>\";\n        }\n\n        return text;\n      },\n      drag_link_class: function drag_link_class(from, from_start, to, to_start) {\n        var add = \"\";\n\n        if (from && to) {\n          var allowed = gantt.isLinkAllowed(from, to, from_start, to_start);\n          add = \" \" + (allowed ? \"gantt_link_allow\" : \"gantt_link_deny\");\n        }\n\n        return \"gantt_link_tooltip\" + add;\n      },\n\n      /* used for aria-labels of bar elements and for tooltip.js */\n      tooltip_date_format: date.date_to_str(\"%Y-%m-%d\"),\n      tooltip_text: function tooltip_text(start, end, event) {\n        return \"<b>Task:</b> \" + event.text + \"<br/><b>Start date:</b> \" + gantt.templates.tooltip_date_format(start) + \"<br/><b>End date:</b> \" + gantt.templates.tooltip_date_format(end);\n      }\n    });\n  }\n\n  return {\n    initTemplates: initTemplates,\n    initTemplate: initTemplate\n  };\n};","var eventable = require(\"../../utils/eventable\");\n\nvar utils = require(\"../../utils/utils\");\n\nvar timeout = require(\"../../utils/timeout\");\n\nvar global = require(\"../../utils/global\");\n\nvar domHelpers = require(\"../ui/utils/dom_helpers\");\n\nmodule.exports = function (gantt) {\n  function copyDomEvent(e) {\n    return {\n      target: e.target || e.srcElement,\n      pageX: e.pageX,\n      pageY: e.pageY,\n      clientX: e.clientX,\n      clientY: e.clientY,\n      metaKey: e.metaKey,\n      shiftKey: e.shiftKey,\n      ctrlKey: e.ctrlKey,\n      altKey: e.altKey\n    };\n  }\n\n  function DnD(obj, config) {\n    this._obj = obj;\n    this._settings = config || {};\n    eventable(this);\n    var inputMethods = this.getInputMethods();\n    this._drag_start_timer = null;\n    gantt.attachEvent(\"onGanttScroll\", utils.bind(function (left, top) {\n      this.clearDragTimer();\n    }, this));\n    var lastDown = 0;\n    var eventParams = {\n      passive: false\n    };\n\n    for (var i = 0; i < inputMethods.length; i++) {\n      utils.bind(function (input) {\n        gantt.event(obj, input.down, utils.bind(function (e) {\n          if (!input.accessor(e)) {\n            return;\n          }\n\n          if (config.preventDefault && config.selector && domHelpers.closest(e.target, config.selector)) {\n            e.preventDefault();\n          }\n\n          if (gantt.config.touch && e.timeStamp && e.timeStamp - lastDown < 300) {\n            return;\n          }\n\n          this._settings.original_target = copyDomEvent(e);\n\n          if (gantt.config.touch) {\n            this.clearDragTimer();\n            this._drag_start_timer = setTimeout(utils.bind(function () {\n              if (gantt.getState().lightbox) {\n                return;\n              }\n\n              this.dragStart(obj, e, input);\n            }, this), gantt.config.touch_drag);\n          } else {\n            this.dragStart(obj, e, input);\n          }\n        }, this), eventParams);\n        var eventElement = document.body;\n        gantt.event(eventElement, input.up, utils.bind(function (e) {\n          if (!input.accessor(e)) {\n            return;\n          }\n\n          this.clearDragTimer();\n        }, this), eventParams);\n      }, this)(inputMethods[i]);\n    }\n  }\n\n  DnD.prototype = {\n    traceDragEvents: function traceDragEvents(domElement, inputMethod) {\n      var mousemove = utils.bind(function (e) {\n        return this.dragMove(domElement, e, inputMethod.accessor);\n      }, this);\n      utils.bind(function (e) {\n        return this.dragScroll(domElement, e);\n      }, this);\n      var limited_mousemove = utils.bind(function (e) {\n        if (this.config.started && utils.defined(this.config.updates_per_second)) {\n          if (!timeout(this, this.config.updates_per_second)) return;\n        }\n\n        var dndActive = mousemove(e);\n\n        if (dndActive) {\n          try {\n            if (e && e.preventDefault && e.cancelable) {\n              //e.cancelable condition - because navigator.vibrate is blocked by Chrome\n              e.preventDefault(); //Cancel default action on DND\n            } //Cancel default action on DND\n\n          } catch (e) {// just suppress the exception, nothing needed to be done here\n          } //e.cancelBubble = true;\n\n        }\n\n        return dndActive;\n      }, this);\n      var eventElement = domHelpers.getRootNode(gantt.$root);\n      var mousemoveContainer = this.config.mousemoveContainer || domHelpers.getRootNode(gantt.$root);\n      var eventParams = {\n        passive: false\n      };\n      var mouseup = utils.bind(function (e) {\n        gantt.eventRemove(mousemoveContainer, inputMethod.move, limited_mousemove);\n        gantt.eventRemove(eventElement, inputMethod.up, mouseup, eventParams);\n        return this.dragEnd(domElement);\n      }, this);\n      gantt.event(mousemoveContainer, inputMethod.move, limited_mousemove, eventParams);\n      gantt.event(eventElement, inputMethod.up, mouseup, eventParams);\n    },\n    checkPositionChange: function checkPositionChange(pos) {\n      var diff_x = pos.x - this.config.pos.x;\n      var diff_y = pos.y - this.config.pos.y;\n      var distance = Math.sqrt(Math.pow(Math.abs(diff_x), 2) + Math.pow(Math.abs(diff_y), 2));\n\n      if (distance > this.config.sensitivity) {\n        return true;\n      } else {\n        return false;\n      }\n    },\n    initDnDMarker: function initDnDMarker() {\n      // create dnd placeholder and put it in dom\n      var marker = this.config.marker = document.createElement(\"div\");\n      marker.className = \"gantt_drag_marker\"; // GS-1333: don't show any message when we resize grid columns\n\n      marker.innerHTML = \"\";\n      document.body.appendChild(marker);\n    },\n    backupEventTarget: function backupEventTarget(domEvent, getEvent) {\n      if (!gantt.config.touch) {\n        return;\n      } // keep original event target in DOM in order to keep dnd on touchmove event\n\n\n      var e = getEvent(domEvent);\n      var el = e.target || e.srcElement;\n      var copy = el.cloneNode(true); //this.config.target.target = copy;\n\n      this.config.original_target = copyDomEvent(e);\n      this.config.original_target.target = copy;\n      this.config.backup_element = el;\n      el.parentNode.appendChild(copy);\n      el.style.display = \"none\";\n      var mousemoveContainer = this.config.mousemoveContainer || document.body;\n      mousemoveContainer.appendChild(el);\n    },\n    getInputMethods: function getInputMethods() {\n      // bind actions to browser events\n      var inputMethods = [];\n      inputMethods.push({\n        \"move\": \"mousemove\",\n        \"down\": \"mousedown\",\n        \"up\": \"mouseup\",\n        \"accessor\": function accessor(e) {\n          return e;\n        }\n      });\n\n      if (gantt.config.touch) {\n        var touchEventsSupported = true;\n\n        try {\n          document.createEvent(\"TouchEvent\");\n        } catch (e) {\n          touchEventsSupported = false;\n        }\n\n        if (touchEventsSupported) {\n          inputMethods.push({\n            \"move\": \"touchmove\",\n            \"down\": \"touchstart\",\n            \"up\": \"touchend\",\n            \"accessor\": function accessor(ev) {\n              if (ev.touches && ev.touches.length > 1) return null;\n              if (ev.touches[0]) return {\n                target: document.elementFromPoint(ev.touches[0].clientX, ev.touches[0].clientY),\n                pageX: ev.touches[0].pageX,\n                pageY: ev.touches[0].pageY,\n                clientX: ev.touches[0].clientX,\n                clientY: ev.touches[0].clientY\n              };else return ev;\n            }\n          });\n        } else if (global.navigator.pointerEnabled) {\n          inputMethods.push({\n            \"move\": \"pointermove\",\n            \"down\": \"pointerdown\",\n            \"up\": \"pointerup\",\n            \"accessor\": function accessor(ev) {\n              if (ev.pointerType == \"mouse\") return null;\n              return ev;\n            }\n          });\n        } else if (global.navigator.msPointerEnabled) {\n          inputMethods.push({\n            \"move\": \"MSPointerMove\",\n            \"down\": \"MSPointerDown\",\n            \"up\": \"MSPointerUp\",\n            \"accessor\": function accessor(ev) {\n              if (ev.pointerType == ev.MSPOINTER_TYPE_MOUSE) return null;\n              return ev;\n            }\n          });\n        }\n      }\n\n      return inputMethods;\n    },\n    clearDragTimer: function clearDragTimer() {\n      if (this._drag_start_timer) {\n        clearTimeout(this._drag_start_timer);\n        this._drag_start_timer = null;\n      }\n    },\n    dragStart: function dragStart(obj, e, inputMethod) {\n      if (this.config && this.config.started) {\n        return;\n      }\n\n      this.config = {\n        obj: obj,\n        marker: null,\n        started: false,\n        pos: this.getPosition(e),\n        sensitivity: 4\n      };\n      if (this._settings) utils.mixin(this.config, this._settings, true);\n      this.traceDragEvents(obj, inputMethod);\n      gantt._prevent_touch_scroll = true;\n      document.body.className += \" gantt_noselect\";\n\n      if (gantt.config.touch) {\n        this.dragMove(obj, e, inputMethod.accessor);\n      }\n    },\n    dragMove: function dragMove(obj, e, getEvent) {\n      var source = getEvent(e);\n      if (!source) return false;\n\n      if (!this.config.marker && !this.config.started) {\n        var pos = this.getPosition(source);\n\n        if (gantt.config.touch || this.checkPositionChange(pos)) {\n          // real drag starts here,\n          // when user moves mouse at first time after onmousedown\n          this.config.started = true;\n          this.config.ignore = false;\n\n          if (this.callEvent(\"onBeforeDragStart\", [obj, this.config.original_target]) === false) {\n            this.config.ignore = true;\n            return false;\n          }\n\n          this.backupEventTarget(e, getEvent);\n          this.initDnDMarker();\n\n          gantt._touch_feedback();\n\n          this.callEvent(\"onAfterDragStart\", [obj, this.config.original_target]);\n        } else {\n          this.config.ignore = true;\n        }\n      }\n\n      if (!this.config.ignore) {\n        // GS-1279 Gantt crashes on Mobile Firefox after starting to create a link and moving finger outisde the page.\n        if (e.targetTouches && !source.target) return;\n        source.pos = this.getPosition(source);\n        this.config.marker.style.left = source.pos.x + \"px\";\n        this.config.marker.style.top = source.pos.y + \"px\";\n        this.callEvent(\"onDragMove\", [obj, source]);\n        return true;\n      }\n\n      return false;\n    },\n    dragEnd: function dragEnd(obj) {\n      var target = this.config.backup_element;\n\n      if (target && target.parentNode) {\n        target.parentNode.removeChild(target);\n      }\n\n      gantt._prevent_touch_scroll = false;\n\n      if (this.config.marker) {\n        this.config.marker.parentNode.removeChild(this.config.marker);\n        this.config.marker = null;\n        this.callEvent(\"onDragEnd\", []);\n      }\n\n      this.config.started = false;\n      document.body.className = document.body.className.replace(\" gantt_noselect\", \"\");\n    },\n    getPosition: function getPosition(e) {\n      var x = 0,\n          y = 0;\n\n      if (e.pageX || e.pageY) {\n        x = e.pageX;\n        y = e.pageY;\n      } else if (e.clientX || e.clientY) {\n        x = e.clientX + document.body.scrollLeft + document.documentElement.scrollLeft;\n        y = e.clientY + document.body.scrollTop + document.documentElement.scrollTop;\n      }\n\n      return {\n        x: x,\n        y: y\n      };\n    }\n  };\n  return DnD;\n};","function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nvar t = /*#__PURE__*/function () {\n  function t(_t) {\n    _classCallCheck(this, t);\n\n    var e = _t.url,\n        s = _t.token;\n    this._url = e, this._token = s, this._mode = 1, this._seed = 1, this._queue = [], this.data = {}, this.api = {}, this._events = {};\n  }\n\n  _createClass(t, [{\n    key: \"headers\",\n    value: function headers() {\n      return {\n        Accept: \"application/json\",\n        \"Content-Type\": \"application/json\",\n        \"Remote-Token\": this._token\n      };\n    }\n  }, {\n    key: \"fetch\",\n    value: function (_fetch) {\n      function fetch(_x, _x2) {\n        return _fetch.apply(this, arguments);\n      }\n\n      fetch.toString = function () {\n        return _fetch.toString();\n      };\n\n      return fetch;\n    }(function (_t2, e) {\n      var s = {\n        credentials: \"include\",\n        headers: this.headers()\n      };\n      return e && (s.method = \"POST\", s.body = e), fetch(_t2, s).then(function (_t3) {\n        return _t3.json();\n      });\n    })\n  }, {\n    key: \"load\",\n    value: function load(_t4) {\n      var _this = this;\n\n      return _t4 && (this._url = _t4), this.fetch(this._url).then(function (_t5) {\n        return _this.parse(_t5);\n      });\n    }\n  }, {\n    key: \"parse\",\n    value: function parse(_t6) {\n      var e = _t6.key,\n          s = _t6.websocket;\n      e && (this._token = _t6.key);\n\n      for (var _e in _t6.data) {\n        this.data[_e] = _t6.data[_e];\n      }\n\n      for (var _e2 in _t6.api) {\n        var _s = this.api[_e2] = {},\n            i = _t6.api[_e2];\n\n        for (var _t29 in i) {\n          _s[_t29] = this._wrapper(_e2 + \".\" + _t29);\n        }\n      }\n\n      return s && this.connect(), this;\n    }\n  }, {\n    key: \"connect\",\n    value: function connect() {\n      var _this2 = this;\n\n      var _t8 = this._socket;\n      _t8 && (this._socket = null, _t8.onclose = function () {}, _t8.close()), this._mode = 2, this._socket = function (t, e, s, i) {\n        var n = e;\n        \"/\" === n[0] && (n = document.location.protocol + \"//\" + document.location.host + e);\n        n = n.replace(/^http(s|):/, \"ws$1:\");\n        var o = -1 != n.indexOf(\"?\") ? \"&\" : \"?\";\n        n = \"\".concat(n).concat(o, \"token=\").concat(s, \"&ws=1\");\n        var r = new WebSocket(n);\n        return r.onclose = function () {\n          return setTimeout(function () {\n            return t.connect();\n          }, 2e3);\n        }, r.onmessage = function (e) {\n          var s = JSON.parse(e.data);\n\n          switch (s.action) {\n            case \"result\":\n              t.result(s.body, []);\n              break;\n\n            case \"event\":\n              t.fire(s.body.name, s.body.value);\n              break;\n\n            case \"start\":\n              i();\n              break;\n\n            default:\n              t.onError(s.data);\n          }\n        }, r;\n      }(this, this._url, this._token, function () {\n        return _this2._mode = 3, _this2._send(), _this2._resubscribe(), _this2;\n      });\n    }\n  }, {\n    key: \"_wrapper\",\n    value: function _wrapper(_t9) {\n      return function () {\n        var _this3 = this;\n\n        var e = [].slice.call(arguments);\n        var s = null;\n        var i = new Promise(function (i, n) {\n          s = {\n            data: {\n              id: _this3._uid(),\n              name: _t9,\n              args: e\n            },\n            status: 1,\n            resolve: i,\n            reject: n\n          }, _this3._queue.push(s);\n        });\n        return this.onCall(s, i), 3 === this._mode ? this._send(s) : setTimeout(function () {\n          return _this3._send();\n        }, 1), i;\n      }.bind(this);\n    }\n  }, {\n    key: \"_uid\",\n    value: function _uid() {\n      return (this._seed++).toString();\n    }\n  }, {\n    key: \"_send\",\n    value: function _send(_t10) {\n      var _this4 = this;\n\n      if (2 == this._mode) return void setTimeout(function () {\n        return _this4._send();\n      }, 100);\n      var e = _t10 ? [_t10] : this._queue.filter(function (_t11) {\n        return 1 === _t11.status;\n      });\n      if (!e.length) return;\n      var s = e.map(function (_t12) {\n        return _t12.status = 2, _t12.data;\n      });\n      3 !== this._mode ? this.fetch(this._url, JSON.stringify(s))[\"catch\"](function (_t13) {\n        return _this4.onError(_t13);\n      }).then(function (_t14) {\n        return _this4.result(_t14, s);\n      }) : this._socket.send(JSON.stringify({\n        action: \"call\",\n        body: s\n      }));\n    }\n  }, {\n    key: \"result\",\n    value: function result(_t15, e) {\n      var s = {};\n      if (_t15) for (var _e3 = 0; _e3 < _t15.length; _e3++) {\n        s[_t15[_e3].id] = _t15[_e3];\n      } else for (var _t30 = 0; _t30 < e.length; _t30++) {\n        s[e[_t30].id] = {\n          id: e[_t30].id,\n          error: \"Network Error\",\n          data: null\n        };\n      }\n\n      for (var _t31 = this._queue.length - 1; _t31 >= 0; _t31--) {\n        var _e4 = this._queue[_t31],\n            i = s[_e4.data.id];\n        i && (this.onResponse(_e4, i), i.error ? _e4.reject(i.error) : _e4.resolve(i.data), this._queue.splice(_t31, 1));\n      }\n    }\n  }, {\n    key: \"on\",\n    value: function on(_t18, e) {\n      var s = this._uid();\n\n      var i = this._events[_t18];\n      var n = !!i;\n      return n || (i = this._events[_t18] = []), i.push({\n        id: s,\n        handler: e\n      }), n || 3 != this._mode || this._socket.send(JSON.stringify({\n        action: \"subscribe\",\n        name: _t18\n      })), {\n        name: _t18,\n        id: s\n      };\n    }\n  }, {\n    key: \"_resubscribe\",\n    value: function _resubscribe() {\n      if (3 == this._mode) for (var _t32 in this._events) {\n        this._socket.send(JSON.stringify({\n          action: \"subscribe\",\n          name: _t32\n        }));\n      }\n    }\n  }, {\n    key: \"detach\",\n    value: function detach(_t20) {\n      if (!_t20) {\n        if (3 == this._mode) for (var _t33 in this._events) {\n          this._socket.send(JSON.stringify({\n            action: \"unsubscribe\",\n            key: _t33\n          }));\n        }\n        return void (this._events = {});\n      }\n\n      var e = _t20.id,\n          s = _t20.name,\n          i = this._events[s];\n\n      if (i) {\n        var _t34 = i.filter(function (_t23) {\n          return _t23.id != e;\n        });\n\n        _t34.length ? this._events[s] = _t34 : (delete this._events[s], 3 == this._mode && this._socket.send(JSON.stringify({\n          action: \"unsubscribe\",\n          name: s\n        })));\n      }\n    }\n  }, {\n    key: \"fire\",\n    value: function fire(_t24, e) {\n      var s = this._events[_t24];\n      if (s) for (var _t35 = 0; _t35 < s.length; _t35++) {\n        s[_t35].handler(e);\n      }\n    }\n  }, {\n    key: \"onError\",\n    value: function onError(_t26) {\n      return null;\n    }\n  }, {\n    key: \"onCall\",\n    value: function onCall(_t27, e) {}\n  }, {\n    key: \"onResponse\",\n    value: function onResponse(_t28, e) {}\n  }]);\n\n  return t;\n}();\n\nexport { t as Client };","var remote_client = require(\"remote-client\");\n\nmodule.exports = {\n  remoteEvents: function remoteEvents(url, token) {\n    var _this = this;\n\n    var remote = new remote_client.Client({\n      url: url,\n      token: token\n    }); // temporary patch, as we do not want credentials\n\n    remote.fetch = function (url, body) {\n      var req = {\n        headers: this.headers()\n      };\n\n      if (body) {\n        req.method = \"POST\";\n        req.body = body;\n      }\n\n      return fetch(url, req).then(function (res) {\n        return res.json();\n      });\n    };\n\n    this._ready = remote.load().then(function (back) {\n      return _this._remote = back;\n    });\n\n    function ready() {\n      return this._ready;\n    }\n\n    function on(name, handler) {\n      this.ready().then(function (back) {\n        if (typeof name === \"string\") back.on(name, handler);else {\n          for (var key in name) {\n            back.on(key, name[key]);\n          }\n        }\n      });\n    }\n\n    this.ready = ready;\n    this.on = on;\n  }\n};","const dateToStr = (format: string, utc: boolean, gantt) => {\r\n\treturn (date) => {\r\n\t\treturn format.replace(/%[a-zA-Z]/g, (a) => {\r\n\t\t\tswitch (a) {\r\n\t\t\t\tcase \"%d\": return utc ? gantt.date.to_fixed(date.getUTCDate()) : gantt.date.to_fixed(date.getDate());\r\n\t\t\t\tcase \"%m\": return utc ? gantt.date.to_fixed((date.getUTCMonth() + 1)) : gantt.date.to_fixed((date.getMonth() + 1));\r\n\t\t\t\tcase \"%j\": return utc ? date.getUTCDate() : date.getDate();\r\n\t\t\t\tcase \"%n\": return utc ? (date.getUTCMonth() + 1) : (date.getMonth() + 1);\r\n\t\t\t\tcase \"%y\": return utc ? gantt.date.to_fixed(date.getUTCFullYear() % 100) : gantt.date.to_fixed(date.getFullYear() % 100);\r\n\t\t\t\tcase \"%Y\": return utc ? date.getUTCFullYear() : date.getFullYear();\r\n\t\t\t\tcase \"%D\": return utc ? gantt.locale.date.day_short[date.getUTCDay()] : gantt.locale.date.day_short[date.getDay()];\r\n\t\t\t\tcase \"%l\": return utc ? gantt.locale.date.day_full[date.getUTCDay()] : gantt.locale.date.day_full[date.getDay()];\r\n\t\t\t\tcase \"%M\": return utc ? gantt.locale.date.month_short[date.getUTCMonth()] : gantt.locale.date.month_short[date.getMonth()];\r\n\t\t\t\tcase \"%F\": return utc ? gantt.locale.date.month_full[date.getUTCMonth()] : gantt.locale.date.month_full[date.getMonth()];\r\n\t\t\t\tcase \"%h\": return utc ? gantt.date.to_fixed((date.getUTCHours() + 11) % 12 + 1) : gantt.date.to_fixed((date.getHours() + 11) % 12 + 1);\r\n\t\t\t\tcase \"%g\": return utc ? ((date.getUTCHours() + 11) % 12 + 1) : ((date.getHours() + 11) % 12 + 1);\r\n\t\t\t\tcase \"%G\": return utc ? date.getUTCHours() : date.getHours();\r\n\t\t\t\tcase \"%H\": return utc ? gantt.date.to_fixed(date.getUTCHours()) : gantt.date.to_fixed(date.getHours());\r\n\t\t\t\tcase \"%i\": return utc ? gantt.date.to_fixed(date.getUTCMinutes()) : gantt.date.to_fixed(date.getMinutes());\r\n\t\t\t\tcase \"%a\": return utc ? (date.getUTCHours() > 11 ? \"pm\" : \"am\") : (date.getHours() > 11 ? \"pm\" : \"am\");\r\n\t\t\t\tcase \"%A\": return utc ? (date.getUTCHours() > 11 ? \"PM\" : \"AM\") : (date.getHours() > 11 ? \"PM\" : \"AM\");\r\n\t\t\t\tcase \"%s\": return utc ? gantt.date.to_fixed(date.getUTCSeconds()) : gantt.date.to_fixed(date.getSeconds());\r\n\t\t\t\tcase \"%W\": return utc ? gantt.date.to_fixed(gantt.date.getUTCISOWeek(date)) : gantt.date.to_fixed(gantt.date.getISOWeek(date));\r\n\t\t\t\tdefault: return a;\r\n\t\t\t}\r\n\t\t});\r\n\t};\r\n};\r\nconst strToDate = (format: string, utc: boolean, gantt:any) => {\r\n\treturn (date: string) => {\r\n\t\tconst set: Array<string|number> = [0, 0, 1, 0, 0, 0];\r\n\t\tconst temp = date.match(/[a-zA-Z]+|[0-9]+/g);\r\n\t\tconst mask = format.match(/%[a-zA-Z]/g);\r\n\r\n\t\tfor (let i = 0; i < mask.length; i++) {\r\n\t\t\tswitch (mask[i]) {\r\n\t\t\t\tcase \"%j\":\r\n\t\t\t\tcase \"%d\":\r\n\t\t\t\t\tset[2] = temp[i] as unknown as number || 1;\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase \"%n\":\r\n\t\t\t\tcase \"%m\":\r\n\t\t\t\t\tset[1] = (temp[i] as unknown as number || 1) - 1;\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase \"%y\":\r\n\t\t\t\t\tset[0] = temp[i] as unknown as number * 1 + ((temp[i] as unknown as number) > 50 ? 1900 : 2000);\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase \"%g\":\r\n\t\t\t\tcase \"%G\":\r\n\t\t\t\tcase \"%h\":\r\n\t\t\t\tcase \"%H\":\r\n\t\t\t\t\tset[3] = temp[i] as unknown as number || 0;\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase \"%i\":\r\n\t\t\t\t\tset[4] = temp[i] as unknown as number || 0;\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase \"%Y\":\r\n\t\t\t\t\tset[0] = temp[i] as unknown as number || 0;\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase \"%a\":\r\n\t\t\t\tcase \"%A\":\r\n\t\t\t\t\tset[3] = set[3] as number % 12 + ((temp[i] || \"\").toLowerCase() === \"am\" ? 0 : 12);\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase \"%s\":\r\n\t\t\t\t\tset[5] = temp[i] || 0;\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase \"%M\":\r\n\t\t\t\t\tset[1] = gantt.locale.date.month_short_hash[temp[i]] || 0;\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase \"%F\":\r\n\t\t\t\t\tset[1] = gantt.locale.date.month_full_hash[temp[i]] || 0;\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tdefault:\r\n\t\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif (utc) {\r\n\t\t\treturn new Date(Date.UTC(\r\n\t\t\t\tset[0] as number,\r\n\t\t\t\tset[1] as number,\r\n\t\t\t\tset[2] as number,\r\n\t\t\t\tset[3] as number,\r\n\t\t\t\tset[4] as number,\r\n\t\t\t\tset[5] as number\r\n\t\t\t));\r\n\t\t}\r\n\t\treturn new Date(\r\n\t\t\tset[0] as number,\r\n\t\t\tset[1] as number,\r\n\t\t\tset[2] as number,\r\n\t\t\tset[3] as number,\r\n\t\t\tset[4] as number,\r\n\t\t\tset[5] as number\r\n\t\t);\r\n\t};\r\n\r\n};\r\n\r\n\r\nconst cspVersion = {\r\n\tdate_to_str: dateToStr,\r\n\tstr_to_date: strToDate\r\n};\r\n\r\nexport default cspVersion;","const dateToStr = (format: string, utc: boolean, gantt) => {\r\n\tformat = format.replace(/%[a-zA-Z]/g, (a) => {\r\n\t\tswitch (a) {\r\n\t\t\tcase \"%d\":\r\n\t\t\t\treturn `\"+to_fixed(date.get${utc?\"UTC\":\"\"}Date())+\"`;\r\n\t\t\tcase \"%m\":\r\n\t\t\t\treturn `\"+to_fixed((date.get${utc?\"UTC\":\"\"}Month()+1))+\"`;\r\n\t\t\tcase \"%j\":\r\n\t\t\t\treturn `\"+date.get${utc?\"UTC\":\"\"}Date()+\"`;\r\n\t\t\tcase \"%n\":\r\n\t\t\t\treturn `\"+(date.get${utc?\"UTC\":\"\"}Month()+1)+\"`;\r\n\t\t\tcase \"%y\":\r\n\t\t\t\treturn `\"+to_fixed(date.get${utc?\"UTC\":\"\"}FullYear()%100)+\"`;\r\n\t\t\tcase \"%Y\":\r\n\t\t\t\treturn `\"+date.get${utc?\"UTC\":\"\"}FullYear()+\"`;\r\n\t\t\tcase \"%D\":\r\n\t\t\t\treturn `\"+locale.date.day_short[date.get${utc?\"UTC\":\"\"}Day()]+\"`;\r\n\t\t\tcase \"%l\":\r\n\t\t\t\treturn `\"+locale.date.day_full[date.get${utc?\"UTC\":\"\"}Day()]+\"`;\r\n\t\t\tcase \"%M\":\r\n\t\t\t\treturn `\"+locale.date.month_short[date.get${utc?\"UTC\":\"\"}Month()]+\"`;\r\n\t\t\tcase \"%F\":\r\n\t\t\t\treturn `\"+locale.date.month_full[date.get${utc?\"UTC\":\"\"}Month()]+\"`;\r\n\t\t\tcase \"%h\":\r\n\t\t\t\treturn `\"+to_fixed((date.get${utc?\"UTC\":\"\"}Hours()+11)%12+1)+\"`;\r\n\t\t\tcase \"%g\":\r\n\t\t\t\treturn `\"+((date.get${utc?\"UTC\":\"\"}Hours()+11)%12+1)+\"`;\r\n\t\t\tcase \"%G\":\r\n\t\t\t\treturn `\"+date.get${utc?\"UTC\":\"\"}Hours()+\"`;\r\n\t\t\tcase \"%H\":\r\n\t\t\t\treturn `\"+to_fixed(date.get${utc?\"UTC\":\"\"}Hours())+\"`;\r\n\t\t\tcase \"%i\":\r\n\t\t\t\treturn `\"+to_fixed(date.get${utc?\"UTC\":\"\"}Minutes())+\"`;\r\n\t\t\tcase \"%a\":\r\n\t\t\t\treturn `\"+(date.get${utc?\"UTC\":\"\"}Hours()>11?\"pm\":\"am\")+\"`;\r\n\t\t\tcase \"%A\":\r\n\t\t\t\treturn `\"+(date.get${utc?\"UTC\":\"\"}Hours()>11?\"PM\":\"AM\")+\"`;\r\n\t\t\tcase \"%s\":\r\n\t\t\t\treturn `\"+to_fixed(date.get${utc?\"UTC\":\"\"}Seconds())+\"`;\r\n\t\t\tcase \"%W\":\r\n\t\t\t\treturn `\"+to_fixed(getISOWeek(date))+\"`;\r\n\t\t\tcase \"%w\":\r\n\t\t\t\treturn `\"+to_fixed(getWeek(date))+\"`;\r\n\t\t\tdefault:\r\n\t\t\t\treturn a;\r\n\t\t}\r\n\t});\r\n\r\n\t// tslint:disable-next-line: function-constructor\r\n\tconst dateToStrFn = new Function(\"date\", \"to_fixed\", \"locale\", \"getISOWeek\", \"getWeek\", `return \"${format}\";`);\r\n\r\n\treturn (date: Date) => {\r\n\t\treturn dateToStrFn(date, gantt.date.to_fixed, gantt.locale, gantt.date.getISOWeek, gantt.date.getWeek);\r\n\t};\r\n};\r\n\r\n\r\nconst strToDate = (format: string, utc: boolean, gantt:any) => {\r\n\tlet splt = \"var temp=date.match(/[a-zA-Z]+|[0-9]+/g);\";\r\n\tconst mask = format.match(/%[a-zA-Z]/g);\r\n\tfor (let i = 0; i < mask.length; i++) {\r\n\t\tswitch (mask[i]) {\r\n\t\t\tcase \"%j\":\r\n\t\t\tcase \"%d\":\r\n\t\t\t\tsplt += `set[2]=temp[${i}]||1;`;\r\n\t\t\t\tbreak;\r\n\t\t\tcase \"%n\":\r\n\t\t\tcase \"%m\":\r\n\t\t\t\tsplt += `set[1]=(temp[${i}]||1)-1;`;\r\n\t\t\t\tbreak;\r\n\t\t\tcase \"%y\":\r\n\t\t\t\tsplt += `set[0]=temp[${i}]*1+(temp[${i}]>50?1900:2000);`;\r\n\t\t\t\tbreak;\r\n\t\t\tcase \"%g\":\r\n\t\t\tcase \"%G\":\r\n\t\t\tcase \"%h\":\r\n\t\t\tcase \"%H\":\r\n\t\t\t\tsplt += `set[3]=temp[${i}]||0;`;\r\n\t\t\t\tbreak;\r\n\t\t\tcase \"%i\":\r\n\t\t\t\tsplt += `set[4]=temp[${i}]||0;`;\r\n\t\t\t\tbreak;\r\n\t\t\tcase \"%Y\":\r\n\t\t\t\tsplt += `set[0]=temp[${i}]||0;`;\r\n\t\t\t\tbreak;\r\n\t\t\tcase \"%a\":\r\n\t\t\tcase \"%A\":\r\n\t\t\t\tsplt += `set[3]=set[3]%12+((temp[${i}]||'').toLowerCase()=='am'?0:12);`;\r\n\t\t\t\tbreak;\r\n\t\t\tcase \"%s\":\r\n\t\t\t\tsplt += `set[5]=temp[${i}]||0;`;\r\n\t\t\t\tbreak;\r\n\t\t\tcase \"%M\":\r\n\t\t\t\tsplt += `set[1]=locale.date.month_short_hash[temp[${i}]]||0;`;\r\n\t\t\t\tbreak;\r\n\t\t\tcase \"%F\":\r\n\t\t\t\tsplt += `set[1]=locale.date.month_full_hash[temp[${i}]]||0;`;\r\n\t\t\t\tbreak;\r\n\t\t\tdefault:\r\n\t\t\t\tbreak;\r\n\t\t}\r\n\t}\r\n\tlet code = \"set[0],set[1],set[2],set[3],set[4],set[5]\";\r\n\tif (utc) { code = ` Date.UTC(${code})`; }\r\n\t// tslint:disable-next-line: function-constructor\r\n\tconst strToDateFn = new Function(\"date\", \"locale\", `var set=[0,0,1,0,0,0]; ${splt} return new Date(${code});`);\r\n\r\n\treturn (dateString) => {\r\n\t\treturn strToDateFn(dateString, gantt.locale);\r\n\t};\r\n};\r\n\r\nconst fastVersion = {\r\n\tdate_to_str: dateToStr,\r\n\tstr_to_date: strToDate\r\n};\r\n\r\nexport default fastVersion;","/*\r\n %d - the day as a number with a leading zero ( 01 to 31 );\r\n %j - the day as a number without a leading zero ( 1 to 31 );\r\n %D - the day as an abbreviation ( Sun to Sat );\r\n %l - the day as a full name ( Sunday to Saturday );\r\n %W - the ISO-8601 week number of the year. Weeks start on Monday; 1)\r\n %m - the month as a number without a leading zero ( 1 to 12 );\r\n %n - the month as a number with a leading zero ( 01 to 12);\r\n %M - the month as an abbreviation ( Jan to Dec );\r\n %F - the month as a full name ( January to December );\r\n %y - the year as a two-digit number ( 00 to 99 );\r\n %Y - the year as a four-digit number ( 1900–9999 );\r\n %h - the hour based on the 12-hour clock ( 00 to 11 );\r\n %H - the hour based on the 24-hour clock ( 00 to 23 );\r\n %i - the minute as a number with a leading zero ( 00 to 59 );\r\n %s - the second as a number without a leading zero ( 00 to 59 ); 2)\r\n %a - displays am (for times from midnight until noon) and pm (for times from noon until midnight);\r\n %A - displays AM (for times from midnight until noon) and PM (for times from noon until midnight).\r\n*/\nvar fastVersion = require(\"./date_parsers/fast_version\")[\"default\"];\n\nvar cspCompliantVersion = require(\"./date_parsers/csp_compliant_version\")[\"default\"];\n\nmodule.exports = function (gantt) {\n  var canUseCsp = null;\n\n  function cspAutoCheck() {\n    try {\n      new Function(\"canUseCsp = false;\");\n    } catch (e) {\n      canUseCsp = true;\n    }\n  }\n\n  function useCsp() {\n    var result = false;\n\n    if (gantt.config.csp === \"auto\") {\n      if (canUseCsp === null) {\n        cspAutoCheck();\n      }\n\n      result = canUseCsp;\n    } else {\n      result = gantt.config.csp;\n    }\n\n    return result;\n  }\n\n  var dateHelper = {\n    init: function init() {\n      var locale = gantt.locale;\n      var s = locale.date.month_short;\n      var t = locale.date.month_short_hash = {};\n\n      for (var i = 0; i < s.length; i++) {\n        t[s[i]] = i;\n      }\n\n      var s = locale.date.month_full;\n      var t = locale.date.month_full_hash = {};\n\n      for (var i = 0; i < s.length; i++) {\n        t[s[i]] = i;\n      }\n    },\n    date_part: function date_part(date) {\n      var old = new Date(date);\n      date.setHours(0);\n      this.hour_start(date);\n      if (date.getHours() && ( //shift to yesterday on dst\n      date.getDate() < old.getDate() || date.getMonth() < old.getMonth() || date.getFullYear() < old.getFullYear())) date.setTime(date.getTime() + 60 * 60 * 1000 * (24 - date.getHours()));\n      return date;\n    },\n    time_part: function time_part(date) {\n      return (date.valueOf() / 1000 - date.getTimezoneOffset() * 60) % 86400;\n    },\n    week_start: function week_start(date) {\n      var shift = date.getDay();\n\n      if (gantt.config.start_on_monday) {\n        if (shift === 0) shift = 6;else shift--;\n      }\n\n      return this.date_part(this.add(date, -1 * shift, \"day\"));\n    },\n    month_start: function month_start(date) {\n      date.setDate(1);\n      return this.date_part(date);\n    },\n    quarter_start: function quarter_start(date) {\n      this.month_start(date);\n      var m = date.getMonth(),\n          res_month;\n\n      if (m >= 9) {\n        res_month = 9;\n      } else if (m >= 6) {\n        res_month = 6;\n      } else if (m >= 3) {\n        res_month = 3;\n      } else {\n        res_month = 0;\n      }\n\n      date.setMonth(res_month);\n      return date;\n    },\n    year_start: function year_start(date) {\n      date.setMonth(0);\n      return this.month_start(date);\n    },\n    day_start: function day_start(date) {\n      return this.date_part(date);\n    },\n    hour_start: function hour_start(date) {\n      if (date.getMinutes()) date.setMinutes(0);\n      this.minute_start(date);\n      return date;\n    },\n    minute_start: function minute_start(date) {\n      if (date.getSeconds()) date.setSeconds(0);\n      if (date.getMilliseconds()) date.setMilliseconds(0);\n      return date;\n    },\n    _add_days: function _add_days(modifiedDate, inc, originalDate) {\n      modifiedDate.setDate(modifiedDate.getDate() + inc);\n      var incCondition = inc >= 0;\n      var getHoursCondition = !originalDate.getHours() && modifiedDate.getHours(); //shift to yesterday on dst\n\n      var getDateCondition = modifiedDate.getDate() <= originalDate.getDate() || modifiedDate.getMonth() < originalDate.getMonth() || modifiedDate.getFullYear() < originalDate.getFullYear();\n\n      if (incCondition && getHoursCondition && getDateCondition) {\n        modifiedDate.setTime(modifiedDate.getTime() + 60 * 60 * 1000 * (24 - modifiedDate.getHours()));\n      }\n\n      var worktimeCalculation = inc > 1;\n\n      if (worktimeCalculation && getHoursCondition) {\n        // try to shift the modified Date to 00:00\n        modifiedDate.setHours(0);\n      }\n\n      return modifiedDate;\n    },\n    add: function add(date, inc, mode) {\n      /*jsl:ignore*/\n      var ndate = new Date(date.valueOf());\n\n      switch (mode) {\n        case \"day\":\n          ndate = this._add_days(ndate, inc, date);\n          break;\n\n        case \"week\":\n          ndate = this._add_days(ndate, inc * 7, date);\n          break;\n\n        case \"month\":\n          ndate.setMonth(ndate.getMonth() + inc);\n          break;\n\n        case \"year\":\n          ndate.setYear(ndate.getFullYear() + inc);\n          break;\n\n        case \"hour\":\n          /*\r\n          \tadding hours/minutes via setHour(getHour() + inc) gives weird result when\r\n          \tadding one hour to the time before switch to a Daylight Saving time\r\n          \t\t\texample: //Sun Mar 30 2014 01:00:00 GMT+0100 (W. Europe Standard Time)\r\n          \tnew Date(2014, 02, 30, 1).setHours(2)\r\n          \t>>Sun Mar 30 2014 01:00:00 GMT+0100 (W. Europe Standard Time)\r\n          \t\t\tsetTime seems working as expected\r\n           */\n          ndate.setTime(ndate.getTime() + inc * 60 * 60 * 1000);\n          break;\n\n        case \"minute\":\n          ndate.setTime(ndate.getTime() + inc * 60 * 1000);\n          break;\n\n        default:\n          return this[\"add_\" + mode](date, inc, mode);\n      }\n\n      return ndate;\n      /*jsl:end*/\n    },\n    add_quarter: function add_quarter(date, inc) {\n      return this.add(date, inc * 3, \"month\");\n    },\n    to_fixed: function to_fixed(num) {\n      if (num < 10) return \"0\" + num;\n      return num;\n    },\n    copy: function copy(date) {\n      return new Date(date.valueOf());\n    },\n    date_to_str: function date_to_str(format, utc) {\n      var result = fastVersion;\n\n      if (useCsp()) {\n        result = cspCompliantVersion;\n      }\n\n      return result.date_to_str(format, utc, gantt);\n    },\n    str_to_date: function str_to_date(format, utc) {\n      var result = fastVersion;\n\n      if (useCsp()) {\n        result = cspCompliantVersion;\n      }\n\n      return result.str_to_date(format, utc, gantt);\n    },\n    getISOWeek: function getISOWeek(ndate) {\n      return gantt.date._getWeekNumber(ndate, true);\n    },\n    _getWeekNumber: function _getWeekNumber(ndate, isoWeek) {\n      if (!ndate) return false;\n      var nday = ndate.getDay();\n\n      if (isoWeek) {\n        if (nday === 0) {\n          nday = 7;\n        }\n      }\n\n      var first_thursday = new Date(ndate.valueOf());\n      first_thursday.setDate(ndate.getDate() + (4 - nday));\n      var year_number = first_thursday.getFullYear(); // year of the first Thursday\n\n      var ordinal_date = Math.round((first_thursday.getTime() - new Date(year_number, 0, 1).getTime()) / 86400000); //ordinal date of the first Thursday - 1 (so not really ordinal date)\n\n      var week_number = 1 + Math.floor(ordinal_date / 7);\n      return week_number;\n    },\n    getWeek: function getWeek(ndate) {\n      return gantt.date._getWeekNumber(ndate, gantt.config.start_on_monday);\n    },\n    getUTCISOWeek: function getUTCISOWeek(ndate) {\n      return gantt.date.getISOWeek(ndate);\n    },\n    convert_to_utc: function convert_to_utc(date) {\n      return new Date(date.getUTCFullYear(), date.getUTCMonth(), date.getUTCDate(), date.getUTCHours(), date.getUTCMinutes(), date.getUTCSeconds());\n    },\n    parseDate: function parseDate(date, format) {\n      // raw date may be of type string, number (timestamp) or something else\n      // do not check for instanceof Date explicitly, since we may swap native date with different date implementation at some point\n      if (date && !date.getFullYear) {\n        if (typeof format !== \"function\") {\n          if (typeof format === \"string\") {\n            if (format === \"parse_date\" || format === \"xml_date\") {\n              format = gantt.defined(gantt.templates.xml_date) ? gantt.templates.xml_date : gantt.templates.parse_date;\n            } else {\n              format = gantt.defined(gantt.templates[format]) ? gantt.templates[format] : gantt.date.str_to_date(format);\n            }\n          } else {\n            format = gantt.defined(gantt.templates.xml_date) ? gantt.templates.xml_date : gantt.templates.parse_date;\n          }\n        }\n\n        if (date) {\n          date = format(date);\n        } else {\n          date = null;\n        }\n      }\n\n      return date;\n    }\n  };\n  return dateHelper;\n};","export default function serialize(data: object | string) {\r\n\tif (typeof data === \"string\" || typeof data === \"number\") {\r\n\t\treturn data;\r\n\t}\r\n\r\n\tlet result = \"\";\r\n\r\n\tfor (const key in data) {\r\n\t\tlet serialized = \"\";\r\n\t\tif (data.hasOwnProperty(key)) {\r\n\t\t\tif (typeof data[key] === \"string\") {\r\n\t\t\t\tserialized = encodeURIComponent(data[key]);\r\n\t\t\t} else if (typeof data[key] === \"number\") {\r\n\t\t\t\tserialized = data[key];\r\n\t\t\t} else {\r\n\t\t\t\tserialized = encodeURIComponent(JSON.stringify(data[key]));\r\n\t\t\t}\r\n\t\t\tserialized = key + \"=\" + serialized;\r\n\r\n\t\t\tif (result.length) {\r\n\t\t\t\tserialized = \"&\" + serialized;\r\n\t\t\t}\r\n\t\t\tresult += serialized;\r\n\t\t}\r\n\t}\r\n\treturn result;\r\n}\r\n","function _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nvar env = require(\"../../utils/env\");\n\nvar global = require(\"../../utils/global\");\n\nvar serialize = require(\"./serialize\")[\"default\"];\n\nfunction createConfig(method, args) {\n  var result = {\n    method: method\n  };\n\n  if (args.length === 0) {\n    throw new Error(\"Arguments list of query is wrong.\");\n  }\n\n  if (args.length === 1) {\n    if (typeof args[0] === \"string\") {\n      result.url = args[0];\n      result.async = true;\n    } else {\n      result.url = args[0].url;\n      result.async = args[0].async || true;\n      result.callback = args[0].callback;\n      result.headers = args[0].headers;\n    }\n\n    if (method === \"POST\" || \"PUT\") {\n      if (args[0].data) {\n        if (typeof args[0].data !== \"string\") {\n          result.data = serialize(args[0].data);\n        } else {\n          result.data = args[0].data;\n        }\n      } else {\n        result.data = \"\";\n      }\n    }\n\n    return result;\n  }\n\n  result.url = args[0];\n\n  switch (method) {\n    case \"GET\":\n    case \"DELETE\":\n      result.callback = args[1];\n      result.headers = args[2];\n      break;\n\n    case \"POST\":\n    case \"PUT\":\n      if (args[1]) {\n        if (typeof args[1] !== \"string\") {\n          result.data = serialize(args[1]);\n        } else {\n          result.data = args[1];\n        }\n      } else {\n        result.data = \"\";\n      }\n\n      result.callback = args[2];\n      result.headers = args[3];\n      break;\n  }\n\n  return result;\n}\n\nmodule.exports = function (gantt) {\n  return {\n    // if false - dhxr param will added to prevent caching on client side (default),\n    // if true - do not add extra params\n    cache: true,\n    // default method for load/loadStruct, post/get allowed\n    // get - since 4.1.1, this should fix 412 error for macos safari\n    method: \"get\",\n    parse: function parse(data) {\n      if (typeof data !== \"string\") return data;\n      var obj;\n      data = data.replace(/^[\\s]+/, \"\");\n\n      if (typeof DOMParser !== \"undefined\" && !env.isIE) {\n        // ff,ie9\n        obj = new DOMParser().parseFromString(data, \"text/xml\");\n      } else if (typeof global.ActiveXObject !== \"undefined\") {\n        obj = new global.ActiveXObject(\"Microsoft.XMLDOM\");\n        obj.async = \"false\";\n        obj.loadXML(data);\n      }\n\n      return obj;\n    },\n    xmltop: function xmltop(tagname, xhr, obj) {\n      if (typeof xhr.status == \"undefined\" || xhr.status < 400) {\n        var xml = !xhr.responseXML ? this.parse(xhr.responseText || xhr) : xhr.responseXML || xhr;\n\n        if (xml && xml.documentElement !== null && !xml.getElementsByTagName(\"parsererror\").length) {\n          return xml.getElementsByTagName(tagname)[0];\n        }\n      }\n\n      if (obj !== -1) gantt.callEvent(\"onLoadXMLError\", [\"Incorrect XML\", arguments[1], obj]);\n      return document.createElement(\"DIV\");\n    },\n    xpath: function xpath(xpathExp, docObj) {\n      if (!docObj.nodeName) docObj = docObj.responseXML || docObj;\n\n      if (env.isIE) {\n        return docObj.selectNodes(xpathExp) || [];\n      } else {\n        var rows = [];\n        var first;\n        var col = (docObj.ownerDocument || docObj).evaluate(xpathExp, docObj, null, XPathResult.ANY_TYPE, null);\n\n        while (true) {\n          first = col.iterateNext();\n\n          if (first) {\n            rows.push(first);\n          } else {\n            break;\n          }\n        }\n\n        return rows;\n      }\n    },\n    query: function query(config) {\n      return this._call(config.method || \"GET\", config.url, config.data || \"\", config.async || true, config.callback, config.headers);\n    },\n    get: function get(url, onLoad, headers) {\n      var config = createConfig(\"GET\", arguments);\n      return this.query(config);\n    },\n    getSync: function getSync(url, headers) {\n      var config = createConfig(\"GET\", arguments);\n      config.async = false;\n      return this.query(config);\n    },\n    put: function put(url, postData, onLoad, headers) {\n      var config = createConfig(\"PUT\", arguments);\n      return this.query(config);\n    },\n    del: function del(url, onLoad, headers) {\n      /**\r\n       * https://tools.ietf.org/html/rfc7231#section-4.3.5\r\n       * A payload within a DELETE request message has no defined semantics;\r\n       * sending a payload body on a DELETE request might cause some existing\r\n       * implementations to reject the request.\r\n       */\n      var config = createConfig(\"DELETE\", arguments);\n      return this.query(config);\n    },\n    post: function post(url, postData, onLoad, headers) {\n      if (arguments.length == 1) {\n        postData = \"\";\n      } else if (arguments.length == 2 && typeof postData == \"function\") {\n        onLoad = postData;\n        postData = \"\";\n      }\n\n      var config = createConfig(\"POST\", arguments);\n      return this.query(config);\n    },\n    postSync: function postSync(url, postData, headers) {\n      postData = postData === null ? \"\" : String(postData);\n      var config = createConfig(\"POST\", arguments);\n      config.async = false;\n      return this.query(config);\n    },\n    _call: function _call(method, url, postData, async, onLoad, headers) {\n      return new gantt.Promise(function (resolve, reject) {\n        var t = (typeof XMLHttpRequest === \"undefined\" ? \"undefined\" : _typeof(XMLHttpRequest)) !== undefined ? new XMLHttpRequest() : new global.ActiveXObject(\"Microsoft.XMLHTTP\");\n        var isQt = navigator.userAgent.match(/AppleWebKit/) !== null && navigator.userAgent.match(/Qt/) !== null && navigator.userAgent.match(/Safari/) !== null;\n\n        if (!!async) {\n          t.onreadystatechange = function () {\n            if (t.readyState == 4 || isQt && t.readyState == 3) {\n              // what for long response and status 404?\n              if (t.status != 200 || t.responseText === \"\") if (!gantt.callEvent(\"onAjaxError\", [t])) return;\n              setTimeout(function () {\n                if (typeof onLoad == \"function\") {\n                  onLoad.apply(global, [{\n                    xmlDoc: t,\n                    filePath: url\n                  }]); // dhtmlx-compat, response.xmlDoc.responseXML/responseText\n                }\n\n                resolve(t);\n\n                if (typeof onLoad == \"function\") {\n                  onLoad = null;\n                  t = null;\n                }\n              }, 0);\n            }\n          };\n        }\n\n        var noCache = !this || !this.cache;\n\n        if (method == \"GET\" && noCache) {\n          url += (url.indexOf(\"?\") >= 0 ? \"&\" : \"?\") + \"dhxr\" + new Date().getTime() + \"=1\";\n        }\n\n        t.open(method, url, async);\n\n        if (headers) {\n          for (var key in headers) {\n            t.setRequestHeader(key, headers[key]);\n          }\n        } else if (method.toUpperCase() == \"POST\" || method == \"PUT\" || method == \"DELETE\") {\n          t.setRequestHeader(\"Content-Type\", \"application/x-www-form-urlencoded\");\n        } else if (method == \"GET\") {\n          postData = null;\n        }\n\n        t.setRequestHeader(\"X-Requested-With\", \"XMLHttpRequest\");\n        t.send(postData);\n        if (!async) return {\n          xmlDoc: t,\n          filePath: url\n        }; // dhtmlx-compat, response.xmlDoc.responseXML/responseText\n      });\n    },\n    urlSeparator: function urlSeparator(str) {\n      if (str.indexOf(\"?\") != -1) return \"&\";else return \"?\";\n    }\n  };\n};","type DurationUnits = \"minute\" | \"hour\" | \"day\" | \"week\" | \"month\" | \"year\";\r\ntype Align = \"left\" | \"center\" | \"right\";\r\ntype SectionType = \"textarea\"\r\n\t\t\t\t\t| \"time\"\r\n\t\t\t\t\t| \"duration\"\r\n\t\t\t\t\t| \"select\"\r\n\t\t\t\t\t| \"typeselect\"\r\n\t\t\t\t\t| \"parent\"\r\n\t\t\t\t\t| \"template\"\r\n\t\t\t\t\t| \"checkbox\"\r\n\t\t\t\t\t| \"radio\"\r\n\t\t\t\t\t| \"resources\"\r\n\t\t\t\t\t| \"constraint\";\r\n\r\ntype LightboxSection = Array<ILightboxSection\r\n\t| ILightboxTimeAndDurationSection\r\n\t| ILightboxInputControl\r\n\t| ILightboxSelectControl\r\n\t| ILightboxParentControl\r\n\t| ILightboxTypeselectControl>;\r\n\r\ntype LayoutView = \"grid\"\r\n\t| \"timeline\"\r\n\t| \"resizer\"\r\n\t| \"scrollbar\"\r\n\t| \"resourceGrid\"\r\n\t| \"resourceTimeline\";\r\n\r\ninterface IColumnItem {\r\n\tname: string;\r\n\tlabel?: string;\r\n\ttree?: boolean;\r\n\talign?: Align;\r\n\thide?: boolean;\r\n\tmax_width?: number;\r\n\tmin_width?: number;\r\n\tresize?: boolean;\r\n\ttemplate?: (obj: any) => string;\r\n\twidth?: number | \"*\";\r\n}\r\n\r\nexport type TModifierKeys = \"metaKey\" | \"ctrlKey\" | \"altKey\" | \"shiftKey\" | false | undefined;\r\n\r\nexport interface IScale {\r\n\tcss?: () => string;\r\n\tdate?: string;\r\n\tstep: number;\r\n\ttemplate?: (date: Date) => string;\r\n\tunit: DurationUnits;\r\n}\r\n\r\ninterface ILightboxSection {\r\n\tname: string;\r\n\tmap_to: string;\r\n\ttype: SectionType;\r\n\theight?: number;\r\n\tfocus?: boolean;\r\n}\r\n\r\ninterface ILightboxTimeAndDurationSection extends ILightboxSection {\r\n\treadonly: boolean;\r\n\tyear_range: number[] | number;\r\n\tsingle_date: boolean;\r\n\ttime_format: string;\r\n}\r\n\r\ninterface ILightboxInputControl extends ILightboxSection {\r\n\tdefault_value?: any;\r\n\toptions?: Array<{key: string, label: string}>;\r\n}\r\n\r\ninterface ILightboxSelectControl extends ILightboxInputControl {\r\n\tonchange: () => boolean | undefined;\r\n}\r\n\r\ninterface ILightboxParentControl extends ILightboxSection {\r\n\tallow_root: boolean;\r\n\troot_label: string;\r\n\tsort?: (a: any, b: any) => -1 | 0 | 1;\r\n\tfilter?: (task: string | number | object) => boolean;\r\n\ttemplate?: (start: Date, end: Date, ev: object) => string;\r\n}\r\n\r\ninterface ILightboxTypeselectControl extends ILightboxSection {\r\n\tfilter?: (typeName: string) => boolean;\r\n}\r\n\r\n\r\ninterface ILayoutScrollbar {\r\n\tview: \"scrollbar\";\r\n\tscroll?: \"x\" | \"y\";\r\n\tid: string;\r\n\theight?: number;\r\n\twidth?: number;\r\n}\r\n\r\ninterface ILayoutView {\r\n\tview: LayoutView;\r\n\tid?: string;\r\n\tscrollX?: string;\r\n\tscrollY?: string;\r\n\tconfig?: object;\r\n}\r\n\r\ninterface ILayoutGrid extends ILayoutView {\r\n\tview: \"grid\";\r\n\tbind?: string;\r\n}\r\n\r\ninterface ILayoutTimeline extends ILayoutView {\r\n\tview: \"timeline\";\r\n\tbindLinks?: string;\r\n\tlayers?: any[];\r\n}\r\n\r\ninterface ILayoutResizer {\r\n\tview?: undefined;\r\n\tresizer: boolean;\r\n\twidth: number;\r\n}\r\n\r\ninterface ILayoutResourceGrid extends ILayoutView {\r\n\tview: \"resourceGrid\";\r\n\twidth: number;\r\n\tgroup: \"string\";\r\n}\r\n\r\ninterface ILayoutResourceTimeline extends ILayoutView {\r\n\tview: \"resourceTimeline\";\r\n\twidth: number;\r\n\tgroup: \"string\";\r\n}\r\n\r\ninterface ILayoutHtml {\r\n\thtml: string;\r\n\tcss: string;\r\n\twidth: number;\r\n}\r\n\r\ntype LayoutRow = ILayoutGrid\r\n\t| ILayoutTimeline\r\n\t| ILayoutResizer\r\n\t| ILayoutResourceGrid\r\n\t| ILayoutResourceTimeline\r\n\t| ILayoutHtml\r\n\t| ILayoutScrollbar\r\n\t| { cols: LayoutCol[] };\r\n\r\ntype LayoutCol = ILayoutGrid\r\n\t| ILayoutTimeline\r\n\t| ILayoutResizer\r\n\t| ILayoutResourceGrid\r\n\t| ILayoutResourceTimeline\r\n\t| ILayoutHtml\r\n\t| ILayoutScrollbar\r\n\t| { rows: LayoutRow[] };\r\n\r\ninterface ILayout {\r\n\tcss: string;\r\n\trows?: LayoutRow[];\r\n\tcols?: LayoutCol[];\r\n}\r\n\r\ntype TCsp = boolean | \"auto\";\r\n\r\ninterface IResourceConfig {\r\n\tdataprocessor_assignments?: boolean;\r\n\tdataprocessor_resources?: boolean;\r\n\teditable_resource_diagram?: boolean;\r\n\tresource_store?: {\r\n\t\ttype?: \"treeDataStore\"|\"dataStore\"|string;\r\n\t\tfetchTasks?: boolean;\r\n\t\tinitItem?: (item: any) => any;\r\n\t};\r\n\tlightbox_resources?: (resources: any[]) => any[];\r\n\r\n}\r\n\r\ninterface IGanttConfig {\r\n\tlayout: ILayout;\r\n\tlinks: {\r\n\t\tfinish_to_start: \"0\";\r\n\t\tstart_to_start: \"1\";\r\n\t\tfinish_to_finish: \"2\";\r\n\t\tstart_to_finish: \"3\";\r\n\t};\r\n\ttypes: {\r\n\t\ttask: string;\r\n\t\tproject: string;\r\n\t\tmilestone: string;\r\n\t};\r\n\tauto_types: boolean;\r\n\tduration_unit: DurationUnits;\r\n\twork_time: boolean;\r\n\tcorrect_work_time: boolean;\r\n\tskip_off_time: boolean;\r\n\tcascade_delete: boolean;\r\n\tautosize: boolean | string;\r\n\tautoscroll: boolean;\r\n\tshow_links: boolean;\r\n\tshow_task_cells: boolean;\r\n\tautosize_min_width: number;\r\n\tautoscroll_speed: number;\r\n\tdeepcopy_on_parse: boolean;\r\n\tstatic_background: boolean;\r\n\tstatic_background_cells: boolean;\r\n\tbranch_loading: boolean;\r\n\tbranch_loading_property: string;\r\n\tshow_loading: boolean;\r\n\tshow_chart: boolean;\r\n\tshow_grid: boolean;\r\n\tmin_duration: number;\r\n\tdate_format: string; // use instead xml_date\r\n\txml_date?: string; // deprecated\r\n\tstart_on_monday: boolean;\r\n\tserver_utc: boolean;\r\n\tshow_progress: boolean;\r\n\tfit_tasks: boolean;\r\n\tselect_task: boolean;\r\n\tscroll_on_click: boolean;\r\n\tsmart_rendering: boolean;\r\n\tpreserve_scroll: boolean;\r\n\treadonly: boolean;\r\n\tcontainer_resize_timeout: number;\r\n\r\n\t/*grid */\r\n\tdate_grid: string;\r\n\r\n\tdrag_links: boolean;\r\n\tdrag_progress: boolean;\r\n\tdrag_resize: boolean;\r\n\tdrag_project: boolean;\r\n\tdrag_move: boolean;\r\n\tdrag_mode: {\r\n\t\tresize: \"resize\",\r\n\t\tprogress: \"progress\",\r\n\t\tmove: \"move\",\r\n\t\tignore: \"ignore\"\r\n\t};\r\n\tround_dnd_dates: boolean;\r\n\tlink_wrapper_width: number;\r\n\troot_id: string | number;\r\n\r\n\tautofit: boolean;\r\n\tcolumns: IColumnItem[];\r\n\r\n\t/* scale*/\r\n\t/* it will be deprecated */\r\n\tdate_scale?: string;\r\n\tstep?: number;\r\n\tscale_unit?: DurationUnits;\r\n\tsubscales?: IScale[];\r\n\t/* it will be deprecated end */\r\n\r\n\tscales: IScale[];\r\n\r\n\tscale_offset_minimal: boolean;\r\n\r\n\tinherit_scale_class: boolean;\r\n\r\n\r\n\ttime_step: number;\r\n\tduration_step: number;\r\n\r\n\r\n\ttask_date: string;\r\n\ttime_picker: string;\r\n\ttask_attribute: string;\r\n\tlink_attribute: string;\r\n\tlayer_attribute: string;\r\n\tbuttons_left: string[];\r\n\t_migrate_buttons: {\r\n\t\tdhx_save_btn: \"gantt_save_btn\",\r\n\t\tdhx_cancel_btn: \"gantt_cancel_btn\",\r\n\t\tdhx_delete_btn: \"gantt_delete_btn\"\r\n\t};\r\n\r\n\tbuttons_right: string[];\r\n\r\n\r\n\tlightbox: {\r\n\t\tsections?: LightboxSection,\r\n\t\tproject_sections?: LightboxSection,\r\n\t\tmilestone_sections?: LightboxSection\r\n\t};\r\n\tdrag_lightbox: boolean;\r\n\tsort: boolean;\r\n\tdetails_on_create: boolean;\r\n\tdetails_on_dblclick: boolean;\r\n\tinitial_scroll: boolean;\r\n\ttask_scroll_offset: number;\r\n\r\n\torder_branch: boolean;\r\n\torder_branch_free: boolean;\r\n\r\n\t// task_height is deprecated, use 'bar_height` instead\r\n\ttask_height: number | \"full\";\r\n\tbar_height: number | \"full\";\r\n\tmin_column_width: number;\r\n\r\n\t// min width for grid column (when resizing)\r\n\tmin_grid_column_width: number;\r\n\t// name of the attribute with column index for resize element\r\n\tgrid_resizer_column_attribute: string;\r\n\t// name of the attribute with column index for resize element\r\n\t// grid_resizer_attribute: string; // usage of this parameter is not found\r\n\r\n\t// grid width can be increased after the column has been resized\r\n\tkeep_grid_width: boolean;\r\n\r\n\t// grid width can be adjusted\r\n\tgrid_resize: boolean;\r\n\tgrid_elastic_columns: boolean;\r\n\tshow_tasks_outside_timescale: boolean;\r\n\tshow_unscheduled: boolean;\r\n\treadonly_property: string;\r\n\teditable_property: string;\r\n\tcalendar_property: string;\r\n\tresource_calendars: object;\r\n\tdynamic_resource_calendars: boolean;\r\n\tinherit_calendar: boolean;\r\n\ttype_renderers: object;\r\n\r\n\tresize_rows: boolean;\r\n\t// name of the attribute with row index for resize element\r\n\ttask_grid_row_resizer_attribute: string;\r\n\t// min height for row (when resizing)\r\n\tmin_task_grid_row_height: number;\r\n\r\n\topen_tree_initially: boolean;\r\n\toptimize_render: boolean;\r\n\tprevent_default_scroll: boolean;\r\n\tshow_errors: boolean;\r\n\twai_aria_attributes: boolean;\r\n\tsmart_scales: boolean;\r\n\trtl: boolean;\r\n\tplaceholder_task: boolean | object;\r\n\thorizontal_scroll_key: TModifierKeys;\r\n\tdrag_timeline: {\r\n\t\tuseKey: TModifierKeys;\r\n\t\tignore: string;\r\n\t};\r\n\tdrag_multiple: boolean;\r\n\tcsp: TCsp;\r\n\r\n\tresources?: IResourceConfig;\r\n}\r\n\r\nmodule.exports = () => {\r\n\tconst result: IGanttConfig = {\r\n\t\tlayout: {\r\n\t\t\tcss: \"gantt_container\",\r\n\t\t\trows: [\r\n\t\t\t\t{\r\n\t\t\t\t\tcols: [\r\n\t\t\t\t\t\t{view: \"grid\", scrollX: \"scrollHor\", scrollY: \"scrollVer\"},\r\n\t\t\t\t\t\t{resizer: true, width: 1},\r\n\t\t\t\t\t\t{view: \"timeline\", scrollX: \"scrollHor\", scrollY: \"scrollVer\"},\r\n\t\t\t\t\t\t{view: \"scrollbar\", id: \"scrollVer\"}\r\n\t\t\t\t\t]\r\n\t\t\t\t},\r\n\t\t\t\t{view: \"scrollbar\", id: \"scrollHor\", height: 20}\r\n\t\t\t]\r\n\t\t},\r\n\t\tlinks: {\r\n\t\t\tfinish_to_start: \"0\",\r\n\t\t\tstart_to_start: \"1\",\r\n\t\t\tfinish_to_finish: \"2\",\r\n\t\t\tstart_to_finish: \"3\"\r\n\t\t},\r\n\t\ttypes: {\r\n\t\t\ttask: \"task\",\r\n\t\t\tproject: \"project\",\r\n\t\t\tmilestone: \"milestone\"\r\n\t\t},\r\n\t\tauto_types: false,\r\n\t\tduration_unit: \"day\",\r\n\t\twork_time: false,\r\n\t\tcorrect_work_time: false,\r\n\t\tskip_off_time: false,\r\n\r\n\t\tcascade_delete: true,\r\n\r\n\t\tautosize: false,\r\n\t\tautosize_min_width: 0,\r\n\t\tautoscroll: true,\r\n\t\tautoscroll_speed: 30,\r\n\t\tdeepcopy_on_parse: false,\r\n\t\tshow_links: true,\r\n\t\tshow_task_cells: true,\r\n\t\t// replace backgroung of the task area with a canvas img\r\n\t\tstatic_background: false,\r\n\t\tstatic_background_cells: true,\r\n\t\tbranch_loading: false,\r\n\t\tbranch_loading_property: \"$has_child\",\r\n\t\tshow_loading: false,\r\n\t\tshow_chart: true,\r\n\t\tshow_grid: true,\r\n\t\tmin_duration: 60 * 60 * 1000,\r\n\t\tdate_format: \"%d-%m-%Y %H:%i\", // use instead xml_date\r\n\t\txml_date: undefined, // \"%d-%m-%Y %H:%i\", // deprecated\r\n\t\tstart_on_monday: true,\r\n\t\tserver_utc: false,\r\n\t\tshow_progress: true,\r\n\t\tfit_tasks: false,\r\n\t\tselect_task: true,\r\n\t\tscroll_on_click: true,\r\n\t\tsmart_rendering: true,\r\n\t\tpreserve_scroll: true,\r\n\t\treadonly: false,\r\n\t\tcontainer_resize_timeout: 20,\r\n\r\n\t\t/*grid */\r\n\t\tdate_grid: \"%Y-%m-%d\",\r\n\r\n\t\tdrag_links: true,\r\n\t\tdrag_progress: true,\r\n\t\tdrag_resize: true,\r\n\t\tdrag_project: false,\r\n\t\tdrag_move: true,\r\n\t\tdrag_mode: {\r\n\t\t\tresize: \"resize\",\r\n\t\t\tprogress: \"progress\",\r\n\t\t\tmove: \"move\",\r\n\t\t\tignore: \"ignore\"\r\n\t\t},\r\n\t\tround_dnd_dates: true,\r\n\t\tlink_wrapper_width: 20,\r\n\t\troot_id: 0,\r\n\r\n\t\tautofit: false, // grid column automatic fit grid_width config\r\n\t\tcolumns: [\r\n\t\t\t{name: \"text\", tree: true, width: \"*\", resize: true},\r\n\t\t\t{name: \"start_date\", align: \"center\", resize: true},\r\n\t\t\t{name: \"duration\", align: \"center\"},\r\n\t\t\t{name: \"add\", width: 44}\r\n\t\t],\r\n\r\n\t\t/*scale*/\r\n\r\n\t\tscale_offset_minimal: true,\r\n\t\tinherit_scale_class: false,\r\n\r\n\t\tscales: [\r\n\t\t\t{\r\n\t\t\t\tunit: \"day\",\r\n\t\t\t\tstep: 1,\r\n\t\t\t\tdate: \"%d %M\"\r\n\t\t\t}\r\n\t\t],\r\n// \t\tdate_scale: \"%d %M\",\r\n\r\n\t\ttime_step: 60,\r\n\t\tduration_step: 1,\r\n\t\ttask_date: \"%d %F %Y\",\r\n\t\ttime_picker: \"%H:%i\",\r\n\t\ttask_attribute: \"data-task-id\",\r\n\t\tlink_attribute: \"data-link-id\",\r\n\t\tlayer_attribute: \"data-layer\",\r\n\t\tbuttons_left: [\r\n\t\t\t\"gantt_save_btn\",\r\n\t\t\t\"gantt_cancel_btn\"\r\n\t\t],\r\n\t\t_migrate_buttons: {\r\n\t\t\tdhx_save_btn: \"gantt_save_btn\",\r\n\t\t\tdhx_cancel_btn: \"gantt_cancel_btn\",\r\n\t\t\tdhx_delete_btn: \"gantt_delete_btn\"\r\n\t\t},\r\n\t\tbuttons_right: [\r\n\t\t\t\"gantt_delete_btn\"\r\n\t\t],\r\n\t\tlightbox: {\r\n\t\t\tsections: [\r\n\t\t\t\t{name: \"description\", height: 70, map_to: \"text\", type: \"textarea\", focus: true},\r\n\t\t\t\t{name: \"time\", type: \"duration\", map_to: \"auto\"}\r\n\t\t\t],\r\n\t\t\tproject_sections: [\r\n\t\t\t\t{name: \"description\", height: 70, map_to: \"text\", type: \"textarea\", focus: true},\r\n\t\t\t\t{name: \"type\", type: \"typeselect\", map_to: \"type\"},\r\n\t\t\t\t{name: \"time\", type: \"duration\", readonly: true, map_to: \"auto\"}\r\n\t\t\t],\r\n\t\t\tmilestone_sections: [\r\n\t\t\t\t{name: \"description\", height: 70, map_to: \"text\", type: \"textarea\", focus: true},\r\n\t\t\t\t{name: \"type\", type: \"typeselect\", map_to: \"type\"},\r\n\t\t\t\t{name: \"time\", type: \"duration\", single_date: true, map_to: \"auto\"}\r\n\t\t\t]\r\n\t\t},\r\n\t\tdrag_lightbox: true,\r\n\t\tsort: false,\r\n\t\tdetails_on_create: true,\r\n\t\tdetails_on_dblclick: true,\r\n\t\tinitial_scroll: true,\r\n\t\ttask_scroll_offset: 100,\r\n\r\n\t\torder_branch: false,\r\n\t\torder_branch_free: false,\r\n\r\n\t\t// task height is deprecated, use 'bar_height' instead\r\n\t\ttask_height: undefined,// number px of 'full' for row height\r\n\t\tbar_height: \"full\",\r\n\t\tmin_column_width: 70,\r\n\r\n\t\t// min width for grid column (when resizing)\r\n\t\tmin_grid_column_width: 70,\r\n\t\t// name of the attribute with column index for resize element\r\n\t\tgrid_resizer_column_attribute: \"data-column-index\",\r\n\t\t// name of the attribute with column index for resize element\r\n\t\t// grid_resizer_attribute: \"grid_resizer\", // - usage of this parameter is not found in code\r\n\r\n\t\t// grid width can be increased after the column has been resized\r\n\t\tkeep_grid_width: false,\r\n\r\n\t\t// grid width can be adjusted\r\n\t\tgrid_resize: false,\r\n\t\tgrid_elastic_columns: false,\r\n\t\tshow_tasks_outside_timescale: false,\r\n\t\tshow_unscheduled: true,\r\n\r\n\t\tresize_rows: false,\r\n\t\t// name of the attribute with row index for resize element\r\n\t\ttask_grid_row_resizer_attribute: \"data-row-index\",\r\n\t\t// min height for row (when resizing)\r\n\t\tmin_task_grid_row_height: 30,\r\n\r\n\t\t//\r\n\t\treadonly_property: \"readonly\",\r\n\t\teditable_property: \"editable\",\r\n\t\tcalendar_property: \"calendar_id\",\r\n\t\tresource_calendars: {},\r\n\t\tdynamic_resource_calendars: false,\r\n\t\tinherit_calendar: false,\r\n\t\ttype_renderers: {},\r\n\r\n\t\topen_tree_initially: false,\r\n\t\toptimize_render: true,\r\n\t\tprevent_default_scroll: false,\r\n\t\tshow_errors: true,\r\n\t\twai_aria_attributes: true,\r\n\t\tsmart_scales: true,\r\n\t\trtl:false,\r\n\t\tplaceholder_task: false,\r\n\t\thorizontal_scroll_key: \"shiftKey\",\r\n\t\tdrag_timeline: {\r\n\t\t\tuseKey: undefined,\r\n\t\t\tignore: \".gantt_task_line, .gantt_task_link\"\r\n\t\t},\r\n\t\tdrag_multiple: true,\r\n\t\tcsp: \"auto\"\r\n\t};\r\n\treturn result;\r\n};\r\n","module.exports = function () {\n  var services = {};\n\n  function register(name, getter) {\n    services[name] = getter;\n  }\n\n  function getService(name) {\n    if (!services[name]) {\n      return null;\n    }\n\n    return services[name]();\n  }\n\n  function dropService(name) {\n    if (services[name]) {\n      delete services[name];\n    }\n  }\n\n  var servicesEnum = {};\n  return {\n    services: servicesEnum,\n    setService: register,\n    getService: getService,\n    dropService: dropService,\n    destructor: function destructor() {\n      for (var i in services) {\n        if (services[i]) {\n          var service = services[i];\n\n          if (service && service.destructor) {\n            service.destructor();\n          }\n        }\n      }\n\n      services = null;\n    }\n  };\n};","export default class ExtensionsManager{\r\n\tprivate _extensions:{[key:string]: GanttPlugin };\r\n\r\n\tconstructor(config: {[key:string]: GanttPlugin }){\r\n\t\tthis._extensions = {};\r\n\t\tfor(const i in config){\r\n\t\t\tthis._extensions[i] = config[i];\r\n\t\t}\r\n\t}\r\n\r\n\taddExtension = (name: string, ext: GanttPlugin) => {\r\n\t\tthis._extensions[name] = ext;\r\n\t}\r\n\r\n\tgetExtension = (name: string): GanttPlugin => {\r\n\t\treturn this._extensions[name];\r\n\t}\r\n}","module.exports = {\n  KEY_CODES: {\n    UP: 38,\n    DOWN: 40,\n    LEFT: 37,\n    RIGHT: 39,\n    SPACE: 32,\n    ENTER: 13,\n    DELETE: 46,\n    ESC: 27,\n    TAB: 9\n  }\n};","function _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nfunction DHXGantt() {\n  this.constants = require(\"../constants\");\n  this.version = VERSION;\n  this.license = LICENSE;\n  this.templates = {};\n  this.ext = {};\n  this.keys = {\n    edit_save: this.constants.KEY_CODES.ENTER,\n    edit_cancel: this.constants.KEY_CODES.ESC\n  };\n}\n\nmodule.exports = function (supportedExtensions) {\n  // use a named constructor to make gantt instance discoverable in heap snapshots\n  var gantt = new DHXGantt();\n\n  var ExtensionManager = require(\"../ext/extension_manager\")[\"default\"];\n\n  var extensionManager = new ExtensionManager(supportedExtensions);\n  var activePlugins = {};\n\n  gantt.plugins = function (config) {\n    for (var i in config) {\n      if (config[i] && !activePlugins[i]) {\n        var plugin = extensionManager.getExtension(i);\n\n        if (plugin) {\n          plugin(gantt);\n          activePlugins[i] = true;\n        }\n      }\n    }\n\n    return activePlugins;\n  };\n\n  gantt.$services = require(\"../core/common/services\")();\n  gantt.config = require(\"../core/common/config\")();\n  gantt.ajax = require(\"../core/common/ajax\")(gantt);\n  gantt.date = require(\"../core/common/date\")(gantt);\n  gantt.RemoteEvents = require(\"../core/remote/remote_events\").remoteEvents;\n\n  var dnd = require(\"../core/common/dnd\")(gantt);\n\n  gantt.$services.setService(\"dnd\", function () {\n    return dnd;\n  });\n\n  var templatesLoader = require(\"../core/common/templates\")(gantt);\n\n  gantt.$services.setService(\"templateLoader\", function () {\n    return templatesLoader;\n  });\n\n  require(\"../utils/eventable\")(gantt);\n\n  var StateService = require(\"../core/common/state\");\n\n  var stateService = new StateService();\n  stateService.registerProvider(\"global\", function () {\n    var res = {\n      min_date: gantt._min_date,\n      max_date: gantt._max_date,\n      selected_task: null\n    }; // do not throw error if getState called from non-initialized gantt\n\n    if (gantt.$data && gantt.$data.tasksStore) {\n      res.selected_task = gantt.$data.tasksStore.getSelectedId();\n    }\n\n    return res;\n  });\n  gantt.getState = stateService.getState;\n  gantt.$services.setService(\"state\", function () {\n    return stateService;\n  });\n\n  var utils = require(\"../utils/utils\");\n\n  utils.mixin(gantt, utils);\n  gantt.Promise = require(\"../utils/promise\");\n  gantt.env = require(\"../utils/env\");\n\n  require(\"../core/datastore/datastore_hooks\")(gantt);\n\n  var DataProcessor = require(\"../core/dataprocessor\");\n\n  gantt.dataProcessor = DataProcessor.DEPRECATED_api;\n  gantt.createDataProcessor = DataProcessor.createDataProcessor;\n\n  require(\"../core/plugins\")(gantt);\n\n  require(\"../core/dynamic_loading\")(gantt);\n\n  require(\"../core/grid_column_api\")(gantt);\n\n  require(\"../core/tasks\")(gantt);\n\n  require(\"../core/load\")(gantt);\n\n  require(\"../core/worktime/work_time\")(gantt);\n\n  require(\"../core/data\")(gantt);\n\n  require(\"../publish_helpers/void_script_second\")[\"default\"](gantt);\n\n  require(\"../core/data_task_types\")(gantt);\n\n  require(\"../core/cached_functions\")(gantt);\n\n  require(\"../core/gantt_core\")(gantt);\n\n  require(\"../core/destructor\")(gantt);\n\n  require(\"../publish_helpers/void_script_third\")[\"default\"](gantt);\n\n  var i18n = require(\"../locale\")[\"default\"]();\n\n  gantt.i18n = {\n    addLocale: i18n.addLocale,\n    setLocale: function setLocale(locale) {\n      if (typeof locale === \"string\") {\n        var localeObject = i18n.getLocale(locale);\n\n        if (!localeObject) {\n          localeObject = i18n.getLocale(\"en\");\n        }\n\n        gantt.locale = localeObject;\n      } else if (locale) {\n        if (!gantt.locale) {\n          gantt.locale = locale;\n        } else {\n          for (var i in locale) {\n            if (locale[i] && _typeof(locale[i]) === \"object\") {\n              if (!gantt.locale[i]) {\n                gantt.locale[i] = {};\n              }\n\n              gantt.mixin(gantt.locale[i], locale[i], true);\n            } else {\n              gantt.locale[i] = locale[i];\n            }\n          }\n        }\n      }\n    },\n    getLocale: i18n.getLocale\n  };\n  gantt.i18n.setLocale(\"en\");\n  return gantt;\n};","require(\"css/skins/terrace.less\");\n\nvar factory = require(\"./make_instance_common\");\n\nmodule.exports = function (supportedExtensions) {\n  var gantt = factory(supportedExtensions);\n\n  if (!gantt.env.isNode) {\n    require(\"../core/ui_core\")(gantt);\n  }\n\n  return gantt;\n};","import { IUndo, IUndoCommand, IUndoCommands, IUndoPropAction, IUndoPropCommand, TActionType, TEntityType, TUndoStack, TUndoValue } from \"./types\";\r\n\r\nconst MAX_UNDO_STEPS = 100;\r\n\r\nexport class Undo implements IUndo {\r\n\r\n\tmaxSteps = MAX_UNDO_STEPS;\r\n\tundoEnabled = true;\r\n\tredoEnabled = true;\r\n\taction: IUndoPropAction = {\r\n\t\tcreate: (commands?: IUndoCommand[]): IUndoCommands => {\r\n\t\t\treturn { commands: (commands ? commands.slice() : []) };\r\n\t\t},\r\n\t\tinvert: (action: IUndoCommands): IUndoCommands => {\r\n\t\t\tconst gantt = this._gantt;\r\n\t\t\tconst revert = gantt.copy(action);\r\n\t\t\tconst commands = this.command;\r\n\t\t\tfor (let i = 0; i < action.commands.length; i++) {\r\n\t\t\t\tconst command = revert.commands[i] = commands.invert(revert.commands[i]);\r\n\t\t\t\tif (command.type === commands.type.update || command.type === commands.type.move) {\r\n\t\t\t\t\t[command.value, command.oldValue] = [command.oldValue, command.value];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn revert as IUndoCommands;\r\n\t\t}\r\n\t};\r\n\tcommand: IUndoPropCommand = {\r\n\t\t// entities that require different processing for undoing-redoing changes (gantt.config.undo_types)\r\n\t\tentity: null,\r\n\r\n\t\t// types of traced actions (gantt.config.undo_actions)\r\n\t\ttype: null,\r\n\r\n\t\tcreate: (value: TUndoValue, oldValue: TUndoValue, type: TActionType, entity: TEntityType): IUndoCommand => {\r\n\t\t\tconst gantt = this._gantt;\r\n\t\t\treturn {\r\n\t\t\t\tentity,\r\n\t\t\t\ttype,\r\n\t\t\t\tvalue: gantt.copy(value),\r\n\t\t\t\toldValue: gantt.copy(oldValue || value)\r\n\t\t\t};\r\n\t\t},\r\n\t\tinvert: (command: IUndoCommand): IUndoCommand => {\r\n\t\t\tconst gantt = this._gantt;\r\n\t\t\tconst revert = gantt.copy(command);\r\n\t\t\trevert.type = this.command.inverseCommands(command.type);\r\n\t\t\treturn revert;\r\n\t\t},\r\n\t\tinverseCommands: (command: TActionType): TActionType => {\r\n\t\t\tconst gantt = this._gantt;\r\n\t\t\tconst types = this.command.type;\r\n\t\t\tswitch (command) {\r\n\t\t\t\tcase types.update:\r\n\t\t\t\t\treturn types.update;\r\n\t\t\t\tcase types.remove:\r\n\t\t\t\t\treturn types.add;\r\n\t\t\t\tcase types.add:\r\n\t\t\t\t\treturn types.remove;\r\n\t\t\t\tcase types.move:\r\n\t\t\t\t\treturn types.move;\r\n\t\t\t\tdefault:\r\n\t\t\t\t\tgantt.assert(false, \"Invalid command \"+ command);\r\n\t\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\tprivate _undoStack = [];\r\n\tprivate _redoStack = [];\r\n\tprivate _gantt: any;\r\n\r\n\tconstructor(gantt: any){\r\n\t\tthis._gantt = gantt;\r\n\t}\r\n\tgetUndoStack() {\r\n\t\treturn this._undoStack;\r\n\t}\r\n\tsetUndoStack(stack: []) {\r\n\t\tthis._undoStack = stack;\r\n\t}\r\n\r\n\tgetRedoStack() {\r\n\t\treturn this._redoStack;\r\n\t}\r\n\tsetRedoStack(stack: []) {\r\n\t\tthis._redoStack = stack;\r\n\t}\r\n\r\n\tclearUndoStack() {\r\n\t\tthis._undoStack = [];\r\n\t}\r\n\r\n\tclearRedoStack() {\r\n\t\tthis._redoStack = [];\r\n\t}\r\n\r\n\tupdateConfigs() {\r\n\t\tconst gantt = this._gantt;\r\n\t\tthis.maxSteps = gantt.config.undo_steps || MAX_UNDO_STEPS;\r\n\t\tthis.command.entity = gantt.config.undo_types;\r\n\t\tthis.command.type = gantt.config.undo_actions;\r\n\t\tthis.undoEnabled = !!gantt.config.undo;\r\n\t\tthis.redoEnabled = !!gantt.config.redo; // GS-873, Redo should work even when the `gantt.config.undo` is disabled.\r\n\t}\r\n\r\n\tundo() {\r\n\t\tconst gantt = this._gantt;\r\n\t\tthis.updateConfigs();\r\n\t\tif (!this.undoEnabled) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tconst action = this._pop(this._undoStack);\r\n\t\tif (action) {\r\n\t\t\tthis._reorderCommands(action);\r\n\t\t}\r\n\t\tif (gantt.callEvent(\"onBeforeUndo\", [action]) !== false) {\r\n\t\t\tif (action) {\r\n\t\t\t\tthis._applyAction(this.action.invert(action));\r\n\t\t\t\tthis._push(this._redoStack, gantt.copy(action));\r\n\t\t\t\tgantt.callEvent(\"onAfterUndo\", [action]);\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t}\r\n\t\tgantt.callEvent(\"onAfterUndo\", [null]);\r\n\t}\r\n\r\n\tredo() {\r\n\t\tconst gantt = this._gantt;\r\n\t\tthis.updateConfigs();\r\n\t\tif (!this.redoEnabled) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tconst action = this._pop(this._redoStack);\r\n\t\tif (action) {\r\n\t\t\tthis._reorderCommands(action);\r\n\t\t}\r\n\r\n\t\tif (gantt.callEvent(\"onBeforeRedo\", [action]) !== false) {\r\n\t\t\tif (action) {\r\n\t\t\t\tthis._applyAction(action);\r\n\t\t\t\tthis._push(this._undoStack, gantt.copy(action));\r\n\t\t\t\tgantt.callEvent(\"onAfterRedo\", [action]);\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t}\r\n\t\tgantt.callEvent(\"onAfterRedo\", [null]);\r\n\t}\r\n\r\n\t// storeUndo:\r\n\tlogAction(action: IUndoCommands) {\r\n\t\tthis._push(this._undoStack, action);\r\n\t\tthis._redoStack = [];\r\n\t}\r\n\r\n\tprivate _push(stack: TUndoStack, action: IUndoCommands): IUndoCommands {\r\n\t\tconst gantt = this._gantt;\r\n\t\tif (!action.commands.length) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tconst event = stack === this._undoStack ? \"onBeforeUndoStack\" : \"onBeforeRedoStack\";\r\n\t\tif (gantt.callEvent(event, [action]) === false){\r\n\t\t\treturn;\r\n\t\t}\r\n\t\t// commands can be removed from event handler\r\n\t\tif (!action.commands.length) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tstack.push(action);\r\n\t\twhile (stack.length > this.maxSteps) {\r\n\t\t\tstack.shift();\r\n\t\t}\r\n\t\treturn action;\r\n\t}\r\n\r\n\tprivate _pop(stack: TUndoStack): IUndoCommands {\r\n\t\treturn stack.pop();\r\n\t}\r\n\r\n\tprivate _reorderCommands(action) {\r\n\t\t// firstly process tasks and only then links\r\n\t\t// in order to ensure links are added not earlier than their tasks\r\n\t\t// firstly to 'move' actions and only then updates\r\n\t\tconst weights = { any: 0, link:1, task:2 };\r\n\t\tconst actionWeights = { move: 1, any:0 };\r\n\t\taction.commands.sort(function(a, b) {\r\n\t\t\tif (a.entity === \"task\" && b.entity === \"task\") {\r\n\t\t\t\tif (a.type !== b.type) {\r\n\t\t\t\t\treturn (actionWeights[b.type] || 0) - (actionWeights[a.type] || 0);\r\n\t\t\t\t} else if (a.type === \"move\" && a.oldValue && b.oldValue && b.oldValue.parent === a.oldValue.parent) {\r\n\t\t\t\t\treturn a.oldValue.$index - b.oldValue.$index;\r\n\t\t\t\t} else {\r\n\t\t\t\t\treturn 0;\r\n\t\t\t\t}\r\n\t\t\t} else {\r\n\t\t\t\tconst weightA = weights[a.entity] || weights.any;\r\n\t\t\t\tconst weightB = weights[b.entity] || weights.any;\r\n\t\t\t\treturn weightB - weightA;\r\n\t\t\t}\r\n\r\n\t\t});\r\n\t}\r\n\r\n\tprivate _applyAction(action: IUndoCommands) {\r\n\t\tlet command = null;\r\n\t\tconst entities = this.command.entity;\r\n\t\tconst actions = this.command.type;\r\n\t\tconst gantt = this._gantt;\r\n\t\tconst methods = {};\r\n\t\tmethods[entities.task] = {\r\n\t\t\tadd: \"addTask\",\r\n\t\t\tget: \"getTask\",\r\n\t\t\tupdate: \"updateTask\",\r\n\t\t\tremove: \"deleteTask\",\r\n\t\t\tmove: \"moveTask\",\r\n\t\t\tisExists: \"isTaskExists\"\r\n\t\t};\r\n\t\tmethods[entities.link] = {\r\n\t\t\tadd: \"addLink\",\r\n\t\t\tget: \"getLink\",\r\n\t\t\tupdate: \"updateLink\",\r\n\t\t\tremove: \"deleteLink\",\r\n\t\t\tisExists: \"isLinkExists\"\r\n\t\t};\r\n\r\n\t\tgantt.batchUpdate(function() {\r\n\t\t\tfor (let i = 0; i < action.commands.length; i++) {\r\n\t\t\t\tcommand = action.commands[i];\r\n\t\t\t\tconst method = methods[command.entity][command.type];\r\n\t\t\t\tconst getMethod = methods[command.entity].get;\r\n\t\t\t\tconst check = methods[command.entity].isExists;\r\n\r\n\t\t\t\tif (command.type === actions.add) {\r\n\t\t\t\t\tgantt[method](command.oldValue, command.oldValue.parent, command.oldValue.$local_index);\r\n\t\t\t\t} else if (command.type === actions.remove) {\r\n\t\t\t\t\tif (gantt[check](command.value.id)) {\r\n\t\t\t\t\t\tgantt[method](command.value.id);\r\n\t\t\t\t\t}\r\n\t\t\t\t} else if (command.type === actions.update) {\r\n\t\t\t\t\tconst item = gantt[getMethod](command.value.id);\r\n\t\t\t\t\tfor(const prop in command.value){\r\n\t\t\t\t\t\tif(!prop.startsWith(\"$\") && !prop.startsWith(\"_\")){\r\n\t\t\t\t\t\t\titem[prop] = command.value[prop];\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tgantt[method](command.value.id);\r\n\t\t\t\t} else if (command.type === actions.move) {\r\n\t\t\t\t\tgantt[method](command.value.id, command.value.$local_index, command.value.parent);\r\n\t\t\t\t\t// GS-680: We should send the changes to the server after we undo vertical reorder\r\n\t\t\t\t\tgantt.callEvent(\"onRowDragEnd\", [command.value.id]);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n}","import { IInlineEditState, IMonitor, IUndo, IUndoCommand, TActionType, TEntityType, TUndoValue } from \"./types\";\r\n\r\nconst noTrack = {\r\n\tonBeforeUndo: \"onAfterUndo\",\r\n\tonBeforeRedo: \"onAfterRedo\"\r\n};\r\n\r\nconst batchActions = [\r\n\t\"onTaskDragStart\",\r\n\t\"onAfterTaskUpdate\",\r\n\t\"onAfterTaskDelete\",\r\n\t\"onBeforeBatchUpdate\"\r\n];\r\n\r\nexport class Monitor implements IMonitor {\r\n\tprivate _batchAction = null;\r\n\tprivate _batchMode = false;\r\n\tprivate _ignore = false;\r\n\tprivate _ignoreMoveEvents = false;\r\n\tprivate _initialTasks = {};\r\n\tprivate _initialLinks = {};\r\n\tprivate _nestedTasks =  {};\r\n\tprivate _nestedLinks = {};\r\n\tprivate _timeout;\r\n\tprivate _gantt: any;\r\n\tprivate _undo: IUndo;\r\n\r\n\tconstructor(undo: IUndo, gantt: any) {\r\n\t\tthis._undo = undo;\r\n\t\tthis._gantt = gantt;\r\n\t\tthis._attachEvents();\r\n\t}\r\n\r\n\tstore(id: TaskID | LinkID, type: TEntityType, overwrite: boolean = false) {\r\n\t\tif (type === this._gantt.config.undo_types.task) {\r\n\t\t\treturn this._storeTask(id, overwrite);\r\n\t\t}\r\n\t\tif (type === this._gantt.config.undo_types.link) {\r\n\t\t\treturn this._storeLink(id, overwrite);\r\n\t\t}\r\n\t\treturn false;\r\n\t}\r\n\tisMoveEventsIgnored() {\r\n\t\treturn this._ignoreMoveEvents;\r\n\t}\r\n\ttoggleIgnoreMoveEvents(newValue?: boolean) {\r\n\t\tthis._ignoreMoveEvents = newValue || false;\r\n\t}\r\n\tstartIgnore() {\r\n\t\tthis._ignore = true;\r\n\t}\r\n\tstopIgnore() {\r\n\t\tthis._ignore = false;\r\n\t}\r\n\tstartBatchAction() {\r\n\t\t// try catching updates made from event handlers using timeout\r\n\t\tif (!this._timeout){\r\n\t\t\tthis._timeout = setTimeout(() => {\r\n\t\t\t\tthis.stopBatchAction();\r\n\t\t\t\tthis._timeout = null;\r\n\t\t\t}, 10);\r\n\t\t}\r\n\r\n\r\n\t\tif (this._ignore || this._batchMode) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis._batchMode = true;\r\n\t\tthis._batchAction = this._undo.action.create();\r\n\t}\r\n\tstopBatchAction() {\r\n\t\tif (this._ignore) {\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tconst undo = this._undo;\r\n\t\tif (this._batchAction) {\r\n\t\t\tundo.logAction(this._batchAction);\r\n\t\t}\r\n\t\tthis._batchMode = false;\r\n\t\tthis._batchAction = null;\r\n\t}\r\n\tonTaskAdded(task: ITask) {\r\n\t\tif (!this._ignore) {\r\n\t\t\tthis._storeTaskCommand(task, this._undo.command.type.add);\r\n\t\t}\r\n\t}\r\n\tonTaskUpdated(task: ITask) {\r\n\t\tif (!this._ignore) {\r\n\t\t\tthis._storeTaskCommand(task, this._undo.command.type.update);\r\n\t\t}\r\n\t}\r\n\tonTaskMoved(task: ITask) {\r\n\t\tif (!this._ignore) {\r\n\t\t\t(task as any).$local_index = this._gantt.getTaskIndex(task.id);\r\n\t\t\tconst oldValue = this.getInitialTask(task.id);\r\n\t\t\tif((task as any).$local_index === oldValue.$local_index &&\r\n\t\t\t\tthis._gantt.getParent(task) === this._gantt.getParent(oldValue)){\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\t\t\tthis._storeEntityCommand(\r\n\t\t\t\ttask,\r\n\t\t\t\tthis.getInitialTask(task.id),\r\n\t\t\t\tthis._undo.command.type.move,\r\n\t\t\t\tthis._undo.command.entity.task\r\n\t\t\t);\r\n\t\t}\r\n\t}\r\n\tonTaskDeleted(task: ITask) {\r\n\t\tif (!this._ignore) {\r\n\t\t\tthis._storeTaskCommand(task, this._undo.command.type.remove);\r\n\t\t\tif (this._nestedTasks[task.id]) {\r\n\t\t\t\tconst children = this._nestedTasks[task.id];\r\n\t\t\t\tfor (let i = 0; i < children.length; i++) {\r\n\t\t\t\t\tthis._storeTaskCommand(children[i], this._undo.command.type.remove);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tif (this._nestedLinks[task.id]) {\r\n\t\t\t\tconst childrenLinks = this._nestedLinks[task.id];\r\n\t\t\t\tfor (let i = 0; i < childrenLinks.length; i++) {\r\n\t\t\t\t\tthis._storeLinkCommand(childrenLinks[i], this._undo.command.type.remove);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\tonLinkAdded(link: ILink) {\r\n\t\tif (!this._ignore) {\r\n\t\t\tthis._storeLinkCommand(link, this._undo.command.type.add);\r\n\t\t}\r\n\t}\r\n\tonLinkUpdated(link: ILink) {\r\n\t\tif (!this._ignore) {\r\n\t\t\tthis._storeLinkCommand(link, this._undo.command.type.update);\r\n\t\t}\r\n\t}\r\n\tonLinkDeleted(link: ILink) {\r\n\t\tif (!this._ignore) {\r\n\t\t\tthis._storeLinkCommand(link, this._undo.command.type.remove);\r\n\t\t}\r\n\t}\r\n\tsetNestedTasks(id: TaskID, taskIds: TaskID[]) {\r\n\t\tconst gantt = this._gantt;\r\n\t\tlet task = null;\r\n\t\tconst tasks = [];\r\n\t\tlet\tlinkIds = this._getLinks(gantt.getTask(id));\r\n\r\n\t\tfor (let i = 0; i < taskIds.length; i++) {\r\n\t\t\ttask = this.setInitialTask(taskIds[i]);\r\n\t\t\tlinkIds = linkIds.concat(this._getLinks(task));\r\n\t\t\ttasks.push(task);\r\n\t\t}\r\n\r\n\t\tconst uniqueLinks = {};\r\n\t\tfor (let i = 0; i < linkIds.length; i++) {\r\n\t\t\tuniqueLinks[linkIds[i]] = true;\r\n\t\t}\r\n\t\tconst links = [];\r\n\t\tfor (const i in uniqueLinks) {\r\n\t\t\tlinks.push(this.setInitialLink(i));\r\n\t\t}\r\n\t\tthis._nestedTasks[id] = tasks;\r\n\t\tthis._nestedLinks[id] = links;\r\n\t}\r\n\tsetInitialTask(id: TaskID, overwrite?: boolean) {\r\n\t\tconst gantt = this._gantt;\r\n\t\tif (overwrite || (!this._initialTasks[id] || !this._batchMode)) {\r\n\t\t\tconst task = gantt.copy(gantt.getTask(id));\r\n\t\t\ttask.$index = gantt.getGlobalTaskIndex(id);\r\n\t\t\ttask.$local_index = gantt.getTaskIndex(id);\r\n\t\t\tthis.setInitialTaskObject(id, task);\r\n\t\t}\r\n\t\treturn this._initialTasks[id];\r\n\t}\r\n\tgetInitialTask(id: TaskID) {\r\n\t\treturn this._initialTasks[id];\r\n\t}\r\n\tclearInitialTasks() {\r\n\t\tthis._initialTasks = {};\r\n\t}\r\n\tsetInitialTaskObject(id: TaskID, object: ITask) {\r\n\t\tthis._initialTasks[id] = object;\r\n\t}\r\n\tsetInitialLink(id: LinkID, overwrite?: boolean) {\r\n\t\tif (!this._initialLinks[id] || !this._batchMode) {\r\n\t\t\tthis._initialLinks[id] = this._gantt.copy(this._gantt.getLink(id));\r\n\t\t}\r\n\t\treturn this._initialLinks[id];\r\n\t}\r\n\tgetInitialLink(id: LinkID) {\r\n\t\treturn this._initialLinks[id];\r\n\t}\r\n\tclearInitialLinks() {\r\n\t\tthis._initialLinks = {};\r\n\t}\r\n\tprivate _attachEvents() {\r\n\t\tlet deleteCacheCooldown = null;\r\n\t\tconst gantt = this._gantt;\r\n\r\n\t\tconst saveInitialAll = () => {\r\n\t\t\tif (!deleteCacheCooldown) {\r\n\t\t\t\tdeleteCacheCooldown = setTimeout(() => {\r\n\t\t\t\t\tdeleteCacheCooldown = null;\r\n\t\t\t\t});\r\n\r\n\t\t\t\tthis.clearInitialTasks();\r\n\t\t\t\tgantt.eachTask((task: ITask) => {\r\n\t\t\t\t\tthis.setInitialTask(task.id);\r\n\t\t\t\t});\r\n\r\n\t\t\t\tthis.clearInitialLinks();\r\n\t\t\t\tgantt.getLinks().forEach((link: ILink) => {\r\n\t\t\t\t\tthis.setInitialLink(link.id);\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t};\r\n\t\tconst getMoveObjectByTaskId = (id: TaskID) => {\r\n\t\t\treturn gantt.copy(gantt.getTask(id));\r\n\t\t};\r\n\r\n\t\tfor (const i in noTrack) {\r\n\t\t\tgantt.attachEvent(i, () => {\r\n\t\t\t\tthis.startIgnore();\r\n\t\t\t\treturn true;\r\n\t\t\t});\r\n\t\t\tgantt.attachEvent(noTrack[i], () => {\r\n\t\t\t\tthis.stopIgnore();\r\n\t\t\t\treturn true;\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tfor (let i  = 0; i < batchActions.length; i++) {\r\n\t\t\tgantt.attachEvent(batchActions[i], () => {\r\n\t\t\t\tthis.startBatchAction();\r\n\t\t\t\treturn true;\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tgantt.attachEvent(\"onParse\", () => {\r\n\t\t\tthis._undo.clearUndoStack();\r\n\t\t\tthis._undo.clearRedoStack();\r\n\t\t\tsaveInitialAll();\r\n\t\t});\r\n\t\tgantt.attachEvent(\"onAfterTaskAdd\", (id: TaskID, task: ITask) => {\r\n\t\t\tthis.setInitialTask(id, true);\r\n\t\t\tthis.onTaskAdded(task);\r\n\t\t});\r\n\t\tgantt.attachEvent(\"onAfterTaskUpdate\", (id: TaskID, task: ITask) => {\r\n\t\t\tthis.onTaskUpdated(task);\r\n\t\t});\r\n\t\tgantt.attachEvent(\"onAfterTaskDelete\", (id: TaskID, task: ITask) => {\r\n\t\t\tthis.onTaskDeleted(task);\r\n\t\t});\r\n\t\tgantt.attachEvent(\"onAfterLinkAdd\", (id: LinkID, link: ILink) => {\r\n\t\t\tthis.setInitialLink(id, true);\r\n\t\t\tthis.onLinkAdded(link);\r\n\t\t});\r\n\t\tgantt.attachEvent(\"onAfterLinkUpdate\", (id: LinkID, link: ILink) => {\r\n\t\t\tthis.onLinkUpdated(link);\r\n\t\t});\r\n\t\tgantt.attachEvent(\"onAfterLinkDelete\", (id: LinkID, link: ILink) => {\r\n\t\t\tthis.onLinkDeleted(link);\r\n\t\t});\r\n\t\tgantt.attachEvent(\"onRowDragEnd\", (id: TaskID, target: TaskID) => {\r\n\t\t\tthis.onTaskMoved(getMoveObjectByTaskId(id));\r\n\t\t\tthis.toggleIgnoreMoveEvents();\r\n\t\t\treturn true;\r\n\t\t});\r\n\t\tgantt.attachEvent(\"onBeforeTaskDelete\", (id: TaskID) => {\r\n\t\t\tthis.store(id, gantt.config.undo_types.task);\r\n\t\t\tconst nested = [];\r\n\r\n\t\t\t// remember task indexes in case their being deleted in a loop, so they could be restored in the correct order\r\n\t\t\tsaveInitialAll();\r\n\r\n\t\t\tgantt.eachTask((task: ITask) => {\r\n\t\t\t\tnested.push(task.id);\r\n\t\t\t}, id);\r\n\t\t\tthis.setNestedTasks(id, nested);\r\n\t\t\treturn true;\r\n\t\t});\r\n\t\tconst datastore = gantt.getDatastore(\"task\");\r\n\r\n\t\tdatastore.attachEvent(\"onBeforeItemMove\", (id: TaskID, parent: TaskID, tindex: number) => {\r\n\t\t\tif (!this.isMoveEventsIgnored()) {\r\n\t\t\t\tsaveInitialAll();\r\n\t\t\t}\r\n\t\t\treturn true;\r\n\t\t});\r\n\r\n\t\tdatastore.attachEvent(\"onAfterItemMove\", (id: TaskID, parent: TaskID, tindex: number) => {\r\n\t\t\tif (!this.isMoveEventsIgnored()) {\r\n\t\t\t\tthis.onTaskMoved(getMoveObjectByTaskId(id));\r\n\t\t\t}\r\n\t\t\treturn true;\r\n\t\t});\r\n\r\n\t\tgantt.attachEvent(\"onRowDragStart\", (id: TaskID, target: TaskID, e: Event) => {\r\n\t\t\tthis.toggleIgnoreMoveEvents(true);\r\n\t\t\tsaveInitialAll();\r\n\t\t\treturn true;\r\n\t\t});\r\n\r\n\t\tgantt.attachEvent(\"onBeforeTaskDrag\", (taskId: TaskID) => this.store(taskId, gantt.config.undo_types.task));\r\n\r\n\t\tgantt.attachEvent(\"onLightbox\", (taskId: TaskID) => this.store(taskId, gantt.config.undo_types.task));\r\n\r\n\t\tgantt.attachEvent(\"onBeforeTaskAutoSchedule\", (task: ITask) => {\r\n\t\t\tthis.store(task.id, gantt.config.undo_types.task);\r\n\t\t\treturn true;\r\n\t\t});\r\n\r\n\t\tif (gantt.ext.inlineEditors) {\r\n\t\t\tgantt.ext.inlineEditors.attachEvent(\"onEditStart\", (state: IInlineEditState) => {\r\n\t\t\t\tthis.store(state.id, gantt.config.undo_types.task);\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\tprivate _storeCommand(command: IUndoCommand) {\r\n\t\tconst undo = this._undo;\r\n\t\tundo.updateConfigs();\r\n\r\n\t\tif (!undo.undoEnabled) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif (this._batchMode) {\r\n\t\t\tthis._batchAction.commands.push(command);\r\n\t\t} else {\r\n\t\t\tconst action = undo.action.create([command]);\r\n\t\t\tundo.logAction(action);\r\n\t\t}\r\n\t}\r\n\tprivate _storeEntityCommand(obj: TUndoValue, old: TUndoValue, actionType: TActionType, entityType: TEntityType) {\r\n\t\tconst undo = this._undo;\r\n\t\tconst command = undo.command.create(obj, old, actionType, entityType);\r\n\t\tthis._storeCommand(command);\r\n\t}\r\n\tprivate _storeTaskCommand(obj: ITask, type: TActionType) {\r\n\t\tif(this._gantt.isTaskExists(obj.id)){\r\n\t\t\t(obj as any).$local_index = this._gantt.getTaskIndex(obj.id);\r\n\t\t}\r\n\r\n\t\tthis._storeEntityCommand(obj, this.getInitialTask(obj.id), type, this._undo.command.entity.task);\r\n\t}\r\n\tprivate _storeLinkCommand(obj: ILink, type: TActionType) {\r\n\t\tthis._storeEntityCommand(obj, this.getInitialLink(obj.id), type, this._undo.command.entity.link);\r\n\t}\r\n\tprivate _getLinks(task: ITask) {\r\n\t\treturn task.$source.concat(task.$target);\r\n\t}\r\n\tprivate _storeTask(taskId: TaskID, overwrite: boolean = false) {\r\n\t\tconst gantt = this._gantt;\r\n\t\tthis.setInitialTask(taskId, overwrite);\r\n\t\tgantt.eachTask((child: ITask) => {\r\n\t\t\tthis.setInitialTask(child.id);\r\n\t\t}, taskId);\r\n\t\treturn true;\r\n\t}\r\n\tprivate _storeLink(linkId: LinkID, overwrite: boolean = false) {\r\n\t\tthis.setInitialLink(linkId, overwrite);\r\n\t\treturn true;\r\n\t}\r\n}","import { Monitor } from \"./monitor\";\r\nimport { IMonitor, IUndoCommand, TEntityType, TUndoStack } from \"./types\";\r\nimport { Undo } from \"./undo\";\r\n\r\nexport default function(gantt: any){\r\n\r\nconst _undo = new Undo(gantt);\r\nconst monitor: IMonitor = new Monitor(_undo, gantt);\r\n\r\ngantt.config.undo = true;\r\ngantt.config.redo = true;\r\n\r\n/**\r\n * entities that require different processing for undoing-redoing changes\r\n * @type {{link: string, task: string}}\r\n */\r\ngantt.config.undo_types = {\r\n\tlink: \"link\",\r\n\ttask: \"task\"\r\n};\r\n\r\n/**\r\n * types of traced actions\r\n * @type {{update: string, remove: string, add: string}}\r\n */\r\ngantt.config.undo_actions = {\r\n\tupdate: \"update\",\r\n\tremove: \"remove\", // remove item from datastore\r\n\tadd: \"add\",\r\n\tmove: \"move\" // move task in grid\r\n};\r\n\r\nif (!gantt.ext) {\r\n\tgantt.ext = {};\r\n}\r\n\r\ngantt.ext.undo = {\r\n\tundo: () => _undo.undo(),\r\n\tredo: () => _undo.redo(),\r\n\tgetUndoStack: () => _undo.getUndoStack(),\r\n\tsetUndoStack: (stack:[]) => _undo.setUndoStack(stack),\r\n\tgetRedoStack: () => _undo.getRedoStack(),\r\n\tsetRedoStack: (stack:[]) => _undo.setRedoStack(stack),\r\n\tclearUndoStack: () => _undo.clearUndoStack(),\r\n\tclearRedoStack: () => _undo.clearRedoStack(),\r\n\tsaveState: (id: TaskID | LinkID, type: TEntityType) => monitor.store(id, type, true),\r\n\tgetInitialState: (id: TaskID | LinkID, type: TEntityType) => {\r\n\t\tif(type === gantt.config.undo_types.link){\r\n\t\t\treturn monitor.getInitialLink(id);\r\n\t\t}else{\r\n\t\t\treturn monitor.getInitialTask(id);\r\n\t\t}\r\n\t}\r\n};\r\n\r\ngantt.undo = gantt.ext.undo.undo;\r\ngantt.redo = gantt.ext.undo.redo;\r\ngantt.getUndoStack = gantt.ext.undo.getUndoStack;\r\ngantt.getRedoStack = gantt.ext.undo.getRedoStack;\r\ngantt.clearUndoStack = gantt.ext.undo.clearUndoStack;\r\ngantt.clearRedoStack = gantt.ext.undo.clearRedoStack;\r\n\r\nfunction updTask(task: ITask, oldId: TaskID, newId: TaskID) {\r\n\tif (!task) { return; }\r\n\r\n\tif (task.id === oldId) {\r\n\t\ttask.id = newId;\r\n\t}\r\n\r\n\tif (task.parent === oldId) {\r\n\t\ttask.parent = newId;\r\n\t}\r\n}\r\n\r\nfunction changeTaskCommandId(command: IUndoCommand, oldId: TaskID, newId: TaskID) {\r\n\tupdTask(command.value, oldId, newId);\r\n\tupdTask(command.oldValue, oldId, newId);\r\n}\r\n\r\nfunction updLink(link: ILink, oldTaskId: TaskID, newTaskId: TaskID) {\r\n\tif (!link) { return; }\r\n\tif (link.source === oldTaskId) {\r\n\t\tlink.source = newTaskId;\r\n\t}\r\n\tif (link.target === oldTaskId) {\r\n\t\tlink.target = newTaskId;\r\n\t}\r\n}\r\n\r\nfunction changeLinkCommandId(command: IUndoCommand, oldId: LinkID, newId: LinkID) {\r\n\tupdLink(command.value, oldId, newId);\r\n\tupdLink(command.oldValue, oldId, newId);\r\n}\r\n\r\nfunction updateTasksIds(log: TUndoStack, oldId: TaskID, newId: TaskID) {\r\n\tconst undo = _undo;\r\n\r\n\tfor (let i = 0; i < log.length; i++) {\r\n\t\tconst entry = log[i];\r\n\t\tfor (let j = 0; j < entry.commands.length; j++) {\r\n\t\t\tif (entry.commands[j].entity === undo.command.entity.task) {\r\n\t\t\t\tchangeTaskCommandId(entry.commands[j], oldId, newId);\r\n\t\t\t} else if (entry.commands[j].entity === undo.command.entity.link) {\r\n\t\t\t\tchangeLinkCommandId(entry.commands[j], oldId, newId);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n}\r\n\r\nfunction updateLinksIds(log: TUndoStack, oldId: LinkID, newId: LinkID) {\r\n\tconst undo = _undo;\r\n\r\n\tfor (let i = 0; i < log.length; i++) {\r\n\t\tconst entry = log[i];\r\n\t\tfor (let j = 0; j < entry.commands.length; j++) {\r\n\t\t\tconst command = entry.commands[j];\r\n\t\t\tif (command.entity === undo.command.entity.link) {\r\n\t\t\t\tif (command.value && command.value.id === oldId) {\r\n\t\t\t\t\tcommand.value.id = newId;\r\n\t\t\t\t}\r\n\t\t\t\tif (command.oldValue && command.oldValue.id === oldId) {\r\n\t\t\t\t\tcommand.oldValue.id = newId;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n}\r\n\r\ngantt.attachEvent(\"onTaskIdChange\", (oldId: TaskID, newId: TaskID) => {\r\n\tconst undo = _undo;\r\n\tupdateTasksIds(undo.getUndoStack(), oldId, newId);\r\n\tupdateTasksIds(undo.getRedoStack(), oldId, newId);\r\n});\r\n\r\ngantt.attachEvent(\"onLinkIdChange\", (oldId: LinkID, newId: LinkID) => {\r\n\tconst undo = _undo;\r\n\tupdateLinksIds(undo.getUndoStack(), oldId, newId);\r\n\tupdateLinksIds(undo.getRedoStack(), oldId, newId);\r\n});\r\n\r\ngantt.attachEvent(\"onGanttReady\", () => {\r\n\t_undo.updateConfigs();\r\n});\r\n\r\n}","import * as domHelpers from \"../../core/ui/utils/dom_helpers\";\r\n\r\ninterface IViewPosition{\r\n\ttop: number;\r\n\tleft: number;\r\n}\r\n\r\ninterface IViewBox extends IViewPosition{\r\n\twidth: number;\r\n\theight: number;\r\n\tbottom: number;\r\n\tright: number;\r\n}\r\n\r\nexport class Tooltip {\r\n\tprivate _root: HTMLElement;\r\n\tprivate _tooltipNode: HTMLElement;\r\n\tprivate _gantt: any;\r\n\r\n\tconstructor(gantt: any){\r\n\t\tthis._gantt = gantt;\r\n\t}\r\n\r\n\tgetNode() : HTMLElement {\r\n\t\tconst gantt = this._gantt;\r\n\t\tif (!this._tooltipNode){\r\n\t\t\tthis._tooltipNode = document.createElement(\"div\");\r\n\t\t\tthis._tooltipNode.className = \"gantt_tooltip\";\r\n\t\t\tgantt._waiAria.tooltipAttr(this._tooltipNode);\r\n\t\t}\r\n\t\treturn this._tooltipNode;\r\n\t}\r\n\r\n\tsetViewport(node: HTMLElement):Tooltip{\r\n\t\tthis._root = node;\r\n\t\treturn this;\r\n\t}\r\n\r\n\tshow(left: number, top: number): Tooltip;\r\n\tshow(event: MouseEvent): Tooltip;\r\n\tshow(left: number | MouseEvent, top?: number): Tooltip {\r\n\t\tconst gantt = this._gantt;\r\n\t\tconst container = document.body;\r\n\t\tconst node = this.getNode();\r\n\r\n\t\tif(!domHelpers.isChildOf(node, container)){\r\n\t\t\tthis.hide();\r\n\t\t\tcontainer.appendChild(node);\r\n\t\t}\r\n\r\n\t\tif (this._isLikeMouseEvent(left)) {\r\n\t\t\tconst position = this._calculateTooltipPosition(left as MouseEvent);\r\n\t\t\ttop = position.top;\r\n\t\t\tleft = position.left;\r\n\t\t}\r\n\r\n\t\tnode.style.top = top + \"px\";\r\n\t\tnode.style.left = left + \"px\";\r\n\r\n\t\tgantt._waiAria.tooltipVisibleAttr(node);\r\n\t\treturn this;\r\n\t}\r\n\thide() : Tooltip{\r\n\t\tconst gantt = this._gantt;\r\n\t\tconst node = this.getNode();\r\n\t\tif(node && node.parentNode){\r\n\t\t\tnode.parentNode.removeChild(node);\r\n\t\t}\r\n\t\tgantt._waiAria.tooltipHiddenAttr(node);\r\n\t\treturn this;\r\n\t}\r\n\r\n\tsetContent(html: string) : Tooltip{\r\n\t\tconst node = this.getNode();\r\n\t\tnode.innerHTML = html;\r\n\t\treturn this;\r\n\t}\r\n\r\n\t// it is for salesforce, because it proxies event to it own events\r\n\tprivate _isLikeMouseEvent(event: any): boolean {\r\n\t\tif (!event || typeof event !== \"object\") {\r\n\t\t\treturn false;\r\n\t\t}\r\n\t\treturn \"clientX\" in event && \"clientY\" in event;\r\n\t}\r\n\r\n\tprivate _getViewPort() : HTMLElement {\r\n\t\treturn this._root || document.body;\r\n\t}\r\n\r\n\r\n\tprivate _calculateTooltipPosition(event: MouseEvent): IViewPosition{\r\n\t\tconst gantt = this._gantt;\r\n\t\t// top/left coordinates inside the viewport by mouse position\r\n\t\tconst viewport =  this._getViewPortSize();\r\n\t\tconst tooltipNode = this.getNode();\r\n\t\tconst tooltip: IViewBox = {\r\n\t\t\ttop:0,\r\n\t\t\tleft: 0,\r\n\t\t\twidth: tooltipNode.offsetWidth,\r\n\t\t\theight: tooltipNode.offsetHeight,\r\n\t\t\tbottom: 0,\r\n\t\t\tright: 0\r\n\t\t};\r\n\r\n\t\tconst offsetX = gantt.config.tooltip_offset_x;\r\n\t\tconst offsetY = gantt.config.tooltip_offset_y;\r\n\r\n\t\tconst container = document.body;\r\n\t\tconst mouse = domHelpers.getRelativeEventPosition(event, container);\r\n\t\tconst containerPos = domHelpers.getNodePosition(container);\r\n\t\tmouse.y += containerPos.y; // to fix margin collapsing\r\n\r\n\t\ttooltip.top = mouse.y;\r\n\t\ttooltip.left = mouse.x;\r\n\t\ttooltip.top += offsetY;\r\n\t\ttooltip.left += offsetX;\r\n\t\ttooltip.bottom = tooltip.top + tooltip.height;\r\n\t\ttooltip.right = tooltip.left + tooltip.width;\r\n\r\n\t\tconst scrollTop = window.scrollY + container.scrollTop; // to fix margin collapsing\r\n\t\t// edge cases when the tooltip element can be partially hidden by edges of the viewport\r\n\t\tif(tooltip.top < viewport.top - scrollTop){\r\n\t\t\ttooltip.top = viewport.top;\r\n\t\t\ttooltip.bottom = tooltip.top + tooltip.height;\r\n\t\t}else if(tooltip.bottom > viewport.bottom){\r\n\t\t\ttooltip.bottom = viewport.bottom;\r\n\t\t\ttooltip.top = tooltip.bottom - tooltip.height;\r\n\t\t}\r\n\r\n\t\tif(tooltip.left < viewport.left){\r\n\t\t\ttooltip.left = viewport.left;\r\n\t\t\ttooltip.right = viewport.left + tooltip.width;\r\n\t\t}else if(tooltip.right > viewport.right){\r\n\t\t\ttooltip.right = viewport.right;\r\n\t\t\ttooltip.left = tooltip.right - tooltip.width;\r\n\t\t}\r\n\r\n\t\tif(mouse.x >= tooltip.left && mouse.x <= tooltip.right) {\r\n\t\t\ttooltip.left = mouse.x - tooltip.width - offsetX;\r\n\t\t\ttooltip.right = tooltip.left + tooltip.width;\r\n\t\t}\r\n\r\n\t\tif(mouse.y >= tooltip.top && mouse.y <= tooltip.bottom) {\r\n\t\t\ttooltip.top = mouse.y - tooltip.height - offsetY;\r\n\t\t\ttooltip.bottom = tooltip.top + tooltip.height;\r\n\t\t}\r\n\r\n\t\treturn tooltip;\r\n\t}\r\n\r\n\tprivate _getViewPortSize() : IViewBox {\r\n\t\tconst gantt = this._gantt;\r\n\t\tconst container = this._getViewPort();\r\n\t\tlet viewport = container;\r\n\t\tlet scrollTop = window.scrollY + document.body.scrollTop;\r\n\t\tlet scrollLeft = window.scrollX + document.body.scrollLeft;\r\n\t\tlet pos;\r\n\t\t// support for the initial tooltip mode where the tooltip element was attached to the data area of gantt\r\n\t\tif(container === gantt.$task_data){\r\n\t\t\tviewport = gantt.$task;\r\n\t\t\tscrollTop = 0;\r\n\t\t\tscrollLeft = 0;\r\n\t\t\tpos = domHelpers.getNodePosition(gantt.$task);\r\n\t\t}else{\r\n\t\t\tpos = domHelpers.getNodePosition(viewport);\r\n\t\t}\r\n\t\treturn {\r\n\t\t\tleft:pos.x + scrollLeft,\r\n\t\t\ttop: pos.y + scrollTop,\r\n\t\t\twidth: pos.width,\r\n\t\t\theight: pos.height,\r\n\t\t\tbottom: pos.y + pos.height + scrollTop,\r\n\t\t\tright: pos.x + pos.width + scrollLeft\r\n\t\t};\r\n\t}\r\n}\r\n","import * as domEventsScope from \"../../core/ui/utils/dom_event_scope\";\r\nimport * as domHelpers from \"../../core/ui/utils/dom_helpers\";\r\nimport * as helpers from \"../../utils/helpers\";\r\nimport { Tooltip } from \"./tooltip\";\r\n\r\ninterface ITrackerTarget {\r\n\tselector: string;\r\n\tonmouseenter: (event: MouseEvent, node: HTMLElement) => void;\r\n\tonmousemove: (event: MouseEvent, node: HTMLElement) => void;\r\n\tonmouseleave: (event: MouseEvent, node: HTMLElement) => void;\r\n\tglobal: boolean;\r\n}\r\n\r\ninterface ITooltipConfig {\r\n\tselector: string;\r\n\thtml: (event: MouseEvent, node: HTMLElement) => string;\r\n\tglobal: boolean;\r\n}\r\n\r\nexport class TooltipManager{\r\n\ttooltip: Tooltip;\r\n\tprotected _domEvents: any;\r\n\tprivate _listeners: object = {};\r\n\tprivate _gantt: any;\r\n\tprivate delayShow: any;\r\n\tprivate delayHide: any;\r\n\r\n\tconstructor(gantt: any) {\r\n\t\tthis.tooltip = new Tooltip(gantt);\r\n\t\tthis._gantt = gantt;\r\n\t\tthis._domEvents = domEventsScope();\r\n\t\tthis._initDelayedFunctions();\r\n\t}\r\n\r\n\tdestructor(): void{\r\n\t\tthis.tooltip.hide();\r\n\t\tthis._domEvents.detachAll();\r\n\t}\r\n\thideTooltip(): void{\r\n\t\tthis.delayHide();\r\n\t}\r\n\tattach(config: ITrackerTarget): void {\r\n\t\tlet root = document.body;\r\n\t\tconst gantt = this._gantt;\r\n\t\tif(!config.global){\r\n\t\t\troot = gantt.$root;\r\n\t\t}\r\n\r\n\t\tlet watchableTarget = null;\r\n\t\tconst handler = (event) => {\r\n\t\t\tconst eventTarget = domHelpers.getTargetNode(event);\r\n\t\t\tconst targetNode = domHelpers.closest(eventTarget, config.selector);\r\n\t\t\tif(domHelpers.isChildOf(eventTarget, this.tooltip.getNode())){\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tconst doOnMouseEnter = () => {\r\n\t\t\t\twatchableTarget = targetNode;\r\n\t\t\t\tconfig.onmouseenter(event, targetNode);\r\n\t\t\t};\r\n\r\n\t\t\tif(watchableTarget){\r\n\t\t\t\tif(targetNode && targetNode === watchableTarget){\r\n\t\t\t\t\tconfig.onmousemove(event, targetNode);\r\n\t\t\t\t}else{\r\n\t\t\t\t\tconfig.onmouseleave(event, watchableTarget);\r\n\t\t\t\t\twatchableTarget = null;\r\n\r\n\t\t\t\t\tif(targetNode && targetNode !== watchableTarget){\r\n\t\t\t\t\t\tdoOnMouseEnter();\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}else{\r\n\t\t\t\tif(targetNode){\r\n\t\t\t\t\tdoOnMouseEnter();\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\tthis.detach(config.selector);\r\n\t\tthis._domEvents.attach(root, \"mousemove\", handler);\r\n\t\tthis._listeners[config.selector] = {\r\n\t\t\tnode: root,\r\n\t\t\thandler\r\n\t\t};\r\n\t}\r\n\r\n\tdetach(selector: string): void {\r\n\t\tconst listener = this._listeners[selector];\r\n\t\tif(listener){\r\n\t\t\tthis._domEvents.detach(listener.node, \"mousemove\", listener.handler);\r\n\t\t}\r\n\t}\r\n\r\n\ttooltipFor(config: ITooltipConfig): void {\r\n\t\tconst cloneDomEvent = (event: MouseEvent) => {\r\n\t\t\tlet clone = event;\r\n\t\t\t// making events survive timeout in ie\r\n\t\t\t// tslint:disable-next-line no-string-literal\r\n\t\t\tif(document[\"createEventObject\"] && !document.createEvent){\r\n\t\t\t\t// tslint:disable-next-line no-string-literal\r\n\t\t\t\tclone = document[\"createEventObject\"](event);\r\n\t\t\t}\r\n\t\t\treturn clone;\r\n\t\t};\r\n\t\tthis._initDelayedFunctions();\r\n\t\tthis.attach({\r\n\t\t\tselector: config.selector,\r\n\t\t\tglobal: config.global,\r\n\t\t\tonmouseenter:(event: MouseEvent, node: HTMLElement) => {\r\n\t\t\t\tconst html = config.html(event, node);\r\n\t\t\t\tif(html){\r\n\t\t\t\t\tthis.delayShow(cloneDomEvent(event), html);\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\tonmousemove:(event: MouseEvent, node: HTMLElement) => {\r\n\t\t\t\tconst html = config.html(event, node);\r\n\t\t\t\tif(html){\r\n\t\t\t\t\tthis.delayShow(cloneDomEvent(event), html);\r\n\t\t\t\t}else{\r\n\t\t\t\t\tthis.delayShow.$cancelTimeout();\r\n\t\t\t\t\tthis.delayHide();\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\tonmouseleave:() => {\r\n\t\t\t\tthis.delayShow.$cancelTimeout();\r\n\t\t\t\tthis.delayHide();\r\n\t\t\t},\r\n\t\t});\r\n\t}\r\n\r\n\tprivate _initDelayedFunctions(){\r\n\t\tconst gantt = this._gantt;\r\n\t\t// reset delayed functions in order to apply current values of tooltip_timeout\r\n\t\tif(this.delayShow){\r\n\t\t\tthis.delayShow.$cancelTimeout();\r\n\t\t}\r\n\t\tif(this.delayHide){\r\n\t\t\tthis.delayHide.$cancelTimeout();\r\n\t\t}\r\n\t\tthis.tooltip.hide();\r\n\r\n\t\tthis.delayShow = helpers.delay((event: MouseEvent, html: string) => {\r\n\t\t\tif(gantt.callEvent(\"onBeforeTooltip\", [event]) === false) {\r\n\t\t\t\tthis.tooltip.hide();\r\n\t\t\t} else {\r\n\t\t\t\tthis.tooltip.setContent(html);\r\n\t\t\t\tthis.tooltip.show(event);\r\n\t\t\t}\r\n\t\t}, gantt.config.tooltip_timeout || 1);\r\n\r\n\t\tthis.delayHide = helpers.delay(() => {\r\n\t\t\tthis.delayShow.$cancelTimeout();\r\n\t\t\tthis.tooltip.hide();\r\n\t\t}, gantt.config.tooltip_hide_timeout || 1);\r\n\t}\r\n\r\n}","import {TooltipManager} from \"./tooltipManager\";\r\n\r\nexport default function(gantt: any){\r\n\r\ngantt.config.tooltip_timeout = 30;\r\ngantt.config.tooltip_offset_y = 20;\r\ngantt.config.tooltip_offset_x = 10;\r\ngantt.config.tooltip_hide_timeout = 30;\r\n\r\n\r\n\r\nconst tooltipManager = new TooltipManager(gantt);\r\n\r\ngantt.ext.tooltips = tooltipManager;\r\n\r\ngantt.attachEvent(\"onGanttReady\", function(){\r\n\r\n\ttooltipManager.tooltipFor({\r\n\t\tselector: \"[\"+gantt.config.task_attribute+\"]:not(.gantt_task_row)\",\r\n\t\thtml: (event: MouseEvent) => {\r\n\t\t\tif (gantt.config.touch && !gantt.config.touch_tooltip) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tconst targetTaskId = gantt.locate(event);\r\n\t\t\tif(gantt.isTaskExists(targetTaskId)){\r\n\t\t\t\tconst task = gantt.getTask(targetTaskId);\r\n\t\t\t\treturn gantt.templates.tooltip_text(task.start_date, task.end_date, task);\r\n\t\t\t}\r\n\t\t\treturn null;\r\n\t\t},\r\n\t\tglobal: false\r\n\t});\r\n});\r\n\r\ngantt.attachEvent(\"onDestroy\", function() {\r\n\ttooltipManager.destructor();\r\n});\r\n\r\ngantt.attachEvent(\"onLightbox\", function() {\r\n\ttooltipManager.hideTooltip();\r\n});\r\nconst isLinkCreate = () => {\r\n\tconst state = gantt.getState();\r\n\treturn !!state.link_source_id;\r\n};\r\ngantt.attachEvent(\"onBeforeTooltip\", function() {\r\n\tif (isLinkCreate()){\r\n\t\treturn false;\r\n\t}\r\n});\r\n\r\ngantt.attachEvent(\"onGanttScroll\", function(){\r\n\ttooltipManager.hideTooltip();\r\n});\r\n\r\n}","\r\ninterface IQuickInfoContainer{\r\n\tparent: HTMLElement;\r\n\txViewport: HTMLElement;\r\n\tyViewport: HTMLElement;\r\n}\r\n\r\nexport class QuickInfo {\r\n\tprivate _quickInfoTask: TaskID;\r\n\tprivate _quickInfoBoxId: number | string;\r\n\tprivate _quickInfoBox: HTMLElement;\r\n\tprivate _quickInfoReadonly: boolean | null;\r\n\tprivate _container: HTMLElement;\r\n\tprivate _gantt: any;\r\n\r\n\tconstructor(gantt: any) {\r\n\t\tthis._gantt = gantt;\r\n\t}\r\n\r\n\t// show at coordinates:\r\n\t// show(x: number, y: number)\r\n\t// show for a task:\r\n\t// show(id: TaskID)\r\n\tshow : {\r\n\t\t(x: number, y: number) : void;\r\n\t\t(id: TaskID) : void;\r\n\t} = (id: TaskID | number, y? : number) : void => {\r\n\t\tif (y === undefined) {\r\n\t\t\tthis._showForTask(id);\r\n\t\t} else {\r\n\t\t\tthis._showAtCoordinates(id as number, y);\r\n\t\t}\r\n\t}\r\n\r\n\thide = (forced?: boolean) : any => {\r\n\t\tconst gantt = this._gantt;\r\n\t\tconst qi = this._quickInfoBox;\r\n\t\tthis._quickInfoBoxId = 0;\r\n\t\tconst taskId = this._quickInfoTask;\r\n\t\tthis._quickInfoTask = null;\r\n\r\n\t\tif (qi && qi.parentNode){\r\n\r\n\t\t\tif (gantt.config.quick_info_detached) {\r\n\t\t\t\tgantt.callEvent(\"onAfterQuickInfo\", [taskId]);\r\n\t\t\t\treturn qi.parentNode.removeChild(qi);\r\n\t\t\t}\r\n\r\n\t\t\tqi.className += \" gantt_qi_hidden\";\r\n\t\t\tif (qi.style.right === \"auto\"){\r\n\t\t\t\tqi.style.left = \"-350px\";\r\n\t\t\t} else {\r\n\t\t\t\tqi.style.right = \"-350px\";\r\n\t\t\t}\r\n\r\n\t\t\tif (forced) {\r\n\t\t\t\tqi.style.left = qi.style.right = \"\";\r\n\t\t\t\tqi.parentNode.removeChild(qi);\r\n\t\t\t}\r\n\t\t\tgantt.callEvent(\"onAfterQuickInfo\", [taskId]);\r\n\t\t}\r\n\t}\r\n\r\n\tgetNode = (): HTMLElement => {\r\n\t\tif(this._quickInfoBox) {\r\n\t\t\treturn this._quickInfoBox;\r\n\t\t}\r\n\t\treturn null;\r\n\t}\r\n\r\n\tsetContainer = (container: string|HTMLElement): void => {\r\n\t\tif(container){\r\n\t\t\tthis._container = typeof container === \"string\" ? document.getElementById(container) : container;\r\n\t\t}\r\n\t}\r\n\r\n\tsetContent = (content?: IQuickInfoContent) => {\r\n\t\tconst gantt = this._gantt;\r\n\r\n\t\tconst defaultContent = {\r\n\t\t\ttaskId: null,\r\n\t\t\theader: {\r\n\t\t\t\ttitle: \"\",\r\n\t\t\t\tdate: \"\"\r\n\t\t\t},\r\n\t\t\tcontent: \"\",\r\n\t\t\tbuttons: gantt.config.quickinfo_buttons\r\n\t\t};\r\n\r\n\t\tif(!content){\r\n\t\t\tcontent = defaultContent;\r\n\t\t}\r\n\r\n\t\tif(!content.taskId){\r\n\t\t\tcontent.taskId = defaultContent.taskId;\r\n\t\t}\r\n\r\n\t\tif(!content.header){\r\n\t\t\tcontent.header = defaultContent.header;\r\n\t\t}\r\n\r\n\t\tif(!content.header.title){\r\n\t\t\tcontent.header.title = defaultContent.header.title;\r\n\t\t}\r\n\t\tif(!content.header.date){\r\n\t\t\tcontent.header.date = defaultContent.header.date;\r\n\t\t}\r\n\t\tif(!content.content){\r\n\t\t\tcontent.content = defaultContent.content;\r\n\t\t}\r\n\t\tif(!content.buttons){\r\n\t\t\tcontent.buttons = defaultContent.buttons;\r\n\t\t}\r\n\r\n\r\n\t\tlet qi = this.getNode();\r\n\t\tif(!qi){\r\n\t\t\tqi = this._createQuickInfoElement();\r\n\t\t}\r\n\r\n\t\tif(content.taskId){\r\n\t\t\tthis._quickInfoBoxId = content.taskId;\r\n\t\t}\r\n\r\n\t\tconst titleBox = qi.querySelector(\".gantt_cal_qi_title\") as HTMLElement;\r\n\t\tconst titleContent = titleBox.querySelector(\".gantt_cal_qi_tcontent\");\r\n\t\tconst titleDate = titleBox.querySelector(\".gantt_cal_qi_tdate\");\r\n\t\tconst main = qi.querySelector(\".gantt_cal_qi_content\");\r\n\t\tconst controls = qi.querySelector(\".gantt_cal_qi_controls\") as HTMLElement;\r\n\r\n\t\tgantt._waiAria.quickInfoHeader(qi, [content.header.title, content.header.date].join(\" \"));\r\n\r\n\t\ttitleContent.innerHTML = content.header.title;\r\n\t\ttitleDate.innerHTML = content.header.date;\r\n\r\n\t\tif(!content.header.title && !content.header.date){\r\n\t\t\ttitleBox.style.display = \"none\";\r\n\t\t}else{\r\n\t\t\ttitleBox.style.display = \"\";\r\n\t\t}\r\n\t\tmain.innerHTML = content.content;\r\n\r\n\t\tconst buttons = content.buttons;\r\n\t\tif(!buttons.length){\r\n\t\t\tcontrols.style.display = \"none\";\r\n\t\t}else{\r\n\t\t\tcontrols.style.display = \"\";\r\n\t\t}\r\n\t\tlet html = \"\";\r\n\t\tfor (let i = 0; i < buttons.length; i++){\r\n\r\n\t\t\tconst ariaAttr = gantt._waiAria.quickInfoButtonAttrString(gantt.locale.labels[buttons[i]]);\r\n\r\n\t\t\thtml += \"<div class=\\\"gantt_qi_big_icon \"+buttons[i]+\"\\\" title=\\\"\"\r\n\t\t\t\t+gantt.locale.labels[buttons[i]]+\"\\\" \" + ariaAttr +\"><div class='gantt_menu_icon \" + buttons[i]\r\n\t\t\t\t+ \"'></div><div>\"+gantt.locale.labels[buttons[i]]+\"</div></div>\";\r\n\t\t}\r\n\t\tcontrols.innerHTML = html;\r\n\r\n\t\tgantt.eventRemove(qi, \"click\", this._qiButtonClickHandler);\r\n\t\tgantt.eventRemove(qi, \"keypress\", this._qiKeyPressHandler);\r\n\r\n\t\tgantt.event(qi, \"click\", this._qiButtonClickHandler);\r\n\t\tgantt.event(qi, \"keypress\", this._qiKeyPressHandler);\r\n\t}\r\n\r\n\tprivate _qiButtonClickHandler = (ev) => {\r\n\t\tev = ev || event;\r\n\t\tthis._qi_button_click(ev.target || ev.srcElement);\r\n\t}\r\n\r\n\tprivate _qiKeyPressHandler = (e) => {\r\n\t\te = e || event;\r\n\t\t// @ts-ignore\r\n\t\tconst code = e.which||event.keyCode;\r\n\t\tif (code === 13 || code === 32){\r\n\t\t\tsetTimeout(() => {\r\n\t\t\t\tthis._qi_button_click(e.target || e.srcElement);\r\n\t\t\t},1);\r\n\t\t}\r\n\t}\r\n\r\n\tprivate _showAtCoordinates(x: number, y: number) : void {\r\n\t\tthis.hide(true);\r\n\t\tthis._quickInfoBoxId = 0;\r\n\t\tthis._quickInfoTask = null;\r\n\t\tif(!this._quickInfoBox){\r\n\t\t\tthis._createQuickInfoElement();\r\n\t\t\tthis.setContent();\r\n\t\t}\r\n\r\n\t\tthis._appendAtCoordinates(x, y);\r\n\t\tthis._gantt.callEvent(\"onQuickInfo\", [null]);\r\n\t}\r\n\r\n\tprivate _showForTask(id: TaskID) : void {\r\n\t\tconst gantt = this._gantt;\r\n\t\tif ((\r\n\t\t\tid === this._quickInfoBoxId &&\r\n\t\t\tgantt.utils.dom.isChildOf(this._quickInfoBox, document.body)\r\n\t\t) || !gantt.config.show_quick_info) {\r\n\t\t\t// not show if the quick info is already displayed for this task, or if it shouldn't be displayed\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tthis.hide(true);\r\n\t\tconst offset = 6; // offset TASK <> QI-BOX in 'px'\r\n\t\tconst container = this._getContainer();\r\n\t\tconst pos = this._get_event_counter_part(id, offset, container.xViewport, container.yViewport);\r\n\r\n\t\tif (pos){\r\n\t\t\tthis._quickInfoBox = this._init_quick_info(id);\r\n\t\t\tthis._quickInfoTask = id;\r\n\t\t\tthis._quickInfoBox.className = this._prepare_quick_info_classname(id);\r\n\r\n\t\t\tthis._fill_quick_data(id);\r\n\t\t\tthis._show_quick_info(pos, offset);\r\n\t\t\tgantt.callEvent(\"onQuickInfo\", [id]);\r\n\t\t}\r\n\t}\r\n\r\n\tprivate _get_event_counter_part(id: TaskID, offset: number, xViewport: HTMLElement, yViewport: HTMLElement) : any {\r\n\t\tconst gantt = this._gantt;\r\n\t\tlet domEv = gantt.getTaskNode(id);\r\n\t\tif (!domEv) {\r\n\t\t\tdomEv = gantt.getTaskRowNode(id);\r\n\t\t\tif (!domEv) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t}\r\n\t\tlet left = 0;\r\n\t\tconst top = offset + domEv.offsetTop + domEv.offsetHeight;\r\n\r\n\t\tlet node = domEv;\r\n\r\n\t\tif (gantt.utils.dom.isChildOf(node, xViewport)) {\r\n\t\t\twhile (node && node !== xViewport){\r\n\t\t\t\tleft += node.offsetLeft;\r\n\t\t\t\tnode = node.offsetParent;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tconst scroll = gantt.getScrollState();\r\n\r\n\t\tif(node){\r\n\t\t\tconst dx = (left + domEv.offsetWidth/2) - scroll.x > (xViewport.offsetWidth/2) ? 1 : 0;\r\n\t\t\tconst dy = (top + domEv.offsetHeight/2) - scroll.y > (yViewport.offsetHeight/2) ? 1 : 0;\r\n\r\n\t\t\treturn { left, top, dx, dy, width:domEv.offsetWidth, height:domEv.offsetHeight };\r\n\t\t}\r\n\t\treturn null;\r\n\t}\r\n\r\n\tprivate _createQuickInfoElement() : HTMLElement {\r\n\t\tconst gantt = this._gantt;\r\n\t\tconst qi = document.createElement(\"div\");\r\n\t\tqi.className += \"gantt_cal_quick_info\";\r\n\t\tgantt._waiAria.quickInfoAttr(qi);\r\n\r\n\t\t// title\r\n\t\tconst ariaAttr = gantt._waiAria.quickInfoHeaderAttrString();\r\n\t\tlet html = \"<div class=\\\"gantt_cal_qi_title\\\" \"+ariaAttr+\">\" +\r\n\t\t\t\"<div class=\\\"gantt_cal_qi_tcontent\\\"></div><div  class=\\\"gantt_cal_qi_tdate\\\"></div>\" +\r\n\t\t\t\"</div>\" +\r\n\t\t\t\"<div class=\\\"gantt_cal_qi_content\\\"></div>\";\r\n\r\n\t\t// buttons\r\n\t\thtml += \"<div class=\\\"gantt_cal_qi_controls\\\">\";\r\n\t\thtml += \"</div>\";\r\n\r\n\t\tqi.innerHTML = html;\r\n\r\n\r\n\t\tif (gantt.config.quick_info_detached) {\r\n\t\t\tconst container = this._getContainer();\r\n\t\t\tgantt.event(container.parent, \"scroll\", () => { this.hide(); });\r\n\t\t}\r\n\r\n\t\tthis._quickInfoBox = qi;\r\n\t\treturn qi;\r\n\t}\r\n\r\n\tprivate _init_quick_info(id: TaskID) : HTMLElement {\r\n\t\tconst gantt = this._gantt;\r\n\t\tconst task = gantt.getTask(id);\r\n\t\tif(typeof this._quickInfoReadonly === \"boolean\"){\r\n\t\t\tif(gantt.isReadonly(task) !== this._quickInfoReadonly){\r\n\t\t\t\tthis.hide(true);\r\n\t\t\t\tthis._quickInfoBox = null;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis._quickInfoReadonly = gantt.isReadonly(task);\r\n\r\n\t\tif (!this._quickInfoBox){\r\n\t\t\tthis._quickInfoBox = this._createQuickInfoElement();\r\n\t\t}\r\n\r\n\t\treturn this._quickInfoBox;\r\n\t}\r\n\r\n\tprivate _prepare_quick_info_classname(id: TaskID) : string {\r\n\t\tconst gantt = this._gantt;\r\n\t\tconst task = gantt.getTask(id);\r\n\r\n\t\tlet css = \"gantt_cal_quick_info\";\r\n\t\tconst template = gantt.templates.quick_info_class(task.start_date, task.end_date, task);\r\n\r\n\t\tif(template){\r\n\t\t\tcss += \" \" + template;\r\n\t\t}\r\n\t\treturn css;\r\n\t}\r\n\r\n\tprivate _fill_quick_data(id: TaskID) : void {\r\n\t\tconst gantt = this._gantt;\r\n\t\tconst ev = gantt.getTask(id);\r\n\r\n\t\tthis._quickInfoBoxId = id;\r\n\r\n\t\tlet allowedButtons = [];\r\n\t\tif (this._quickInfoReadonly){\r\n\t\t\tconst buttons = gantt.config.quickinfo_buttons;\r\n\t\t\tconst isEditor = {icon_delete: true, icon_edit: true};\r\n\t\t\tfor (let i = 0; i < buttons.length; i++){\r\n\t\t\t\tif(this._quickInfoReadonly && isEditor[buttons[i]]){\r\n\t\t\t\t\tcontinue;\r\n\t\t\t\t}\r\n\t\t\t\tallowedButtons.push(buttons[i]);\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\tallowedButtons = gantt.config.quickinfo_buttons;\r\n\t\t}\r\n\r\n\t\tthis.setContent({\r\n\t\t\theader: {\r\n\t\t\t\ttitle: gantt.templates.quick_info_title(ev.start_date, ev.end_date, ev),\r\n\t\t\t\tdate: gantt.templates.quick_info_date(ev.start_date, ev.end_date, ev)\r\n\t\t\t},\r\n\t\t\tcontent: gantt.templates.quick_info_content(ev.start_date, ev.end_date, ev),\r\n\t\t\tbuttons: allowedButtons\r\n\t\t});\r\n\t}\r\n\r\n\tprivate _appendAtCoordinates(x: number, y: number): void {\r\n\t\tconst qi = this._quickInfoBox;\r\n\t\tconst container = this._getContainer();\r\n\t\tif (!qi.parentNode ||\r\n\t\t\tqi.parentNode.nodeName.toLowerCase() === \"#document-fragment\"){ // IE8\r\n\t\t\tcontainer.parent.appendChild(qi);\r\n\t\t}\r\n\r\n\t\tqi.style.left = x + \"px\";\r\n\t\tqi.style.top = y + \"px\";\r\n\t}\r\n\r\n\tprivate _show_quick_info(pos: any, offset: number) : void {\r\n\t\tconst gantt = this._gantt;\r\n\t\tconst qi = this._quickInfoBox;\r\n\t\tif (gantt.config.quick_info_detached) {\r\n\t\t\tconst container = this._getContainer();\r\n\t\t\tif (!qi.parentNode ||\r\n\t\t\t\tqi.parentNode.nodeName.toLowerCase() === \"#document-fragment\"){ // IE8\r\n\t\t\t\tcontainer.parent.appendChild(qi);\r\n\t\t\t}\r\n\t\t\tconst width = qi.offsetWidth;\r\n\t\t\tconst popupHeight = qi.offsetHeight;\r\n\r\n\t\t\tconst scrolls = gantt.getScrollState();\r\n\t\t\tconst xViewport = container.xViewport;\r\n\t\t\tconst yViewport = container.yViewport;\r\n\t\t\tconst screenWidth = xViewport.offsetWidth + scrolls.x - width;\r\n\r\n\t\t\tconst relativePopupTop = pos.top - scrolls.y;\r\n\t\t\tconst relativePopupBottom = relativePopupTop + popupHeight;\r\n\r\n\t\t\tlet top = pos.top;\r\n\t\t\tif(relativePopupBottom > yViewport.offsetHeight / 2){\r\n\t\t\t\ttop = pos.top - (popupHeight + pos.height + 2*offset);\r\n\t\t\t\tif(top < scrolls.y && relativePopupBottom <= yViewport.offsetHeight){\r\n\t\t\t\t\ttop = pos.top;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tif (top < scrolls.y) {\r\n\t\t\t\ttop = scrolls.y;\r\n\t\t\t}\r\n\r\n\t\t\tconst x = Math.min(Math.max(scrolls.x, pos.left - pos.dx*(width - pos.width)), screenWidth);\r\n\t\t\tconst y = top;\r\n\r\n\t\t\tthis._appendAtCoordinates(x, y);\r\n\t\t} else {\r\n\t\t\tqi.style.top = 20 + \"px\";\r\n\t\t\tif (pos.dx === 1){\r\n\t\t\t\tqi.style.right = \"auto\";\r\n\t\t\t\tqi.style.left = \"-300px\";\r\n\r\n\t\t\t\tsetTimeout(() => {\r\n\t\t\t\t\tqi.style.left = \"10px\";\r\n\t\t\t\t},1);\r\n\t\t\t} else {\r\n\t\t\t\tqi.style.left = \"auto\";\r\n\t\t\t\tqi.style.right = \"-300px\";\r\n\r\n\t\t\t\tsetTimeout(() => {\r\n\t\t\t\t\tqi.style.right = \"10px\";\r\n\t\t\t\t},1);\r\n\t\t\t}\r\n\t\t\tqi.className += \" gantt_qi_\"+(pos.dx === 1 ? \"left\" : \"right\");\r\n\t\t\tgantt.$root.appendChild(qi);\r\n\t\t}\r\n\t}\r\n\r\n\tprivate _qi_button_click(node: any) : void {\r\n\t\tconst gantt = this._gantt;\r\n\t\tconst box = this._quickInfoBox;\r\n\t\tif (!node || node === box){\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tconst mask = node.className;\r\n\t\tif (mask.indexOf(\"_icon\") !== -1){\r\n\t\t\tconst id = this._quickInfoBoxId;\r\n\t\t\tgantt.$click.buttons[mask.split(\" \")[1].replace(\"icon_\",\"\")](id);\r\n\t\t} else {\r\n\t\t\tthis._qi_button_click(node.parentNode);\r\n\t\t}\r\n\t}\r\n\r\n\tprivate _getContainer(): IQuickInfoContainer{\r\n\t\tconst gantt = this._gantt;\r\n\t\tlet container = this._container ? this._container : gantt.$task_data;\r\n\t\tif (container && container.offsetHeight && container.offsetWidth) {\r\n\t\t\treturn {\r\n\t\t\t\tparent: container,\r\n\t\t\t\txViewport: gantt.$task,\r\n\t\t\t\tyViewport: gantt.$task_data\r\n\t\t\t};\r\n\t\t}\r\n\t\tcontainer = this._container ? this._container : gantt.$grid_data;\r\n\t\tif (container && container.offsetHeight && container.offsetWidth) {\r\n\t\t\treturn {\r\n\t\t\t\tparent: container,\r\n\t\t\t\txViewport: gantt.$grid,\r\n\t\t\t\tyViewport: gantt.$grid_data\r\n\t\t\t};\r\n\t\t}\r\n\r\n\t\treturn {\r\n\t\t\tparent: this._container ? this._container : gantt.$layout,\r\n\t\t\txViewport: gantt.$layout,\r\n\t\t\tyViewport: gantt.$layout\r\n\t\t};\r\n\t}\r\n}\r\n","import { QuickInfo } from \"./quickInfo\";\r\n\r\nexport default function(gantt: any){\r\n\r\nif (!gantt.ext) {\r\n\tgantt.ext = {};\r\n}\r\ngantt.ext.quickInfo = new QuickInfo(gantt);\r\n\r\ngantt.config.quickinfo_buttons = [\"icon_delete\",\"icon_edit\"];\r\ngantt.config.quick_info_detached = true;\r\ngantt.config.show_quick_info = true;\r\n\r\ngantt.templates.quick_info_title = function(start, end, ev){ return ev.text.substr(0,50); };\r\ngantt.templates.quick_info_content = function(start, end, ev){ return ev.details || ev.text; };\r\ngantt.templates.quick_info_date = function(start, end, ev){\r\n\treturn gantt.templates.task_time(start, end, ev);\r\n};\r\ngantt.templates.quick_info_class = function(start, end, task){ return \"\"; };\r\n\r\ngantt.attachEvent(\"onTaskClick\", function(id,e){\r\n\t// GS-1460 Don't show Quick Info when clicking on the \"+\" button\r\n\tif (!gantt.utils.dom.closest(e.target, \".gantt_add\")){\r\n\t\tsetTimeout(function() {\r\n\t\t\tgantt.ext.quickInfo.show(id);\r\n\t\t}, 0);\r\n\t}\r\n\r\n\treturn true;\r\n});\r\n\r\nconst events = [\"onViewChange\", \"onLightbox\", \"onBeforeTaskDelete\", \"onBeforeDrag\"];\r\nconst hidingFunction = function(){\r\n\tgantt.ext.quickInfo.hide();\r\n\treturn true;\r\n};\r\nfor (let i=0; i<events.length; i++){\r\n\tgantt.attachEvent(events[i], hidingFunction);\r\n}\r\n// GS-957: We don't want to hide QuickInfo when we click on it.\r\ngantt.attachEvent(\"onEmptyClick\", function(e){\r\n\tlet hideQuickInfo = true;\r\n\tconst parent = document.querySelector(\".gantt_cal_quick_info\");\r\n\tif (parent){\r\n\t\tconst quickInfoClick = gantt.utils.dom.isChildOf(e.target, parent);\r\n\t\tif (quickInfoClick){\r\n\t\t\thideQuickInfo = false;\r\n\t\t}\r\n\t}\r\n\tif (hideQuickInfo){\r\n\t\thidingFunction();\r\n\t}\r\n});\r\nfunction clearQuickInfo() {\r\n\tgantt.ext.quickInfo.hide();\r\n\tgantt.ext.quickInfo._quickInfoBox = null;\r\n\treturn true;\r\n}\r\ngantt.attachEvent(\"onGanttReady\", clearQuickInfo);\r\ngantt.attachEvent(\"onDestroy\", clearQuickInfo);\r\n\r\ngantt.event(window, \"keydown\", function(e){\r\n\tif (e.keyCode === 27){\r\n\t\tgantt.ext.quickInfo.hide();\r\n\t}\r\n});\r\n\r\n}","var _require = require(\"../utils/helpers\"),\n    replaceValidZeroId = _require.replaceValidZeroId;\n\nmodule.exports = function (gantt) {\n  gantt.config.multiselect = true;\n  gantt.config.multiselect_one_level = false;\n  gantt._multiselect = {\n    _selected: {},\n    _one_level: false,\n    _active: true,\n    _first_selected_when_shift: null,\n    getDefaultSelected: function getDefaultSelected() {\n      var selected = this.getSelected();\n      return selected.length ? selected[selected.length - 1] : null;\n    },\n    setFirstSelected: function setFirstSelected(id) {\n      this._first_selected_when_shift = id;\n    },\n    getFirstSelected: function getFirstSelected() {\n      return this._first_selected_when_shift;\n    },\n    isActive: function isActive() {\n      this.updateState();\n      return this._active;\n    },\n    updateState: function updateState() {\n      this._one_level = gantt.config.multiselect_one_level;\n      var active = this._active;\n      this._active = gantt.config.select_task;\n\n      if (this._active != active) {\n        this.reset();\n      }\n    },\n    reset: function reset() {\n      this._selected = {};\n    },\n    setLastSelected: function setLastSelected(id) {\n      gantt.$data.tasksStore.silent(function () {\n        var store = gantt.$data.tasksStore;\n        if (id) store.select(id + \"\");else store.unselect(null);\n      });\n    },\n    getLastSelected: function getLastSelected() {\n      var last = gantt.$data.tasksStore.getSelectedId();\n      if (last && gantt.isTaskExists(last)) return last;\n      return null;\n    },\n    select: function select(id, e) {\n      if (id && gantt.callEvent(\"onBeforeTaskMultiSelect\", [id, true, e]) && gantt.callEvent(\"onBeforeTaskSelected\", [id])) {\n        this._selected[id] = true;\n        this.setLastSelected(id);\n        this.afterSelect(id);\n        gantt.callEvent(\"onTaskMultiSelect\", [id, true, e]);\n        gantt.callEvent(\"onTaskSelected\", [id]);\n        return true;\n      }\n\n      return false;\n    },\n    toggle: function toggle(id, e) {\n      if (this._selected[id]) {\n        this.unselect(id, e);\n      } else {\n        this.select(id, e);\n      }\n    },\n    unselect: function unselect(id, e) {\n      if (id && gantt.callEvent(\"onBeforeTaskMultiSelect\", [id, false, e])) {\n        this._selected[id] = false;\n        if (this.getLastSelected() == id) this.setLastSelected(this.getDefaultSelected());\n        this.afterSelect(id);\n        gantt.callEvent(\"onTaskMultiSelect\", [id, false, e]);\n        gantt.callEvent(\"onTaskUnselected\", [id]);\n      }\n    },\n    isSelected: function isSelected(id) {\n      return !!(gantt.isTaskExists(id) && this._selected[id]);\n    },\n    getSelected: function getSelected() {\n      var res = [];\n\n      for (var i in this._selected) {\n        if (this._selected[i] && gantt.isTaskExists(i)) {\n          res.push(i);\n        } else {\n          this._selected[i] = false;\n        }\n      }\n\n      res.sort(function (a, b) {\n        return gantt.getGlobalTaskIndex(a) > gantt.getGlobalTaskIndex(b) ? 1 : -1;\n      });\n      return res;\n    },\n    forSelected: function forSelected(callback) {\n      var selected = this.getSelected();\n\n      for (var i = 0; i < selected.length; i++) {\n        callback(selected[i]);\n      }\n    },\n    isSameLevel: function isSameLevel(id) {\n      if (!this._one_level) return true;\n      var last = this.getLastSelected();\n      if (!last) return true;\n      if (!(gantt.isTaskExists(last) && gantt.isTaskExists(id))) return true;\n      return !!(gantt.calculateTaskLevel(gantt.getTask(last)) == gantt.calculateTaskLevel(gantt.getTask(id)));\n    },\n    afterSelect: function afterSelect(id) {\n      if (gantt.isTaskExists(id)) {\n        // FIXME: quick workaround to prevent re-filtering inside refresh on multiselect\n        gantt._quickRefresh(function () {\n          gantt.refreshTask(id);\n        });\n      }\n    },\n    doSelection: function doSelection(e) {\n      if (!this.isActive()) return false; // deny selection when click on 'expand' or 'collapse' icons\n\n      if (gantt._is_icon_open_click(e)) return false;\n      var target_ev = gantt.locate(e);\n      if (!target_ev) return false;\n      if (!gantt.callEvent(\"onBeforeMultiSelect\", [e])) return false;\n      var selected = this.getSelected();\n      var defaultLast = this.getFirstSelected();\n      var isLast = false;\n      var last = this.getLastSelected();\n      var multiSelect = gantt.config.multiselect;\n\n      var singleSelection = function () {\n        // GS-719: If the multiselect extension is added we still need a way\n        // to open the inline editors after clicking on the cells in the grid\n        var controller = gantt.ext.inlineEditors;\n        var state = controller.getState();\n        var cell = controller.locateCell(e.target);\n\n        if (gantt.config.inline_editors_multiselect_open && cell && controller.getEditorConfig(cell.columnName)) {\n          if (controller.isVisible() && state.id == cell.id && state.columnName == cell.columnName) {// do nothing if editor is already active in this cell\n          } else {\n            controller.startEdit(cell.id, cell.columnName);\n          }\n        }\n\n        this.setFirstSelected(target_ev);\n\n        if (!this.isSelected(target_ev)) {\n          this.select(target_ev, e);\n        }\n\n        selected = this.getSelected();\n\n        for (var i = 0; i < selected.length; i++) {\n          if (selected[i] !== target_ev) {\n            this.unselect(selected[i], e);\n          }\n        }\n      }.bind(this);\n\n      var blockSelection = function () {\n        if (!last) last = target_ev;else if (target_ev) {\n          var first_indx = gantt.getGlobalTaskIndex(this.getFirstSelected());\n          var target_indx = gantt.getGlobalTaskIndex(target_ev);\n          var last_indx = gantt.getGlobalTaskIndex(last); // clear prev selection\n\n          var tmp = last;\n\n          while (gantt.getGlobalTaskIndex(tmp) !== first_indx) {\n            this.unselect(tmp, e);\n            tmp = first_indx > last_indx ? gantt.getNext(tmp) : gantt.getPrev(tmp);\n          }\n\n          tmp = target_ev;\n\n          while (gantt.getGlobalTaskIndex(tmp) !== first_indx) {\n            if (this.select(tmp, e) && !isLast) {\n              isLast = true;\n              defaultLast = tmp;\n            }\n\n            tmp = first_indx > target_indx ? gantt.getNext(tmp) : gantt.getPrev(tmp);\n          }\n        }\n      }.bind(this);\n\n      if (multiSelect && (e.ctrlKey || e.metaKey)) {\n        if (!this.isSelected(target_ev)) this.setFirstSelected(target_ev);\n\n        if (target_ev) {\n          this.toggle(target_ev, e);\n        }\n      } else if (multiSelect && e.shiftKey) {\n        if (!gantt.isTaskExists(this.getFirstSelected()) || this.getFirstSelected() === null) {\n          this.setFirstSelected(target_ev);\n        }\n\n        if (selected.length) {\n          // select a group of tasks\n          blockSelection();\n        } else {\n          // select a task when no task is selected and Shift is pressed\n          singleSelection();\n        }\n      } else {\n        // no key press or no multiple selection on the mouse click\n        singleSelection();\n      }\n\n      if (this.isSelected(target_ev)) {\n        this.setLastSelected(target_ev);\n      } else if (defaultLast) {\n        if (target_ev == last) this.setLastSelected(e.shiftKey ? defaultLast : this.getDefaultSelected());\n      } else {\n        this.setLastSelected(null);\n      }\n\n      if (!this.getSelected().length) this.setLastSelected(null);\n      if (!this.getLastSelected() || !this.isSelected(this.getFirstSelected())) this.setFirstSelected(this.getLastSelected());\n      return true;\n    }\n  };\n\n  (function () {\n    var old_selectTask = gantt.selectTask;\n\n    gantt.selectTask = function (id) {\n      id = replaceValidZeroId(id, this.config.root_id);\n      if (!id) return false;\n      var multiselect = gantt._multiselect;\n      var res = id;\n\n      if (multiselect.isActive()) {\n        if (multiselect.select(id, null)) {\n          multiselect.setLastSelected(id);\n        }\n\n        multiselect.setFirstSelected(multiselect.getLastSelected());\n      } else {\n        res = old_selectTask.call(this, id);\n      }\n\n      return res;\n    };\n\n    var old_unselectTask = gantt.unselectTask;\n\n    gantt.unselectTask = function (id) {\n      var multiselect = gantt._multiselect;\n      var isActive = multiselect.isActive();\n      id = id || multiselect.getLastSelected();\n\n      if (id && isActive) {\n        multiselect.unselect(id, null);\n        if (id == multiselect.getLastSelected()) multiselect.setLastSelected(null);\n        gantt.refreshTask(id);\n        multiselect.setFirstSelected(multiselect.getLastSelected());\n      }\n\n      var res = id;\n      if (!isActive) res = old_unselectTask.call(this, id);\n      return res;\n    };\n\n    gantt.toggleTaskSelection = function (id) {\n      var multiselect = gantt._multiselect;\n\n      if (id && multiselect.isActive()) {\n        multiselect.toggle(id);\n        multiselect.setFirstSelected(multiselect.getLastSelected());\n      }\n    };\n\n    gantt.getSelectedTasks = function () {\n      var multiselect = gantt._multiselect;\n      multiselect.isActive();\n      return multiselect.getSelected();\n    };\n\n    gantt.eachSelectedTask = function (callback) {\n      return this._multiselect.forSelected(callback);\n    };\n\n    gantt.isSelectedTask = function (id) {\n      return this._multiselect.isSelected(id);\n    };\n\n    gantt.getLastSelectedTask = function () {\n      return this._multiselect.getLastSelected();\n    };\n\n    gantt.attachEvent(\"onGanttReady\", function () {\n      var old_isSelected = gantt.$data.tasksStore.isSelected;\n\n      gantt.$data.tasksStore.isSelected = function (id) {\n        if (gantt._multiselect.isActive()) {\n          return gantt._multiselect.isSelected(id);\n        }\n\n        return old_isSelected.call(this, id);\n      };\n    });\n  })();\n\n  gantt.attachEvent(\"onTaskIdChange\", function (id, new_id) {\n    var multiselect = gantt._multiselect;\n    if (!multiselect.isActive()) return true;\n\n    if (gantt.isSelectedTask(id)) {\n      multiselect.unselect(id, null);\n      multiselect.select(new_id, null);\n    }\n  });\n  gantt.attachEvent(\"onAfterTaskDelete\", function (id, item) {\n    var multiselect = gantt._multiselect;\n    if (!multiselect.isActive()) return true;\n\n    if (multiselect._selected[id]) {\n      multiselect.unselect(id, null);\n      multiselect._selected[id] = false;\n      multiselect.setLastSelected(multiselect.getDefaultSelected());\n    }\n\n    multiselect.forSelected(function (task_id) {\n      if (!gantt.isTaskExists(task_id)) multiselect.unselect(task_id, null);\n    });\n  });\n  gantt.attachEvent(\"onBeforeTaskMultiSelect\", function (id, state, e) {\n    var multiselect = gantt._multiselect;\n\n    if (state && multiselect.isActive()) {\n      if (multiselect._one_level) {\n        return multiselect.isSameLevel(id);\n      }\n    }\n\n    return true;\n  });\n  gantt.attachEvent(\"onTaskClick\", function (id, e) {\n    if (gantt._multiselect.doSelection(e)) gantt.callEvent(\"onMultiSelect\", [e]);\n    return true;\n  });\n};","module.exports = function (gantt) {\n  if (!gantt._markers) {\n    gantt._markers = gantt.createDatastore({\n      name: \"marker\",\n      initItem: function initItem(marker) {\n        marker.id = marker.id || gantt.uid();\n        return marker;\n      }\n    });\n  }\n\n  gantt.config.show_markers = true;\n\n  function render_marker(marker) {\n    if (!gantt.config.show_markers) return false;\n    if (!marker.start_date) return false;\n    var state = gantt.getState();\n    if (+marker.start_date > +state.max_date) return;\n    if ((!marker.end_date || +marker.end_date < +state.min_date) && +marker.start_date < +state.min_date) return;\n    var div = document.createElement(\"div\");\n    div.setAttribute(\"data-marker-id\", marker.id);\n    var css = \"gantt_marker\";\n    if (gantt.templates.marker_class) css += \" \" + gantt.templates.marker_class(marker);\n\n    if (marker.css) {\n      css += \" \" + marker.css;\n    }\n\n    if (marker.title) {\n      div.title = marker.title;\n    }\n\n    div.className = css;\n    var start = gantt.posFromDate(marker.start_date);\n    div.style.left = start + \"px\";\n    var markerHeight = Math.max(gantt.getRowTop(gantt.getVisibleTaskCount()), 0) + \"px\";\n\n    if (gantt.config.timeline_placeholder) {\n      markerHeight = gantt.$container.scrollHeight + \"px\";\n    }\n\n    div.style.height = markerHeight;\n\n    if (marker.end_date) {\n      var end = gantt.posFromDate(marker.end_date);\n      div.style.width = Math.max(end - start, 0) + \"px\";\n    }\n\n    if (marker.text) {\n      div.innerHTML = \"<div class='gantt_marker_content' >\" + marker.text + \"</div>\";\n    }\n\n    return div;\n  }\n\n  function initMarkerArea() {\n    if (!gantt.$task_data) return;\n    var markerArea = document.createElement(\"div\");\n    markerArea.className = \"gantt_marker_area\";\n    gantt.$task_data.appendChild(markerArea);\n    gantt.$marker_area = markerArea;\n  }\n\n  gantt.attachEvent(\"onBeforeGanttRender\", function () {\n    if (!gantt.$marker_area) initMarkerArea();\n  });\n  gantt.attachEvent(\"onDataRender\", function () {\n    if (!gantt.$marker_area) {\n      initMarkerArea();\n      gantt.renderMarkers();\n    }\n  });\n  gantt.attachEvent(\"onGanttLayoutReady\", function () {\n    // GS-1304 - markers should attach when layout is initialized, both on gantt.init and gantt.resetLayout\n    // wait for \"onBeforeGanttRender\", so all layout elements will be in DOM\n    gantt.attachEvent(\"onBeforeGanttRender\", function () {\n      initMarkerArea();\n      var layers = gantt.$services.getService(\"layers\");\n      var markerRenderer = layers.createDataRender({\n        name: \"marker\",\n        defaultContainer: function defaultContainer() {\n          return gantt.$marker_area;\n        }\n      });\n      markerRenderer.addLayer(render_marker);\n    }, {\n      once: true\n    });\n  });\n\n  gantt.getMarker = function (id) {\n    if (!this._markers) return null;\n    return this._markers.getItem(id);\n  };\n\n  gantt.addMarker = function (marker) {\n    return this._markers.addItem(marker);\n  };\n\n  gantt.deleteMarker = function (id) {\n    if (!this._markers.exists(id)) return false;\n\n    this._markers.removeItem(id);\n\n    return true;\n  };\n\n  gantt.updateMarker = function (id) {\n    this._markers.refresh(id);\n  };\n\n  gantt._getMarkers = function () {\n    return this._markers.getItems();\n  };\n\n  gantt.renderMarkers = function () {\n    this._markers.refresh();\n  };\n};","module.exports = function (gantt) {\n  gantt.$keyboardNavigation.dispatcher = {\n    isActive: false,\n    activeNode: null,\n    globalNode: new gantt.$keyboardNavigation.GanttNode(),\n    enable: function enable() {\n      this.isActive = true;\n      this.setActiveNode(this.getActiveNode());\n    },\n    disable: function disable() {\n      this.isActive = false;\n    },\n    isEnabled: function isEnabled() {\n      return !!this.isActive;\n    },\n    getDefaultNode: function getDefaultNode() {\n      var node;\n\n      if (gantt.config.keyboard_navigation_cells) {\n        node = new gantt.$keyboardNavigation.TaskCell();\n      } else {\n        node = new gantt.$keyboardNavigation.TaskRow();\n      }\n\n      if (!node.isValid()) {\n        node = node.fallback();\n      }\n\n      return node;\n    },\n    setDefaultNode: function setDefaultNode() {\n      this.setActiveNode(this.getDefaultNode());\n    },\n    getActiveNode: function getActiveNode() {\n      var node = this.activeNode;\n\n      if (node && !node.isValid()) {\n        node = node.fallback();\n      }\n\n      return node;\n    },\n    fromDomElement: function fromDomElement(e) {\n      var inputs = [gantt.$keyboardNavigation.TaskRow, gantt.$keyboardNavigation.TaskCell, gantt.$keyboardNavigation.HeaderCell];\n\n      for (var i = 0; i < inputs.length; i++) {\n        if (inputs[i].prototype.fromDomElement) {\n          var node = inputs[i].prototype.fromDomElement(e);\n          if (node) return node;\n        }\n      }\n\n      return null;\n    },\n    focusGlobalNode: function focusGlobalNode() {\n      this.blurNode(this.globalNode);\n      this.focusNode(this.globalNode);\n    },\n    setActiveNode: function setActiveNode(el) {\n      //console.trace()\n      var focusChanged = true;\n\n      if (this.activeNode) {\n        if (this.activeNode.compareTo(el)) {\n          focusChanged = false;\n        }\n      }\n\n      if (this.isEnabled()) {\n        if (focusChanged) this.blurNode(this.activeNode);\n        this.activeNode = el;\n        this.focusNode(this.activeNode, !focusChanged);\n      }\n    },\n    focusNode: function focusNode(el, keptFocus) {\n      if (el && el.focus) {\n        el.focus(keptFocus);\n      }\n    },\n    blurNode: function blurNode(el) {\n      if (el && el.blur) {\n        el.blur();\n      }\n    },\n    keyDownHandler: function keyDownHandler(e) {\n      if (gantt.$keyboardNavigation.isModal()) return;\n      if (!this.isEnabled()) return;\n\n      if (e.defaultPrevented) {\n        return;\n      }\n\n      var ganttNode = this.globalNode;\n      var command = gantt.$keyboardNavigation.shortcuts.getCommandFromEvent(e);\n      var activeElement = this.getActiveNode();\n      var eventFacade = gantt.$keyboardNavigation.facade;\n\n      if (eventFacade.callEvent(\"onKeyDown\", [command, e]) === false) {\n        return;\n      }\n\n      if (!activeElement) {\n        this.setDefaultNode();\n      } else if (activeElement.findHandler(command)) {\n        activeElement.doAction(command, e);\n      } else if (ganttNode.findHandler(command)) {\n        ganttNode.doAction(command, e);\n      }\n    },\n    _timeout: null,\n    awaitsFocus: function awaitsFocus() {\n      return this._timeout !== null;\n    },\n    delay: function delay(callback, _delay) {\n      clearTimeout(this._timeout);\n      this._timeout = setTimeout(gantt.bind(function () {\n        this._timeout = null;\n        callback();\n      }, this), _delay || 1);\n    },\n    clearDelay: function clearDelay() {\n      clearTimeout(this._timeout);\n    }\n  };\n};","module.exports = function (gantt) {\n  (function () {\n    var modalsStack = [];\n\n    function isModal() {\n      return !!modalsStack.length;\n    }\n\n    function afterPopup(box) {\n      setTimeout(function () {\n        if (!isModal()) {\n          if (!gantt.$destroyed) {\n            gantt.focus();\n          }\n        }\n      }, 1);\n    }\n\n    function startModal(box) {\n      gantt.eventRemove(box, \"keydown\", trapFocus);\n      gantt.event(box, \"keydown\", trapFocus);\n      modalsStack.push(box); //gantt.$keyboardNavigation.dispatcher.disable();\n    }\n\n    function endModal() {\n      var box = modalsStack.pop();\n\n      if (box) {\n        gantt.eventRemove(box, \"keydown\", trapFocus);\n      }\n\n      afterPopup(box);\n    }\n\n    function isTopModal(box) {\n      return box == modalsStack[modalsStack.length - 1];\n    }\n\n    function trapFocus(event) {\n      var target = event.currentTarget;\n      if (!isTopModal(target)) return;\n      gantt.$keyboardNavigation.trapFocus(target, event);\n    }\n\n    function traceLightbox() {\n      startModal(gantt.getLightbox());\n    }\n\n    gantt.attachEvent(\"onLightbox\", traceLightbox);\n    gantt.attachEvent(\"onAfterLightbox\", endModal);\n    gantt.attachEvent(\"onLightboxChange\", function () {\n      endModal();\n      traceLightbox();\n    });\n    gantt.attachEvent(\"onAfterQuickInfo\", function () {\n      afterPopup();\n    });\n    gantt.attachEvent(\"onMessagePopup\", function (box) {\n      saveFocus();\n      startModal(box);\n    });\n    gantt.attachEvent(\"onAfterMessagePopup\", function () {\n      endModal();\n      restoreFocus();\n    });\n    var focusElement = null;\n\n    function saveFocus() {\n      focusElement = gantt.utils.dom.getActiveElement();\n    }\n\n    function restoreFocus() {\n      setTimeout(function () {\n        if (focusElement) {\n          focusElement.focus();\n          focusElement = null;\n        }\n      }, 1);\n    }\n\n    gantt.$keyboardNavigation.isModal = isModal;\n  })();\n};","module.exports = function (gantt) {\n  var domHelpers = require(\"../../../core/ui/utils/dom_helpers\");\n\n  var _require = require(\"../../../utils/helpers\"),\n      replaceValidZeroId = _require.replaceValidZeroId;\n\n  gantt.$keyboardNavigation.TaskCell = function (taskId, index) {\n    taskId = replaceValidZeroId(taskId, gantt.config.root_id);\n\n    if (!taskId) {\n      var rootLevel = gantt.getChildren(gantt.config.root_id);\n\n      if (rootLevel[0]) {\n        taskId = rootLevel[0];\n      }\n    }\n\n    this.taskId = taskId;\n    this.columnIndex = index || 0; // provided task may not exist, in this case node will be detectes as invalid\n\n    if (gantt.isTaskExists(this.taskId)) {\n      this.index = gantt.getTaskIndex(this.taskId);\n      this.globalIndex = gantt.getGlobalTaskIndex(this.taskId);\n    }\n  };\n\n  gantt.$keyboardNavigation.TaskCell.prototype = gantt._compose(gantt.$keyboardNavigation.TaskRow, {\n    _handlers: null,\n    isValid: function isValid() {\n      return gantt.$keyboardNavigation.TaskRow.prototype.isValid.call(this) && !!gantt.getGridColumns()[this.columnIndex];\n    },\n    fallback: function fallback() {\n      var node = gantt.$keyboardNavigation.TaskRow.prototype.fallback.call(this);\n      var result = node;\n\n      if (node instanceof gantt.$keyboardNavigation.TaskRow) {\n        var visibleColumns = gantt.getGridColumns();\n        var index = this.columnIndex;\n\n        while (index >= 0) {\n          if (visibleColumns[index]) break;\n          index--;\n        }\n\n        if (visibleColumns[index]) {\n          result = new gantt.$keyboardNavigation.TaskCell(node.taskId, index);\n        }\n      }\n\n      return result;\n    },\n    fromDomElement: function fromDomElement(el) {\n      if (!gantt.config.keyboard_navigation_cells) {\n        return null;\n      }\n\n      var taskId = gantt.locate(el);\n\n      if (gantt.isTaskExists(taskId)) {\n        var index = 0;\n        var cellElement = domHelpers.locateAttribute(el, \"data-column-index\");\n\n        if (cellElement) {\n          index = cellElement.getAttribute(\"data-column-index\") * 1;\n        }\n\n        return new gantt.$keyboardNavigation.TaskCell(taskId, index);\n      } else {\n        return null;\n      }\n    },\n    getNode: function getNode() {\n      if (gantt.isTaskExists(this.taskId) && gantt.isTaskVisible(this.taskId)) {\n        if (gantt.config.show_grid) {\n          var row = gantt.$grid.querySelector(\".gantt_row[\" + gantt.config.task_attribute + \"='\" + this.taskId + \"']\");\n          if (!row) return null;\n          return row.querySelector(\"[data-column-index='\" + this.columnIndex + \"']\");\n        } else {\n          return gantt.getTaskNode(this.taskId);\n        }\n      }\n    },\n    keys: {\n      \"up\": function up() {\n        var nextElement = null;\n        var prevTask = gantt.getPrev(this.taskId);\n\n        if (!gantt.isTaskExists(prevTask)) {\n          nextElement = new gantt.$keyboardNavigation.HeaderCell(this.columnIndex);\n        } else {\n          nextElement = new gantt.$keyboardNavigation.TaskCell(prevTask, this.columnIndex);\n        }\n\n        this.moveTo(nextElement);\n      },\n      \"down\": function down() {\n        var nextTask = gantt.getNext(this.taskId);\n\n        if (gantt.isTaskExists(nextTask)) {\n          this.moveTo(new gantt.$keyboardNavigation.TaskCell(nextTask, this.columnIndex));\n        }\n      },\n      \"left\": function left() {\n        if (this.columnIndex > 0) {\n          this.moveTo(new gantt.$keyboardNavigation.TaskCell(this.taskId, this.columnIndex - 1));\n        }\n      },\n      \"right\": function right() {\n        var columns = gantt.getGridColumns();\n\n        if (this.columnIndex < columns.length - 1) {\n          this.moveTo(new gantt.$keyboardNavigation.TaskCell(this.taskId, this.columnIndex + 1));\n        }\n      },\n      \"end\": function end() {\n        var columns = gantt.getGridColumns();\n        this.moveTo(new gantt.$keyboardNavigation.TaskCell(this.taskId, columns.length - 1));\n      },\n      \"home\": function home() {\n        this.moveTo(new gantt.$keyboardNavigation.TaskCell(this.taskId, 0));\n      },\n      \"pagedown\": function pagedown() {\n        if (gantt.getVisibleTaskCount()) {\n          this.moveTo(new gantt.$keyboardNavigation.TaskCell(gantt.getTaskByIndex(gantt.getVisibleTaskCount() - 1).id, this.columnIndex));\n        }\n      },\n      \"pageup\": function pageup() {\n        if (gantt.getVisibleTaskCount()) {\n          this.moveTo(new gantt.$keyboardNavigation.TaskCell(gantt.getTaskByIndex(0).id, this.columnIndex));\n        }\n      }\n    }\n  });\n  gantt.$keyboardNavigation.TaskCell.prototype.bindAll(gantt.$keyboardNavigation.TaskRow.prototype.keys);\n  gantt.$keyboardNavigation.TaskCell.prototype.bindAll(gantt.$keyboardNavigation.TaskCell.prototype.keys);\n};","module.exports = function (gantt) {\n  gantt.$keyboardNavigation.TaskRow = function (taskId) {\n    if (!taskId) {\n      var rootLevel = gantt.getChildren(gantt.config.root_id);\n\n      if (rootLevel[0]) {\n        taskId = rootLevel[0];\n      }\n    }\n\n    this.taskId = taskId;\n\n    if (gantt.isTaskExists(this.taskId)) {\n      this.index = gantt.getTaskIndex(this.taskId);\n      this.globalIndex = gantt.getGlobalTaskIndex(this.taskId);\n    }\n  };\n\n  gantt.$keyboardNavigation.TaskRow.prototype = gantt._compose(gantt.$keyboardNavigation.KeyNavNode, {\n    _handlers: null,\n    isValid: function isValid() {\n      return gantt.isTaskExists(this.taskId) && gantt.getTaskIndex(this.taskId) > -1;\n    },\n    fallback: function fallback() {\n      if (!gantt.getVisibleTaskCount()) {\n        var header = new gantt.$keyboardNavigation.HeaderCell();\n        if (!header.isValid()) return null;else return header;\n      } else {\n        var nextIndex = -1; // GS-1393. When Gantt tries to restore the focus, it should rely on the global index\n\n        if (gantt.getTaskByIndex(this.globalIndex - 1)) {\n          nextIndex = this.globalIndex - 1;\n        } else if (gantt.getTaskByIndex(this.globalIndex + 1)) {\n          nextIndex = this.globalIndex + 1;\n        } else {\n          var globalIndex = this.globalIndex;\n\n          while (globalIndex >= 0) {\n            if (gantt.getTaskByIndex(globalIndex)) {\n              nextIndex = globalIndex;\n              break;\n            }\n\n            globalIndex--;\n          }\n        }\n\n        if (nextIndex > -1) {\n          return new gantt.$keyboardNavigation.TaskRow(gantt.getTaskByIndex(nextIndex).id);\n        }\n      }\n    },\n    fromDomElement: function fromDomElement(el) {\n      if (gantt.config.keyboard_navigation_cells) {\n        return null;\n      }\n\n      var taskId = gantt.locate(el);\n\n      if (gantt.isTaskExists(taskId)) {\n        return new gantt.$keyboardNavigation.TaskRow(taskId);\n      } else {\n        return null;\n      }\n    },\n    getNode: function getNode() {\n      if (gantt.isTaskExists(this.taskId) && gantt.isTaskVisible(this.taskId)) {\n        if (gantt.config.show_grid) {\n          return gantt.$grid.querySelector(\".gantt_row[\" + gantt.config.task_attribute + \"='\" + this.taskId + \"']\");\n        } else {\n          return gantt.getTaskNode(this.taskId);\n        }\n      }\n    },\n    focus: function focus(keptFocus) {\n      if (!keptFocus) {\n        var pos = gantt.getTaskPosition(gantt.getTask(this.taskId));\n        var height = gantt.getTaskHeight(this.taskId);\n        var scroll = gantt.getScrollState();\n        var viewWidth;\n\n        if (gantt.$task) {\n          viewWidth = gantt.$task.offsetWidth;\n        } else {\n          viewWidth = scroll.inner_width;\n        }\n\n        var viewHeight;\n\n        if (gantt.$grid_data || gantt.$task_data) {\n          viewHeight = (gantt.$grid_data || gantt.$task_data).offsetHeight;\n        } else {\n          viewHeight = scroll.inner_height;\n        }\n\n        if (pos.top < scroll.y || pos.top + height > scroll.y + viewHeight) {\n          gantt.scrollTo(null, pos.top - height * 5);\n        } else if (gantt.config.scroll_on_click && gantt.config.show_chart) {\n          // horizontal scroll activated\n          if (pos.left > scroll.x + viewWidth) {\n            // scroll forward to the start of the task\n            gantt.scrollTo(pos.left - gantt.config.task_scroll_offset);\n          } else if (pos.left + pos.width < scroll.x) {\n            // scroll back to the end of the task\n            gantt.scrollTo(pos.left + pos.width - gantt.config.task_scroll_offset);\n          }\n        }\n      }\n\n      gantt.$keyboardNavigation.KeyNavNode.prototype.focus.apply(this, [keptFocus]); // GS-152 if there are scrollbars with custom names, change their scroll position\n\n      scrollGrid();\n\n      function scrollGrid() {\n        var grid = gantt.$ui.getView(\"grid\");\n        var scrollPositionX = parseInt(grid.$grid.scrollLeft);\n        var scrollPositionY = parseInt(grid.$grid_data.scrollTop);\n        var attachedScrollbarHorizontal = grid.$config.scrollX;\n\n        if (attachedScrollbarHorizontal && grid.$config.scrollable) {\n          var scrollbarHorizontal = gantt.$ui.getView(attachedScrollbarHorizontal);\n\n          if (scrollbarHorizontal) {\n            scrollbarHorizontal.scrollTo(scrollPositionX, scrollPositionY);\n          }\n        }\n\n        var attachedScrollbarVertical = grid.$config.scrollY;\n\n        if (attachedScrollbarVertical) {\n          var scrollbarVertical = gantt.$ui.getView(attachedScrollbarVertical);\n\n          if (scrollbarVertical) {\n            scrollbarVertical.scrollTo(scrollPositionX, scrollPositionY);\n          }\n        }\n      }\n    },\n    keys: {\n      \"pagedown\": function pagedown() {\n        if (gantt.getVisibleTaskCount()) {\n          this.moveTo(new gantt.$keyboardNavigation.TaskRow(gantt.getTaskByIndex(gantt.getVisibleTaskCount() - 1).id));\n        }\n      },\n      \"pageup\": function pageup() {\n        if (gantt.getVisibleTaskCount()) {\n          this.moveTo(new gantt.$keyboardNavigation.TaskRow(gantt.getTaskByIndex(0).id));\n        }\n      },\n      \"up\": function up() {\n        var nextElement = null;\n        var prevTask = gantt.getPrev(this.taskId);\n\n        if (!gantt.isTaskExists(prevTask)) {\n          nextElement = new gantt.$keyboardNavigation.HeaderCell();\n        } else {\n          nextElement = new gantt.$keyboardNavigation.TaskRow(prevTask);\n        }\n\n        this.moveTo(nextElement);\n      },\n      \"down\": function down() {\n        var nextTask = gantt.getNext(this.taskId);\n\n        if (gantt.isTaskExists(nextTask)) {\n          this.moveTo(new gantt.$keyboardNavigation.TaskRow(nextTask));\n        }\n      },\n      \"shift+down\": function shiftDown() {\n        if (gantt.hasChild(this.taskId) && !gantt.getTask(this.taskId).$open) {\n          gantt.open(this.taskId);\n        }\n      },\n      \"shift+up\": function shiftUp() {\n        if (gantt.hasChild(this.taskId) && gantt.getTask(this.taskId).$open) {\n          gantt.close(this.taskId);\n        }\n      },\n      \"shift+right\": function shiftRight() {\n        if (gantt.isReadonly(this)) {\n          return;\n        }\n\n        var prevId = gantt.getPrevSibling(this.taskId);\n\n        if (gantt.isTaskExists(prevId) && !gantt.isChildOf(this.taskId, prevId)) {\n          var parent = gantt.getTask(prevId);\n          parent.$open = true;\n          var result = gantt.moveTask(this.taskId, -1, prevId);\n          if (result !== false) gantt.updateTask(this.taskId);\n        }\n      },\n      \"shift+left\": function shiftLeft() {\n        if (gantt.isReadonly(this)) {\n          return;\n        }\n\n        var parent = gantt.getParent(this.taskId);\n\n        if (gantt.isTaskExists(parent)) {\n          var result = gantt.moveTask(this.taskId, gantt.getTaskIndex(parent) + 1, gantt.getParent(parent));\n          if (result !== false) gantt.updateTask(this.taskId);\n        }\n      },\n      // select\n      \"space\": function space(e) {\n        if (!gantt.isSelectedTask(this.taskId)) {\n          gantt.selectTask(this.taskId);\n        } else {\n          gantt.unselectTask(this.taskId);\n        }\n      },\n      // collapse\n      \"ctrl+left\": function ctrlLeft(e) {\n        gantt.close(this.taskId);\n      },\n      // expand\n      \"ctrl+right\": function ctrlRight(e) {\n        gantt.open(this.taskId);\n      },\n      // delete task\n      \"delete\": function _delete(e) {\n        if (gantt.isReadonly(this)) {\n          return;\n        }\n\n        gantt.$click.buttons[\"delete\"](this.taskId);\n      },\n      // open lightbox\n      \"enter\": function enter() {\n        if (gantt.isReadonly(this)) {\n          return;\n        }\n\n        gantt.showLightbox(this.taskId);\n      },\n      // add subtask\n      \"ctrl+enter\": function ctrlEnter() {\n        if (gantt.isReadonly(this)) {\n          return;\n        }\n\n        gantt.createTask({}, this.taskId);\n      }\n    }\n  });\n  gantt.$keyboardNavigation.TaskRow.prototype.bindAll(gantt.$keyboardNavigation.TaskRow.prototype.keys);\n};","module.exports = function (gantt) {\n  var domHelpers = require(\"../../../core/ui/utils/dom_helpers\");\n\n  gantt.$keyboardNavigation.HeaderCell = function (index) {\n    this.index = index || 0;\n  };\n\n  gantt.$keyboardNavigation.HeaderCell.prototype = gantt._compose(gantt.$keyboardNavigation.KeyNavNode, {\n    _handlers: null,\n    isValid: function isValid() {\n      if (!gantt.config.show_grid) {\n        if (gantt.getVisibleTaskCount()) return false;\n      }\n\n      return !!gantt.getGridColumns()[this.index] || !gantt.getVisibleTaskCount();\n    },\n    fallback: function fallback() {\n      if (!gantt.config.show_grid) {\n        if (gantt.getVisibleTaskCount()) {\n          return new gantt.$keyboardNavigation.TaskRow();\n        }\n\n        return null;\n      }\n\n      var visibleColumns = gantt.getGridColumns();\n      var index = this.index;\n\n      while (index >= 0) {\n        if (visibleColumns[index]) break;\n        index--;\n      }\n\n      if (visibleColumns[index]) {\n        return new gantt.$keyboardNavigation.HeaderCell(index);\n      } else {\n        return null;\n      }\n    },\n    fromDomElement: function fromDomElement(el) {\n      var cellElement = domHelpers.locateClassName(el, \"gantt_grid_head_cell\");\n\n      if (cellElement) {\n        var index = 0;\n\n        while (cellElement && cellElement.previousSibling) {\n          cellElement = cellElement.previousSibling;\n          index += 1;\n        }\n\n        return new gantt.$keyboardNavigation.HeaderCell(index);\n      } else {\n        return null;\n      }\n    },\n    getNode: function getNode() {\n      var cells = gantt.$grid_scale.childNodes;\n      return cells[this.index];\n    },\n    keys: {\n      \"left\": function left() {\n        if (this.index > 0) {\n          this.moveTo(new gantt.$keyboardNavigation.HeaderCell(this.index - 1));\n        }\n      },\n      \"right\": function right() {\n        var columns = gantt.getGridColumns();\n\n        if (this.index < columns.length - 1) {\n          this.moveTo(new gantt.$keyboardNavigation.HeaderCell(this.index + 1));\n        }\n      },\n      \"down\": function down() {\n        var taskRow;\n        var rootLevel = gantt.getChildren(gantt.config.root_id);\n\n        if (gantt.isTaskExists(rootLevel[0])) {\n          taskRow = rootLevel[0];\n        }\n\n        if (taskRow) {\n          if (gantt.config.keyboard_navigation_cells) {\n            this.moveTo(new gantt.$keyboardNavigation.TaskCell(taskRow, this.index));\n          } else {\n            this.moveTo(new gantt.$keyboardNavigation.TaskRow(taskRow));\n          }\n        }\n      },\n      \"end\": function end() {\n        var columns = gantt.getGridColumns();\n        this.moveTo(new gantt.$keyboardNavigation.HeaderCell(columns.length - 1));\n      },\n      \"home\": function home() {\n        this.moveTo(new gantt.$keyboardNavigation.HeaderCell(0));\n      },\n      // press header button\n      \"enter, space\": function enterSpace() {\n        var node = domHelpers.getActiveElement();\n        node.click();\n      },\n      // add new task\n      \"ctrl+enter\": function ctrlEnter() {\n        if (gantt.isReadonly(this)) {\n          return;\n        }\n\n        gantt.createTask({}, this.taskId);\n      }\n    }\n  });\n  gantt.$keyboardNavigation.HeaderCell.prototype.bindAll(gantt.$keyboardNavigation.HeaderCell.prototype.keys);\n};","module.exports = function (gantt) {\n  gantt.$keyboardNavigation.KeyNavNode = function () {};\n\n  gantt.$keyboardNavigation.KeyNavNode.prototype = gantt._compose(gantt.$keyboardNavigation.EventHandler, {\n    isValid: function isValid() {\n      return true;\n    },\n    fallback: function fallback() {\n      return null;\n    },\n    moveTo: function moveTo(element) {\n      gantt.$keyboardNavigation.dispatcher.setActiveNode(element);\n    },\n    compareTo: function compareTo(b) {\n      // good enough comparison of two random objects\n      if (!b) return false;\n\n      for (var i in this) {\n        if (!!this[i] != !!b[i]) return false;\n        var canStringifyThis = !!(this[i] && this[i].toString);\n        var canStringifyThat = !!(b[i] && b[i].toString);\n        if (canStringifyThat != canStringifyThis) return false;\n\n        if (!(canStringifyThat && canStringifyThis)) {\n          if (b[i] != this[i]) return false;\n        } else {\n          if (b[i].toString() != this[i].toString()) return false;\n        }\n      }\n\n      return true;\n    },\n    getNode: function getNode() {},\n    focus: function focus() {\n      var node = this.getNode();\n      if (!node) return;\n      var eventFacade = gantt.$keyboardNavigation.facade;\n\n      if (eventFacade.callEvent(\"onBeforeFocus\", [node]) === false) {\n        return;\n      }\n\n      if (node) {\n        node.setAttribute(\"tabindex\", \"-1\");\n\n        if (!node.$eventAttached) {\n          node.$eventAttached = true;\n          gantt.event(node, \"focus\", function (e) {\n            e.preventDefault();\n            return false;\n          }, false);\n        } //node.className += \" gantt_focused\";\n\n\n        if (gantt.utils.dom.isChildOf(document.activeElement, node)) {\n          node = document.activeElement;\n        }\n\n        if (node.focus) node.focus();\n        eventFacade.callEvent(\"onFocus\", [this.getNode()]);\n      }\n    },\n    blur: function blur() {\n      var node = this.getNode();\n\n      if (node) {\n        var eventFacade = gantt.$keyboardNavigation.facade;\n        eventFacade.callEvent(\"onBlur\", [node]);\n        node.setAttribute(\"tabindex\", \"-1\"); //node.className = (node.className || \"\").replace(/ ?gantt_focused/g, \"\");\n      }\n    }\n  });\n};","module.exports = function (gantt) {\n  gantt.$keyboardNavigation.GanttNode = function () {};\n\n  gantt.$keyboardNavigation.GanttNode.prototype = gantt._compose(gantt.$keyboardNavigation.EventHandler, {\n    focus: function focus() {\n      gantt.focus();\n    },\n    blur: function blur() {},\n    isEnabled: function isEnabled() {\n      return gantt.$container.hasAttribute(\"tabindex\");\n    },\n    scrollHorizontal: function scrollHorizontal(dir) {\n      var date = gantt.dateFromPos(gantt.getScrollState().x);\n      var scale = gantt.getScale();\n      var step = dir < 0 ? -scale.step : scale.step;\n      date = gantt.date.add(date, step, scale.unit);\n      gantt.scrollTo(gantt.posFromDate(date));\n    },\n    scrollVertical: function scrollVertical(dir) {\n      var top = gantt.getScrollState().y;\n      var step = gantt.config.row_height;\n      gantt.scrollTo(null, top + (dir < 0 ? -1 : 1) * step);\n    },\n    keys: {\n      \"alt+left\": function altLeft(e) {\n        this.scrollHorizontal(-1);\n      },\n      \"alt+right\": function altRight(e) {\n        this.scrollHorizontal(1);\n      },\n      \"alt+up\": function altUp(e) {\n        this.scrollVertical(-1);\n      },\n      \"alt+down\": function altDown(e) {\n        this.scrollVertical(1);\n      },\n      // undo\n      \"ctrl+z\": function ctrlZ() {\n        if (gantt.undo) gantt.undo();\n      },\n      // redo\n      \"ctrl+r\": function ctrlR() {\n        if (gantt.redo) gantt.redo();\n      }\n    }\n  });\n  gantt.$keyboardNavigation.GanttNode.prototype.bindAll(gantt.$keyboardNavigation.GanttNode.prototype.keys);\n};","module.exports = function (gantt) {\n  (function () {\n    var domHelpers = require(\"../../../core/ui/utils/dom_helpers\");\n\n    gantt.$keyboardNavigation.getFocusableNodes = domHelpers.getFocusableNodes;\n\n    gantt.$keyboardNavigation.trapFocus = function trapFocus(root, e) {\n      if (e.keyCode != 9) return false;\n      var focusable = gantt.$keyboardNavigation.getFocusableNodes(root);\n      var currentFocus = domHelpers.getActiveElement();\n      var currentIndex = -1;\n\n      for (var i = 0; i < focusable.length; i++) {\n        if (focusable[i] == currentFocus) {\n          currentIndex = i;\n          break;\n        }\n      }\n\n      if (e.shiftKey) {\n        // back tab\n        if (currentIndex <= 0) {\n          // go to the last element if we focused on the first\n          var lastItem = focusable[focusable.length - 1];\n\n          if (lastItem) {\n            lastItem.focus();\n            e.preventDefault();\n            return true;\n          }\n        }\n      } else {\n        // forward tab\n        if (currentIndex >= focusable.length - 1) {\n          // forward tab from last element should go back to the first element\n          var firstItem = focusable[0];\n\n          if (firstItem) {\n            firstItem.focus();\n            e.preventDefault();\n            return true;\n          }\n        }\n      }\n\n      return false;\n    };\n  })();\n};","module.exports = function (gantt) {\n  gantt.$keyboardNavigation.EventHandler = {\n    _handlers: null,\n    findHandler: function findHandler(command) {\n      if (!this._handlers) this._handlers = {};\n      var shortcuts = gantt.$keyboardNavigation.shortcuts;\n      var hash = shortcuts.getHash(command);\n      return this._handlers[hash];\n    },\n    doAction: function doAction(command, e) {\n      var handler = this.findHandler(command);\n\n      if (handler) {\n        var eventFacade = gantt.$keyboardNavigation.facade;\n\n        if (eventFacade.callEvent(\"onBeforeAction\", [command, e]) === false) {\n          return;\n        }\n\n        handler.call(this, e);\n        if (e.preventDefault) e.preventDefault();else e.returnValue = false;\n      }\n    },\n    bind: function bind(shortcut, handler) {\n      if (!this._handlers) this._handlers = {};\n      var shortcuts = gantt.$keyboardNavigation.shortcuts;\n      var commands = shortcuts.parse(shortcut);\n\n      for (var i = 0; i < commands.length; i++) {\n        this._handlers[shortcuts.getHash(commands[i])] = handler;\n      }\n    },\n    unbind: function unbind(shortcut) {\n      var shortcuts = gantt.$keyboardNavigation.shortcuts;\n      var commands = shortcuts.parse(shortcut);\n\n      for (var i = 0; i < commands.length; i++) {\n        if (this._handlers[shortcuts.getHash(commands[i])]) {\n          delete this._handlers[shortcuts.getHash(commands[i])];\n        }\n      }\n    },\n    bindAll: function bindAll(map) {\n      for (var i in map) {\n        this.bind(i, map[i]);\n      }\n    },\n    initKeys: function initKeys() {\n      if (!this._handlers) this._handlers = {};\n\n      if (this.keys) {\n        this.bindAll(this.keys);\n      }\n    }\n  };\n};","module.exports = function (gantt) {\n  gantt.$keyboardNavigation.shortcuts = {\n    createCommand: function createCommand() {\n      return {\n        modifiers: {\n          \"shift\": false,\n          \"alt\": false,\n          \"ctrl\": false,\n          \"meta\": false\n        },\n        keyCode: null\n      };\n    },\n    parse: function parse(shortcut) {\n      var commands = [];\n      var expr = this.getExpressions(this.trim(shortcut));\n\n      for (var i = 0; i < expr.length; i++) {\n        var words = this.getWords(expr[i]);\n        var command = this.createCommand();\n\n        for (var j = 0; j < words.length; j++) {\n          if (this.commandKeys[words[j]]) {\n            command.modifiers[words[j]] = true;\n          } else if (this.specialKeys[words[j]]) {\n            command.keyCode = this.specialKeys[words[j]];\n          } else {\n            command.keyCode = words[j].charCodeAt(0);\n          }\n        }\n\n        commands.push(command);\n      }\n\n      return commands;\n    },\n    getCommandFromEvent: function getCommandFromEvent(domEvent) {\n      var command = this.createCommand();\n      command.modifiers.shift = !!domEvent.shiftKey;\n      command.modifiers.alt = !!domEvent.altKey;\n      command.modifiers.ctrl = !!domEvent.ctrlKey;\n      command.modifiers.meta = !!domEvent.metaKey;\n      command.keyCode = domEvent.which || domEvent.keyCode;\n\n      if (command.keyCode >= 96 && command.keyCode <= 105) {\n        // numpad keys 96-105 -> 48-57\n        command.keyCode -= 48; //convert numpad  number code to regular number code\n      }\n\n      var printableKey = String.fromCharCode(command.keyCode);\n\n      if (printableKey) {\n        command.keyCode = printableKey.toLowerCase().charCodeAt(0);\n      }\n\n      return command;\n    },\n    getHashFromEvent: function getHashFromEvent(domEvent) {\n      return this.getHash(this.getCommandFromEvent(domEvent));\n    },\n    getHash: function getHash(command) {\n      var parts = [];\n\n      for (var i in command.modifiers) {\n        if (command.modifiers[i]) {\n          parts.push(i);\n        }\n      }\n\n      parts.push(command.keyCode);\n      return parts.join(this.junctionChar);\n    },\n    getExpressions: function getExpressions(shortcut) {\n      return shortcut.split(this.junctionChar);\n    },\n    getWords: function getWords(term) {\n      return term.split(this.combinationChar);\n    },\n    trim: function trim(shortcut) {\n      return shortcut.replace(/\\s/g, \"\");\n    },\n    junctionChar: \",\",\n    combinationChar: \"+\",\n    commandKeys: {\n      \"shift\": 16,\n      \"alt\": 18,\n      \"ctrl\": 17,\n      \"meta\": true\n    },\n    specialKeys: {\n      \"backspace\": 8,\n      \"tab\": 9,\n      \"enter\": 13,\n      \"esc\": 27,\n      \"space\": 32,\n      \"up\": 38,\n      \"down\": 40,\n      \"left\": 37,\n      \"right\": 39,\n      \"home\": 36,\n      \"end\": 35,\n      \"pageup\": 33,\n      \"pagedown\": 34,\n      \"delete\": 46,\n      \"insert\": 45,\n      \"plus\": 107,\n      \"f1\": 112,\n      \"f2\": 113,\n      \"f3\": 114,\n      \"f4\": 115,\n      \"f5\": 116,\n      \"f6\": 117,\n      \"f7\": 118,\n      \"f8\": 119,\n      \"f9\": 120,\n      \"f10\": 121,\n      \"f11\": 122,\n      \"f12\": 123\n    }\n  };\n};","module.exports = function (gantt) {\n  var eventable = require(\"../utils/eventable\");\n\n  function setupKeyNav(gantt) {\n    gantt.config.keyboard_navigation = true;\n    gantt.config.keyboard_navigation_cells = false;\n    gantt.$keyboardNavigation = {};\n\n    gantt._compose = function () {\n      var parts = Array.prototype.slice.call(arguments, 0);\n      var res = {};\n\n      for (var i = 0; i < parts.length; i++) {\n        var obj = parts[i];\n\n        if (typeof obj == \"function\") {\n          obj = new obj();\n        }\n\n        for (var p in obj) {\n          res[p] = obj[p];\n        }\n      }\n\n      return res;\n    };\n\n    require(\"./keyboard_navigation/common/keyboard_shortcuts\")(gantt);\n\n    require(\"./keyboard_navigation/common/eventhandler\")(gantt);\n\n    require(\"./keyboard_navigation/common/trap_modal_focus\")(gantt);\n\n    require(\"./keyboard_navigation/elements/gantt_node\")(gantt);\n\n    require(\"./keyboard_navigation/elements/nav_node\")(gantt);\n\n    require(\"./keyboard_navigation/elements/header_cell\")(gantt);\n\n    require(\"./keyboard_navigation/elements/task_row\")(gantt);\n\n    require(\"./keyboard_navigation/elements/task_cell\")(gantt);\n\n    require(\"./keyboard_navigation/modals\")(gantt);\n\n    require(\"./keyboard_navigation/core\")(gantt);\n\n    var domHelpers = require(\"../core/ui/utils/dom_helpers\");\n\n    (function () {\n      var dispatcher = gantt.$keyboardNavigation.dispatcher;\n\n      dispatcher.isTaskFocused = function (id) {\n        var node = dispatcher.activeNode;\n\n        if (node instanceof gantt.$keyboardNavigation.TaskRow || node instanceof gantt.$keyboardNavigation.TaskCell) {\n          if (node.taskId == id) {\n            return true;\n          }\n        }\n\n        return false;\n      };\n\n      var keyDownHandler = function keyDownHandler(e) {\n        if (!gantt.config.keyboard_navigation) return; // GS-734 & GS-1078: we don't need keyboard navigation inside inline editors\n\n        if (!gantt.config.keyboard_navigation_cells && isInlineEditorCell(e)) return;\n\n        if (isNoKeyboardNavigationElement(e) || isLightboxElement(e)) {\n          return;\n        }\n\n        return dispatcher.keyDownHandler(e);\n      };\n\n      var focusHandler = function focusHandler(e) {\n        if (dispatcher.$preventDefault) {\n          e.preventDefault();\n          gantt.$container.blur();\n          return false; // do nothing if key-nav focus is already planned\n        } else if (!dispatcher.awaitsFocus()) {\n          // otherwise - re-focus key-nav element on gantt focus\n          dispatcher.focusGlobalNode();\n        }\n      };\n\n      var reFocusActiveNode = function reFocusActiveNode() {\n        if (!dispatcher.isEnabled()) return;\n        var outsideGantt = !domHelpers.isChildOf(document.activeElement, gantt.$container) && document.activeElement.localName != \"body\";\n        var activeNode = dispatcher.getActiveNode();\n        if (!activeNode || outsideGantt) return;\n        var domElement = activeNode.getNode();\n        var top, left;\n\n        if (domElement && domElement.parentNode) {\n          top = domElement.parentNode.scrollTop;\n          left = domElement.parentNode.scrollLeft;\n        }\n\n        activeNode.focus(true);\n\n        if (domElement && domElement.parentNode) {\n          domElement.parentNode.scrollTop = top;\n          domElement.parentNode.scrollLeft = left;\n        }\n      };\n\n      gantt.attachEvent(\"onDataRender\", function () {\n        if (!gantt.config.keyboard_navigation) return;\n        reFocusActiveNode();\n      });\n      gantt.attachEvent(\"onGanttRender\", function () {\n        gantt.eventRemove(gantt.$root, \"keydown\", keyDownHandler);\n        gantt.eventRemove(gantt.$container, \"focus\", focusHandler);\n        gantt.eventRemove(gantt.$container, \"mousedown\", mousedownHandler);\n\n        if (gantt.config.keyboard_navigation) {\n          gantt.event(gantt.$root, \"keydown\", keyDownHandler);\n          gantt.event(gantt.$container, \"focus\", focusHandler);\n          gantt.event(gantt.$container, \"mousedown\", mousedownHandler);\n          gantt.$container.setAttribute(\"tabindex\", \"0\");\n        } else {\n          gantt.$container.removeAttribute(\"tabindex\");\n        }\n      });\n\n      function getTaskNodeConstructor() {\n        if (gantt.config.keyboard_navigation_cells) {\n          return gantt.$keyboardNavigation.TaskCell;\n        } else {\n          return gantt.$keyboardNavigation.TaskRow;\n        }\n      }\n\n      function isInlineEditorCell(e) {\n        return !!domHelpers.closest(e.target, \".gantt_grid_editor_placeholder\");\n      } // GS-1445. Cancel keyboard navigation within custom elements\n\n\n      function isNoKeyboardNavigationElement(e) {\n        return !!domHelpers.closest(e.target, \".no_keyboard_navigation\");\n      }\n\n      function isLightboxElement(e) {\n        return !!domHelpers.closest(e.target, \".gantt_cal_light\");\n      }\n\n      function mousedownHandler(e) {\n        if (!gantt.config.keyboard_navigation) return true; // GS-734 & GS-1078: we don't need keyboard navigation inside inline editors\n\n        if (!gantt.config.keyboard_navigation_cells && isInlineEditorCell(e)) return true;\n\n        if (isNoKeyboardNavigationElement(e)) {\n          return;\n        }\n\n        var focusNode;\n        var locateTask = dispatcher.fromDomElement(e);\n\n        if (locateTask) {\n          //var node = getTaskNodeConstructor();\n          if (dispatcher.activeNode instanceof gantt.$keyboardNavigation.TaskCell && domHelpers.isChildOf(e.target, gantt.$task)) {\n            locateTask = new gantt.$keyboardNavigation.TaskCell(locateTask.taskId, dispatcher.activeNode.columnIndex);\n          }\n\n          focusNode = locateTask;\n        }\n\n        if (focusNode) {\n          if (!dispatcher.isEnabled()) {\n            dispatcher.activeNode = focusNode;\n          } else {\n            dispatcher.delay(function () {\n              dispatcher.setActiveNode(focusNode);\n            });\n          }\n        } else {\n          // empty click should drop focus from gantt, insert of reselecting default node\n          dispatcher.$preventDefault = true;\n          setTimeout(function () {\n            dispatcher.$preventDefault = false;\n          }, 300);\n        }\n      }\n\n      var onReady = gantt.attachEvent(\"onGanttReady\", function () {\n        // restore focus on repainted tasks\n        gantt.detachEvent(onReady);\n        gantt.$data.tasksStore.attachEvent(\"onStoreUpdated\", function (id) {\n          if (gantt.config.keyboard_navigation && dispatcher.isEnabled()) {\n            var currentNode = dispatcher.getActiveNode();\n\n            if (currentNode && currentNode.taskId == id) {\n              reFocusActiveNode();\n            }\n          }\n        });\n\n        if (gantt._smart_render) {\n          var updateRender = gantt._smart_render._redrawTasks;\n\n          gantt._smart_render._redrawTasks = function (renderers, items) {\n            if (gantt.config.keyboard_navigation && dispatcher.isEnabled()) {\n              var currentNode = dispatcher.getActiveNode();\n\n              if (currentNode && currentNode.taskId !== undefined) {\n                var focusedItemVisible = false;\n\n                for (var i = 0; i < items.length; i++) {\n                  if (items[i].id == currentNode.taskId && items[i].start_date) {\n                    focusedItemVisible = true;\n                    break;\n                  }\n                }\n\n                if (!focusedItemVisible) {\n                  items.push(gantt.getTask(currentNode.taskId));\n                }\n              }\n            }\n\n            var res = updateRender.apply(this, arguments);\n            return res;\n          };\n        }\n      });\n      var createdTaskId = null;\n      var keepFocusOnNewTask = false;\n      gantt.attachEvent(\"onTaskCreated\", function (task) {\n        createdTaskId = task.id;\n        return true;\n      });\n      gantt.attachEvent(\"onAfterTaskAdd\", function (id, item) {\n        if (!gantt.config.keyboard_navigation) return true;\n\n        if (dispatcher.isEnabled()) {\n          // GS-1394. After adding a new task, the focus shouldn't change to the placeholder task\n          if (id == createdTaskId) {\n            keepFocusOnNewTask = true;\n            setTimeout(function () {\n              keepFocusOnNewTask = false;\n              createdTaskId = null;\n            });\n          }\n\n          if (keepFocusOnNewTask && item.type == gantt.config.types.placeholder) {\n            return;\n          }\n\n          var columnIndex = 0;\n          var node = dispatcher.activeNode;\n\n          if (node instanceof gantt.$keyboardNavigation.TaskCell) {\n            columnIndex = node.columnIndex;\n          }\n\n          var nodeConstructor = getTaskNodeConstructor();\n\n          if (item.type == gantt.config.types.placeholder && gantt.config.placeholder_task.focusOnCreate === false) {// do not focus on the placeholder task\n          } else {\n            dispatcher.setActiveNode(new nodeConstructor(id, columnIndex));\n          }\n        }\n      });\n      gantt.attachEvent(\"onTaskIdChange\", function (oldId, newId) {\n        if (!gantt.config.keyboard_navigation) return true;\n        var node = dispatcher.activeNode;\n\n        if (dispatcher.isTaskFocused(oldId)) {\n          node.taskId = newId;\n        }\n\n        return true;\n      });\n      var interval = setInterval(function () {\n        if (!gantt.config.keyboard_navigation) return;\n\n        if (!dispatcher.isEnabled()) {\n          dispatcher.enable();\n        }\n\n        return;\n      }, 500);\n      gantt.attachEvent(\"onDestroy\", function () {\n        clearInterval(interval);\n      });\n\n      function getScopeName(obj) {\n        if (obj instanceof gantt.$keyboardNavigation.GanttNode) {\n          return \"gantt\";\n        } else if (obj instanceof gantt.$keyboardNavigation.HeaderCell) {\n          return \"headerCell\";\n        } else if (obj instanceof gantt.$keyboardNavigation.TaskRow) {\n          return \"taskRow\";\n        } else if (obj instanceof gantt.$keyboardNavigation.TaskCell) {\n          return \"taskCell\";\n        }\n\n        return null;\n      }\n\n      function getScope(mode) {\n        var scopes = {\n          \"gantt\": gantt.$keyboardNavigation.GanttNode,\n          \"headerCell\": gantt.$keyboardNavigation.HeaderCell,\n          \"taskRow\": gantt.$keyboardNavigation.TaskRow,\n          \"taskCell\": gantt.$keyboardNavigation.TaskCell\n        };\n        return scopes[mode] || scopes.gantt;\n      }\n\n      function findVisibleColumnIndex(columnName) {\n        var columns = gantt.getGridColumns();\n\n        for (var i = 0; i < columns.length; i++) {\n          if (columns[i].name == columnName) {\n            return i;\n          }\n        }\n\n        return 0;\n      }\n\n      var keyNavFacade = {};\n      eventable(keyNavFacade);\n      gantt.mixin(keyNavFacade, {\n        addShortcut: function addShortcut(shortcut, handler, scope) {\n          var scopeObject = getScope(scope);\n\n          if (scopeObject) {\n            scopeObject.prototype.bind(shortcut, handler);\n          }\n        },\n        getShortcutHandler: function getShortcutHandler(shortcut, scope) {\n          var commands = gantt.$keyboardNavigation.shortcuts.parse(shortcut);\n\n          if (commands.length) {\n            return keyNavFacade.getCommandHandler(commands[0], scope);\n          }\n        },\n        getCommandHandler: function getCommandHandler(command, scope) {\n          var scopeObject = getScope(scope);\n\n          if (scopeObject) {\n            if (command) {\n              return scopeObject.prototype.findHandler(command);\n            }\n          }\n        },\n        removeShortcut: function removeShortcut(shortcut, scope) {\n          var scopeObject = getScope(scope);\n\n          if (scopeObject) {\n            scopeObject.prototype.unbind(shortcut);\n          }\n        },\n        focus: function focus(config) {\n          var type = config ? config.type : null;\n          var constructor = getScope(type);\n          var node;\n\n          switch (type) {\n            case \"taskCell\":\n              node = new constructor(config.id, findVisibleColumnIndex(config.column));\n              break;\n\n            case \"taskRow\":\n              node = new constructor(config.id);\n              break;\n\n            case \"headerCell\":\n              node = new constructor(findVisibleColumnIndex(config.column));\n              break;\n\n            default:\n              break;\n          }\n\n          dispatcher.delay(function () {\n            if (node) {\n              dispatcher.setActiveNode(node);\n            } else {\n              dispatcher.enable();\n\n              if (!dispatcher.getActiveNode()) {\n                dispatcher.setDefaultNode();\n              } else {\n                if (!dispatcher.awaitsFocus()) {\n                  dispatcher.enable();\n                }\n              }\n            }\n          });\n        },\n        getActiveNode: function getActiveNode() {\n          if (dispatcher.isEnabled()) {\n            var node = dispatcher.getActiveNode();\n            var scope = getScopeName(node);\n            var columns = gantt.getGridColumns();\n\n            switch (scope) {\n              case \"taskCell\":\n                return {\n                  type: \"taskCell\",\n                  id: node.taskId,\n                  column: columns[node.columnIndex].name\n                };\n\n              case \"taskRow\":\n                return {\n                  type: \"taskRow\",\n                  id: node.taskId\n                };\n\n              case \"headerCell\":\n                return {\n                  type: \"headerCell\",\n                  column: columns[node.index].name\n                };\n            }\n          }\n\n          return null;\n        }\n      });\n      gantt.$keyboardNavigation.facade = keyNavFacade;\n      gantt.ext.keyboardNavigation = keyNavFacade;\n\n      gantt.focus = function () {\n        keyNavFacade.focus();\n      };\n\n      gantt.addShortcut = keyNavFacade.addShortcut;\n      gantt.getShortcutHandler = keyNavFacade.getShortcutHandler;\n      gantt.removeShortcut = keyNavFacade.removeShortcut;\n    })();\n  }\n\n  setupKeyNav(gantt);\n};","export default function(gantt: any){\r\n\r\ninterface IBody extends HTMLElement {\r\n\tmsRequestFullscreen?: () => void;\r\n\tmozRequestFullScreen?: () => void;\r\n\twebkitRequestFullscreen?: (ALLOW_KEYBOARD_INPUT: any) => void;\r\n}\r\n\r\n\r\ninterface IConsole extends Console {\r\n\twarning?: (str: string) => void;\r\n}\r\n\r\ninterface IDocument extends Document {\r\n\tfullscreenElement: Element;\r\n\tmozFullScreenElement?: Element;\r\n\twebkitFullscreenElement?: Element;\r\n\tmsFullscreenElement?: Element;\r\n\twebkitFullscreenEnabled?: boolean;\r\n\tmozFullScreenEnabled?: boolean;\r\n\tmsFullscreenEnabled?: boolean;\r\n\tmsExitFullscreen?: () => void;\r\n\tmozCancelFullScreen?: () => void;\r\n\twebkitExitFullscreen?: () => void;\r\n}\r\n\r\ninterface IElement extends Element {\r\n\tALLOW_KEYBOARD_INPUT?: boolean;\r\n}\r\n\r\ninterface IElementSizes extends ISizes {\r\n\tmodified: boolean;\r\n}\r\n\r\ninterface ISizes {\r\n\twidth: null | string;\r\n\theight: null | string;\r\n\ttop: null | string;\r\n\tleft: null | string;\r\n\tposition: null | string;\r\n\tzIndex: null | number;\r\n}\r\n\r\nfunction isExpanded() {\r\n\tconst element = ((document as IDocument).fullscreenElement ||\r\n\t\t(document as IDocument).mozFullScreenElement ||\r\n\t\t(document as IDocument).webkitFullscreenElement ||\r\n\t\t(document as IDocument).msFullscreenElement);\r\n\treturn !!(element && element === document.body);\r\n}\r\n\r\nfunction isFullscreenAvailable() {\r\n\ttry {\r\n\t\treturn (document as IDocument).fullscreenEnabled ||\r\n\t\t\t(document as IDocument).webkitFullscreenEnabled ||\r\n\t\t\t(document as IDocument).mozFullScreenEnabled ||\r\n\t\t\t(document as IDocument).msFullscreenEnabled;\r\n\t} catch (e) {\r\n\t\tconsole.error(\"Fullscreen is not available:\", e); // tslint:disable-line:no-console\r\n\t}\r\n}\r\n\r\nconst state = gantt.$services.getService(\"state\");\r\nstate.registerProvider(\"fullscreen\", () => {\r\n\tif (isFullscreenAvailable()){\r\n\t\treturn { fullscreen: isExpanded() };\r\n\t} else {\r\n\t\treturn undefined;\r\n\t}\r\n});\r\n\r\nlet backupBodyPadding = {\r\n\toverflow: null,\r\n\tpadding: null,\r\n\tpaddingTop: null,\r\n\tpaddingRight: null,\r\n\tpaddingBottom: null,\r\n\tpaddingLeft: null\r\n};\r\n\r\nconst backupElementSizes: IElementSizes = {\r\n\twidth: null,\r\n\theight: null,\r\n\ttop: null,\r\n\tleft: null,\r\n\tposition: null,\r\n\tzIndex: null,\r\n\tmodified: false\r\n};\r\n\r\nlet backupPositioning = null;\r\nfunction resetParentPositioning(root){\r\n\tlet parent = root.parentNode;\r\n\tconst positions = [];\r\n\twhile(parent && parent.style){\r\n\t\tpositions.push({\r\n\t\t\telement: parent,\r\n\t\t\toriginalPositioning: parent.style.position\r\n\t\t});\r\n\t\tparent.style.position = \"static\";\r\n\t\tparent = parent.parentNode;\r\n\t}\r\n\treturn positions;\r\n}\r\n\r\nfunction restoreParentPositioning(positions: any[]){\r\n\tpositions.forEach(record => {\r\n\t\trecord.element.style.position = record.originalPositioning;\r\n\t});\r\n}\r\n\r\n// expand gantt root element to fullscreen automatically\r\nfunction setFullScreenSizes() {\r\n\tconst root = gantt.ext.fullscreen.getFullscreenElement();\r\n\tconst body = document.body;\r\n\tupdateSizes(root.style, backupElementSizes);\r\n\tbackupBodyPadding = {\r\n\t\toverflow: body.style.overflow,\r\n\t\tpadding: body.style.padding ? body.style.padding : null,\r\n\t\tpaddingTop: body.style.paddingTop ? body.style.paddingTop : null,\r\n\t\tpaddingRight: body.style.paddingRight ? body.style.paddingRight : null,\r\n\t\tpaddingBottom: body.style.paddingBottom ? body.style.paddingBottom : null,\r\n\t\tpaddingLeft: body.style.paddingLeft ? body.style.paddingLeft : null\r\n\t};\r\n\r\n\tif (body.style.padding) {\r\n\t\tbody.style.padding = \"0\";\r\n\t}\r\n\tif (body.style.paddingTop) {\r\n\t\tbody.style.paddingTop = \"0\";\r\n\t}\r\n\tif (body.style.paddingRight) {\r\n\t\tbody.style.paddingRight = \"0\";\r\n\t}\r\n\tif (body.style.paddingBottom) {\r\n\t\tbody.style.paddingBottom = \"0\";\r\n\t}\r\n\tif (body.style.paddingLeft) {\r\n\t\tbody.style.paddingLeft = \"0\";\r\n\t}\r\n\r\n\tbody.style.overflow = \"hidden\";\r\n\r\n\troot.style.width = \"100vw\";\r\n\troot.style.height = \"100vh\";\r\n\troot.style.top = \"0px\";\r\n\troot.style.left = \"0px\";\r\n\troot.style.position = \"absolute\";\r\n\troot.style.zIndex = 1;\r\n\tbackupElementSizes.modified = true;\r\n\tbackupPositioning = resetParentPositioning(root);\r\n}\r\n\r\nfunction restoreSizes() {\r\n\tconst root = gantt.ext.fullscreen.getFullscreenElement();\r\n\tconst body = document.body;\r\n\tif (backupElementSizes.modified) {\r\n\t\tif (backupBodyPadding.padding) {\r\n\t\t\tbody.style.padding = backupBodyPadding.padding;\r\n\t\t}\r\n\t\tif (backupBodyPadding.paddingTop) {\r\n\t\t\tbody.style.paddingTop = backupBodyPadding.paddingTop;\r\n\t\t}\r\n\t\tif (backupBodyPadding.paddingRight) {\r\n\t\t\tbody.style.paddingRight = backupBodyPadding.paddingRight;\r\n\t\t}\r\n\t\tif (backupBodyPadding.paddingBottom) {\r\n\t\t\tbody.style.paddingBottom = backupBodyPadding.paddingBottom;\r\n\t\t}\r\n\t\tif (backupBodyPadding.paddingLeft) {\r\n\t\t\tbody.style.paddingLeft = backupBodyPadding.paddingLeft;\r\n\t\t}\r\n\r\n\t\tbody.style.overflow = backupBodyPadding.overflow;\r\n\t\tbackupBodyPadding = {\r\n\t\t\toverflow: null,\r\n\t\t\tpadding: null,\r\n\t\t\tpaddingTop: null,\r\n\t\t\tpaddingRight: null,\r\n\t\t\tpaddingBottom: null,\r\n\t\t\tpaddingLeft: null\r\n\t\t};\r\n\t\tupdateSizes(backupElementSizes, root.style);\r\n\t\tbackupElementSizes.modified = false;\r\n\t}\r\n\trestoreParentPositioning(backupPositioning);\r\n\tbackupPositioning = null;\r\n}\r\n\r\nfunction updateSizes(source: ISizes, target: ISizes) {\r\n\ttarget.width = source.width;\r\n\ttarget.height = source.height;\r\n\ttarget.top = source.top;\r\n\ttarget.left = source.left;\r\n\ttarget.position = source.position;\r\n\ttarget.zIndex = source.zIndex;\r\n}\r\n\r\nfunction addDOMEvents() {\r\n\tgantt.event(document, \"webkitfullscreenchange\", onFullScreenChange);\r\n\tgantt.event(document, \"mozfullscreenchange\", onFullScreenChange);\r\n\tgantt.event(document, \"MSFullscreenChange\", onFullScreenChange);\r\n\t// For IE on Win 10\r\n\tgantt.event(document, \"fullscreenChange\", onFullScreenChange);\r\n\tgantt.event(document, \"fullscreenchange\", onFullScreenChange);\r\n}\r\n\r\nlet expandGantt = false;\r\nfunction onFullScreenChange() {\r\n\tif (!gantt.$container) {\r\n\t\t// do nothing if gantt is not yet initialized\r\n\t\treturn;\r\n\t}\r\n\tlet event: \"onExpand\" | \"onCollapse\";\r\n\tconst isBodyExpanded = isExpanded();\r\n\r\n\tif (isBodyExpanded) {\r\n\t\tif (expandGantt) {\r\n\t\t\tevent = \"onExpand\";\r\n\t\t\tsetFullScreenSizes();\r\n\t\t}\r\n\t} else if (expandGantt) {\r\n\t\texpandGantt = false;\r\n\t\tevent = \"onCollapse\";\r\n\t\trestoreSizes();\r\n\t}\r\n\tsetTimeout(() => {\r\n\t\tgantt.render();\r\n\t});\r\n\tsetTimeout(() => {\r\n\t\tgantt.callEvent(event, [gantt.ext.fullscreen.getFullscreenElement()]);\r\n\t});\r\n}\r\n\r\nfunction cantFullscreen() {\r\n\tif (!gantt.$container) { // check is gantt initialized or not\r\n\t\treturn true;\r\n\t}\r\n\tif (!gantt.ext.fullscreen.getFullscreenElement()) {\r\n\t\treturn true;\r\n\t}\r\n\tif (!isFullscreenAvailable()) {\r\n\t\t// tslint:disable-next-line: no-console\r\n\t\tconst method = (console as IConsole).warning || console.log;\r\n\t\tmethod(\"The `fullscreen` feature not being allowed, or full-screen mode not being supported\");\r\n\t\treturn true;\r\n\t}\r\n\treturn false;\r\n}\r\n\r\ngantt.ext.fullscreen = {\r\n\texpand(): void {\r\n\t\tif (cantFullscreen()) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif (isExpanded()) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif (!gantt.callEvent(\"onBeforeExpand\", [this.getFullscreenElement()])) {\r\n\t\t\treturn;\r\n\t\t}\r\n\t\texpandGantt = true;\r\n\r\n\t\t// we switch body to fullscreen and then expand fullscreen element to viewport\r\n\t\t// we do it to correct display common elements: lightboxes, tooltip etc.\r\n\t\tconst element = document.body as IBody;\r\n\t\tconst requestArguments = element.webkitRequestFullscreen ?\r\n\t\t\t[(Element as unknown as IElement).ALLOW_KEYBOARD_INPUT] : [];\r\n\r\n\t\tconst requestFullscreen = element.msRequestFullscreen ||\r\n\t\t\telement.mozRequestFullScreen ||\r\n\t\t\telement.webkitRequestFullscreen ||\r\n\t\t\telement.requestFullscreen;\r\n\r\n\t\tif (requestFullscreen) {\r\n\t\t\trequestFullscreen.apply(element, requestArguments);\r\n\t\t}\r\n\t},\r\n\tcollapse(): void {\r\n\t\tif (cantFullscreen()) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif (!isExpanded()) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif (!gantt.callEvent(\"onBeforeCollapse\", [this.getFullscreenElement()])) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tconst requestExitFullscreen = (document as IDocument).msExitFullscreen ||\r\n\t\t\t(document as IDocument).mozCancelFullScreen ||\r\n\t\t\t(document as IDocument).webkitExitFullscreen ||\r\n\t\t\t(document as IDocument).exitFullscreen;\r\n\r\n\t\tif (requestExitFullscreen) {\r\n\t\t\trequestExitFullscreen.apply(document);\r\n\t\t}\r\n\t},\r\n\ttoggle(): void {\r\n\t\tif (cantFullscreen()) {\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tif (!isExpanded()) {\r\n\t\t\tthis.expand();\r\n\t\t} else {\r\n\t\t\tthis.collapse();\r\n\t\t}\r\n\r\n\t},\r\n\tgetFullscreenElement(): HTMLElement {\r\n\t\treturn gantt.$root;\r\n\t},\r\n};\r\n\r\ngantt.expand = function() {\r\n\tgantt.ext.fullscreen.expand();\r\n};\r\n\r\ngantt.collapse = function(){\r\n\tgantt.ext.fullscreen.collapse();\r\n};\r\n\r\ngantt.attachEvent(\"onGanttReady\", addDOMEvents);\r\n\r\n}","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n'use strict';\n\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nvar stringifyPrimitive = function stringifyPrimitive(v) {\n  switch (_typeof(v)) {\n    case 'string':\n      return v;\n\n    case 'boolean':\n      return v ? 'true' : 'false';\n\n    case 'number':\n      return isFinite(v) ? v : '';\n\n    default:\n      return '';\n  }\n};\n\nmodule.exports = function (obj, sep, eq, name) {\n  sep = sep || '&';\n  eq = eq || '=';\n\n  if (obj === null) {\n    obj = undefined;\n  }\n\n  if (_typeof(obj) === 'object') {\n    return map(objectKeys(obj), function (k) {\n      var ks = encodeURIComponent(stringifyPrimitive(k)) + eq;\n\n      if (isArray(obj[k])) {\n        return map(obj[k], function (v) {\n          return ks + encodeURIComponent(stringifyPrimitive(v));\n        }).join(sep);\n      } else {\n        return ks + encodeURIComponent(stringifyPrimitive(obj[k]));\n      }\n    }).join(sep);\n  }\n\n  if (!name) return '';\n  return encodeURIComponent(stringifyPrimitive(name)) + eq + encodeURIComponent(stringifyPrimitive(obj));\n};\n\nvar isArray = Array.isArray || function (xs) {\n  return Object.prototype.toString.call(xs) === '[object Array]';\n};\n\nfunction map(xs, f) {\n  if (xs.map) return xs.map(f);\n  var res = [];\n\n  for (var i = 0; i < xs.length; i++) {\n    res.push(f(xs[i], i));\n  }\n\n  return res;\n}\n\nvar objectKeys = Object.keys || function (obj) {\n  var res = [];\n\n  for (var key in obj) {\n    if (Object.prototype.hasOwnProperty.call(obj, key)) res.push(key);\n  }\n\n  return res;\n};","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n'use strict'; // If obj.hasOwnProperty has been overridden, then calling\n// obj.hasOwnProperty(prop) will break.\n// See: https://github.com/joyent/node/issues/1707\n\nfunction hasOwnProperty(obj, prop) {\n  return Object.prototype.hasOwnProperty.call(obj, prop);\n}\n\nmodule.exports = function (qs, sep, eq, options) {\n  sep = sep || '&';\n  eq = eq || '=';\n  var obj = {};\n\n  if (typeof qs !== 'string' || qs.length === 0) {\n    return obj;\n  }\n\n  var regexp = /\\+/g;\n  qs = qs.split(sep);\n  var maxKeys = 1000;\n\n  if (options && typeof options.maxKeys === 'number') {\n    maxKeys = options.maxKeys;\n  }\n\n  var len = qs.length; // maxKeys <= 0 means that we should not limit keys count\n\n  if (maxKeys > 0 && len > maxKeys) {\n    len = maxKeys;\n  }\n\n  for (var i = 0; i < len; ++i) {\n    var x = qs[i].replace(regexp, '%20'),\n        idx = x.indexOf(eq),\n        kstr,\n        vstr,\n        k,\n        v;\n\n    if (idx >= 0) {\n      kstr = x.substr(0, idx);\n      vstr = x.substr(idx + 1);\n    } else {\n      kstr = x;\n      vstr = '';\n    }\n\n    k = decodeURIComponent(kstr);\n    v = decodeURIComponent(vstr);\n\n    if (!hasOwnProperty(obj, k)) {\n      obj[k] = v;\n    } else if (isArray(obj[k])) {\n      obj[k].push(v);\n    } else {\n      obj[k] = [obj[k], v];\n    }\n  }\n\n  return obj;\n};\n\nvar isArray = Array.isArray || function (xs) {\n  return Object.prototype.toString.call(xs) === '[object Array]';\n};","'use strict';\n\nexports.decode = exports.parse = require('./decode');\nexports.encode = exports.stringify = require('./encode');","'use strict';\n\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nmodule.exports = {\n  isString: function isString(arg) {\n    return typeof arg === 'string';\n  },\n  isObject: function isObject(arg) {\n    return _typeof(arg) === 'object' && arg !== null;\n  },\n  isNull: function isNull(arg) {\n    return arg === null;\n  },\n  isNullOrUndefined: function isNullOrUndefined(arg) {\n    return arg == null;\n  }\n};","module.exports = function (module) {\n  if (!module.webpackPolyfill) {\n    module.deprecate = function () {};\n\n    module.paths = []; // module.parent = undefined by default\n\n    if (!module.children) module.children = [];\n    Object.defineProperty(module, \"loaded\", {\n      enumerable: true,\n      get: function get() {\n        return module.l;\n      }\n    });\n    Object.defineProperty(module, \"id\", {\n      enumerable: true,\n      get: function get() {\n        return module.i;\n      }\n    });\n    module.webpackPolyfill = 1;\n  }\n\n  return module;\n};","function _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\n/*! https://mths.be/punycode v1.4.1 by @mathias */\n;\n\n(function (root) {\n  /** Detect free variables */\n  var freeExports = (typeof exports === \"undefined\" ? \"undefined\" : _typeof(exports)) == 'object' && exports && !exports.nodeType && exports;\n  var freeModule = (typeof module === \"undefined\" ? \"undefined\" : _typeof(module)) == 'object' && module && !module.nodeType && module;\n  var freeGlobal = (typeof global === \"undefined\" ? \"undefined\" : _typeof(global)) == 'object' && global;\n\n  if (freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal || freeGlobal.self === freeGlobal) {\n    root = freeGlobal;\n  }\n  /**\n   * The `punycode` object.\n   * @name punycode\n   * @type Object\n   */\n\n\n  var punycode,\n\n  /** Highest positive signed 32-bit float value */\n  maxInt = 2147483647,\n      // aka. 0x7FFFFFFF or 2^31-1\n\n  /** Bootstring parameters */\n  base = 36,\n      tMin = 1,\n      tMax = 26,\n      skew = 38,\n      damp = 700,\n      initialBias = 72,\n      initialN = 128,\n      // 0x80\n  delimiter = '-',\n      // '\\x2D'\n\n  /** Regular expressions */\n  regexPunycode = /^xn--/,\n      regexNonASCII = /[^\\x20-\\x7E]/,\n      // unprintable ASCII chars + non-ASCII chars\n  regexSeparators = /[\\x2E\\u3002\\uFF0E\\uFF61]/g,\n      // RFC 3490 separators\n\n  /** Error messages */\n  errors = {\n    'overflow': 'Overflow: input needs wider integers to process',\n    'not-basic': 'Illegal input >= 0x80 (not a basic code point)',\n    'invalid-input': 'Invalid input'\n  },\n\n  /** Convenience shortcuts */\n  baseMinusTMin = base - tMin,\n      floor = Math.floor,\n      stringFromCharCode = String.fromCharCode,\n\n  /** Temporary variable */\n  key;\n  /*--------------------------------------------------------------------------*/\n\n  /**\n   * A generic error utility function.\n   * @private\n   * @param {String} type The error type.\n   * @returns {Error} Throws a `RangeError` with the applicable error message.\n   */\n\n  function error(type) {\n    throw new RangeError(errors[type]);\n  }\n  /**\n   * A generic `Array#map` utility function.\n   * @private\n   * @param {Array} array The array to iterate over.\n   * @param {Function} callback The function that gets called for every array\n   * item.\n   * @returns {Array} A new array of values returned by the callback function.\n   */\n\n\n  function map(array, fn) {\n    var length = array.length;\n    var result = [];\n\n    while (length--) {\n      result[length] = fn(array[length]);\n    }\n\n    return result;\n  }\n  /**\n   * A simple `Array#map`-like wrapper to work with domain name strings or email\n   * addresses.\n   * @private\n   * @param {String} domain The domain name or email address.\n   * @param {Function} callback The function that gets called for every\n   * character.\n   * @returns {Array} A new string of characters returned by the callback\n   * function.\n   */\n\n\n  function mapDomain(string, fn) {\n    var parts = string.split('@');\n    var result = '';\n\n    if (parts.length > 1) {\n      // In email addresses, only the domain name should be punycoded. Leave\n      // the local part (i.e. everything up to `@`) intact.\n      result = parts[0] + '@';\n      string = parts[1];\n    } // Avoid `split(regex)` for IE8 compatibility. See #17.\n\n\n    string = string.replace(regexSeparators, '\\x2E');\n    var labels = string.split('.');\n    var encoded = map(labels, fn).join('.');\n    return result + encoded;\n  }\n  /**\n   * Creates an array containing the numeric code points of each Unicode\n   * character in the string. While JavaScript uses UCS-2 internally,\n   * this function will convert a pair of surrogate halves (each of which\n   * UCS-2 exposes as separate characters) into a single code point,\n   * matching UTF-16.\n   * @see `punycode.ucs2.encode`\n   * @see <https://mathiasbynens.be/notes/javascript-encoding>\n   * @memberOf punycode.ucs2\n   * @name decode\n   * @param {String} string The Unicode input string (UCS-2).\n   * @returns {Array} The new array of code points.\n   */\n\n\n  function ucs2decode(string) {\n    var output = [],\n        counter = 0,\n        length = string.length,\n        value,\n        extra;\n\n    while (counter < length) {\n      value = string.charCodeAt(counter++);\n\n      if (value >= 0xD800 && value <= 0xDBFF && counter < length) {\n        // high surrogate, and there is a next character\n        extra = string.charCodeAt(counter++);\n\n        if ((extra & 0xFC00) == 0xDC00) {\n          // low surrogate\n          output.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000);\n        } else {\n          // unmatched surrogate; only append this code unit, in case the next\n          // code unit is the high surrogate of a surrogate pair\n          output.push(value);\n          counter--;\n        }\n      } else {\n        output.push(value);\n      }\n    }\n\n    return output;\n  }\n  /**\n   * Creates a string based on an array of numeric code points.\n   * @see `punycode.ucs2.decode`\n   * @memberOf punycode.ucs2\n   * @name encode\n   * @param {Array} codePoints The array of numeric code points.\n   * @returns {String} The new Unicode string (UCS-2).\n   */\n\n\n  function ucs2encode(array) {\n    return map(array, function (value) {\n      var output = '';\n\n      if (value > 0xFFFF) {\n        value -= 0x10000;\n        output += stringFromCharCode(value >>> 10 & 0x3FF | 0xD800);\n        value = 0xDC00 | value & 0x3FF;\n      }\n\n      output += stringFromCharCode(value);\n      return output;\n    }).join('');\n  }\n  /**\n   * Converts a basic code point into a digit/integer.\n   * @see `digitToBasic()`\n   * @private\n   * @param {Number} codePoint The basic numeric code point value.\n   * @returns {Number} The numeric value of a basic code point (for use in\n   * representing integers) in the range `0` to `base - 1`, or `base` if\n   * the code point does not represent a value.\n   */\n\n\n  function basicToDigit(codePoint) {\n    if (codePoint - 48 < 10) {\n      return codePoint - 22;\n    }\n\n    if (codePoint - 65 < 26) {\n      return codePoint - 65;\n    }\n\n    if (codePoint - 97 < 26) {\n      return codePoint - 97;\n    }\n\n    return base;\n  }\n  /**\n   * Converts a digit/integer into a basic code point.\n   * @see `basicToDigit()`\n   * @private\n   * @param {Number} digit The numeric value of a basic code point.\n   * @returns {Number} The basic code point whose value (when used for\n   * representing integers) is `digit`, which needs to be in the range\n   * `0` to `base - 1`. If `flag` is non-zero, the uppercase form is\n   * used; else, the lowercase form is used. The behavior is undefined\n   * if `flag` is non-zero and `digit` has no uppercase form.\n   */\n\n\n  function digitToBasic(digit, flag) {\n    //  0..25 map to ASCII a..z or A..Z\n    // 26..35 map to ASCII 0..9\n    return digit + 22 + 75 * (digit < 26) - ((flag != 0) << 5);\n  }\n  /**\n   * Bias adaptation function as per section 3.4 of RFC 3492.\n   * https://tools.ietf.org/html/rfc3492#section-3.4\n   * @private\n   */\n\n\n  function adapt(delta, numPoints, firstTime) {\n    var k = 0;\n    delta = firstTime ? floor(delta / damp) : delta >> 1;\n    delta += floor(delta / numPoints);\n\n    for (;\n    /* no initialization */\n    delta > baseMinusTMin * tMax >> 1; k += base) {\n      delta = floor(delta / baseMinusTMin);\n    }\n\n    return floor(k + (baseMinusTMin + 1) * delta / (delta + skew));\n  }\n  /**\n   * Converts a Punycode string of ASCII-only symbols to a string of Unicode\n   * symbols.\n   * @memberOf punycode\n   * @param {String} input The Punycode string of ASCII-only symbols.\n   * @returns {String} The resulting string of Unicode symbols.\n   */\n\n\n  function decode(input) {\n    // Don't use UCS-2\n    var output = [],\n        inputLength = input.length,\n        out,\n        i = 0,\n        n = initialN,\n        bias = initialBias,\n        basic,\n        j,\n        index,\n        oldi,\n        w,\n        k,\n        digit,\n        t,\n\n    /** Cached calculation results */\n    baseMinusT; // Handle the basic code points: let `basic` be the number of input code\n    // points before the last delimiter, or `0` if there is none, then copy\n    // the first basic code points to the output.\n\n    basic = input.lastIndexOf(delimiter);\n\n    if (basic < 0) {\n      basic = 0;\n    }\n\n    for (j = 0; j < basic; ++j) {\n      // if it's not a basic code point\n      if (input.charCodeAt(j) >= 0x80) {\n        error('not-basic');\n      }\n\n      output.push(input.charCodeAt(j));\n    } // Main decoding loop: start just after the last delimiter if any basic code\n    // points were copied; start at the beginning otherwise.\n\n\n    for (index = basic > 0 ? basic + 1 : 0; index < inputLength;)\n    /* no final expression */\n    {\n      // `index` is the index of the next character to be consumed.\n      // Decode a generalized variable-length integer into `delta`,\n      // which gets added to `i`. The overflow checking is easier\n      // if we increase `i` as we go, then subtract off its starting\n      // value at the end to obtain `delta`.\n      for (oldi = i, w = 1, k = base;;\n      /* no condition */\n      k += base) {\n        if (index >= inputLength) {\n          error('invalid-input');\n        }\n\n        digit = basicToDigit(input.charCodeAt(index++));\n\n        if (digit >= base || digit > floor((maxInt - i) / w)) {\n          error('overflow');\n        }\n\n        i += digit * w;\n        t = k <= bias ? tMin : k >= bias + tMax ? tMax : k - bias;\n\n        if (digit < t) {\n          break;\n        }\n\n        baseMinusT = base - t;\n\n        if (w > floor(maxInt / baseMinusT)) {\n          error('overflow');\n        }\n\n        w *= baseMinusT;\n      }\n\n      out = output.length + 1;\n      bias = adapt(i - oldi, out, oldi == 0); // `i` was supposed to wrap around from `out` to `0`,\n      // incrementing `n` each time, so we'll fix that now:\n\n      if (floor(i / out) > maxInt - n) {\n        error('overflow');\n      }\n\n      n += floor(i / out);\n      i %= out; // Insert `n` at position `i` of the output\n\n      output.splice(i++, 0, n);\n    }\n\n    return ucs2encode(output);\n  }\n  /**\n   * Converts a string of Unicode symbols (e.g. a domain name label) to a\n   * Punycode string of ASCII-only symbols.\n   * @memberOf punycode\n   * @param {String} input The string of Unicode symbols.\n   * @returns {String} The resulting Punycode string of ASCII-only symbols.\n   */\n\n\n  function encode(input) {\n    var n,\n        delta,\n        handledCPCount,\n        basicLength,\n        bias,\n        j,\n        m,\n        q,\n        k,\n        t,\n        currentValue,\n        output = [],\n\n    /** `inputLength` will hold the number of code points in `input`. */\n    inputLength,\n\n    /** Cached calculation results */\n    handledCPCountPlusOne,\n        baseMinusT,\n        qMinusT; // Convert the input in UCS-2 to Unicode\n\n    input = ucs2decode(input); // Cache the length\n\n    inputLength = input.length; // Initialize the state\n\n    n = initialN;\n    delta = 0;\n    bias = initialBias; // Handle the basic code points\n\n    for (j = 0; j < inputLength; ++j) {\n      currentValue = input[j];\n\n      if (currentValue < 0x80) {\n        output.push(stringFromCharCode(currentValue));\n      }\n    }\n\n    handledCPCount = basicLength = output.length; // `handledCPCount` is the number of code points that have been handled;\n    // `basicLength` is the number of basic code points.\n    // Finish the basic string - if it is not empty - with a delimiter\n\n    if (basicLength) {\n      output.push(delimiter);\n    } // Main encoding loop:\n\n\n    while (handledCPCount < inputLength) {\n      // All non-basic code points < n have been handled already. Find the next\n      // larger one:\n      for (m = maxInt, j = 0; j < inputLength; ++j) {\n        currentValue = input[j];\n\n        if (currentValue >= n && currentValue < m) {\n          m = currentValue;\n        }\n      } // Increase `delta` enough to advance the decoder's <n,i> state to <m,0>,\n      // but guard against overflow\n\n\n      handledCPCountPlusOne = handledCPCount + 1;\n\n      if (m - n > floor((maxInt - delta) / handledCPCountPlusOne)) {\n        error('overflow');\n      }\n\n      delta += (m - n) * handledCPCountPlusOne;\n      n = m;\n\n      for (j = 0; j < inputLength; ++j) {\n        currentValue = input[j];\n\n        if (currentValue < n && ++delta > maxInt) {\n          error('overflow');\n        }\n\n        if (currentValue == n) {\n          // Represent delta as a generalized variable-length integer\n          for (q = delta, k = base;;\n          /* no condition */\n          k += base) {\n            t = k <= bias ? tMin : k >= bias + tMax ? tMax : k - bias;\n\n            if (q < t) {\n              break;\n            }\n\n            qMinusT = q - t;\n            baseMinusT = base - t;\n            output.push(stringFromCharCode(digitToBasic(t + qMinusT % baseMinusT, 0)));\n            q = floor(qMinusT / baseMinusT);\n          }\n\n          output.push(stringFromCharCode(digitToBasic(q, 0)));\n          bias = adapt(delta, handledCPCountPlusOne, handledCPCount == basicLength);\n          delta = 0;\n          ++handledCPCount;\n        }\n      }\n\n      ++delta;\n      ++n;\n    }\n\n    return output.join('');\n  }\n  /**\n   * Converts a Punycode string representing a domain name or an email address\n   * to Unicode. Only the Punycoded parts of the input will be converted, i.e.\n   * it doesn't matter if you call it on a string that has already been\n   * converted to Unicode.\n   * @memberOf punycode\n   * @param {String} input The Punycoded domain name or email address to\n   * convert to Unicode.\n   * @returns {String} The Unicode representation of the given Punycode\n   * string.\n   */\n\n\n  function toUnicode(input) {\n    return mapDomain(input, function (string) {\n      return regexPunycode.test(string) ? decode(string.slice(4).toLowerCase()) : string;\n    });\n  }\n  /**\n   * Converts a Unicode string representing a domain name or an email address to\n   * Punycode. Only the non-ASCII parts of the domain name will be converted,\n   * i.e. it doesn't matter if you call it with a domain that's already in\n   * ASCII.\n   * @memberOf punycode\n   * @param {String} input The domain name or email address to convert, as a\n   * Unicode string.\n   * @returns {String} The Punycode representation of the given domain name or\n   * email address.\n   */\n\n\n  function toASCII(input) {\n    return mapDomain(input, function (string) {\n      return regexNonASCII.test(string) ? 'xn--' + encode(string) : string;\n    });\n  }\n  /*--------------------------------------------------------------------------*/\n\n  /** Define the public API */\n\n\n  punycode = {\n    /**\n     * A string representing the current Punycode.js version number.\n     * @memberOf punycode\n     * @type String\n     */\n    'version': '1.4.1',\n\n    /**\n     * An object of methods to convert from JavaScript's internal character\n     * representation (UCS-2) to Unicode code points, and back.\n     * @see <https://mathiasbynens.be/notes/javascript-encoding>\n     * @memberOf punycode\n     * @type Object\n     */\n    'ucs2': {\n      'decode': ucs2decode,\n      'encode': ucs2encode\n    },\n    'decode': decode,\n    'encode': encode,\n    'toASCII': toASCII,\n    'toUnicode': toUnicode\n  };\n  /** Expose `punycode` */\n  // Some AMD build optimizers, like r.js, check for specific condition patterns\n  // like the following:\n\n  if (typeof define == 'function' && _typeof(define.amd) == 'object' && define.amd) {\n    define('punycode', function () {\n      return punycode;\n    });\n  } else if (freeExports && freeModule) {\n    if (module.exports == freeExports) {\n      // in Node.js, io.js, or RingoJS v0.8.0+\n      freeModule.exports = punycode;\n    } else {\n      // in Narwhal or RingoJS v0.7.0-\n      for (key in punycode) {\n        punycode.hasOwnProperty(key) && (freeExports[key] = punycode[key]);\n      }\n    }\n  } else {\n    // in Rhino or a web browser\n    root.punycode = punycode;\n  }\n})(this);","module.exports = {\n  \"100\": \"Continue\",\n  \"101\": \"Switching Protocols\",\n  \"102\": \"Processing\",\n  \"200\": \"OK\",\n  \"201\": \"Created\",\n  \"202\": \"Accepted\",\n  \"203\": \"Non-Authoritative Information\",\n  \"204\": \"No Content\",\n  \"205\": \"Reset Content\",\n  \"206\": \"Partial Content\",\n  \"207\": \"Multi-Status\",\n  \"208\": \"Already Reported\",\n  \"226\": \"IM Used\",\n  \"300\": \"Multiple Choices\",\n  \"301\": \"Moved Permanently\",\n  \"302\": \"Found\",\n  \"303\": \"See Other\",\n  \"304\": \"Not Modified\",\n  \"305\": \"Use Proxy\",\n  \"307\": \"Temporary Redirect\",\n  \"308\": \"Permanent Redirect\",\n  \"400\": \"Bad Request\",\n  \"401\": \"Unauthorized\",\n  \"402\": \"Payment Required\",\n  \"403\": \"Forbidden\",\n  \"404\": \"Not Found\",\n  \"405\": \"Method Not Allowed\",\n  \"406\": \"Not Acceptable\",\n  \"407\": \"Proxy Authentication Required\",\n  \"408\": \"Request Timeout\",\n  \"409\": \"Conflict\",\n  \"410\": \"Gone\",\n  \"411\": \"Length Required\",\n  \"412\": \"Precondition Failed\",\n  \"413\": \"Payload Too Large\",\n  \"414\": \"URI Too Long\",\n  \"415\": \"Unsupported Media Type\",\n  \"416\": \"Range Not Satisfiable\",\n  \"417\": \"Expectation Failed\",\n  \"418\": \"I'm a teapot\",\n  \"421\": \"Misdirected Request\",\n  \"422\": \"Unprocessable Entity\",\n  \"423\": \"Locked\",\n  \"424\": \"Failed Dependency\",\n  \"425\": \"Unordered Collection\",\n  \"426\": \"Upgrade Required\",\n  \"428\": \"Precondition Required\",\n  \"429\": \"Too Many Requests\",\n  \"431\": \"Request Header Fields Too Large\",\n  \"451\": \"Unavailable For Legal Reasons\",\n  \"500\": \"Internal Server Error\",\n  \"501\": \"Not Implemented\",\n  \"502\": \"Bad Gateway\",\n  \"503\": \"Service Unavailable\",\n  \"504\": \"Gateway Timeout\",\n  \"505\": \"HTTP Version Not Supported\",\n  \"506\": \"Variant Also Negotiates\",\n  \"507\": \"Insufficient Storage\",\n  \"508\": \"Loop Detected\",\n  \"509\": \"Bandwidth Limit Exceeded\",\n  \"510\": \"Not Extended\",\n  \"511\": \"Network Authentication Required\"\n};","module.exports = extend;\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\n\nfunction extend() {\n  var target = {};\n\n  for (var i = 0; i < arguments.length; i++) {\n    var source = arguments[i];\n\n    for (var key in source) {\n      if (hasOwnProperty.call(source, key)) {\n        target[key] = source[key];\n      }\n    }\n  }\n\n  return target;\n}","var Buffer = require('buffer').Buffer;\n\nmodule.exports = function (buf) {\n  // If the buffer is backed by a Uint8Array, a faster version will work\n  if (buf instanceof Uint8Array) {\n    // If the buffer isn't a subarray, return the underlying ArrayBuffer\n    if (buf.byteOffset === 0 && buf.byteLength === buf.buffer.byteLength) {\n      return buf.buffer;\n    } else if (typeof buf.buffer.slice === 'function') {\n      // Otherwise we need to get a proper copy\n      return buf.buffer.slice(buf.byteOffset, buf.byteOffset + buf.byteLength);\n    }\n  }\n\n  if (Buffer.isBuffer(buf)) {\n    // This is the slow version that will work with any Buffer\n    // implementation (even in old browsers)\n    var arrayCopy = new Uint8Array(buf.length);\n    var len = buf.length;\n\n    for (var i = 0; i < len; i++) {\n      arrayCopy[i] = buf[i];\n    }\n\n    return arrayCopy.buffer;\n  } else {\n    throw new Error('Argument must be a Buffer');\n  }\n};","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n// a passthrough stream.\n// basically just the most minimal sort of Transform stream.\n// Every written chunk gets output as-is.\n'use strict';\n\nmodule.exports = PassThrough;\n\nvar Transform = require('./_stream_transform');\n/*<replacement>*/\n\n\nvar util = require('core-util-is');\n\nutil.inherits = require('inherits');\n/*</replacement>*/\n\nutil.inherits(PassThrough, Transform);\n\nfunction PassThrough(options) {\n  if (!(this instanceof PassThrough)) return new PassThrough(options);\n  Transform.call(this, options);\n}\n\nPassThrough.prototype._transform = function (chunk, encoding, cb) {\n  cb(null, chunk);\n};","/**\n * Module exports.\n */\nmodule.exports = deprecate;\n/**\n * Mark that a method should not be used.\n * Returns a modified function which warns once by default.\n *\n * If `localStorage.noDeprecation = true` is set, then it is a no-op.\n *\n * If `localStorage.throwDeprecation = true` is set, then deprecated functions\n * will throw an Error when invoked.\n *\n * If `localStorage.traceDeprecation = true` is set, then deprecated functions\n * will invoke `console.trace()` instead of `console.error()`.\n *\n * @param {Function} fn - the function to deprecate\n * @param {String} msg - the string to print to the console when `fn` is invoked\n * @returns {Function} a new \"deprecated\" version of `fn`\n * @api public\n */\n\nfunction deprecate(fn, msg) {\n  if (config('noDeprecation')) {\n    return fn;\n  }\n\n  var warned = false;\n\n  function deprecated() {\n    if (!warned) {\n      if (config('throwDeprecation')) {\n        throw new Error(msg);\n      } else if (config('traceDeprecation')) {\n        console.trace(msg);\n      } else {\n        console.warn(msg);\n      }\n\n      warned = true;\n    }\n\n    return fn.apply(this, arguments);\n  }\n\n  return deprecated;\n}\n/**\n * Checks `localStorage` for boolean values for the given `name`.\n *\n * @param {String} name\n * @returns {Boolean}\n * @api private\n */\n\n\nfunction config(name) {\n  // accessing global.localStorage can trigger a DOMException in sandboxed iframes\n  try {\n    if (!global.localStorage) return false;\n  } catch (_) {\n    return false;\n  }\n\n  var val = global.localStorage[name];\n  if (null == val) return false;\n  return String(val).toLowerCase() === 'true';\n}","(function (global, undefined) {\n  \"use strict\";\n\n  if (global.setImmediate) {\n    return;\n  }\n\n  var nextHandle = 1; // Spec says greater than zero\n\n  var tasksByHandle = {};\n  var currentlyRunningATask = false;\n  var doc = global.document;\n  var registerImmediate;\n\n  function setImmediate(callback) {\n    // Callback can either be a function or a string\n    if (typeof callback !== \"function\") {\n      callback = new Function(\"\" + callback);\n    } // Copy function arguments\n\n\n    var args = new Array(arguments.length - 1);\n\n    for (var i = 0; i < args.length; i++) {\n      args[i] = arguments[i + 1];\n    } // Store and register the task\n\n\n    var task = {\n      callback: callback,\n      args: args\n    };\n    tasksByHandle[nextHandle] = task;\n    registerImmediate(nextHandle);\n    return nextHandle++;\n  }\n\n  function clearImmediate(handle) {\n    delete tasksByHandle[handle];\n  }\n\n  function run(task) {\n    var callback = task.callback;\n    var args = task.args;\n\n    switch (args.length) {\n      case 0:\n        callback();\n        break;\n\n      case 1:\n        callback(args[0]);\n        break;\n\n      case 2:\n        callback(args[0], args[1]);\n        break;\n\n      case 3:\n        callback(args[0], args[1], args[2]);\n        break;\n\n      default:\n        callback.apply(undefined, args);\n        break;\n    }\n  }\n\n  function runIfPresent(handle) {\n    // From the spec: \"Wait until any invocations of this algorithm started before this one have completed.\"\n    // So if we're currently running a task, we'll need to delay this invocation.\n    if (currentlyRunningATask) {\n      // Delay by doing a setTimeout. setImmediate was tried instead, but in Firefox 7 it generated a\n      // \"too much recursion\" error.\n      setTimeout(runIfPresent, 0, handle);\n    } else {\n      var task = tasksByHandle[handle];\n\n      if (task) {\n        currentlyRunningATask = true;\n\n        try {\n          run(task);\n        } finally {\n          clearImmediate(handle);\n          currentlyRunningATask = false;\n        }\n      }\n    }\n  }\n\n  function installNextTickImplementation() {\n    registerImmediate = function registerImmediate(handle) {\n      process.nextTick(function () {\n        runIfPresent(handle);\n      });\n    };\n  }\n\n  function canUsePostMessage() {\n    // The test against `importScripts` prevents this implementation from being installed inside a web worker,\n    // where `global.postMessage` means something completely different and can't be used for this purpose.\n    if (global.postMessage && !global.importScripts) {\n      var postMessageIsAsynchronous = true;\n      var oldOnMessage = global.onmessage;\n\n      global.onmessage = function () {\n        postMessageIsAsynchronous = false;\n      };\n\n      global.postMessage(\"\", \"*\");\n      global.onmessage = oldOnMessage;\n      return postMessageIsAsynchronous;\n    }\n  }\n\n  function installPostMessageImplementation() {\n    // Installs an event handler on `global` for the `message` event: see\n    // * https://developer.mozilla.org/en/DOM/window.postMessage\n    // * http://www.whatwg.org/specs/web-apps/current-work/multipage/comms.html#crossDocumentMessages\n    var messagePrefix = \"setImmediate$\" + Math.random() + \"$\";\n\n    var onGlobalMessage = function onGlobalMessage(event) {\n      if (event.source === global && typeof event.data === \"string\" && event.data.indexOf(messagePrefix) === 0) {\n        runIfPresent(+event.data.slice(messagePrefix.length));\n      }\n    };\n\n    if (global.addEventListener) {\n      global.addEventListener(\"message\", onGlobalMessage, false);\n    } else {\n      global.attachEvent(\"onmessage\", onGlobalMessage);\n    }\n\n    registerImmediate = function registerImmediate(handle) {\n      global.postMessage(messagePrefix + handle, \"*\");\n    };\n  }\n\n  function installMessageChannelImplementation() {\n    var channel = new MessageChannel();\n\n    channel.port1.onmessage = function (event) {\n      var handle = event.data;\n      runIfPresent(handle);\n    };\n\n    registerImmediate = function registerImmediate(handle) {\n      channel.port2.postMessage(handle);\n    };\n  }\n\n  function installReadyStateChangeImplementation() {\n    var html = doc.documentElement;\n\n    registerImmediate = function registerImmediate(handle) {\n      // Create a <script> element; its readystatechange event will be fired asynchronously once it is inserted\n      // into the document. Do so, thus queuing up the task. Remember to clean up once it's been called.\n      var script = doc.createElement(\"script\");\n\n      script.onreadystatechange = function () {\n        runIfPresent(handle);\n        script.onreadystatechange = null;\n        html.removeChild(script);\n        script = null;\n      };\n\n      html.appendChild(script);\n    };\n  }\n\n  function installSetTimeoutImplementation() {\n    registerImmediate = function registerImmediate(handle) {\n      setTimeout(runIfPresent, 0, handle);\n    };\n  } // If supported, we should attach to the prototype of global, since that is where setTimeout et al. live.\n\n\n  var attachTo = Object.getPrototypeOf && Object.getPrototypeOf(global);\n  attachTo = attachTo && attachTo.setTimeout ? attachTo : global; // Don't get fooled by e.g. browserify environments.\n\n  if ({}.toString.call(global.process) === \"[object process]\") {\n    // For Node.js before 0.9\n    installNextTickImplementation();\n  } else if (canUsePostMessage()) {\n    // For non-IE10 modern browsers\n    installPostMessageImplementation();\n  } else if (global.MessageChannel) {\n    // For web workers, where supported\n    installMessageChannelImplementation();\n  } else if (doc && \"onreadystatechange\" in doc.createElement(\"script\")) {\n    // For IE 6–8\n    installReadyStateChangeImplementation();\n  } else {\n    // For older browsers\n    installSetTimeoutImplementation();\n  }\n\n  attachTo.setImmediate = setImmediate;\n  attachTo.clearImmediate = clearImmediate;\n})(typeof self === \"undefined\" ? typeof global === \"undefined\" ? this : global : self);","'use strict';\n\nfunction _classCallCheck(instance, Constructor) {\n  if (!(instance instanceof Constructor)) {\n    throw new TypeError(\"Cannot call a class as a function\");\n  }\n}\n\nvar Buffer = require('safe-buffer').Buffer;\n\nvar util = require('util');\n\nfunction copyBuffer(src, target, offset) {\n  src.copy(target, offset);\n}\n\nmodule.exports = function () {\n  function BufferList() {\n    _classCallCheck(this, BufferList);\n\n    this.head = null;\n    this.tail = null;\n    this.length = 0;\n  }\n\n  BufferList.prototype.push = function push(v) {\n    var entry = {\n      data: v,\n      next: null\n    };\n    if (this.length > 0) this.tail.next = entry;else this.head = entry;\n    this.tail = entry;\n    ++this.length;\n  };\n\n  BufferList.prototype.unshift = function unshift(v) {\n    var entry = {\n      data: v,\n      next: this.head\n    };\n    if (this.length === 0) this.tail = entry;\n    this.head = entry;\n    ++this.length;\n  };\n\n  BufferList.prototype.shift = function shift() {\n    if (this.length === 0) return;\n    var ret = this.head.data;\n    if (this.length === 1) this.head = this.tail = null;else this.head = this.head.next;\n    --this.length;\n    return ret;\n  };\n\n  BufferList.prototype.clear = function clear() {\n    this.head = this.tail = null;\n    this.length = 0;\n  };\n\n  BufferList.prototype.join = function join(s) {\n    if (this.length === 0) return '';\n    var p = this.head;\n    var ret = '' + p.data;\n\n    while (p = p.next) {\n      ret += s + p.data;\n    }\n\n    return ret;\n  };\n\n  BufferList.prototype.concat = function concat(n) {\n    if (this.length === 0) return Buffer.alloc(0);\n    if (this.length === 1) return this.head.data;\n    var ret = Buffer.allocUnsafe(n >>> 0);\n    var p = this.head;\n    var i = 0;\n\n    while (p) {\n      copyBuffer(p.data, ret, i);\n      i += p.data.length;\n      p = p.next;\n    }\n\n    return ret;\n  };\n\n  return BufferList;\n}();\n\nif (util && util.inspect && util.inspect.custom) {\n  module.exports.prototype[util.inspect.custom] = function () {\n    var obj = util.inspect({\n      length: this.length\n    });\n    return this.constructor.name + ' ' + obj;\n  };\n}","var capability = require('./capability');\n\nvar inherits = require('inherits');\n\nvar response = require('./response');\n\nvar stream = require('readable-stream');\n\nvar toArrayBuffer = require('to-arraybuffer');\n\nvar IncomingMessage = response.IncomingMessage;\nvar rStates = response.readyStates;\n\nfunction decideMode(preferBinary, useFetch) {\n  if (capability.fetch && useFetch) {\n    return 'fetch';\n  } else if (capability.mozchunkedarraybuffer) {\n    return 'moz-chunked-arraybuffer';\n  } else if (capability.msstream) {\n    return 'ms-stream';\n  } else if (capability.arraybuffer && preferBinary) {\n    return 'arraybuffer';\n  } else if (capability.vbArray && preferBinary) {\n    return 'text:vbarray';\n  } else {\n    return 'text';\n  }\n}\n\nvar ClientRequest = module.exports = function (opts) {\n  var self = this;\n  stream.Writable.call(self);\n  self._opts = opts;\n  self._body = [];\n  self._headers = {};\n  if (opts.auth) self.setHeader('Authorization', 'Basic ' + new Buffer(opts.auth).toString('base64'));\n  Object.keys(opts.headers).forEach(function (name) {\n    self.setHeader(name, opts.headers[name]);\n  });\n  var preferBinary;\n  var useFetch = true;\n\n  if (opts.mode === 'disable-fetch' || 'requestTimeout' in opts && !capability.abortController) {\n    // If the use of XHR should be preferred. Not typically needed.\n    useFetch = false;\n    preferBinary = true;\n  } else if (opts.mode === 'prefer-streaming') {\n    // If streaming is a high priority but binary compatibility and\n    // the accuracy of the 'content-type' header aren't\n    preferBinary = false;\n  } else if (opts.mode === 'allow-wrong-content-type') {\n    // If streaming is more important than preserving the 'content-type' header\n    preferBinary = !capability.overrideMimeType;\n  } else if (!opts.mode || opts.mode === 'default' || opts.mode === 'prefer-fast') {\n    // Use binary if text streaming may corrupt data or the content-type header, or for speed\n    preferBinary = true;\n  } else {\n    throw new Error('Invalid value for opts.mode');\n  }\n\n  self._mode = decideMode(preferBinary, useFetch);\n  self._fetchTimer = null;\n  self.on('finish', function () {\n    self._onFinish();\n  });\n};\n\ninherits(ClientRequest, stream.Writable);\n\nClientRequest.prototype.setHeader = function (name, value) {\n  var self = this;\n  var lowerName = name.toLowerCase(); // This check is not necessary, but it prevents warnings from browsers about setting unsafe\n  // headers. To be honest I'm not entirely sure hiding these warnings is a good thing, but\n  // http-browserify did it, so I will too.\n\n  if (unsafeHeaders.indexOf(lowerName) !== -1) return;\n  self._headers[lowerName] = {\n    name: name,\n    value: value\n  };\n};\n\nClientRequest.prototype.getHeader = function (name) {\n  var header = this._headers[name.toLowerCase()];\n\n  if (header) return header.value;\n  return null;\n};\n\nClientRequest.prototype.removeHeader = function (name) {\n  var self = this;\n  delete self._headers[name.toLowerCase()];\n};\n\nClientRequest.prototype._onFinish = function () {\n  var self = this;\n  if (self._destroyed) return;\n  var opts = self._opts;\n  var headersObj = self._headers;\n  var body = null;\n\n  if (opts.method !== 'GET' && opts.method !== 'HEAD') {\n    if (capability.arraybuffer) {\n      body = toArrayBuffer(Buffer.concat(self._body));\n    } else if (capability.blobConstructor) {\n      body = new global.Blob(self._body.map(function (buffer) {\n        return toArrayBuffer(buffer);\n      }), {\n        type: (headersObj['content-type'] || {}).value || ''\n      });\n    } else {\n      // get utf8 string\n      body = Buffer.concat(self._body).toString();\n    }\n  } // create flattened list of headers\n\n\n  var headersList = [];\n  Object.keys(headersObj).forEach(function (keyName) {\n    var name = headersObj[keyName].name;\n    var value = headersObj[keyName].value;\n\n    if (Array.isArray(value)) {\n      value.forEach(function (v) {\n        headersList.push([name, v]);\n      });\n    } else {\n      headersList.push([name, value]);\n    }\n  });\n\n  if (self._mode === 'fetch') {\n    var signal = null;\n    var fetchTimer = null;\n\n    if (capability.abortController) {\n      var controller = new AbortController();\n      signal = controller.signal;\n      self._fetchAbortController = controller;\n\n      if ('requestTimeout' in opts && opts.requestTimeout !== 0) {\n        self._fetchTimer = global.setTimeout(function () {\n          self.emit('requestTimeout');\n          if (self._fetchAbortController) self._fetchAbortController.abort();\n        }, opts.requestTimeout);\n      }\n    }\n\n    global.fetch(self._opts.url, {\n      method: self._opts.method,\n      headers: headersList,\n      body: body || undefined,\n      mode: 'cors',\n      credentials: opts.withCredentials ? 'include' : 'same-origin',\n      signal: signal\n    }).then(function (response) {\n      self._fetchResponse = response;\n\n      self._connect();\n    }, function (reason) {\n      global.clearTimeout(self._fetchTimer);\n      if (!self._destroyed) self.emit('error', reason);\n    });\n  } else {\n    var xhr = self._xhr = new global.XMLHttpRequest();\n\n    try {\n      xhr.open(self._opts.method, self._opts.url, true);\n    } catch (err) {\n      process.nextTick(function () {\n        self.emit('error', err);\n      });\n      return;\n    } // Can't set responseType on really old browsers\n\n\n    if ('responseType' in xhr) xhr.responseType = self._mode.split(':')[0];\n    if ('withCredentials' in xhr) xhr.withCredentials = !!opts.withCredentials;\n    if (self._mode === 'text' && 'overrideMimeType' in xhr) xhr.overrideMimeType('text/plain; charset=x-user-defined');\n\n    if ('requestTimeout' in opts) {\n      xhr.timeout = opts.requestTimeout;\n\n      xhr.ontimeout = function () {\n        self.emit('requestTimeout');\n      };\n    }\n\n    headersList.forEach(function (header) {\n      xhr.setRequestHeader(header[0], header[1]);\n    });\n    self._response = null;\n\n    xhr.onreadystatechange = function () {\n      switch (xhr.readyState) {\n        case rStates.LOADING:\n        case rStates.DONE:\n          self._onXHRProgress();\n\n          break;\n      }\n    }; // Necessary for streaming in Firefox, since xhr.response is ONLY defined\n    // in onprogress, not in onreadystatechange with xhr.readyState = 3\n\n\n    if (self._mode === 'moz-chunked-arraybuffer') {\n      xhr.onprogress = function () {\n        self._onXHRProgress();\n      };\n    }\n\n    xhr.onerror = function () {\n      if (self._destroyed) return;\n      self.emit('error', new Error('XHR error'));\n    };\n\n    try {\n      xhr.send(body);\n    } catch (err) {\n      process.nextTick(function () {\n        self.emit('error', err);\n      });\n      return;\n    }\n  }\n};\n/**\n * Checks if xhr.status is readable and non-zero, indicating no error.\n * Even though the spec says it should be available in readyState 3,\n * accessing it throws an exception in IE8\n */\n\n\nfunction statusValid(xhr) {\n  try {\n    var status = xhr.status;\n    return status !== null && status !== 0;\n  } catch (e) {\n    return false;\n  }\n}\n\nClientRequest.prototype._onXHRProgress = function () {\n  var self = this;\n  if (!statusValid(self._xhr) || self._destroyed) return;\n  if (!self._response) self._connect();\n\n  self._response._onXHRProgress();\n};\n\nClientRequest.prototype._connect = function () {\n  var self = this;\n  if (self._destroyed) return;\n  self._response = new IncomingMessage(self._xhr, self._fetchResponse, self._mode, self._fetchTimer);\n\n  self._response.on('error', function (err) {\n    self.emit('error', err);\n  });\n\n  self.emit('response', self._response);\n};\n\nClientRequest.prototype._write = function (chunk, encoding, cb) {\n  var self = this;\n\n  self._body.push(chunk);\n\n  cb();\n};\n\nClientRequest.prototype.abort = ClientRequest.prototype.destroy = function () {\n  var self = this;\n  self._destroyed = true;\n  global.clearTimeout(self._fetchTimer);\n  if (self._response) self._response._destroyed = true;\n  if (self._xhr) self._xhr.abort();else if (self._fetchAbortController) self._fetchAbortController.abort();\n};\n\nClientRequest.prototype.end = function (data, encoding, cb) {\n  var self = this;\n\n  if (typeof data === 'function') {\n    cb = data;\n    data = undefined;\n  }\n\n  stream.Writable.prototype.end.call(self, data, encoding, cb);\n};\n\nClientRequest.prototype.flushHeaders = function () {};\n\nClientRequest.prototype.setTimeout = function () {};\n\nClientRequest.prototype.setNoDelay = function () {};\n\nClientRequest.prototype.setSocketKeepAlive = function () {}; // Taken from http://www.w3.org/TR/XMLHttpRequest/#the-setrequestheader%28%29-method\n\n\nvar unsafeHeaders = ['accept-charset', 'accept-encoding', 'access-control-request-headers', 'access-control-request-method', 'connection', 'content-length', 'cookie', 'cookie2', 'date', 'dnt', 'expect', 'host', 'keep-alive', 'origin', 'referer', 'te', 'trailer', 'transfer-encoding', 'upgrade', 'via'];","var http = require('http');\n\nvar url = require('url');\n\nvar https = module.exports;\n\nfor (var key in http) {\n  if (http.hasOwnProperty(key)) https[key] = http[key];\n}\n\nhttps.request = function (params, cb) {\n  params = validateParams(params);\n  return http.request.call(this, params, cb);\n};\n\nhttps.get = function (params, cb) {\n  params = validateParams(params);\n  return http.get.call(this, params, cb);\n};\n\nfunction validateParams(params) {\n  if (typeof params === 'string') {\n    params = url.parse(params);\n  }\n\n  if (!params.protocol) {\n    params.protocol = 'https:';\n  }\n\n  if (params.protocol !== 'https:') {\n    throw new Error('Protocol \"' + params.protocol + '\" not supported. Expected \"https:\"');\n  }\n\n  return params;\n}","exports.read = function (buffer, offset, isLE, mLen, nBytes) {\n  var e, m;\n  var eLen = nBytes * 8 - mLen - 1;\n  var eMax = (1 << eLen) - 1;\n  var eBias = eMax >> 1;\n  var nBits = -7;\n  var i = isLE ? nBytes - 1 : 0;\n  var d = isLE ? -1 : 1;\n  var s = buffer[offset + i];\n  i += d;\n  e = s & (1 << -nBits) - 1;\n  s >>= -nBits;\n  nBits += eLen;\n\n  for (; nBits > 0; e = e * 256 + buffer[offset + i], i += d, nBits -= 8) {}\n\n  m = e & (1 << -nBits) - 1;\n  e >>= -nBits;\n  nBits += mLen;\n\n  for (; nBits > 0; m = m * 256 + buffer[offset + i], i += d, nBits -= 8) {}\n\n  if (e === 0) {\n    e = 1 - eBias;\n  } else if (e === eMax) {\n    return m ? NaN : (s ? -1 : 1) * Infinity;\n  } else {\n    m = m + Math.pow(2, mLen);\n    e = e - eBias;\n  }\n\n  return (s ? -1 : 1) * m * Math.pow(2, e - mLen);\n};\n\nexports.write = function (buffer, value, offset, isLE, mLen, nBytes) {\n  var e, m, c;\n  var eLen = nBytes * 8 - mLen - 1;\n  var eMax = (1 << eLen) - 1;\n  var eBias = eMax >> 1;\n  var rt = mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0;\n  var i = isLE ? 0 : nBytes - 1;\n  var d = isLE ? 1 : -1;\n  var s = value < 0 || value === 0 && 1 / value < 0 ? 1 : 0;\n  value = Math.abs(value);\n\n  if (isNaN(value) || value === Infinity) {\n    m = isNaN(value) ? 1 : 0;\n    e = eMax;\n  } else {\n    e = Math.floor(Math.log(value) / Math.LN2);\n\n    if (value * (c = Math.pow(2, -e)) < 1) {\n      e--;\n      c *= 2;\n    }\n\n    if (e + eBias >= 1) {\n      value += rt / c;\n    } else {\n      value += rt * Math.pow(2, 1 - eBias);\n    }\n\n    if (value * c >= 2) {\n      e++;\n      c /= 2;\n    }\n\n    if (e + eBias >= eMax) {\n      m = 0;\n      e = eMax;\n    } else if (e + eBias >= 1) {\n      m = (value * c - 1) * Math.pow(2, mLen);\n      e = e + eBias;\n    } else {\n      m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen);\n      e = 0;\n    }\n  }\n\n  for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}\n\n  e = e << mLen | m;\n  eLen += mLen;\n\n  for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}\n\n  buffer[offset + i - d] |= s * 128;\n};","'use strict';\n\nexports.byteLength = byteLength;\nexports.toByteArray = toByteArray;\nexports.fromByteArray = fromByteArray;\nvar lookup = [];\nvar revLookup = [];\nvar Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array;\nvar code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\n\nfor (var i = 0, len = code.length; i < len; ++i) {\n  lookup[i] = code[i];\n  revLookup[code.charCodeAt(i)] = i;\n} // Support decoding URL-safe base64 strings, as Node.js does.\n// See: https://en.wikipedia.org/wiki/Base64#URL_applications\n\n\nrevLookup['-'.charCodeAt(0)] = 62;\nrevLookup['_'.charCodeAt(0)] = 63;\n\nfunction getLens(b64) {\n  var len = b64.length;\n\n  if (len % 4 > 0) {\n    throw new Error('Invalid string. Length must be a multiple of 4');\n  } // Trim off extra bytes after placeholder bytes are found\n  // See: https://github.com/beatgammit/base64-js/issues/42\n\n\n  var validLen = b64.indexOf('=');\n  if (validLen === -1) validLen = len;\n  var placeHoldersLen = validLen === len ? 0 : 4 - validLen % 4;\n  return [validLen, placeHoldersLen];\n} // base64 is 4/3 + up to two characters of the original data\n\n\nfunction byteLength(b64) {\n  var lens = getLens(b64);\n  var validLen = lens[0];\n  var placeHoldersLen = lens[1];\n  return (validLen + placeHoldersLen) * 3 / 4 - placeHoldersLen;\n}\n\nfunction _byteLength(b64, validLen, placeHoldersLen) {\n  return (validLen + placeHoldersLen) * 3 / 4 - placeHoldersLen;\n}\n\nfunction toByteArray(b64) {\n  var tmp;\n  var lens = getLens(b64);\n  var validLen = lens[0];\n  var placeHoldersLen = lens[1];\n  var arr = new Arr(_byteLength(b64, validLen, placeHoldersLen));\n  var curByte = 0; // if there are placeholders, only get up to the last complete 4 chars\n\n  var len = placeHoldersLen > 0 ? validLen - 4 : validLen;\n\n  for (var i = 0; i < len; i += 4) {\n    tmp = revLookup[b64.charCodeAt(i)] << 18 | revLookup[b64.charCodeAt(i + 1)] << 12 | revLookup[b64.charCodeAt(i + 2)] << 6 | revLookup[b64.charCodeAt(i + 3)];\n    arr[curByte++] = tmp >> 16 & 0xFF;\n    arr[curByte++] = tmp >> 8 & 0xFF;\n    arr[curByte++] = tmp & 0xFF;\n  }\n\n  if (placeHoldersLen === 2) {\n    tmp = revLookup[b64.charCodeAt(i)] << 2 | revLookup[b64.charCodeAt(i + 1)] >> 4;\n    arr[curByte++] = tmp & 0xFF;\n  }\n\n  if (placeHoldersLen === 1) {\n    tmp = revLookup[b64.charCodeAt(i)] << 10 | revLookup[b64.charCodeAt(i + 1)] << 4 | revLookup[b64.charCodeAt(i + 2)] >> 2;\n    arr[curByte++] = tmp >> 8 & 0xFF;\n    arr[curByte++] = tmp & 0xFF;\n  }\n\n  return arr;\n}\n\nfunction tripletToBase64(num) {\n  return lookup[num >> 18 & 0x3F] + lookup[num >> 12 & 0x3F] + lookup[num >> 6 & 0x3F] + lookup[num & 0x3F];\n}\n\nfunction encodeChunk(uint8, start, end) {\n  var tmp;\n  var output = [];\n\n  for (var i = start; i < end; i += 3) {\n    tmp = (uint8[i] << 16 & 0xFF0000) + (uint8[i + 1] << 8 & 0xFF00) + (uint8[i + 2] & 0xFF);\n    output.push(tripletToBase64(tmp));\n  }\n\n  return output.join('');\n}\n\nfunction fromByteArray(uint8) {\n  var tmp;\n  var len = uint8.length;\n  var extraBytes = len % 3; // if we have 1 byte left, pad 2 bytes\n\n  var parts = [];\n  var maxChunkLength = 16383; // must be multiple of 3\n  // go through the array every three bytes, we'll deal with trailing stuff later\n\n  for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) {\n    parts.push(encodeChunk(uint8, i, i + maxChunkLength > len2 ? len2 : i + maxChunkLength));\n  } // pad the end with zeros, but make sure to not forget the extra bytes\n\n\n  if (extraBytes === 1) {\n    tmp = uint8[len - 1];\n    parts.push(lookup[tmp >> 2] + lookup[tmp << 4 & 0x3F] + '==');\n  } else if (extraBytes === 2) {\n    tmp = (uint8[len - 2] << 8) + uint8[len - 1];\n    parts.push(lookup[tmp >> 10] + lookup[tmp >> 4 & 0x3F] + lookup[tmp << 2 & 0x3F] + '=');\n  }\n\n  return parts.join('');\n}","export default function(gantt: any) {\r\n\r\n\tgantt.ext = gantt.ext || {};\r\n\r\n\tgantt.ext.export_api = gantt.ext.export_api || {\r\n\r\n\t\t_apiUrl: \"https://export.dhtmlx.com/gantt\",\r\n\r\n\t\tgetNodeJSTransport(url: string): { module: {request: any}, defaultPort: number } {\r\n\t\t\tconst protocol = url.split(\"://\")[0];\r\n\t\t\tlet module;\r\n\t\t\tlet defaultPort;\r\n\t\t\tswitch (protocol) {\r\n\t\t\t\tcase \"https\":\r\n\t\t\t\t\tmodule = require(\"https\");\r\n\t\t\t\t\tdefaultPort = 443;\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase \"http\":\r\n\t\t\t\t\tmodule = require(\"http\");\r\n\t\t\t\t\tdefaultPort = 80;\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tdefault:\r\n\t\t\t\t\tthrow new Error(`Unsupported protocol: ${protocol}, url: ${url}`);\r\n\t\t\t}\r\n\t\t\treturn {\r\n\t\t\t\tmodule,\r\n\t\t\t\tdefaultPort\r\n\t\t\t};\r\n\t\t},\r\n\r\n\t\t_prepareConfigPDF(config, type){\r\n\t\t\tif (config && config.raw) {\r\n\t\t\t\tlet previousDateRage = null;\r\n\t\t\t\tif (config.start && config.end){\r\n\t\t\t\t\tpreviousDateRage = {\r\n\t\t\t\t\t\tstart_date: gantt.config.start_date,\r\n\t\t\t\t\t\tend_date: gantt.config.end_date,\r\n\t\t\t\t\t};\r\n\t\t\t\t\tgantt.config.start_date = gantt.date.str_to_date(gantt.config.date_format)(config.start);\r\n\t\t\t\t\tgantt.config.end_date = gantt.date.str_to_date(gantt.config.date_format)(config.end);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tconfig = gantt.mixin(config, {\r\n\t\t\t\t\tname: \"gantt.\" + type, data: gantt.ext.export_api._serializeHtml()\r\n\t\t\t\t});\r\n\r\n\t\t\t\tif (previousDateRage){\r\n\t\t\t\t\tgantt.config.start_date = previousDateRage.start_date;\r\n\t\t\t\t\tgantt.config.end_date = previousDateRage.end_date;\r\n\t\t\t\t}\r\n\t\t\t} else {\r\n\t\t\t\tconfig = gantt.mixin((config || {}), {\r\n\t\t\t\t\tname: \"gantt.\" + type,\r\n\t\t\t\t\tdata: gantt.ext.export_api._serializeAll(),\r\n\t\t\t\t\tconfig: gantt.config\r\n\t\t\t\t});\r\n\t\t\t\tgantt.ext.export_api._fixColumns(config.config.columns);\r\n\t\t\t}\r\n\r\n\t\t\tconfig.version = gantt.version;\r\n\t\t\tgantt.ext.export_api._sendToExport(config, type);\r\n\t\t},\r\n\r\n\t\texportToPDF(config) {\r\n\t\t\tgantt.ext.export_api._prepareConfigPDF(config, \"pdf\");\r\n\t\t},\r\n\r\n\t\texportToPNG(config) {\r\n\t\t\tgantt.ext.export_api._prepareConfigPDF(config, \"png\");\r\n\t\t},\r\n\r\n\r\n\t\texportToICal(config) {\r\n\t\t\tconfig = gantt.mixin((config || {}), {\r\n\t\t\t\tname: \"gantt.ical\",\r\n\t\t\t\tdata: gantt.ext.export_api._serializePlain().data,\r\n\t\t\t\tversion: gantt.version\r\n\t\t\t});\r\n\t\t\tgantt.ext.export_api._sendToExport(config, \"ical\");\r\n\t\t},\r\n\r\n\t\texportToExcel(config) {\r\n\t\t\tconfig = config || {};\r\n\r\n\t\t\tlet tasks;\r\n\t\t\tlet dates;\r\n\t\t\tlet state;\r\n\t\t\tlet scroll;\r\n\t\t\t// GS-2124, we need to get all task nodes to correctly obtain the colors\r\n\t\t\tconst smartRendering = gantt.config.smart_rendering;\r\n\t\t\tif (config.visual === \"base-colors\"){\r\n\t\t\t\tgantt.config.smart_rendering = false;\r\n\t\t\t}\r\n\r\n\t\t\tif (config.start || config.end) {\r\n\t\t\t\tstate = gantt.getState();\r\n\t\t\t\tdates = [gantt.config.start_date, gantt.config.end_date];\r\n\t\t\t\tscroll = gantt.getScrollState();\r\n\t\t\t\tconst convert = gantt.date.str_to_date(gantt.config.date_format);\r\n\t\t\t\ttasks = gantt.eachTask;\r\n\r\n\t\t\t\tif (config.start){\r\n\t\t\t\t\tgantt.config.start_date = convert(config.start);\r\n\t\t\t\t}\r\n\t\t\t\tif (config.end){\r\n\t\t\t\t\tgantt.config.end_date = convert(config.end);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tgantt.render();\r\n\t\t\t\tgantt.config.smart_rendering = smartRendering;\r\n\r\n\t\t\t\tgantt.eachTask = gantt.ext.export_api._eachTaskTimed(gantt.config.start_date, gantt.config.end_date);\r\n\t\t\t} else if (config.visual === \"base-colors\"){\r\n\t\t\t\tgantt.render();\r\n\t\t\t\tgantt.config.smart_rendering = smartRendering;\r\n\t\t\t}\r\n\r\n\t\t\tgantt._no_progress_colors = config.visual === \"base-colors\";\r\n\r\n\t\t\tlet data = null;\r\n\t\t\tif (!gantt.env.isNode) {\r\n\t\t\t\tdata = gantt.ext.export_api._serializeTable(config).data;\r\n\t\t\t}\r\n\r\n\t\t\tconfig = gantt.mixin(config, {\r\n\t\t\t\tname: \"gantt.xlsx\",\r\n\t\t\t\ttitle: \"Tasks\",\r\n\t\t\t\tdata,\r\n\t\t\t\tcolumns: gantt.ext.export_api._serializeColumns({ rawDates: true }),\r\n\t\t\t\tversion: gantt.version\r\n\t\t\t});\r\n\r\n\t\t\tif (config.visual){\r\n\t\t\t\tconfig.scales = gantt.ext.export_api._serializeScales(config);\r\n\t\t\t}\r\n\r\n\t\t\tgantt.ext.export_api._sendToExport(config, \"excel\");\r\n\r\n\t\t\tif (config.start || config.end) {\r\n\t\t\t\tgantt.config.start_date = state.min_date;\r\n\t\t\t\tgantt.config.end_date = state.max_date;\r\n\t\t\t\tgantt.eachTask = tasks;\r\n\r\n\t\t\t\tgantt.render();\r\n\t\t\t\tgantt.scrollTo(scroll.x, scroll.y);\r\n\r\n\t\t\t\tgantt.config.start_date = dates[0];\r\n\t\t\t\tgantt.config.end_date = dates[1];\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\texportToJSON(config) {\r\n\t\t\tconfig = gantt.mixin((config || {}), {\r\n\t\t\t\tname: \"gantt.json\",\r\n\t\t\t\tdata: gantt.ext.export_api._serializeAll(),\r\n\t\t\t\tconfig: gantt.config,\r\n\t\t\t\tcolumns: gantt.ext.export_api._serializeColumns(),\r\n\t\t\t\tworktime: gantt.ext.export_api._getWorktimeSettings(),\r\n\t\t\t\tversion: gantt.version\r\n\t\t\t});\r\n\t\t\tgantt.ext.export_api._sendToExport(config, \"json\");\r\n\t\t},\r\n\r\n\r\n\t\timportFromExcel(config) {\r\n\t\t\ttry {\r\n\t\t\t\tconst formData = config.data;\r\n\t\t\t\tif (formData instanceof FormData) {\r\n\r\n\t\t\t\t} else if (formData instanceof File) {\r\n\t\t\t\t\tconst data = new FormData();\r\n\t\t\t\t\tdata.append(\"file\", formData);\r\n\t\t\t\t\tconfig.data = data;\r\n\t\t\t\t}\r\n\t\t\t} catch (error) {}\r\n\t\t\tif (gantt.env.isNode) {\r\n\t\t\t\tgantt.ext.export_api._nodejsImportExcel(config);\r\n\t\t\t} else {\r\n\t\t\t\tgantt.ext.export_api._sendImportAjaxExcel(config);\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\timportFromMSProject(config) {\r\n\t\t\tconst formData = config.data;\r\n\r\n\t\t\ttry {\r\n\t\t\t\tif (formData instanceof FormData) {\r\n\r\n\t\t\t\t} else if (formData instanceof File) {\r\n\t\t\t\t\tconst data = new FormData();\r\n\t\t\t\t\tdata.append(\"file\", formData);\r\n\t\t\t\t\tconfig.data = data;\r\n\t\t\t\t}\r\n\t\t\t} catch (error) {}\r\n\t\t\tif (gantt.env.isNode) {\r\n\t\t\t\tgantt.ext.export_api._nodejsImportMSP(config);\r\n\t\t\t} else {\r\n\t\t\t\tgantt.ext.export_api._sendImportAjaxMSP(config);\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\timportFromPrimaveraP6(config) {\r\n\t\t\tconfig.type = \"primaveraP6-parse\";\r\n\t\t\treturn gantt.importFromMSProject(config);\r\n\t\t},\r\n\t\texportToMSProject(config) {\r\n\t\t\tconfig = config || {};\r\n\t\t\tconfig.skip_circular_links = config.skip_circular_links === undefined ? true : !!config.skip_circular_links;\r\n\r\n\t\t\tconst oldXmlFormat = gantt.templates.xml_format;\r\n\t\t\tconst oldFormatDate = gantt.templates.format_date;\r\n\t\t\tconst oldXmlDate = gantt.config.xml_date;\r\n\t\t\tconst oldDateFormat = gantt.config.date_format;\r\n\r\n\t\t\tconst exportServiceDateFormat = \"%d-%m-%Y %H:%i:%s\";\r\n\r\n\t\t\tgantt.config.xml_date = exportServiceDateFormat;\r\n\t\t\tgantt.config.date_format = exportServiceDateFormat;\r\n\t\t\tgantt.templates.xml_format = gantt.date.date_to_str(exportServiceDateFormat);\r\n\t\t\tgantt.templates.format_date = gantt.date.date_to_str(exportServiceDateFormat);\r\n\t\t\tconst data = gantt.ext.export_api._serializeAll();\r\n\r\n\t\t\tgantt.ext.export_api._customProjectProperties(data, config);\r\n\r\n\t\t\tgantt.ext.export_api._customTaskProperties(data, config);\r\n\r\n\t\t\tif (config.skip_circular_links) {\r\n\t\t\t\tgantt.ext.export_api._clearRecLinks(data);\r\n\t\t\t}\r\n\r\n\t\t\tconfig = gantt.ext.export_api._exportConfig(data, config);\r\n\r\n\t\t\tgantt.ext.export_api._sendToExport(config, config.type || \"msproject\");\r\n\t\t\tgantt.config.xml_date = oldXmlDate;\r\n\t\t\tgantt.config.date_format = oldDateFormat;\r\n\t\t\tgantt.templates.xml_format = oldXmlFormat;\r\n\t\t\tgantt.templates.format_date = oldFormatDate;\r\n\r\n\t\t\tgantt.config.$custom_data = null;\r\n\t\t\tgantt.config.custom = null;\r\n\t\t},\r\n\r\n\t\texportToPrimaveraP6(config) {\r\n\t\t\tconfig = config || {};\r\n\t\t\tconfig.type = \"primaveraP6\";\r\n\t\t\treturn gantt.exportToMSProject(config);\r\n\t\t},\r\n\r\n\t\t_nodejsImportExcel(config) {\r\n\t\t\t// tslint:disable-next-line no-implicit-dependencies\r\n\t\t\tconst formDataInstance = require(\"form-data\");\r\n\r\n\t\t\tconst url = config.server || gantt.ext.export_api._apiUrl;\r\n\t\t\tconst network = gantt.ext.export_api.getNodeJSTransport(url);\r\n\t\t\tconst parts1 = url.split(\"://\")[1];\r\n\t\t\tconst parts2 = parts1.split(\"/\")[0].split(\":\");\r\n\t\t\tconst parts3 = parts1.split(\"/\");\r\n\r\n\t\t\tconst hostname = parts2[0];\r\n\t\t\tconst port = parts2[1] || network.defaultPort;\r\n\t\t\tconst path = \"/\" + parts3.slice(1).join(\"/\");\r\n\r\n\t\t\tconst options = {\r\n\t\t\t\thostname,\r\n\t\t\t\tport,\r\n\t\t\t\tpath,\r\n\t\t\t\tmethod: \"POST\",\r\n\t\t\t\theaders: {\r\n\t\t\t\t\t\"X-Requested-With\": \"XMLHttpRequest\"\r\n\t\t\t\t}\r\n\t\t\t};\r\n\r\n\t\t\tconst formData = new formDataInstance();\r\n\t\t\tformData.append(\"file\", config.data);\r\n\t\t\tformData.append(\"type\", \"excel-parse\");\r\n\t\t\tformData.append(\"data\", JSON.stringify({\r\n\t\t\t\tsheet: config.sheet || 0\r\n\t\t\t}));\r\n\r\n\t\t\toptions.headers[\"Content-Type\"] = formData.getHeaders()[\"content-type\"];\r\n\r\n\t\t\tconst req = network.module.request(options, function(res) {\r\n\t\t\t\tlet resData = \"\";\r\n\t\t\t\tres.on(\"data\", function(d) {\r\n\t\t\t\t\tresData += d;\r\n\t\t\t\t});\r\n\t\t\t\tres.on(\"end\", function(d) {\r\n\t\t\t\t\tconfig.callback(resData.toString());\r\n\t\t\t\t});\r\n\t\t\t});\r\n\r\n\t\t\treq.on(\"error\", function(error) {\r\n\t\t\t\t// tslint:disable-next-line no-console\r\n\t\t\t\tconsole.error(error);\r\n\t\t\t});\r\n\t\t\tformData.pipe(req);\r\n\t\t},\r\n\t\t_nodejsImportMSP(config) {\r\n\r\n\t\t\t// tslint:disable-next-line no-implicit-dependencies\r\n\t\t\tconst formDataInstance = require(\"form-data\");\r\n\r\n\t\t\tconst url = config.server || gantt.ext.export_api._apiUrl;\r\n\t\t\tconst network = gantt.ext.export_api.getNodeJSTransport(url);\r\n\t\t\tconst parts1 = url.split(\"://\")[1];\r\n\t\t\tconst parts2 = parts1.split(\"/\")[0].split(\":\");\r\n\t\t\tconst parts3 = parts1.split(\"/\");\r\n\r\n\t\t\tconst hostname = parts2[0];\r\n\t\t\tconst port = parts2[1] || network.defaultPort;\r\n\t\t\tconst path = \"/\" + parts3.slice(1).join(\"/\");\r\n\r\n\t\t\tconst options = {\r\n\t\t\t\thostname,\r\n\t\t\t\tport,\r\n\t\t\t\tpath,\r\n\t\t\t\tmethod: \"POST\",\r\n\t\t\t\theaders: {\r\n\t\t\t\t\t\"X-Requested-With\": \"XMLHttpRequest\"\r\n\t\t\t\t}\r\n\t\t\t};\r\n\r\n\t\t\tconst settings = {\r\n\t\t\t\tdurationUnit: config.durationUnit || undefined,\r\n\t\t\t\tprojectProperties: config.projectProperties || undefined,\r\n\t\t\t\ttaskProperties: config.taskProperties || undefined,\r\n\t\t\t};\r\n\r\n\t\t\tconst formData = new formDataInstance();\r\n\t\t\tformData.append(\"file\", config.data);\r\n\t\t\tformData.append(\"type\", config.type || \"msproject-parse\");\r\n\t\t\tformData.append(\"data\", JSON.stringify(settings), options);\r\n\r\n\t\t\toptions.headers[\"Content-Type\"] = formData.getHeaders()[\"content-type\"];\r\n\r\n\t\t\tconst req = network.module.request(options, function(res) {\r\n\t\t\t\tlet resData = \"\";\r\n\t\t\t\tres.on(\"data\", function(d) {\r\n\t\t\t\t\tresData += d;\r\n\t\t\t\t});\r\n\t\t\t\tres.on(\"end\", function(d) {\r\n\t\t\t\t\tconfig.callback(resData.toString());\r\n\t\t\t\t});\r\n\t\t\t});\r\n\r\n\t\t\treq.on(\"error\", function(error) {\r\n\t\t\t\t// tslint:disable-next-line no-console\r\n\t\t\t\tconsole.error(error);\r\n\t\t\t});\r\n\t\t\tformData.pipe(req);\r\n\t\t},\r\n\r\n\r\n\r\n\t\t_fixColumns(columns) {\r\n\t\t\tfor (let i = 0; i < columns.length; i++) {\r\n\t\t\t\tcolumns[i].label = columns[i].label || gantt.locale.labels[\"column_\" + columns[i].name];\r\n\t\t\t\tif (typeof columns[i].width === \"string\") {\r\n\t\t\t\t\tcolumns[i].width = columns[i].width * 1;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t},\r\n\r\n\r\n\t\t_xdr(url, pack, cb) {\r\n\t\t\tif (gantt.env.isNode) {\r\n\t\t\t\tgantt.ext.export_api._nodejsPostRequest(url, pack, cb);\r\n\t\t\t} else {\r\n\t\t\t\tgantt.ajax.post(url, pack, cb);\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\t_nodejsPostRequest(url, pack, cb){\r\n\t\t\tconst network = gantt.ext.export_api.getNodeJSTransport(url);\r\n\r\n\t\t\tconst parts1 = url.split(\"://\")[1];\r\n\t\t\tconst parts2 = parts1.split(\"/\")[0].split(\":\");\r\n\t\t\tconst parts3 = parts1.split(\"/\");\r\n\r\n\t\t\tconst hostname = parts2[0];\r\n\t\t\tconst port = parts2[1] || network.defaultPort;\r\n\t\t\tconst path = \"/\" + parts3.slice(1).join(\"/\");\r\n\r\n\t\t\tconst options = {\r\n\t\t\t\thostname,\r\n\t\t\t\tport,\r\n\t\t\t\tpath,\r\n\t\t\t\tmethod: \"POST\",\r\n\t\t\t\theaders: {\r\n\t\t\t\t\t\"Content-Type\": \"application/json\",\r\n\t\t\t\t\t\"Content-Length\": JSON.stringify(pack).length\r\n\t\t\t\t}\r\n\t\t\t};\r\n\r\n\t\t\tconst req = network.module.request(options, function(res) {\r\n\t\t\t\tconst resData = [];\r\n\t\t\t\tres.on(\"data\", function(d) {\r\n\t\t\t\t\tresData.push(d);\r\n\t\t\t\t});\r\n\t\t\t\tres.on(\"end\", function(d) {\r\n\t\t\t\t\tcb(Buffer.concat(resData));\r\n\t\t\t\t});\r\n\t\t\t});\r\n\r\n\t\t\treq.on(\"error\", function(error) {\r\n\t\t\t\t// tslint:disable-next-line no-console\r\n\t\t\t\tconsole.error(error);\r\n\t\t\t});\r\n\r\n\t\t\treq.write(JSON.stringify(pack));\r\n\t\t\treq.end();\r\n\t\t},\r\n\r\n\t\t_markColumns(base) {\r\n\t\t\tconst columns = base.config.columns;\r\n\t\t\tif (columns){\r\n\t\t\t\tfor (let i = 0; i < columns.length; i++) {\r\n\t\t\t\t\tif (columns[i].template){\r\n\t\t\t\t\t\tcolumns[i].$template = true;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t},\r\n\r\n\r\n\t\t_sendImportAjaxExcel(config) {\r\n\t\t\tconst url = config.server || gantt.ext.export_api._apiUrl;\r\n\t\t\tconst store = config.store || 0;\r\n\t\t\tconst formData = config.data;\r\n\t\t\tconst callback = config.callback;\r\n\r\n\t\t\tformData.append(\"type\", \"excel-parse\");\r\n\t\t\tformData.append(\"data\", JSON.stringify({\r\n\t\t\t\tsheet: config.sheet || 0\r\n\t\t\t}));\r\n\r\n\t\t\tif (store){\r\n\t\t\t\tformData.append(\"store\", store);\r\n\t\t\t}\r\n\r\n\t\t\tconst xhr = new XMLHttpRequest();\r\n\t\t\txhr.onreadystatechange = function(e) {\r\n\t\t\t\tif (xhr.readyState === 4 && xhr.status === 0) {// network error\r\n\t\t\t\t\tif (callback) {\r\n\t\t\t\t\t\tcallback(null);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t};\r\n\r\n\t\t\txhr.onload = function() {\r\n\t\t\t\tconst fail = xhr.status > 400;\r\n\t\t\t\tlet info = null;\r\n\r\n\t\t\t\tif (!fail) {\r\n\t\t\t\t\ttry {\r\n\t\t\t\t\t\tinfo = JSON.parse(xhr.responseText);\r\n\t\t\t\t\t} catch (e) { }\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (callback) {\r\n\t\t\t\t\tcallback(info);\r\n\t\t\t\t}\r\n\t\t\t};\r\n\r\n\t\t\txhr.open(\"POST\", url, true);\r\n\t\t\txhr.setRequestHeader(\"X-Requested-With\", \"XMLHttpRequest\");\r\n\t\t\txhr.send(formData);\r\n\t\t},\r\n\r\n\r\n\t\t_ajaxToExport(data, type, callback) {\r\n\t\t\tdelete data.callback;\r\n\r\n\t\t\tconst url = data.server || gantt.ext.export_api._apiUrl;\r\n\t\t\tconst pack = \"type=\" + type + \"&store=1&data=\" + encodeURIComponent(JSON.stringify(data));\r\n\r\n\t\t\tconst cb = function(loader) {\r\n\t\t\t\tconst xdoc = loader.xmlDoc || loader;\r\n\t\t\t\tconst fail = xdoc.status > 400;\r\n\t\t\t\tlet info = null;\r\n\r\n\t\t\t\tif (!fail) {\r\n\t\t\t\t\ttry {\r\n\t\t\t\t\t\tinfo = JSON.parse(xdoc.responseText);\r\n\t\t\t\t\t} catch (e) { }\r\n\t\t\t\t}\r\n\t\t\t\tcallback(info);\r\n\t\t\t};\r\n\r\n\t\t\tgantt.ext.export_api._xdr(url, pack, cb);\r\n\t\t},\r\n\t\t_serializableGanttConfig(config) {\r\n\t\t\tconst result = gantt.mixin({}, config);\r\n\r\n\t\t\tif (result.columns) {\r\n\t\t\t\tresult.columns = result.columns.map(function(col) {\r\n\t\t\t\t\tconst copy = gantt.mixin({}, col);\r\n\t\t\t\t\tdelete copy.editor;\r\n\t\t\t\t\treturn copy;\r\n\t\t\t\t});\r\n\t\t\t}\r\n\r\n\t\t\tdelete result.editor_types;\r\n\t\t\treturn result;\r\n\t\t},\r\n\r\n\t\t_sendToExport(data, type) {\r\n\t\t\tconst convert = gantt.date.date_to_str(gantt.config.date_format || gantt.config.xml_date);\r\n\t\t\tif (data.config) {\r\n\t\t\t\tdata.config = gantt.copy(gantt.ext.export_api._serializableGanttConfig(data.config));\r\n\t\t\t\tgantt.ext.export_api._markColumns(data, type);\r\n\r\n\t\t\t\tif (data.config.start_date && data.config.end_date) {\r\n\t\t\t\t\tif (data.config.start_date instanceof Date) {\r\n\t\t\t\t\t\tdata.config.start_date = convert(data.config.start_date);\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (data.config.end_date instanceof Date) {\r\n\t\t\t\t\t\tdata.config.end_date = convert(data.config.end_date);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tif (gantt.env.isNode) {\r\n\t\t\t\tconst url = data.server || gantt.ext.export_api._apiUrl;\r\n\t\t\t\tconst pack = {\r\n\t\t\t\t\ttype,\r\n\t\t\t\t\tstore: 0,\r\n\t\t\t\t\tdata: JSON.stringify(data)\r\n\t\t\t\t};\r\n\t\t\t\tconst callbackFunction = data.callback || function(response) {\r\n\t\t\t\t\t// tslint:disable-next-line no-console\r\n\t\t\t\t\tconsole.log(response);\r\n\t\t\t\t};\r\n\r\n\t\t\t\treturn gantt.ext.export_api._xdr(url, pack, callbackFunction);\r\n\t\t\t}\r\n\r\n\t\t\tif (data.callback) {\r\n\t\t\t\treturn gantt.ext.export_api._ajaxToExport(data, type, data.callback);\r\n\t\t\t}\r\n\r\n\r\n\t\t\tconst form = gantt.ext.export_api._createHiddenForm();\r\n\t\t\tform.firstChild.action = data.server || gantt.ext.export_api._apiUrl;\r\n\t\t\tform.firstChild.childNodes[0].value = JSON.stringify(data);\r\n\t\t\tform.firstChild.childNodes[1].value = type;\r\n\t\t\tform.firstChild.submit();\r\n\t\t},\r\n\r\n\t\t_createHiddenForm() {\r\n\t\t\tif (!gantt.ext.export_api._hidden_export_form) {\r\n\t\t\t\tconst t = gantt.ext.export_api._hidden_export_form = document.createElement(\"div\");\r\n\t\t\t\tt.style.display = \"none\";\r\n\t\t\t\tt.innerHTML = \"<form method='POST' target='_blank'><textarea name='data' style='width:0px; height:0px;' readonly='true'></textarea><input type='hidden' name='type' value=''></form>\";\r\n\t\t\t\tdocument.body.appendChild(t);\r\n\t\t\t}\r\n\t\t\treturn gantt.ext.export_api._hidden_export_form;\r\n\t\t},\r\n\r\n\r\n\t\t_copyObjectBase(obj) {\r\n\t\t\tconst copy = {\r\n\t\t\t\tstart_date: undefined,\r\n\t\t\t\tend_date: undefined\r\n\t\t\t};\r\n\t\t\tfor (const key in obj) {\r\n\t\t\t\tif (key.charAt(0) === \"$\"){\r\n\t\t\t\t\tcontinue;\r\n\t\t\t\t}\r\n\t\t\t\tcopy[key] = obj[key];\r\n\t\t\t}\r\n\t\t\tconst formatDate = gantt.templates.xml_format || gantt.templates.format_date;\r\n\r\n\t\t\tcopy.start_date = formatDate(copy.start_date);\r\n\t\t\tif (copy.end_date){\r\n\t\t\t\tcopy.end_date = formatDate(copy.end_date);\r\n\t\t\t}\r\n\r\n\t\t\treturn copy;\r\n\t\t},\r\n\r\n\r\n\t\t_color_box: null,\r\n\t\t_color_hash: {},\r\n\r\n\t\t_getStyles(css) {\r\n\t\t\tif (!gantt.ext.export_api._color_box) {\r\n\t\t\t\tgantt.ext.export_api._color_box = document.createElement(\"DIV\");\r\n\t\t\t\tgantt.ext.export_api._color_box.style.cssText = \"position:absolute; display:none;\";\r\n\t\t\t\tdocument.body.appendChild(gantt.ext.export_api._color_box);\r\n\t\t\t}\r\n\t\t\tif (gantt.ext.export_api._color_hash[css]){\r\n\t\t\t\treturn gantt.ext.export_api._color_hash[css];\r\n\t\t\t}\r\n\r\n\t\t\tgantt.ext.export_api._color_box.className = css;\r\n\t\t\tconst color = gantt.ext.export_api._getColor(gantt.ext.export_api._color_box, \"color\");\r\n\t\t\tconst backgroundColor = gantt.ext.export_api._getColor(gantt.ext.export_api._color_box, \"backgroundColor\");\r\n\t\t\treturn (gantt.ext.export_api._color_hash[css] = color + \";\" + backgroundColor);\r\n\t\t},\r\n\r\n\r\n\t\t_getMinutesWorktimeSettings(parsedRanges) {\r\n\t\t\tconst minutes = [];\r\n\t\t\tparsedRanges.forEach(function(range) {\r\n\t\t\t\tminutes.push(range.startMinute);\r\n\t\t\t\tminutes.push(range.endMinute);\r\n\t\t\t});\r\n\t\t\treturn minutes;\r\n\t\t},\r\n\r\n\t\t_getWorktimeSettings() {\r\n\r\n\t\t\tconst defaultWorkTimes = {\r\n\t\t\t\thours: [0, 24],\r\n\t\t\t\tminutes: null,\r\n\t\t\t\tdates: { 0: true, 1: true, 2: true, 3: true, 4: true, 5: true, 6: true }\r\n\t\t\t};\r\n\r\n\t\t\tlet time;\r\n\t\t\tif (!gantt.config.work_time) {\r\n\t\t\t\ttime = defaultWorkTimes;\r\n\t\t\t} else {\r\n\t\t\t\tconst wTime = gantt._working_time_helper;\r\n\t\t\t\tif (wTime && wTime.get_calendar) {\r\n\t\t\t\t\ttime = wTime.get_calendar();\r\n\t\t\t\t} else if (wTime) {\r\n\t\t\t\t\ttime = {\r\n\t\t\t\t\t\thours: wTime.hours,\r\n\t\t\t\t\t\tminutes: null,\r\n\t\t\t\t\t\tdates: wTime.dates\r\n\t\t\t\t\t};\r\n\t\t\t\t} else if (gantt.config.worktimes && gantt.config.worktimes.global) {\r\n\t\t\t\t\tconst settings = gantt.config.worktimes.global;\r\n\r\n\t\t\t\t\tif (settings.parsed) {\r\n\t\t\t\t\t\tconst minutes = gantt.ext.export_api._getMinutesWorktimeSettings(settings.parsed.hours);\r\n\t\t\t\t\t\ttime = {\r\n\t\t\t\t\t\t\thours: null,\r\n\t\t\t\t\t\t\tminutes,\r\n\t\t\t\t\t\t\tdates: {}\r\n\t\t\t\t\t\t};\r\n\t\t\t\t\t\tfor (const i in settings.parsed.dates) {\r\n\t\t\t\t\t\t\tif (Array.isArray(settings.parsed.dates[i])) {\r\n\t\t\t\t\t\t\t\ttime.dates[i] = gantt.ext.export_api._getMinutesWorktimeSettings(settings.parsed.dates[i]);\r\n\t\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t\ttime.dates[i] = settings.parsed.dates[i];\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\ttime = {\r\n\t\t\t\t\t\t\thours: settings.hours,\r\n\t\t\t\t\t\t\tminutes: null,\r\n\t\t\t\t\t\t\tdates: settings.dates\r\n\t\t\t\t\t\t};\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t} else {\r\n\t\t\t\t\ttime = defaultWorkTimes;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\treturn time;\r\n\t\t},\r\n\r\n\r\n\t\t_eachTaskTimed(start, end) {\r\n\t\t\treturn function(code, parent, master) {\r\n\t\t\t\tparent = parent || gantt.config.root_id;\r\n\t\t\t\tmaster = master || gantt;\r\n\r\n\t\t\t\tconst branch = gantt.getChildren(parent);\r\n\t\t\t\tif (branch){\r\n\t\t\t\t\tfor (let i = 0; i < branch.length; i++) {\r\n\t\t\t\t\t\tconst item = gantt._pull[branch[i]];\r\n\t\t\t\t\t\tif ((!start || item.end_date > start) && (!end || item.start_date < end)){\r\n\t\t\t\t\t\t\tcode.call(master, item);\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tif (gantt.hasChild(item.id)){\r\n\t\t\t\t\t\t\tgantt.eachTask(code, item.id, master);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t};\r\n\t\t},\r\n\r\n\r\n\t\t// patch broken json serialization in gantt 2.1\r\n\t\t_originalCopyObject: gantt.json._copyObject,\r\n\r\n\r\n\t\t_copyObjectPlain(obj) {\r\n\t\t\tconst text = gantt.templates.task_text(obj.start_date, obj.end_date, obj);\r\n\r\n\t\t\tconst copy = gantt.ext.export_api._copyObjectBase(obj);\r\n\t\t\tcopy.text = text || copy.text;\r\n\r\n\t\t\treturn copy;\r\n\t\t},\r\n\r\n\t\t_getColor(node, style) {\r\n\t\t\tconst value = node.currentStyle ? node.currentStyle[style] : getComputedStyle(node, null)[style];\r\n\t\t\tconst rgb = value.replace(/\\s/g, \"\").match(/^rgba?\\((\\d+),(\\d+),(\\d+)/i);\r\n\t\t\treturn ((rgb && rgb.length === 4) ?\r\n\t\t\t\t(\"0\" + parseInt(rgb[1], 10).toString(16)).slice(-2) +\r\n\t\t\t\t(\"0\" + parseInt(rgb[2], 10).toString(16)).slice(-2) +\r\n\t\t\t\t(\"0\" + parseInt(rgb[3], 10).toString(16)).slice(-2) : value).replace(\"#\", \"\");\r\n\t\t},\r\n\r\n\r\n\t\t// excel serialization\r\n\t\t_copyObjectTable(obj) {\r\n\t\t\t// Excel interprets UTC time as local time in every timezone, send local time instead of actual UTC time.\r\n\t\t\t// https://github.com/SheetJS/js-xlsx/issues/126#issuecomment-60531614\r\n\t\t\tconst toISOstring = gantt.date.date_to_str(\"%Y-%m-%dT%H:%i:%s.000Z\");\r\n\r\n\t\t\tconst copy = gantt.ext.export_api._copyObjectColumns(obj, gantt.ext.export_api._copyObjectPlain(obj));\r\n\t\t\tif (copy.start_date){\r\n\t\t\t\tcopy.start_date = toISOstring(obj.start_date);\r\n\t\t\t}\r\n\t\t\tif (copy.end_date){\r\n\t\t\t\tcopy.end_date = toISOstring(obj.end_date);\r\n\t\t\t}\r\n\r\n\t\t\t// private gantt._day_index_by_date was replaced by public gantt.columnIndexByDate in gantt 5.0\r\n\t\t\tconst getDayIndex = gantt._day_index_by_date ? gantt._day_index_by_date : gantt.columnIndexByDate;\r\n\r\n\t\t\tcopy.$start = getDayIndex.call(gantt, obj.start_date);\r\n\t\t\tcopy.$end = getDayIndex.call(gantt, obj.end_date);\r\n\r\n\t\t\t// GS-2100. Correct bar position considering hidden cells\r\n\t\t\tlet hiddenCells = 0;\r\n\t\t\tconst scaleCellsWidth = gantt.getScale().width;\r\n\t\t\tif (scaleCellsWidth.indexOf(0) > -1) {\r\n\t\t\t\tlet i = 0;\r\n\t\t\t\tfor (i; i < copy.$start; i++) {\r\n\t\t\t\t\tif (!scaleCellsWidth[i]) {\r\n\t\t\t\t\t\thiddenCells++;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tcopy.$start -= hiddenCells;\r\n\r\n\t\t\t\tfor (i; i < copy.$end; i++) {\r\n\t\t\t\t\tif (!scaleCellsWidth[i]) {\r\n\t\t\t\t\t\thiddenCells++;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tcopy.$end -= hiddenCells;\r\n\t\t\t}\r\n\r\n\t\t\tcopy.$level = obj.$level;\r\n\t\t\tcopy.$type = obj.$rendered_type;\r\n\r\n\t\t\tconst tmps = gantt.templates;\r\n\t\t\tcopy.$text = tmps.task_text(obj.start, obj.end_date, obj);\r\n\t\t\tcopy.$left = tmps.leftside_text ? tmps.leftside_text(obj.start, obj.end_date, obj) : \"\";\r\n\t\t\tcopy.$right = tmps.rightside_text ? tmps.rightside_text(obj.start, obj.end_date, obj) : \"\";\r\n\r\n\t\t\treturn copy;\r\n\t\t},\r\n\r\n\t\t_copyObjectColors(obj) {\r\n\t\t\tconst copy = gantt.ext.export_api._copyObjectTable(obj);\r\n\r\n\t\t\tconst node = gantt.getTaskNode(obj.id);\r\n\t\t\tif (node && node.firstChild) {\r\n\t\t\t\tlet color = gantt.ext.export_api._getColor((gantt._no_progress_colors ? node : node.firstChild), \"backgroundColor\");\r\n\t\t\t\tif (color === \"363636\"){\r\n\t\t\t\t\tcolor = gantt.ext.export_api._getColor(node, \"backgroundColor\");\r\n\t\t\t\t}\r\n\r\n\t\t\t\tcopy.$color = color;\r\n\t\t\t} else if (obj.color){\r\n\t\t\t\tcopy.$color = obj.color;\r\n\t\t\t}\r\n\r\n\t\t\treturn copy;\r\n\t\t},\r\n\r\n\t\t_copyObjectColumns(obj, copy) {\r\n\t\t\tfor (let i = 0; i < gantt.config.columns.length; i++) {\r\n\t\t\t\tconst ct = gantt.config.columns[i].template;\r\n\t\t\t\tif (ct) {\r\n\t\t\t\t\tlet val = ct(obj);\r\n\t\t\t\t\tif (val instanceof Date){\r\n\t\t\t\t\t\tval = gantt.templates.date_grid(val, obj);\r\n\t\t\t\t\t}\r\n\t\t\t\t\tcopy[\"_\" + i] = val;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn copy;\r\n\t\t},\r\n\r\n\t\t_copyObjectAll(obj) {\r\n\t\t\tconst copy = gantt.ext.export_api._copyObjectBase(obj);\r\n\r\n\t\t\tconst templates = [\r\n\t\t\t\t\"leftside_text\",\r\n\t\t\t\t\"rightside_text\",\r\n\t\t\t\t\"task_text\",\r\n\t\t\t\t\"progress_text\",\r\n\t\t\t\t\"task_class\"\r\n\t\t\t];\r\n\r\n\t\t\t// serialize all text templates\r\n\t\t\tfor (let i = 0; i < templates.length; i++) {\r\n\t\t\t\tconst template = gantt.templates[templates[i]];\r\n\t\t\t\tif (template){\r\n\t\t\t\t\tcopy[\"$\" + i] = template(obj.start_date, obj.end_date, obj);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tgantt.ext.export_api._copyObjectColumns(obj, copy);\r\n\t\t\tcopy.open = obj.$open;\r\n\t\t\treturn copy;\r\n\t\t},\r\n\r\n\r\n\t\t_serializeHtml() {\r\n\t\t\tconst smartScales = gantt.config.smart_scales;\r\n\t\t\tconst smartRendering = gantt.config.smart_rendering;\r\n\t\t\tif (smartScales || smartRendering) {\r\n\t\t\t\tgantt.config.smart_rendering = false;\r\n\t\t\t\tgantt.config.smart_scales = false;\r\n\t\t\t\tgantt.render();\r\n\t\t\t}\r\n\r\n\t\t\tconst html = gantt.$container.parentNode.innerHTML;\r\n\r\n\t\t\tif (smartScales || smartRendering) {\r\n\t\t\t\tgantt.config.smart_scales = smartScales;\r\n\t\t\t\tgantt.config.smart_rendering = smartRendering;\r\n\t\t\t\tgantt.render();\r\n\t\t\t}\r\n\r\n\t\t\treturn html;\r\n\t\t},\r\n\r\n\t\t_serializeAll() {\r\n\t\t\tgantt.json._copyObject = gantt.ext.export_api._copyObjectAll;\r\n\t\t\tconst data = gantt.ext.export_api._exportSerialize();\r\n\t\t\tgantt.json._copyObject = gantt.ext.export_api._originalCopyObject;\r\n\t\t\treturn data;\r\n\t\t},\r\n\r\n\t\t_serializePlain() {\r\n\t\t\tconst oldXmlFormat = gantt.templates.xml_format;\r\n\t\t\tconst oldFormatDate = gantt.templates.format_date;\r\n\t\t\tgantt.templates.xml_format = gantt.date.date_to_str(\"%Y%m%dT%H%i%s\", true);\r\n\t\t\tgantt.templates.format_date = gantt.date.date_to_str(\"%Y%m%dT%H%i%s\", true);\r\n\t\t\tgantt.json._copyObject = gantt.ext.export_api._copyObjectPlain;\r\n\r\n\t\t\tconst data = gantt.ext.export_api._exportSerialize();\r\n\r\n\t\t\tgantt.templates.xml_format = oldXmlFormat;\r\n\t\t\tgantt.templates.format_date = oldFormatDate;\r\n\t\t\tgantt.json._copyObject = gantt.ext.export_api._originalCopyObject;\r\n\r\n\t\t\tdelete data.links;\r\n\t\t\treturn data;\r\n\t\t},\r\n\r\n\t\t_getRaw() {\r\n\t\t\t// support Gantt < 5.0\r\n\t\t\tif (gantt._scale_helpers) {\r\n\t\t\t\tconst scales = gantt._get_scales();\r\n\t\t\t\tconst\tminWidth = gantt.config.min_column_width;\r\n\t\t\t\tconst\tautosizeMinWidth = gantt._get_resize_options().x ? Math.max(gantt.config.autosize_min_width, 0) : gantt.config.$task.offsetWidth;\r\n\t\t\t\tconst\theight = gantt.config.config.scale_height - 1;\r\n\t\t\t\treturn gantt._scale_helpers.prepareConfigs(scales, minWidth, autosizeMinWidth, height);\r\n\t\t\t} else { // Gantt >= 5.0\r\n\t\t\t\tconst timeline = gantt.$ui.getView(\"timeline\");\r\n\t\t\t\tif (timeline) {\r\n\t\t\t\t\tlet availWidth = timeline.$config.width;\r\n\t\t\t\t\tif (gantt.config.autosize === \"x\" || gantt.config.autosize === \"xy\") {\r\n\t\t\t\t\t\tavailWidth = Math.max(gantt.config.autosize_min_width, 0);\r\n\t\t\t\t\t}\r\n\t\t\t\t\tconst state = gantt.getState();\r\n\t\t\t\t\tconst\tscales = timeline._getScales();\r\n\t\t\t\t\tconst\tminWidth = gantt.config.min_column_width;\r\n\t\t\t\t\tconst\theight = gantt.config.scale_height - 1;\r\n\t\t\t\t\tconst\trtl = gantt.config.rtl;\r\n\t\t\t\t\treturn timeline.$scaleHelper.prepareConfigs(scales, minWidth, availWidth, height, state.min_date, state.max_date, rtl);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\t_serializeTable(config) {\r\n\t\t\tgantt.json._copyObject = config.visual ? gantt.ext.export_api._copyObjectColors : gantt.ext.export_api._copyObjectTable;\r\n\t\t\tconst data = gantt.ext.export_api._exportSerialize();\r\n\t\t\tgantt.json._copyObject = gantt.ext.export_api._originalCopyObject;\r\n\r\n\t\t\tdelete data.links;\r\n\r\n\t\t\tif (config.cellColors) {\r\n\t\t\t\tconst css = gantt.templates.timeline_cell_class || gantt.templates.task_cell_class;\r\n\t\t\t\tif (css) {\r\n\t\t\t\t\tconst raw = gantt.ext.export_api._getRaw();\r\n\t\t\t\t\tlet steps = raw[0].trace_x;\r\n\t\t\t\t\tfor (let i = 1; i < raw.length; i++){\r\n\t\t\t\t\t\tif (raw[i].trace_x.length > steps.length){\r\n\t\t\t\t\t\t\tsteps = raw[i].trace_x;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tfor (let i = 0; i < data.data.length; i++) {\r\n\t\t\t\t\t\tdata.data[i].styles = [];\r\n\t\t\t\t\t\tconst task = gantt.getTask(data.data[i].id);\r\n\t\t\t\t\t\tfor (let j = 0; j < steps.length; j++) {\r\n\t\t\t\t\t\t\tconst date = steps[j];\r\n\t\t\t\t\t\t\tconst cellCss = css(task, date);\r\n\t\t\t\t\t\t\tif (cellCss){\r\n\t\t\t\t\t\t\t\tdata.data[i].styles.push({ index: j, styles: gantt.ext.export_api._getStyles(cellCss) });\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn data;\r\n\t\t},\r\n\r\n\t\t_serializeScales(config) {\r\n\t\t\tconst scales = [];\r\n\t\t\tconst raw = gantt.ext.export_api._getRaw();\r\n\r\n\t\t\tlet min = Infinity;\r\n\t\t\tlet max = 0;\r\n\t\t\tfor (let i = 0; i < raw.length; i++) {\r\n\t\t\t\tmin = Math.min(min, raw[i].col_width);\r\n\t\t\t}\r\n\r\n\t\t\tfor (let i = 0; i < raw.length; i++) {\r\n\t\t\t\tlet start = 0;\r\n\t\t\t\tlet end = 0;\r\n\t\t\t\tconst row = [];\r\n\r\n\t\t\t\tscales.push(row);\r\n\t\t\t\tconst step = raw[i];\r\n\t\t\t\tmax = Math.max(max, step.trace_x.length);\r\n\t\t\t\tconst template = step.format || step.template || (step.date ? gantt.date.date_to_str(step.date) : gantt.config.date_scale);\r\n\r\n\t\t\t\tfor (let j = 0; j < step.trace_x.length; j++) {\r\n\t\t\t\t\tconst date = step.trace_x[j];\r\n\t\t\t\t\tend = start + Math.round(step.width[j] / min);\r\n\r\n\t\t\t\t\tconst scaleCell = { text: template(date), start, end, styles: \"\" };\r\n\r\n\t\t\t\t\tif (config.cellColors) {\r\n\t\t\t\t\t\tconst css = step.css || gantt.templates.scaleCell_class;\r\n\t\t\t\t\t\tif (css) {\r\n\t\t\t\t\t\t\tconst scaleCss = css(date);\r\n\t\t\t\t\t\t\tif (scaleCss){\r\n\t\t\t\t\t\t\t\tscaleCell.styles = gantt.ext.export_api._getStyles(scaleCss);\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\trow.push(scaleCell);\r\n\t\t\t\t\tstart = end;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\treturn { width: max, height: scales.length, data: scales };\r\n\t\t},\r\n\r\n\t\t_serializeColumns(config) {\r\n\t\t\tgantt.exportMode = true;\r\n\r\n\t\t\tconst columns = [];\r\n\t\t\tconst cols = gantt.config.columns;\r\n\r\n\t\t\tlet ccount = 0;\r\n\t\t\tfor (let i = 0; i < cols.length; i++) {\r\n\t\t\t\tif (cols[i].name === \"add\" || cols[i].name === \"buttons\") {\r\n\t\t\t\t\tcontinue;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tcolumns[ccount] = {\r\n\t\t\t\t\tid: ((cols[i].template) ? (\"_\" + i) : cols[i].name),\r\n\t\t\t\t\theader: cols[i].label || gantt.locale.labels[\"column_\" + cols[i].name],\r\n\t\t\t\t\twidth: (cols[i].width ? Math.floor(cols[i].width / 4) : \"\")\r\n\t\t\t\t};\r\n\r\n\t\t\t\tif (cols[i].name === \"duration\"){\r\n\t\t\t\t\tcolumns[ccount].type = \"number\";\r\n\t\t\t\t}\r\n\t\t\t\tif (cols[i].name === \"start_date\" || cols[i].name === \"end_date\") {\r\n\t\t\t\t\tcolumns[ccount].type = \"date\";\r\n\t\t\t\t\tif (config && config.rawDates){\r\n\t\t\t\t\t\tcolumns[ccount].id = cols[i].name;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tccount++;\r\n\t\t\t}\r\n\r\n\t\t\tgantt.exportMode = false;\r\n\t\t\treturn columns;\r\n\t\t},\r\n\r\n\t\t_exportSerialize() {\r\n\t\t\tgantt.exportMode = true;\r\n\r\n\t\t\tconst xmlFormat = gantt.templates.xml_format;\r\n\t\t\tconst formatDate = gantt.templates.format_date;\r\n\r\n\t\t\t// use configuration date format for serialization so date could be parsed on the export\r\n\t\t\t// required when custom format date function is defined\r\n\t\t\tgantt.templates.xml_format =\r\n\t\t\t\tgantt.templates.format_date =\r\n\t\t\t\tgantt.date.date_to_str(gantt.config.date_format || gantt.config.xml_date);\r\n\r\n\t\t\tconst data = gantt.serialize();\r\n\r\n\t\t\tgantt.templates.xml_format = xmlFormat;\r\n\t\t\tgantt.templates.format_date = formatDate;\r\n\t\t\tgantt.exportMode = false;\r\n\t\t\treturn data;\r\n\t\t},\r\n\r\n\r\n\t\t_setLevel(data) {\r\n\t\t\tfor (let i = 0; i < data.length; i++) {\r\n\t\t\t\t// tslint:disable-next-line triple-equals\r\n\t\t\t\tif (data[i].parent == 0) {\r\n\t\t\t\t\tdata[i]._lvl = 1;\r\n\t\t\t\t}\r\n\t\t\t\tfor (let j = i + 1; j < data.length; j++) {\r\n\t\t\t\t\t// tslint:disable-next-line triple-equals\r\n\t\t\t\t\tif (data[i].id == data[j].parent) {\r\n\t\t\t\t\t\tdata[j]._lvl = data[i]._lvl + 1;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\t_clearLevel(data) {\r\n\t\t\tfor (let i = 0; i < data.length; i++) {\r\n\t\t\t\tdelete data[i]._lvl;\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\t_clearRecLinks(data) {\r\n\t\t\tgantt.ext.export_api._setLevel(data.data);\r\n\t\t\tconst tasks = {};\r\n\t\t\tfor (let i = 0; i < data.data.length; i++) {\r\n\t\t\t\ttasks[data.data[i].id] = data.data[i];\r\n\t\t\t}\r\n\r\n\t\t\tconst links = {};\r\n\r\n\t\t\tfor (let i = 0; i < data.links.length; i++) {\r\n\t\t\t\tconst link = data.links[i];\r\n\t\t\t\tif (gantt.isTaskExists(link.source) && gantt.isTaskExists(link.target) &&\r\n\t\t\t\t\ttasks[link.source] && tasks[link.target]) {\r\n\t\t\t\t\tlinks[link.id] = link;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tfor (const j in links) {\r\n\t\t\t\tgantt.ext.export_api._makeLinksSameLevel(links[j], tasks);\r\n\t\t\t}\r\n\r\n\t\t\tconst skippedLinks = {};\r\n\t\t\tfor (const j in tasks) {\r\n\t\t\t\tgantt.ext.export_api._clearCircDependencies(tasks[j], links, tasks, {}, skippedLinks, null);\r\n\t\t\t}\r\n\r\n\t\t\tif (Object.keys(links)) {\r\n\t\t\t\tgantt.ext.export_api._clearLinksSameLevel(links, tasks);\r\n\t\t\t}\r\n\r\n\t\t\tfor (let i = 0; i < data.links.length; i++) {\r\n\t\t\t\tif (!links[data.links[i].id]) {\r\n\t\t\t\t\tdata.links.splice(i, 1);\r\n\t\t\t\t\ti--;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tgantt.ext.export_api._clearLevel(data.data);\r\n\t\t},\r\n\r\n\t\t_clearCircDependencies(task, links, tasks, usedTasks, skippedLinks, prevLink) {\r\n\t\t\tconst sources = task.$_source;\r\n\t\t\tif (!sources) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tif (usedTasks[task.id]) {\r\n\t\t\t\tgantt.ext.export_api._onCircDependencyFind(prevLink, links, usedTasks, skippedLinks);\r\n\t\t\t}\r\n\r\n\t\t\tusedTasks[task.id] = true;\r\n\r\n\t\t\tconst targets = {};\r\n\r\n\t\t\tfor (let i = 0; i < sources.length; i++) {\r\n\t\t\t\tif (skippedLinks[sources[i]]) {\r\n\t\t\t\t\tcontinue;\r\n\t\t\t\t}\r\n\t\t\t\tconst curLink = links[sources[i]];\r\n\t\t\t\tconst targetTask = tasks[curLink._target];\r\n\t\t\t\tif (targets[targetTask.id]) { // two link from one task to another\r\n\t\t\t\t\tgantt.ext.export_api._onCircDependencyFind(curLink, links, usedTasks, skippedLinks);\r\n\t\t\t\t}\r\n\t\t\t\ttargets[targetTask.id] = true;\r\n\t\t\t\tgantt.ext.export_api._clearCircDependencies(targetTask, links, tasks, usedTasks, skippedLinks, curLink);\r\n\t\t\t}\r\n\t\t\tusedTasks[task.id] = false;\r\n\t\t},\r\n\r\n\t\t_onCircDependencyFind(link, links, usedTasks, skippedLinks) {\r\n\t\t\tif (link) {\r\n\t\t\t\tif (gantt.callEvent(\"onExportCircularDependency\", [link.id, link])) {\r\n\t\t\t\t\tdelete links[link.id];\r\n\t\t\t\t}\r\n\r\n\t\t\t\tdelete usedTasks[link._source];\r\n\t\t\t\tdelete usedTasks[link._target];\r\n\t\t\t\tskippedLinks[link.id] = true;\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\t_makeLinksSameLevel(link, tasks) {\r\n\t\t\tlet task;\r\n\t\t\tlet targetLvl;\r\n\t\t\tconst linkT = {\r\n\t\t\t\ttarget: tasks[link.target],\r\n\t\t\t\tsource: tasks[link.source]\r\n\t\t\t};\r\n\t\t\t// tslint:disable-next-line triple-equals\r\n\t\t\tif (linkT.target._lvl != linkT.source._lvl) {\r\n\t\t\t\tif (linkT.target._lvl < linkT.source._lvl) {\r\n\t\t\t\t\ttask = \"source\";\r\n\t\t\t\t\ttargetLvl = linkT.target._lvl;\r\n\t\t\t\t} else {\r\n\t\t\t\t\ttask = \"target\";\r\n\t\t\t\t\ttargetLvl = linkT.source._lvl;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tdo {\r\n\t\t\t\t\tconst parent = tasks[linkT[task].parent];\r\n\t\t\t\t\tif (!parent) {\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tlinkT[task] = parent;\r\n\t\t\t\t} while (linkT[task]._lvl < targetLvl);\r\n\r\n\t\t\t\tlet sourceParent = tasks[linkT.source.parent];\r\n\t\t\t\tlet\ttargetParent = tasks[linkT.target.parent];\r\n\t\t\t\t// tslint:disable-next-line triple-equals\r\n\t\t\t\twhile (sourceParent && targetParent && sourceParent.id != targetParent.id) {\r\n\t\t\t\t\tlinkT.source = sourceParent;\r\n\t\t\t\t\tlinkT.target = targetParent;\r\n\t\t\t\t\tsourceParent = tasks[linkT.source.parent];\r\n\t\t\t\t\ttargetParent = tasks[linkT.target.parent];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tlink._target = linkT.target.id;\r\n\t\t\tlink._source = linkT.source.id;\r\n\r\n\t\t\tif (!linkT.target.$_target){\r\n\t\t\t\tlinkT.target.$_target = [];\r\n\t\t\t}\r\n\t\t\tlinkT.target.$_target.push(link.id);\r\n\r\n\t\t\tif (!linkT.source.$_source){\r\n\t\t\t\tlinkT.source.$_source = [];\r\n\t\t\t}\r\n\t\t\tlinkT.source.$_source.push(link.id);\r\n\t\t},\r\n\r\n\t\t_clearLinksSameLevel(links, tasks) {\r\n\t\t\tfor (const link in links) {\r\n\t\t\t\tdelete links[link]._target;\r\n\t\t\t\tdelete links[link]._source;\r\n\t\t\t}\r\n\r\n\t\t\tfor (const task in tasks) {\r\n\t\t\t\tdelete tasks[task].$_source;\r\n\t\t\t\tdelete tasks[task].$_target;\r\n\t\t\t}\r\n\t\t},\r\n\r\n\r\n\t\t_customProjectProperties(data, config) {\r\n\t\t\tif (config && config.project) {\r\n\t\t\t\tfor (const i in config.project) {\r\n\t\t\t\t\tif (!gantt.config.$custom_data){\r\n\t\t\t\t\t\tgantt.config.$custom_data = {};\r\n\t\t\t\t\t}\r\n\t\t\t\t\tgantt.config.$custom_data[i] = typeof config.project[i] === \"function\" ? config.project[i](gantt.config) : config.project[i];\r\n\t\t\t\t}\r\n\t\t\t\tdelete config.project;\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\t_customTaskProperties(data, config) {\r\n\t\t\tif (config && config.tasks) {\r\n\t\t\t\tdata.data.forEach(function(el) {\r\n\t\t\t\t\tfor (const i in config.tasks) {\r\n\t\t\t\t\t\tif (!el.$custom_data){\r\n\t\t\t\t\t\t\tel.$custom_data = {};\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tel.$custom_data[i] = typeof config.tasks[i] === \"function\" ? config.tasks[i](el, gantt.config) : config.tasks[i];\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\t\t\t\tdelete config.tasks;\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\t_exportConfig(data, config) {\r\n\t\t\tconst projectName = config.name || \"gantt.xml\";\r\n\t\t\tdelete config.name;\r\n\r\n\t\t\tgantt.config.custom = config;\r\n\r\n\t\t\tconst time = gantt.ext.export_api._getWorktimeSettings();\r\n\r\n\t\t\tconst projectDates = gantt.getSubtaskDates();\r\n\t\t\tif (projectDates.start_date && projectDates.end_date) {\r\n\t\t\t\tconst formatDate = gantt.templates.format_date || gantt.templates.xml_format;\r\n\t\t\t\tgantt.config.start_end = {\r\n\t\t\t\t\tstart_date: formatDate(projectDates.start_date),\r\n\t\t\t\t\tend_date: formatDate(projectDates.end_date)\r\n\t\t\t\t};\r\n\t\t\t}\r\n\r\n\t\t\tconst manual = config.auto_scheduling === undefined ? false : !!config.auto_scheduling;\r\n\r\n\t\t\tconst res = {\r\n\t\t\t\tcallback: config.callback || null,\r\n\t\t\t\tconfig: gantt.config,\r\n\t\t\t\tdata,\r\n\t\t\t\tmanual,\r\n\t\t\t\tname: projectName,\r\n\t\t\t\tworktime: time\r\n\t\t\t};\r\n\t\t\tfor (const i in config) {\r\n\t\t\t\tres[i] = config[i];\r\n\t\t\t}\r\n\t\t\treturn res;\r\n\t\t},\r\n\r\n\r\n\t\t_sendImportAjaxMSP(config) {\r\n\t\t\tconst url = config.server || gantt.ext.export_api._apiUrl;\r\n\t\t\tconst store = config.store || 0;\r\n\t\t\tconst formData = config.data;\r\n\t\t\tconst callback = config.callback;\r\n\r\n\t\t\tconst settings = {\r\n\t\t\t\tdurationUnit: config.durationUnit || undefined,\r\n\t\t\t\tprojectProperties: config.projectProperties || undefined,\r\n\t\t\t\ttaskProperties: config.taskProperties || undefined,\r\n\t\t\t};\r\n\r\n\t\t\tformData.append(\"type\", config.type || \"msproject-parse\");\r\n\t\t\tformData.append(\"data\", JSON.stringify(settings));\r\n\r\n\t\t\tif (store){\r\n\t\t\t\tformData.append(\"store\", store);\r\n\t\t\t}\r\n\r\n\t\t\tconst xhr = new XMLHttpRequest();\r\n\t\t\txhr.onreadystatechange = function(e) {\r\n\t\t\t\tif (xhr.readyState === 4 && xhr.status === 0) {// network error\r\n\t\t\t\t\tif (callback) {\r\n\t\t\t\t\t\tcallback(null);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t};\r\n\r\n\t\t\txhr.onload = function(){\r\n\t\t\t\tconst fail = xhr.status > 400;\r\n\t\t\t\tlet info = null;\r\n\r\n\t\t\t\tif (!fail) {\r\n\t\t\t\t\ttry {\r\n\t\t\t\t\t\tinfo = JSON.parse(xhr.responseText);\r\n\t\t\t\t\t} catch (e) { }\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (callback) {\r\n\t\t\t\t\tcallback(info);\r\n\t\t\t\t}\r\n\t\t\t};\r\n\r\n\t\t\txhr.open(\"POST\", url, true);\r\n\t\t\txhr.setRequestHeader(\"X-Requested-With\", \"XMLHttpRequest\");\r\n\t\t\txhr.send(formData);\r\n\t\t}\r\n\r\n\t};\r\n\r\n\r\n\tgantt.exportToPDF = gantt.ext.export_api.exportToPDF;\r\n\tgantt.exportToPNG = gantt.ext.export_api.exportToPNG;\r\n\tgantt.exportToICal = gantt.ext.export_api.exportToICal;\r\n\tgantt.exportToExcel = gantt.ext.export_api.exportToExcel;\r\n\tgantt.exportToJSON = gantt.ext.export_api.exportToJSON;\r\n\tgantt.importFromExcel = gantt.ext.export_api.importFromExcel;\r\n\tgantt.importFromMSProject = gantt.ext.export_api.importFromMSProject;\r\n\tgantt.exportToMSProject = gantt.ext.export_api.exportToMSProject;\r\n\tgantt.importFromPrimaveraP6 = gantt.ext.export_api.importFromPrimaveraP6;\r\n\tgantt.exportToPrimaveraP6 = gantt.ext.export_api.exportToPrimaveraP6;\r\n\r\n\r\n}\r\n","interface IPoint {\r\n\tx: number;\r\n\ty: number;\r\n}\r\n\r\nexport class EventsManager {\r\n\tstatic create(gantt: any) {\r\n\t\treturn new EventsManager(gantt);\r\n\t}\r\n\tprivate _mouseDown: boolean = false;\r\n\tprivate _startPoint: IPoint;\r\n\tprivate _scrollState: IPoint;\r\n\tprivate _originAutoscroll: boolean;\r\n\tprivate _domEvents: any;\r\n\tprivate _timeline: any;\r\n\tprivate _gantt: any;\r\n\tprivate _trace: IPoint[];\r\n\tprivate _originalReadonly: boolean;\r\n\r\n\tconstructor(gantt: any) {\r\n\t\tthis._gantt = gantt;\r\n\t\tthis._domEvents = gantt._createDomEventScope();\r\n\t\tthis._trace = [];\r\n\t}\r\n\r\n\tdestructor() {\r\n\t\tthis._domEvents.detachAll();\r\n\t}\r\n\r\n\tattach(timeline: any): void {\r\n\t\tthis._timeline = timeline;\r\n\t\tconst gantt = this._gantt;\r\n\t\tthis._domEvents.attach(timeline.$task, \"mousedown\", (event) => {\r\n\t\t\tif (!gantt.config.drag_timeline) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\tconst { useKey,ignore, enabled } = gantt.config.drag_timeline;\r\n\t\t\tif(enabled === false) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tlet filterTargets = \".gantt_task_line, .gantt_task_link\";\r\n\t\t\tif(ignore !== undefined) {\r\n\t\t\t\tif(ignore instanceof Array){\r\n\t\t\t\t\tfilterTargets = ignore.join(\", \");\r\n\t\t\t\t} else {\r\n\t\t\t\t\tfilterTargets = ignore;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tif (filterTargets) {\r\n\t\t\t\tif (gantt.utils.dom.closest(event.target, filterTargets)) {\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tif (useKey && event[useKey] !== true) { return; }\r\n\r\n\t\t\tthis._startDrag(event);\r\n\t\t});\r\n\r\n\t\tthis._domEvents.attach(document, \"keydown\", (event) => {\r\n\t\t\tif (!gantt.config.drag_timeline) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\tconst { useKey } = gantt.config.drag_timeline;\r\n\t\t\tif (useKey && event[useKey] === true) {\r\n\t\t\t\tthis._applyDndReadyStyles();\r\n\t\t\t}\r\n\t\t});\r\n\t\tthis._domEvents.attach(document, \"keyup\", (event) => {\r\n\t\t\tif (!gantt.config.drag_timeline) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\tconst { useKey } = gantt.config.drag_timeline;\r\n\t\t\tif (useKey && event[useKey] === false) {\r\n\t\t\t\tthis._clearDndReadyStyles();\r\n\t\t\t\tthis._stopDrag(event);\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tthis._domEvents.attach(document, \"mouseup\", (event) => {\r\n\t\t\tthis._stopDrag(event);\r\n\t\t});\r\n\t\tthis._domEvents.attach(gantt.$root, \"mouseup\", (event) => {\r\n\t\t\tthis._stopDrag(event);\r\n\t\t});\r\n\t\tthis._domEvents.attach(document, \"mouseleave\", (event) => {\r\n\t\t\tthis._stopDrag(event);\r\n\t\t});\r\n\t\tthis._domEvents.attach(gantt.$root, \"mouseleave\", (event) => {\r\n\t\t\tthis._stopDrag(event);\r\n\t\t});\r\n\r\n\t\tthis._domEvents.attach(gantt.$root, \"mousemove\", (event) => {\r\n\t\t\tif (!gantt.config.drag_timeline) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\tconst { useKey } = gantt.config.drag_timeline;\r\n\t\t\tif (useKey && event[useKey] !== true) { return; }\r\n\t\t\t// GS-854. If we don't have useKey for the drag_timeline extension,\r\n\t\t\t// check the click_drag to not simultaneously use both extensions\r\n\t\t\tconst clickDrag = this._gantt.ext.clickDrag;\r\n\t\t\tconst clickDragUseKey = (this._gantt.config.click_drag || {}).useKey;\r\n\t\t\tif (clickDrag && clickDragUseKey) {\r\n\t\t\t\tif (!useKey && event[clickDragUseKey]) {\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tif (this._mouseDown === true) {\r\n\t\t\t\tthis._trace.push({ x: event.clientX, y: event.clientY });\r\n\t\t\t\tconst scrollPosition: IPoint = this._countNewScrollPosition({ x: event.clientX, y: event.clientY });\r\n\t\t\t\tthis._setScrollPosition(timeline, scrollPosition);\r\n\t\t\t\tthis._scrollState = scrollPosition;\r\n\t\t\t\tthis._startPoint = { x: event.clientX, y: event.clientY };\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\tprivate _calculateDirectionVector = () => {\r\n\t\tconst traceSteps = 10;\r\n\t\tif(this._trace.length >= traceSteps) {\r\n\t\t\tconst dots = this._trace.slice(this._trace.length - traceSteps);\r\n\r\n\t\t\tconst vectors = [];\r\n\t\t\tfor(let i = 1; i < dots.length; i++) {\r\n\t\t\t\tvectors.push({\r\n\t\t\t\t\tx: dots[i].x - dots[i - 1].x,\r\n\t\t\t\t\ty: dots[i].y - dots[i - 1].y\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t\tconst resultVector = {x:0, y:0};\r\n\r\n\t\t\tvectors.forEach((vector) => {\r\n\t\t\t\tresultVector.x += vector.x;\r\n\t\t\t\tresultVector.y += vector.y;\r\n\t\t\t});\r\n\r\n\t\t\tconst magnitude = Math.sqrt(resultVector.x*resultVector.x + resultVector.y*resultVector.y);\r\n\t\t\tconst angleDegrees = Math.atan2(Math.abs(resultVector.y), Math.abs(resultVector.x)) * 180 / Math.PI;\r\n\r\n\t\t\treturn {\r\n\t\t\t\tmagnitude,\r\n\t\t\t\tangleDegrees\r\n\t\t\t};\r\n\r\n\t\t}\r\n\t\treturn null;\r\n\t}\r\n\r\n\tprivate _applyDndReadyStyles = (): void => {\r\n\t\tthis._timeline.$task.classList.add(\"gantt_timeline_move_available\");\r\n\t}\r\n\r\n\tprivate _clearDndReadyStyles = (): void => {\r\n\t\tthis._timeline.$task.classList.remove(\"gantt_timeline_move_available\");\r\n\t}\r\n\r\n\tprivate _getScrollPosition = (timeline: any): IPoint => {\r\n\t\tconst gantt = this._gantt;\r\n\t\treturn {\r\n\t\t\tx: gantt.$ui.getView(timeline.$config.scrollX).getScrollState().position,\r\n\t\t\ty: gantt.$ui.getView(timeline.$config.scrollY).getScrollState().position\r\n\t\t};\r\n\t}\r\n\tprivate _countNewScrollPosition = (coords: IPoint): IPoint => {\r\n\t\tconst vector = this._calculateDirectionVector();\r\n\t\tlet shiftX = this._startPoint.x - coords.x;\r\n\t\tlet shiftY = this._startPoint.y - coords.y;\r\n\t\tif(vector){\r\n\t\t\tif(vector.angleDegrees < 15){\r\n\t\t\t\tshiftY = 0;\r\n\t\t\t} else if(vector.angleDegrees > 75){\r\n\t\t\t\tshiftX = 0;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tconst result = {\r\n\t\t\tx: this._scrollState.x + shiftX,\r\n\t\t\ty: this._scrollState.y + shiftY\r\n\t\t};\r\n\t\treturn result;\r\n\t}\r\n\tprivate _setScrollPosition = (timeline: any, coords: IPoint): void => {\r\n\t\tconst gantt = this._gantt;\r\n\t\trequestAnimationFrame(() => {\r\n\t\t\tgantt.scrollLayoutCell(timeline.$id, coords.x, coords.y);\r\n\t\t});\r\n\t}\r\n\tprivate _stopDrag = (event: Event): void => {\r\n\t\tconst gantt = this._gantt;\r\n\t\tthis._trace = [];\r\n\t\tgantt.$root.classList.remove(\"gantt_noselect\");\r\n\r\n\t\tif(this._originalReadonly !== undefined){\r\n\t\t\tgantt.config.readonly = this._originalReadonly;\r\n\t\t}\r\n\r\n\t\tif(this._originAutoscroll !== undefined){\r\n\t\t\tgantt.config.autoscroll = this._originAutoscroll;\r\n\t\t}\r\n\r\n\t\tif(gantt.config.drag_timeline){\r\n\t\t\tconst { useKey } = gantt.config.drag_timeline;\r\n\t\t\tif (useKey && event[useKey] !== true) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis._mouseDown = false;\r\n\t}\r\n\r\n\tprivate _startDrag = (event: any) : void => {\r\n\t\tconst gantt = this._gantt;\r\n\t\tthis._originAutoscroll = gantt.config.autoscroll;\r\n\t\tgantt.config.autoscroll = false;\r\n\r\n\t\tgantt.$root.classList.add(\"gantt_noselect\");\r\n\t\tthis._originalReadonly = gantt.config.readonly;\r\n\t\tgantt.config.readonly = true;\r\n\r\n\t\tthis._trace = [];\r\n\t\tthis._mouseDown = true;\r\n\t\tconst { x, y } = this._getScrollPosition(this._timeline);\r\n\t\tthis._scrollState = { x, y };\r\n\t\tthis._startPoint = { x: event.clientX, y: event.clientY };\r\n\t\tthis._trace.push(this._startPoint);\r\n\t}\r\n}","import { EventsManager } from \"./eventsManager\";\r\nexport default function(gantt: any){\r\n\tif (!gantt.ext){\r\n\t\tgantt.ext = {};\r\n\t}\r\n\r\n\tgantt.ext.dragTimeline = {\r\n\t\tcreate: () => EventsManager.create(gantt)\r\n\t};\r\n\r\n\tgantt.config.drag_timeline = {\r\n\t\tenabled: true\r\n\t};\r\n}","import * as eventable from \"../../utils/eventable\";\r\nimport { isEventable } from \"../../utils/helpers\";\r\n\r\nexport interface ISelectedRegionConfig {\r\n\tclassName?: string;\r\n\trender?: (startPoint: IPoint, endPoint: IPoint) => HTMLElement;\r\n\tviewPort?: HTMLElement;\r\n\tuseRequestAnimationFrame: boolean;\r\n\tcallback?: (startPoint: IPoint, endPoint: IPoint, startDate: Date, endDate: Date, tasksByDate: any[], tasksByIndex: any[]) => void;\r\n\tsingleRow: boolean;\r\n}\r\n\r\ninterface ICoordinates {\r\n\tleft: number;\r\n\ttop: number;\r\n}\r\n\r\nexport interface IPoint {\r\n\tabsolute: ICoordinates;\r\n\trelative: ICoordinates;\r\n}\r\n\r\nexport class SelectedRegion {\r\n\trender: () => void;\r\n\tprivate _viewPort: HTMLElement & eventable;\r\n\tprivate _el: HTMLElement = document.createElement(\"div\");\r\n\tprivate _callback: (startPoint: IPoint, endPoint: IPoint, startDate: Date, endDate: Date, tasksByDate: any[], tasksByIndex: any[]) => void;\r\n\tprivate _startPoint: IPoint;\r\n\tprivate _endPoint: IPoint;\r\n\tprivate _positionPoint: IPoint;\r\n\tprivate _useRequestAnimationFrame: boolean;\r\n\tprivate _startDate: Date;\r\n\tprivate _endDate: Date;\r\n\tprivate _singleRow: boolean;\r\n\tprivate _gantt: any;\r\n\tprivate _view: any;\r\n\r\n\tconstructor(config: ISelectedRegionConfig, gantt: any, view: any) {\r\n\t\tthis._gantt = gantt;\r\n\t\tthis._view = view;\r\n\t\tthis._viewPort = config.viewPort;\r\n\t\tthis._el.classList.add(config.className);\r\n\t\tif (typeof config.callback === \"function\") {\r\n\t\t\tthis._callback = config.callback;\r\n\t\t}\r\n\r\n\t\tthis.render = () => {\r\n\t\t\tlet node;\r\n\t\t\tif(config.render){\r\n\t\t\t\tnode = config.render(this._startPoint, this._endPoint);\r\n\t\t\t}else{\r\n\t\t\t\tnode = this.defaultRender(this._startPoint, this._endPoint);\r\n\t\t\t}\r\n\r\n\t\t\tif(node !== this._el){\r\n\t\t\t\tif(this._el && this._el.parentNode){\r\n\t\t\t\t\tthis._el.parentNode.removeChild(this._el);\r\n\t\t\t\t}\r\n\t\t\t\tthis._el = node;\r\n\t\t\t}\r\n\r\n\t\t\tif (config.className !== \"\") {\r\n\t\t\t\tthis._el.classList.add(config.className);\r\n\t\t\t}\r\n\t\t\tthis.draw();\r\n\t\t};\r\n\r\n\t\tif (!isEventable(this._viewPort)) {\r\n\t\t\teventable(this._viewPort);\r\n\t\t}\r\n\t\tthis._singleRow = config.singleRow;\r\n\t\tthis._useRequestAnimationFrame = config.useRequestAnimationFrame;\r\n\t}\r\n\r\n\tdefaultRender = (start: IPoint, end: IPoint) => {\r\n\t\tif(!this._el){\r\n\t\t\tthis._el = document.createElement(\"div\");\r\n\t\t}\r\n\t\tconst node = this._el;\r\n\t\t// const gantt = this._gantt;\r\n\r\n\t\tconst top = Math.min(start.relative.top, end.relative.top);\r\n\t\tconst bottom = Math.max(start.relative.top, end.relative.top);\r\n\t\tconst left = Math.min(start.relative.left, end.relative.left);\r\n\t\tconst right = Math.max(start.relative.left, end.relative.left);\r\n\r\n\t\tif (this._singleRow) {\r\n\t\t\tconst pos = this._getTaskPositionByTop(this._startPoint.relative.top);\r\n\t\t\tnode.style.height = pos.height + \"px\";\r\n\t\t\tnode.style.top = pos.top + \"px\";\r\n\t\t} else {\r\n\t\t\tnode.style.height = Math.abs(bottom - top) + \"px\";\r\n\t\t\tnode.style.top = top + \"px\";\r\n\t\t}\r\n\t\tnode.style.width = Math.abs(right - left) + \"px\";\r\n\t\tnode.style.left = left + \"px\";\r\n\t\treturn node;\r\n\t}\r\n\r\n\tdraw() {\r\n\t\tif (this._useRequestAnimationFrame) {\r\n\t\t\treturn requestAnimationFrame(() => {\r\n\t\t\t\tthis._viewPort.appendChild(this.getElement());\r\n\t\t\t});\r\n\t\t} else {\r\n\t\t\tthis._viewPort.appendChild(this.getElement());\r\n\t\t}\r\n\t}\r\n\r\n\tclear() {\r\n\t\tif (this._useRequestAnimationFrame) {\r\n\t\t\treturn requestAnimationFrame(() => {\r\n\t\t\t\tif (!this._el.parentNode) {\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\t\t\t\tthis._viewPort.removeChild(this._el);\r\n\t\t\t});\r\n\t\t} else {\r\n\t\t\tif (!this._el.parentNode) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\tthis._viewPort.removeChild(this._el);\r\n\t\t}\r\n\t}\r\n\r\n\tgetElement() {\r\n\t\treturn this._el;\r\n\t}\r\n\r\n\tgetViewPort() {\r\n\t\treturn this._viewPort;\r\n\t}\r\n\r\n\tsetStart(startPoint: IPoint) {\r\n\t\tconst gantt = this._gantt;\r\n\t\tthis._startPoint = startPoint;\r\n\t\tthis._startDate = gantt.dateFromPos(this._startPoint.relative.left);\r\n\t\tthis._viewPort.callEvent(\"onBeforeDrag\", [this._startPoint]);\r\n\t}\r\n\r\n\tsetEnd(endPoint: IPoint) {\r\n\t\tconst gantt = this._gantt;\r\n\t\tthis._endPoint = endPoint;\r\n\t\tif (this._singleRow) {\r\n\t\t\tconst pos = this._getTaskPositionByTop(this._startPoint.relative.top);\r\n\t\t\tthis._endPoint.relative.top = pos.top;\r\n\t\t}\r\n\t\tthis._endDate = gantt.dateFromPos(this._endPoint.relative.left);\r\n\t\tif (this._startPoint.relative.left > this._endPoint.relative.left) {\r\n\t\t\tthis._positionPoint = {\r\n\t\t\t\trelative: { left: this._endPoint.relative.left, top: this._positionPoint.relative.top },\r\n\t\t\t\tabsolute: { left: this._endPoint.absolute.left, top: this._positionPoint.absolute.top }\r\n\t\t\t};\r\n\t\t}\r\n\t\tif (this._startPoint.relative.top > this._endPoint.relative.top) {\r\n\t\t\tthis._positionPoint = {\r\n\t\t\t\trelative: { left: this._positionPoint.relative.left, top: this._endPoint.relative.top },\r\n\t\t\t\tabsolute: { left: this._positionPoint.absolute.left, top: this._endPoint.absolute.top }\r\n\t\t\t};\r\n\t\t}\r\n\r\n\r\n\t\tthis._viewPort.callEvent(\"onDrag\", [this._startPoint, this._endPoint]);\r\n\t}\r\n\r\n\tsetPosition(positionPoint: IPoint) {\r\n\t\tthis._positionPoint = positionPoint;\r\n\t}\r\n\r\n\tdragEnd(endPoint: IPoint) {\r\n\t\tconst gantt = this._gantt;\r\n\t\tif(endPoint.relative.left < 0){\r\n\t\t\tendPoint.relative.left = 0;\r\n\t\t}\r\n\t\tthis._viewPort.callEvent(\"onBeforeDragEnd\", [this._startPoint, endPoint]);\r\n\t\tthis.setEnd(endPoint);\r\n\t\t// GS-1422. The endDate can be null if we drag the mouse outside the Gantt container\r\n\t\tthis._endDate = this._endDate || gantt.getState().max_date;\r\n\r\n\t\tif (this._startDate.valueOf() > this._endDate.valueOf()) {\r\n\t\t\t[ this._startDate, this._endDate ] = [ this._endDate, this._startDate ];\r\n\t\t}\r\n\t\tthis.clear();\r\n\t\tconst tasksByTime = gantt.getTaskByTime(this._startDate, this._endDate);\r\n\t\tconst tasksByIndex = this._getTasksByTop(this._startPoint.relative.top, this._endPoint.relative.top);\r\n\r\n\t\tthis._viewPort.callEvent(\"onDragEnd\", [this._startPoint, this._endPoint]);\r\n\t\tif (this._callback) {\r\n\t\t\tthis._callback(this._startPoint, this._endPoint, this._startDate, this._endDate, tasksByTime, tasksByIndex);\r\n\t\t}\r\n\t}\r\n\r\n\tgetInBounds() {\r\n\t\treturn this._singleRow;\r\n\t}\r\n\r\n\tprivate _getTasksByTop(start: number, end:number) {\r\n\t\tconst gantt = this._gantt;\r\n\t\tlet startValue = start;\r\n\t\tlet endValue = end;\r\n\t\tif (start > end) {\r\n\t\t\tstartValue = end;\r\n\t\t\tendValue = start;\r\n\t\t}\r\n\t\tconst startIndex = this._getTaskPositionByTop(startValue).index;\r\n\t\tconst endIndex = this._getTaskPositionByTop(endValue).index;\r\n\t\tconst result = [];\r\n\t\tfor (let i = startIndex; i <= endIndex; i++) {\r\n\t\t\tconst task = gantt.getTaskByIndex(i);\r\n\t\t\tif (task) {\r\n\t\t\t\tresult.push(gantt.getTaskByIndex(i));\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn result;\r\n\t}\r\n\r\n\tprivate _getTaskPositionByTop(top: number){\r\n\t\tconst gantt = this._gantt;\r\n\t\tconst view = this._view;\r\n\t\tconst index = view.getItemIndexByTopPosition(top);\r\n\t\tconst task = gantt.getTaskByIndex(index);\r\n\t\tif(task){\r\n\t\t\tconst height = view.getItemHeight(task.id);\r\n\t\t\tconst itemTop = view.getItemTop(task.id);\r\n\t\t\treturn {\r\n\t\t\t\ttop: itemTop || 0,\r\n\t\t\t\theight: height || 0,\r\n\t\t\t\tindex,\r\n\t\t\t};\r\n\t\t} else {\r\n\t\t\tconst dataHeight = view.getTotalHeight();\r\n\t\t\treturn {\r\n\t\t\t\ttop: top > dataHeight ? dataHeight : 0,\r\n\t\t\t\theight: gantt.config.row_height,\r\n\t\t\t\tindex: top > dataHeight ? gantt.getTaskCount() : 0,\r\n\t\t\t};\r\n\t\t}\r\n\t}\r\n}","import * as domHelpers from \"../../core/ui/utils/dom_helpers\";\r\nimport { SelectedRegion } from \"./selectedRegion\";\r\n\r\nexport class EventsManager {\r\n\tprivate _mouseDown: boolean = false;\r\n\tprivate _domEvents: any;\r\n\tprivate _originPosition: string;\r\n\tprivate _gantt: any;\r\n\tprivate _restoreOriginPosition: () => void;\r\n\tconstructor(gantt: any) {\r\n\t\tthis._gantt = gantt;\r\n\t\tthis._domEvents = gantt._createDomEventScope();\r\n\t}\r\n\r\n\tattach(selectedRegion: SelectedRegion, useKey?: \"shiftKey\" | \"ctrlKey\" | \"altKey\", ignore?: any): void {\r\n\t\tconst gantt = this._gantt;\r\n\t\tconst _target = selectedRegion.getViewPort();\r\n\t\tthis._originPosition = window.getComputedStyle(_target).display;\r\n\t\tthis._restoreOriginPosition = () => {\r\n\t\t\t_target.style.position = this._originPosition;\r\n\t\t};\r\n\t\tif (this._originPosition === \"static\") {\r\n\t\t\t_target.style.position = \"relative\";\r\n\t\t}\r\n\t\tconst state = gantt.$services.getService(\"state\");\r\n\t\tstate.registerProvider(\"clickDrag\", () => {\r\n\t\t\tconst result = { autoscroll: false };\r\n\t\t\treturn result;\r\n\t\t});\r\n\r\n\r\n\t\tlet scheduledDndCoordinates = null;\r\n\t\tconst startDragAndDrop = () => {\r\n\t\t\tif (!scheduledDndCoordinates) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tthis._mouseDown = true;\r\n\t\t\tselectedRegion.setStart(gantt.copy(scheduledDndCoordinates));\r\n\t\t\tselectedRegion.setPosition(gantt.copy(scheduledDndCoordinates));\r\n\t\t\tselectedRegion.setEnd(gantt.copy(scheduledDndCoordinates));\r\n\t\t\tscheduledDndCoordinates = null;\r\n\t\t};\r\n\r\n\t\tthis._domEvents.attach(_target, \"mousedown\", (event) => {\r\n\t\t\tscheduledDndCoordinates = null;\r\n\t\t\tlet filterTargets = \".gantt_task_line, .gantt_task_link\";\r\n\t\t\tif (ignore !== undefined) {\r\n\t\t\t\tif (ignore instanceof Array) {\r\n\t\t\t\t\tfilterTargets = ignore.join(\", \");\r\n\t\t\t\t} else {\r\n\t\t\t\t\tfilterTargets = ignore;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tif (filterTargets) {\r\n\t\t\t\tif (gantt.utils.dom.closest(event.target, filterTargets)) {\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tstate.registerProvider(\"clickDrag\", () => {\r\n\t\t\t\tconst result = { autoscroll: this._mouseDown };\r\n\t\t\t\treturn result;\r\n\t\t\t});\r\n\r\n\t\t\tif (useKey && event[useKey] !== true) { return; }\r\n\t\t\tscheduledDndCoordinates = this._getCoordinates(event, selectedRegion);\r\n\t\t});\r\n\t\tconst eventElement = domHelpers.getRootNode(gantt.$root) || document.body;\r\n\t\tthis._domEvents.attach(eventElement, \"mouseup\", (event) => {\r\n\t\t\tscheduledDndCoordinates = null;\r\n\t\t\tif (useKey && event[useKey] !== true) { return; }\r\n\t\t\tif (this._mouseDown === true) {\r\n\t\t\t\tthis._mouseDown = false;\r\n\t\t\t\tconst coordinates = this._getCoordinates(event, selectedRegion);\r\n\t\t\t\tselectedRegion.dragEnd(coordinates);\r\n\t\t\t}\r\n\t\t});\r\n\t\tthis._domEvents.attach(_target, \"mousemove\", (event) => {\r\n\t\t\tif (useKey && event[useKey] !== true) { return; }\r\n\t\t\t// GS-854. If we don't have useKey for the click_drag extension,\r\n\t\t\t// check the drag_timeline to not simultaneously use both extensions\r\n\t\t\tconst dragTimeline = this._gantt.ext.clickDrag;\r\n\t\t\tconst dragTimelineUseKey = (this._gantt.config.drag_timeline || {}).useKey;\r\n\t\t\tif (dragTimeline && dragTimelineUseKey) {\r\n\t\t\t\tif (!useKey && event[dragTimelineUseKey]) {\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tlet coordinates = null;\r\n\t\t\tif(!this._mouseDown && scheduledDndCoordinates){\r\n\t\t\t\tcoordinates = this._getCoordinates(event, selectedRegion);\r\n\t\t\t\tif(Math.abs(scheduledDndCoordinates.relative.left - coordinates.relative.left) > 5){\r\n\t\t\t\t\t// add small threshold not to start dnd on simple click\r\n\t\t\t\t\tstartDragAndDrop();\r\n\t\t\t\t}\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\tif (this._mouseDown === true) {\r\n\t\t\t\tcoordinates = this._getCoordinates(event, selectedRegion);\r\n\t\t\t\tselectedRegion.setEnd(coordinates);\r\n\t\t\t\tselectedRegion.render();\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\tdetach(): void {\r\n\t\tconst gantt = this._gantt;\r\n\t\tthis._domEvents.detachAll();\r\n\t\tif(this._restoreOriginPosition){\r\n\t\t\tthis._restoreOriginPosition();\r\n\t\t}\r\n\r\n\t\tconst state = gantt.$services.getService(\"state\");\r\n\t\tstate.unregisterProvider(\"clickDrag\");\r\n\t}\r\n\r\n\tdestructor(): void {\r\n\t\tthis.detach();\r\n\t}\r\n\r\n\tprivate _getCoordinates(event: MouseEvent, selectedRegion: SelectedRegion) {\r\n\t\tconst viewPort = selectedRegion.getViewPort();\r\n\t\tconst viewPortBounds = viewPort.getBoundingClientRect();\r\n\t\tconst { clientX, clientY } = event;\r\n\t\tconst result = {\r\n\t\t\tabsolute: {\r\n\t\t\t\tleft: clientX,\r\n\t\t\t\ttop: clientY,\r\n\t\t\t},\r\n\t\t\trelative: {\r\n\t\t\t\tleft: clientX - viewPortBounds.left + viewPort.scrollLeft,\r\n\t\t\t\ttop: clientY - viewPortBounds.top + viewPort.scrollTop\r\n\t\t\t}\r\n\t\t};\r\n\t\treturn result;\r\n\t}\r\n}","import { EventsManager } from \"./eventsManager\";\r\nimport { ISelectedRegionConfig, SelectedRegion } from \"./selectedRegion\";\r\n\r\nexport default function(gantt: any){\r\n\tif (!gantt.ext) {\r\n\t\tgantt.ext = {};\r\n\t}\r\n\r\n\tconst defaultConfig: ISelectedRegionConfig = {\r\n\t\tclassName: \"gantt_click_drag_rect\",\r\n\t\tuseRequestAnimationFrame: true,\r\n\t\tcallback: undefined,\r\n\t\tsingleRow: false\r\n\t};\r\n\r\n\tconst eventsManager = new EventsManager(gantt);\r\n\r\n\tgantt.ext.clickDrag = eventsManager;\r\n\r\n\tgantt.attachEvent(\"onGanttReady\", () => {\r\n\t\tconst config: ISelectedRegionConfig = { viewPort: gantt.$task_data, ...defaultConfig };\r\n\t\tif (gantt.config.click_drag){\r\n\t\t\tconst clickDrag = gantt.config.click_drag;\r\n\t\t\tconfig.render = clickDrag.render || defaultConfig.render;\r\n\t\t\tconfig.className = clickDrag.className || defaultConfig.className;\r\n\t\t\tconfig.callback = clickDrag.callback || defaultConfig.callback;\r\n\t\t\tconfig.viewPort = clickDrag.viewPort || gantt.$task_data;\r\n\t\t\tconfig.useRequestAnimationFrame = clickDrag.useRequestAnimationFrame === undefined ?\r\n\t\t\t\tdefaultConfig.useRequestAnimationFrame : clickDrag.useRequestAnimationFrame;\r\n\r\n\t\t\tconfig.singleRow = clickDrag.singleRow === undefined ? defaultConfig.singleRow : clickDrag.singleRow;\r\n\t\t\tconst timeline = gantt.$ui.getView(\"timeline\");\r\n\t\t\tconst selectedRegion = new SelectedRegion(config, gantt, timeline);\r\n\t\t\tgantt.ext.clickDrag.attach(selectedRegion, clickDrag.useKey, clickDrag.ignore);\r\n\t\t}\r\n\t});\r\n\r\n\tgantt.attachEvent(\"onDestroy\", () => {\r\n\t\teventsManager.destructor();\r\n\t});\r\n\r\n}","\r\nimport click_drag from \"./click_drag\";\r\nimport drag_timeline from \"./drag_timeline\";\r\nimport export_api from \"./export_api\";\r\nimport fullscreen from \"./fullscreen\";\r\nimport * as keyboard_navigation from \"./keyboard_navigation\";\r\nimport * as marker from \"./marker\";\r\nimport * as multiselect from \"./multiselect\";\r\nimport quick_info from \"./quick_info\";\r\nimport tooltip from \"./tooltip\";\r\nimport undo from \"./undo\";\r\n\r\nexport default {\r\n\tclick_drag,\r\n\tdrag_timeline,\r\n\tfullscreen,\r\n\tkeyboard_navigation,\r\n\tquick_info,\r\n\ttooltip,\r\n\tundo,\r\n\tmarker,\r\n\tmultiselect,\r\n\texport_api,\r\n};","import extensions from \"./ext/extensions_gpl\";\r\nimport * as base from \"./factory/make_instance_web\";\r\nimport * as scope from \"./utils/global\";\r\nconst gantt = (scope as any).gantt = base(extensions);\r\n\r\nexport default gantt;\r\nexport { gantt };"],"sourceRoot":""}
src/components/dhtmlxGantt/codebase/skins/dhtmlxgantt_broadway.css
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1 @@
.gantt_grid{background-color:#d6d6d6}.gantt_grid_scale .gantt_grid_head_cell{border-top:none!important;border-right:1px solid #4f4f4f!important;border-left:1px solid #5b5b5b!important}.gantt_popup_title{background-color:#4f4f4f;background-size:5px 5px;background-size:4px 4px;background-position:0 0,2px 2px;background-image:linear-gradient(45deg,hsla(0,0%,100%,.05) 25%,transparent 0,transparent 75%,hsla(0,0%,100%,.05) 0,hsla(0,0%,100%,.05)),linear-gradient(45deg,hsla(0,0%,100%,.05) 25%,transparent 0,transparent 75%,hsla(0,0%,100%,.05) 0,hsla(0,0%,100%,.05));color:#e1e1e1;font-size:14px}.gantt_grid_data .gantt_row,.gantt_grid_data .gantt_row.odd{background-color:#dbdbdb;border-top:1px solid #f6f6f6;border-bottom:1px solid #bababa}.gantt_grid_data .gantt_row .gantt_cell,.gantt_grid_data .gantt_row.odd .gantt_cell{border-right:none}.gridHoverStyle{border-top:1px solid #ededed;background-color:#ededed}.gridSelection{border-top-color:#fff087}.gridSelection,.timelineSelection{background-color:#fff3a1}.gantt_cell .gantt_tree_icon.gantt_folder_closed,.gantt_cell .gantt_tree_icon.gantt_folder_open{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABEAAAAPCAYAAAACsSQRAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoV2luZG93cykiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6ODhBMDIwQzhDRUI3MTFFMjg4RUJDNUMzQkZEREM2RDIiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6ODhBMDIwQzlDRUI3MTFFMjg4RUJDNUMzQkZEREM2RDIiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo4OEEwMjBDNkNFQjcxMUUyODhFQkM1QzNCRkREQzZEMiIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDo4OEEwMjBDN0NFQjcxMUUyODhFQkM1QzNCRkREQzZEMiIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PntuzoIAAACySURBVHjaYmTAAjo6Ov4z4AAVFRWM6GJM6ALt7e0OUCYjFowsDwfIEjDbDRgZGSf8//8fUzEj4wGgeAGQeQFJ+CIj0IALQEl9BjIB0NADTJQYAHWdAxMDFQBVDGEB+ukgxYYAcQNSzCCnh4NY0o89VkOAAbMfV5gBNR0AytuDXAs01AEUxbhcwoAj1c4HaUTi9wMNwWnb/0ERO0xA/z6k0IyP4NgBGpRApgEfgHgBQIABAAcyQOF3e6FiAAAAAElFTkSuQmCC)}.gantt_cell .gantt_tree_icon.gantt_file{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoV2luZG93cykiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6RkQ2NjJFM0ZDRUI3MTFFMkFGNzc4M0YxNUM2NzkwMTIiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6RkQ2NjJFNDBDRUI3MTFFMkFGNzc4M0YxNUM2NzkwMTIiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDpGRDY2MkUzRENFQjcxMUUyQUY3NzgzRjE1QzY3OTAxMiIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDpGRDY2MkUzRUNFQjcxMUUyQUY3NzgzRjE1QzY3OTAxMiIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PhnnqLUAAAExSURBVHjanFPtUcMwDI28AB0BJkg6AWEEJqAbxPxLJkh+phuUDdiAbtAwAYxAJ0jf60k51ecWDt3pZFtPn5akSKjv+3uIBlyLSMW3eZ4niD1423Xdt8dLYjzCqCluEJyNcPJq9+CMJzMGaAtet20rZJ7Bb+eIIhHYw0UGLvIRwBoRplx04CrgWModgwAXhTXj8Usjr73xMAwzJbNInBwU/8ASoqV9LbInYqwc2tJBrZdd8XcaVT4GpFOa52topL1Ks9CGVuGXL/vU40fqZPlGA7E5GX1NvQ7U4sSw1AWdMNIm07CfxIn1K6rcB2sI5yCXhXPyjPO7fuOLNfNikAAi+OnWILEUYFfLICWjXGptO12cyRk20G+sduiq/y7TOXJ2G906R13n0n0nmz2m63wSYAB0aMIyVTQbywAAAABJRU5ErkJggg==)}.chartHeaderBg{background-color:#dbdbdb}.gantt_task .gantt_task_scale .gantt_scale_cell{border-left:1px solid #f6f6f6;border-right:1px solid #bababa;color:#494949;font-size:14px}.taskProgressStyle{border-right:1px solid #1cb3fb;box-shadow:inset -1px 0 0 1px #04a1eb}.gantt_task_line{background-size:4px 4px;background-image:linear-gradient(135deg,hsla(0,0%,100%,.2) 25%,transparent 0,transparent 50%,hsla(0,0%,100%,.2) 0,hsla(0,0%,100%,.2) 75%,transparent 0,transparent);background-image:-moz-linear-gradient(0deg,transparent,transparent)}.gantt_task_line .gantt_task_content{text-align:left;font-weight:700;padding:0 8px;box-sizing:border-box}.gantt_task_link .gantt_link_arrow_right{border-width:5px;margin-top:-1px}.gantt_task_link .gantt_link_arrow_left{border-width:5px;margin-left:-3px;margin-top:-2px}.gantt_task_link .gantt_link_arrow_down,.gantt_task_link .gantt_link_arrow_up{border-width:5px}.gantt_task_line .gantt_task_progress_drag{bottom:-4px;height:10px;margin-left:-8px;width:16px}.gantt_row.gantt_project,.gantt_row.odd.gantt_project{background-color:#edffef}.gantt_task_row.gantt_project,.gantt_task_row.odd.gantt_project{background-color:#f5fff6}.gantt_task_line.gantt_project{background-color:#65c16f;border:1px solid #3c9445}.gantt_task_line.gantt_project .gantt_task_progress{background-color:#46ad51;border-right:1px solid #5abc65;box-shadow:inset -1px 0 0 1px #45a94f}.gantt_cal_light{background-color:#fff;border:none!important}.gantt_cal_light .gantt_cal_lsection{color:#959595}.gantt_cal_light .gantt_cal_larea{border-bottom:none}.gantt_cal_light .gantt_cal_ltitle{background-color:#4f4f4f;background-size:5px 5px;background-size:4px 4px;background-position:0 0,2px 2px;background-image:linear-gradient(45deg,hsla(0,0%,100%,.05) 25%,transparent 0,transparent 75%,hsla(0,0%,100%,.05) 0,hsla(0,0%,100%,.05)),linear-gradient(45deg,hsla(0,0%,100%,.05) 25%,transparent 0,transparent 75%,hsla(0,0%,100%,.05) 0,hsla(0,0%,100%,.05));font-size:14px;color:#e1e1e1;position:relative;padding-top:12px;padding-bottom:12px;font-weight:400}.gantt_cal_light .gantt_cal_ltitle .gantt_title{font-size:13px}.gantt_cal_light .gantt_btn_set{margin:5px 10px}.buttonBg{background:#fff}.gantt_btn_set.gantt_save_btn_set{background:#46ad51;text-shadow:0 -1px 0 #307738;color:#fff}.gantt_btn_set.gantt_delete_btn_set{margin-left:0;text-shadow:0 -1px 0 #6f6f6f;background:#ec8e00;text-shadow:0 -1px 0 #a60;color:#fff}.gantt_cal_light_wide{padding-left:0!important;padding-right:0!important}.gantt_cal_light_wide .gantt_cal_larea{border-left:none!important;border-right:none!important}.gantt_cal_ltitle .gantt_cancel_btn{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAMCAYAAABbayygAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH3QYLEgAjh/DRnAAAAMdJREFUGNN1kcsNwjAQRF9iCkgJdJCUkBJQpDkDFUALdBAqAM6WQglQAlxzSglQgAUH1tIKgS9ezzztz0Vd18QYW0lXfpzsFeM49sAGOEpaf0FHYAnsS6evYoy9g3qDAB6Flb4BtYk568Huu6RmBhBCaFNKV4MPrso9hNAClABd1z2ABfB00BNYmEf5NeTrT/wBh2GogDNQOa8CzuZ9QOuvccPkgZqU0gXA7xFgL2nr1pP1ne/xlCEAi0/5nfc4lzT9+cK5pOkNX8hRT8hMyVwAAAAASUVORK5CYII=);width:30px;top:0;right:0;background-position:6px 12px;background-repeat:no-repeat;position:absolute;height:100%}.gantt_popup_button.gantt_ok_button{background:#46ad51;text-shadow:0 -1px 0 #307738;color:#fff;font-weight:700}.gantt_popup_button.gantt_cancel_button{font-weight:700}.gantt_popup_shadow{box-shadow:3px 3px 3px rgba(0,0,0,.07)}.gantt_qi_big_icon.icon_edit{color:#454544}.gantt_qi_big_icon.icon_delete{text-shadow:0 -1px 0 #6f6f6f;background:#ec8e00;text-shadow:0 -1px 0 #a60;color:#fff;font-weight:700}.gantt_tooltip{box-shadow:3px 3px 3px rgba(0,0,0,.07);border-left:1px solid rgba(0,0,0,.07);border-top:1px solid rgba(0,0,0,.07);font-size:8pt;color:#494949}.gantt_container,.gantt_tooltip{background-color:#fff;font-family:Arial}.gantt_container{font-size:13px;border:1px solid #bababa;position:relative;white-space:nowrap;overflow-x:hidden;overflow-y:hidden}.gantt_touch_active{overscroll-behavior:none}.gantt_task_scroll{overflow-x:scroll}.gantt_grid,.gantt_task{position:relative;overflow-x:hidden;overflow-y:hidden;display:inline-block;vertical-align:top}.gantt_grid_scale,.gantt_task_scale{color:#494949;font-size:12px;border-bottom:1px solid #bababa;box-sizing:border-box}.gantt_grid_scale{background-color:#4f4f4f;background-size:5px 5px;background-size:4px 4px;background-position:0 0,2px 2px;background-image:linear-gradient(45deg,hsla(0,0%,100%,.05) 25%,transparent 0,transparent 75%,hsla(0,0%,100%,.05) 0,hsla(0,0%,100%,.05)),linear-gradient(45deg,hsla(0,0%,100%,.05) 25%,transparent 0,transparent 75%,hsla(0,0%,100%,.05) 0,hsla(0,0%,100%,.05));color:#e1e1e1;font-size:14px}.gantt_task_scale,.gantt_task_vscroll{background-color:#dbdbdb}.gantt_scale_line{box-sizing:border-box;-moz-box-sizing:border-box;border-top:1px solid #bababa}.gantt_scale_line:first-child{border-top:none}.gantt_grid_head_cell{display:inline-block;vertical-align:top;border-right:1px solid #bababa;text-align:center;position:relative;cursor:default;height:100%;box-sizing:border-box;-moz-box-sizing:border-box;line-height:33px;-moz-user-select:-moz-none;-webkit-user-select:none;user-select:none;overflow:hidden}.gantt_scale_line{clear:both}.gantt_grid_data{width:100%;overflow:hidden;position:relative}.gantt_row{position:relative;-webkit-user-select:none;-moz-user-select:none;-moz-user-select:-moz-none}.gantt_add,.gantt_grid_head_add{width:100%;height:100%;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH3QYHCygkHejN0gAAAD1JREFUOMtjtN15mYESwIJLwvHo6v/I/P3WoYzY1DExUAiGgQGMtjsvYwQYsWC/dSjjcAmD0YREo0AkFgAASgkTQxnJ6ggAAAAASUVORK5CYII=);background-position:50%;background-repeat:no-repeat;cursor:pointer;position:relative;-moz-opacity:.3;opacity:.3}.gantt_grid_head_cell.gantt_grid_head_add{-moz-opacity:.6;opacity:.6;top:0}.gantt_grid_head_cell.gantt_grid_head_add:hover{-moz-opacity:1;opacity:1}.gantt_grid_data .gantt_row.odd:hover,.gantt_grid_data .gantt_row:hover{border-top:1px solid #ededed;background-color:#ededed}.gantt_grid_data .gantt_row.odd:hover .gantt_add,.gantt_grid_data .gantt_row:hover .gantt_add{-moz-opacity:1;opacity:1}.gantt_row,.gantt_task_row{border-bottom:1px solid #ebebeb;background-color:#fff}.gantt_row.odd,.gantt_task_row.odd{background-color:#fff}.gantt_cell,.gantt_grid_head_cell,.gantt_row,.gantt_scale_cell,.gantt_task_cell,.gantt_task_row{box-sizing:border-box;-moz-box-sizing:border-box}.gantt_grid_head_cell,.gantt_scale_cell{line-height:inherit}.gantt_grid_scale .gantt_grid_column_resize_wrap{cursor:col-resize;position:absolute;width:13px;margin-left:-7px}.gantt_grid_column_resize_wrap .gantt_grid_column_resize{background-color:#bababa;height:100%;width:1px;margin:0 auto}.gantt_task_grid_row_resize_wrap{cursor:row-resize;position:absolute;height:13px;margin-top:-7px;left:0;width:100%}.gantt_task_grid_row_resize_wrap .gantt_task_grid_row_resize{background-color:#ebebeb;top:6px;height:1px;width:100%;margin:0 auto;position:relative}.gantt_drag_marker{pointer-events:none}.gantt_drag_marker.gantt_grid_resize_area,.gantt_drag_marker.gantt_row_grid_resize_area{background-color:hsla(0,0%,91%,.5);height:100%;width:100%;box-sizing:border-box}.gantt_drag_marker.gantt_grid_resize_area{border-left:1px solid #bababa;border-right:1px solid #bababa}.gantt_drag_marker.gantt_row_grid_resize_area{border-top:1px solid #bababa;border-bottom:1px solid #bababa;pointer-events:none}.gantt_row{display:flex}.gantt_row>div{flex-shrink:0;flex-grow:0}.gantt_cell{vertical-align:top;border-right:1px solid #ebebeb;padding-left:6px;padding-right:6px;height:100%;overflow:hidden;white-space:nowrap;font-size:13px}.gantt_cell_tree{display:flex;flex-wrap:nowrap}.gantt_grid_data .gantt_last_cell,.gantt_grid_scale .gantt_last_cell,.gantt_task .gantt_task_scale .gantt_scale_cell.gantt_last_cell,.gantt_task_bg .gantt_last_cell{border-right-width:0}.gantt_task .gantt_task_scale .gantt_scale_cell.gantt_last_cell{border-right-width:1px}.gantt_task_bg{overflow:hidden}.gantt_scale_cell{display:inline-block;white-space:nowrap;overflow:hidden;border-right:1px solid #bababa;text-align:center;height:100%}.gantt_task_cell{display:inline-block;height:100%;border-right:1px solid #ebebeb}.gantt_layout_cell.gantt_ver_scroll{width:0;background-color:transparent;height:1px;overflow-x:hidden;overflow-y:scroll;position:absolute;right:0;z-index:1}.gantt_ver_scroll>div{width:1px;height:1px}.gantt_hor_scroll{height:0;background-color:transparent;width:100%;clear:both;overflow-x:scroll;overflow-y:hidden}.gantt_layout_cell .gantt_hor_scroll{position:absolute}.gantt_hor_scroll>div{width:5000px;height:1px}.gantt_tree_icon,.gantt_tree_indent{flex-grow:0;flex-shrink:0}.gantt_tree_indent{width:15px;height:100%}.gantt_tree_content,.gantt_tree_icon{vertical-align:top}.gantt_tree_icon{width:28px;height:100%;background-repeat:no-repeat;background-position:50%}.gantt_tree_content{height:100%;white-space:nowrap;min-width:0}.gantt_tree_icon.gantt_open{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAYAAABWzo5XAAAAW0lEQVQ4T2NkoBJgpJI5DEPEoGnTpv0n5OWsrCwU32B4DWQIuiJshqKro7tBIK+iWEquiyg2CFugg102YC6CRRjFXsOZnMj1GoaBBA2CBSTFKZuQAbjkB1/uBwBrVFUTxDarVwAAAABJRU5ErkJggg==);width:18px;cursor:pointer}.gantt_tree_icon.gantt_close{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAYAAABWzo5XAAAASElEQVQ4T2NkoBJgpJI5DEPEoGnTpv0n5OWsrCwU32B4DWQIuiJshqKrG8EGYQt0cHCMhhFqYiMrHcECkuKUTcgAXPKDL/cDAMbOURO+6QJ7AAAAAElFTkSuQmCC);width:18px;cursor:pointer}.gantt_tree_icon.gantt_blank{width:18px}.gantt_tree_icon.gantt_folder_open{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAYAAABWzo5XAAAAs0lEQVQ4T62T0Q2EIBBEpQlzuaaMsQoqooqLsSljbMLLmMxmUXBR4U+Qt7Mzi2sqLVeJ00SgEMKWAnvvzYLyAyHfT5sU2fXDJSwCAXK8MI0/UTkva7IIFJsg3NSwnKdFoKtAWOQ1CN7CEqeTotE5L7QyJhmBcklZM4ZgTiAr3iOU3kD93ppO5SkMjB1EeXdBWoSkRql3YeIRe+cGvktS056JR9wsmeBUkujCfNXWCPC8GugPqn5ii/hV+FoAAAAASUVORK5CYII=)}.gantt_tree_icon.gantt_folder_closed{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAYAAABWzo5XAAAAfElEQVQ4T2NkoBJgpJI5DCgGTZ8+/T82gzMzMwlaCFcAM0RKQgyrI/0Dg/EahmIQyBB0DRvXr4W78tmLV1gtAbmYoEEgnciG4QpTogzCFyEwSyg2CBS2oCAZNQh3cA+hMAJ5AlcKxuVBlOgnNgVjMwyUrQjmamKLGaoZBAAOTFyLnFFW4wAAAABJRU5ErkJggg==)}.gantt_tree_icon.gantt_file{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAYAAABWzo5XAAAAeElEQVQ4T2NkoBJgRDZn+vTp/wmZm5mZiaIHph7DICkJMUJmMfgHBmMYhtUgbAo3rl+L4lp0NUQbBPI2umuRDaPIIFAYwAyjv0HoMQALM5JdhG4QLMxGDcKdyIdoGIE89OzFK4KZF5Rl8EY/QROQFGA1iBQD0NUCAJVjcxO0naAQAAAAAElFTkSuQmCC)}.gantt_grid_head_cell .gantt_sort{position:absolute;right:5px;top:8px;width:7px;height:13px;background-repeat:no-repeat;background-position:50%}.gantt_grid_head_cell .gantt_sort.gantt_asc{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAcAAAANCAYAAABlyXS1AAAARUlEQVR42mNgQAL1/VP/M2ADIIntF2/9x1AAlrh0C47hCmA60DFYwX88gIFGwNDY5D8uDFbg7hvwHx2jmIBTAlkB0e4BAEjlaNtBWJPnAAAAAElFTkSuQmCC)}.gantt_grid_head_cell .gantt_sort.gantt_desc{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAcAAAANCAYAAABlyXS1AAAARUlEQVR4nGNgQAKGxib/GbABkIS7b8B/DAUwCRiGK0CXwFBAb1DfP/U/LszwHwi2X7qFgUEArBtdAVwCBmAKMCSQFSDzAWXXaOHsXeqkAAAAAElFTkSuQmCC)}.gantt_inserted,.gantt_updated{font-weight:700}.gantt_deleted{text-decoration:line-through}.gantt_invalid{background-color:#ffe0e0}.gantt_error{color:red}.gantt_status{right:1px;padding:5px 10px;background:hsla(0,0%,61%,.1);position:absolute;top:1px;transition:opacity .2s;opacity:0}.gantt_status.gantt_status_visible{opacity:1}#gantt_ajax_dots span{transition:opacity .2s;background-repeat:no-repeat;opacity:0}#gantt_ajax_dots span.gantt_dot_visible{opacity:1}.gantt_column_drag_marker{border:1px solid #cecece;opacity:.8;pointer-events:none}.gantt_grid_head_cell_dragged{border:1px solid #cecece;opacity:.3}.gantt_grid_target_marker{position:absolute;top:0;width:2px;height:100%;background-color:#ffa011;transform:translateX(-1px)}.gantt_grid_target_marker:after,.gantt_grid_target_marker:before{display:block;content:"";position:absolute;left:-5px;width:0;height:0;border:6px solid transparent}.gantt_grid_target_marker:before{border-top-color:#ffa011}.gantt_grid_target_marker:after{bottom:0;border-bottom-color:#ffa011}.gantt_message_area{position:fixed;right:5px;width:250px;z-index:1000}.gantt-info{min-width:120px;padding:4px 4px 4px 20px;font-family:Arial;z-index:10000;margin:5px;margin-bottom:10px;transition:all .5s ease}.gantt-info.hidden{height:0;padding:0;border-width:0;margin:0;overflow:hidden}.gantt_modal_box{overflow:hidden;display:inline-block;min-width:250px;width:250px;text-align:center;position:fixed;z-index:20000;box-shadow:3px 3px 3px rgba(0,0,0,.07);font-family:Arial;border-radius:6px;border:1px solid #bababa;background:#fff}.gantt_popup_title{border-top-left-radius:6px;border-top-right-radius:6px;border-width:0}.gantt_button,.gantt_popup_button{border:1px solid #bababa;height:30px;line-height:30px;display:inline-block;margin:0 5px;border-radius:4px;background:#fff}.gantt-info,.gantt_button,.gantt_popup_button{user-select:none;-webkit-user-select:none;-moz-user-select:-moz-none;cursor:pointer}.gantt_popup_text{overflow:hidden}.gantt_popup_controls{border-radius:6px;padding:10px}.gantt_popup_button{min-width:100px}div.dhx_modal_cover{background-color:#000;cursor:default;filter:progid:DXImageTransform.Microsoft.Alpha(opacity=20);opacity:.2;position:fixed;z-index:19999;left:0;top:0;width:100%;height:100%;border:none;zoom:1}.gantt-info img,.gantt_modal_box img{float:left;margin-right:20px}.gantt-alert-error,.gantt-confirm-error{border:1px solid red}.gantt_button input,.gantt_popup_button div{border-radius:4px;font-size:14px;box-sizing:content-box;padding:0;margin:0;vertical-align:top}.gantt_popup_title{border-bottom:1px solid #bababa;height:40px;line-height:40px;font-size:20px}.gantt_popup_text{margin:15px 15px 5px;font-size:14px;color:#000;min-height:30px;border-radius:6px}.gantt-error,.gantt-info{font-size:14px;color:#000;box-shadow:3px 3px 3px rgba(0,0,0,.07);padding:0;background-color:#fff;border-radius:3px;border:1px solid #fff}.gantt-info div{padding:5px 10px;background-color:#fff;border-radius:3px;border:1px solid #bababa}.gantt-error{background-color:#d81b1b;border:1px solid #ff3c3c}.gantt-error div{background-color:#d81b1b;border:1px solid #940000;color:#fff}.gantt-warning{background-color:#f57c00;border:1px solid #ffa242}.gantt-warning div{background-color:#f57c00;border:1px solid #845030;color:#fff}.gantt_data_area div,.gantt_grid div{-ms-touch-action:none;-webkit-tap-highlight-color:rgba(0,0,0,0)}.gantt_data_area{position:relative;overflow-x:hidden;overflow-y:hidden;-moz-user-select:-moz-none;-webkit-user-select:none;user-select:none}.gantt_links_area{position:absolute;left:0;top:0}.gantt_side_content,.gantt_task_content,.gantt_task_progress{line-height:inherit;overflow:hidden;height:100%}.gantt_task_content{font-size:13px;color:#fff;width:100%;top:0;cursor:pointer;position:absolute;white-space:nowrap;text-align:center}.gantt_task_progress{text-align:center;z-index:0;background:#04a4f0;border-right:1px solid #1cb3fb;box-shadow:inset -1px 0 0 1px #04a1eb}.gantt_task_progress_wrapper{border-radius:inherit;position:relative;width:100%;height:100%;overflow:hidden}.gantt_task_line{border-radius:2px;position:absolute;box-sizing:border-box;background-color:#17b2fb;border:1px solid #049ae1;-webkit-user-select:none;-moz-user-select:none;-moz-user-select:-moz-none}.gantt_task_line.gantt_drag_move div{cursor:move}.gantt_touch_move,.gantt_touch_progress .gantt_touch_resize{transform:scale(1.02,1.1);transform-origin:50%}.gantt_touch_progress .gantt_task_progress_drag,.gantt_touch_resize .gantt_task_drag{transform:scaleY(1.3);transform-origin:50%}.gantt_side_content{position:absolute;white-space:nowrap;color:#6e6e6e;top:0;font-size:11px;font-size:12px}.gantt_side_content.gantt_left{right:100%;padding-right:20px}.gantt_side_content.gantt_right{left:100%;padding-left:20px}.gantt_side_content.gantt_link_crossing{bottom:8.75px;top:auto}.gantt_link_arrow,.gantt_task_link .gantt_line_wrapper{position:absolute;cursor:pointer}.gantt_line_wrapper div{background-color:#ffa011}.gantt_task_link:hover .gantt_line_wrapper div{box-shadow:0 0 5px 0 #ffa011}.gantt_task_link div.gantt_link_arrow{background-color:transparent;border-style:solid;width:0;height:0}.gantt_link_control{position:absolute;width:20px;top:0}.gantt_link_control div{display:none;cursor:pointer;box-sizing:border-box;position:relative;top:50%;margin-top:-7.5px;vertical-align:middle;border:1px solid #929292;border-radius:6.5px;height:13px;width:13px;background-color:#f0f0f0}.gantt_link_control.task_right div.gantt_link_point{margin-left:7px}.gantt_link_control div:hover{background-color:#fff}.gantt_link_control.task_left{left:-20px}.gantt_link_control.task_right{right:-20px}.gantt_link_target .gantt_link_control div,.gantt_task_line.gantt_drag_move .gantt_link_control div,.gantt_task_line.gantt_drag_move .gantt_task_drag,.gantt_task_line.gantt_drag_move .gantt_task_progress_drag,.gantt_task_line.gantt_drag_progress .gantt_link_control div,.gantt_task_line.gantt_drag_progress .gantt_task_drag,.gantt_task_line.gantt_drag_progress .gantt_task_progress_drag,.gantt_task_line.gantt_drag_resize .gantt_link_control div,.gantt_task_line.gantt_drag_resize .gantt_task_drag,.gantt_task_line.gantt_drag_resize .gantt_task_progress_drag,.gantt_task_line.gantt_selected .gantt_link_control div,.gantt_task_line.gantt_selected .gantt_task_drag,.gantt_task_line.gantt_selected .gantt_task_progress_drag,.gantt_task_line:hover .gantt_link_control div,.gantt_task_line:hover .gantt_task_drag,.gantt_task_line:hover .gantt_task_progress_drag{display:block}.gantt_link_source,.gantt_link_target{box-shadow:0 0 3px #04a4f0}.gantt_link_target.link_finish_allow,.gantt_link_target.link_start_allow{box-shadow:0 0 3px #ffbf5e}.gantt_link_target.link_finish_deny,.gantt_link_target.link_start_deny{box-shadow:0 0 3px #e87e7b}.link_finish_allow .gantt_link_control.task_end_date div,.link_start_allow .gantt_link_control.task_start_date div{background-color:#ffbf5e;border-color:#ffa011}.link_finish_deny .gantt_link_control.task_end_date div,.link_start_deny .gantt_link_control.task_start_date div{background-color:#e87e7b;border-color:#dd3e3a}.gantt_link_arrow_right{border-width:2.5px 0 2.5px 5px;border-top-color:transparent!important;border-right-color:transparent!important;border-bottom-color:transparent!important;border-left-color:#ffa011}.gantt_link_arrow_left{border-width:2.5px 5px 2.5px 0;margin-top:-1px;border-top-color:transparent!important;border-right-color:#ffa011;border-bottom-color:transparent!important;border-left-color:transparent!important}.gantt_link_arrow_up{border-width:0 2.5px 5px;border-color:transparent transparent #ffa011;border-top-color:transparent!important;border-right-color:transparent!important;border-bottom-color:#ffa011;border-left-color:transparent!important}.gantt_link_arrow_down{border-width:2.5px 5px 0 2.5px;border-top-color:#ffa011;border-right-color:transparent!important;border-bottom-color:transparent!important;border-left-color:transparent!important}.gantt_task_drag,.gantt_task_progress_drag{cursor:ew-resize;display:none;position:absolute}.gantt_task_drag.task_right{cursor:e-resize}.gantt_task_drag.task_left{cursor:w-resize}.gantt_task_drag{height:100%;width:8px;z-index:1;top:-1px}.gantt_task_drag.task_left{left:-7px}.gantt_task_drag.task_right{right:-7px}.gantt_task_progress_drag{height:8px;width:8px;bottom:-4px;margin-left:-4px;background-position:bottom;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAALCAYAAAB24g05AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoV2luZG93cykiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6MkY3Rjk0RUVDMkYzMTFFMkI1OThEQTA3ODU0OTkzMEEiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6MkY3Rjk0RUZDMkYzMTFFMkI1OThEQTA3ODU0OTkzMEEiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDoyRjdGOTRFQ0MyRjMxMUUyQjU5OERBMDc4NTQ5OTMwQSIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDoyRjdGOTRFREMyRjMxMUUyQjU5OERBMDc4NTQ5OTMwQSIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PobPBzIAAADkSURBVHjaYpk2bRoDDsAExL1QdjEQ/8OmiAWHZk4gXqymqhQM4ty6fU8OSMUA8XdiDBAB4k0a6iqWRga6EKcwMQXduHlnL5DpB8Rv0J2JDFSA+JiOtgZcMwiA2CAxkBxUDVYDLEAKgIpV9XQ0MZwFEgPJAZnHoWpRDAgC4n2W5saiQKfjClQGkBxQDciL+6B6wAbkA/EqJwdrTkUFOQZCAKQGpBbIXA3SCzJggo+XK7OEuBgDsQCkFqgHrBfsBT5eHgZSAUwP2IBfv36TbABMDygdtK1Zv6UESLORaAbIhG6AAAMAKN8wE24DXWcAAAAASUVORK5CYII=);background-repeat:no-repeat;z-index:1}.gantt_task_progress_drag:hover{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAALCAYAAAB24g05AAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAq0lEQVQoz6WMsQnCABBFXyII9rqB7qDNZQdtsoWirmAltpnh0BkUfhOHEqLNiaAJIeZ19+//lxRFQR3ungKnOHd5nld1vbRhPALOkjaSNsAlsnaBu4+Bq6TVO5O0BK7xaxa4+xQoJS2+i5GV0fkVuPs8xjMaiN89uh+Buy+Bm6QJLUgaA7fYkJjZGjhJGtCBLMsqYIuZPf/FzJ4pPektSMzsAOyBYcftAzi+ANj8gShpeTzJAAAAAElFTkSuQmCC)}.gantt_link_tooltip{box-shadow:3px 3px 3px #888;background-color:#fff;border-left:1px dotted #cecece;border-top:1px dotted #cecece;font-family:Tahoma;font-size:8pt;color:#444;padding:6px;line-height:20px}.gantt_link_direction{height:0;border:0 none #ffa011;border-bottom-style:dashed;border-bottom-width:2px;transform-origin:0 0;-ms-transform-origin:0 0;-webkit-transform-origin:0 0;z-index:2;margin-left:1px;position:absolute}.gantt_grid_data .gantt_row.gantt_selected,.gantt_grid_data .gantt_row.odd.gantt_selected{background-color:#fff3a1;border-top-color:#fff087}.gantt_task_row.gantt_selected{background-color:#fff3a1}.gantt_task_row.gantt_selected .gantt_task_cell{border-right-color:#ffec6e}.gantt_task_line.gantt_selected{box-shadow:0 0 5px #04a4f0}.gantt_task_line.gantt_project.gantt_selected{box-shadow:0 0 5px #46ad51}.gantt_task_line.gantt_milestone{visibility:hidden;background-color:#db7dc5;border:0 solid #cd49ae;box-sizing:content-box;-moz-box-sizing:content-box}.gantt_task_line.gantt_milestone div{visibility:visible}.gantt_task_line.gantt_milestone .gantt_task_content{background:inherit;border:inherit;border-width:1px;border-radius:inherit;box-sizing:border-box;-moz-box-sizing:border-box;transform:rotate(45deg)}.gantt_task_line.gantt_task_inline_color{border-color:#999}.gantt_task_line.gantt_task_inline_color .gantt_task_progress{background-color:#363636;opacity:.2}.gantt_task_line.gantt_task_inline_color.gantt_project.gantt_selected,.gantt_task_line.gantt_task_inline_color.gantt_selected{box-shadow:0 0 5px #999}.gantt_task_link.gantt_link_inline_color:hover .gantt_line_wrapper div{box-shadow:0 0 5px 0 #999}.gantt_critical_task{background-color:#e63030;border-color:#9d3a3a}.gantt_critical_task .gantt_task_progress{background-color:rgba(0,0,0,.4)}.gantt_critical_link .gantt_line_wrapper>div{background-color:#e63030}.gantt_critical_link .gantt_link_arrow{border-color:#e63030}.gantt_btn_set:focus,.gantt_cell:focus,.gantt_grid_head_cell:focus,.gantt_popup_button:focus,.gantt_qi_big_icon:focus,.gantt_row:focus{box-shadow:inset 0 0 1px 1px #4d90fe}.gantt_split_parent,.gantt_split_subproject{opacity:.1;pointer-events:none}.gantt_rollup_child .gantt_link_control,.gantt_rollup_child:hover .gantt_link_control{display:none}.gantt_unselectable,.gantt_unselectable div{-webkit-user-select:none;-moz-user-select:none;-moz-user-select:-moz-none}.gantt_cal_light{-webkit-tap-highlight-color:transparent;border-radius:6px;font-family:Arial;font-size:13px;border:1px solid #bababa;color:#494949;font-size:12px;position:absolute;z-index:10001;width:550px;height:250px;box-shadow:3px 3px 3px rgba(0,0,0,.07)}.gantt_cal_light_wide{width:650px}.gantt_cal_light select{font-family:Arial;border:1px solid #bababa;font-size:13px;padding:2px;margin:0}.gantt_cal_ltitle{padding:7px 10px;overflow:hidden;-webkit-border-top-left-radius:6px;-webkit-border-bottom-left-radius:0;-webkit-border-top-right-radius:6px;-webkit-border-bottom-right-radius:0;-moz-border-radius-topleft:6px;-moz-border-radius-bottomleft:0;-moz-border-radius-topright:6px;-moz-border-radius-bottomright:0;border-top-left-radius:6px;border-bottom-left-radius:0;border-top-right-radius:6px;border-bottom-right-radius:0}.gantt_cal_ltitle,.gantt_cal_ltitle span{white-space:nowrap}.gantt_cal_lsection{color:#727272;font-weight:700;padding:12px 0 5px 10px}.gantt_cal_lsection .gantt_fullday{float:right;margin-right:5px;font-size:12px;font-weight:400;line-height:20px;vertical-align:top;cursor:pointer}.gantt_cal_lsection{font-size:13px}.gantt_cal_ltext{padding:2px 10px;overflow:hidden}.gantt_cal_ltext textarea{overflow-y:auto;overflow-x:hidden;font-family:Arial;font-size:13px;box-sizing:border-box;border:1px solid #bababa;height:100%;width:100%;outline:none!important;resize:none}.gantt_section_constraint [data-constraint-time-select]{margin-left:20px}.gantt_time{font-weight:700}.gantt_cal_light .gantt_title{padding-left:10px}.gantt_cal_larea{border:1px solid #bababa;border-left:none;border-right:none;background-color:#fff;overflow:hidden;height:1px}.gantt_btn_set{margin:10px 7px 5px 10px;padding:5px 15px 5px 10px;float:left;border-radius:4px;border:0 solid #bababa;height:32px;font-weight:700;background:#fff;box-sizing:border-box;cursor:pointer}.gantt_hidden{display:none}.gantt_btn_set div{float:left;font-size:13px;height:22px;line-height:22px;background-repeat:no-repeat;vertical-align:middle}.gantt_save_btn{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABEAAAAPCAYAAAACsSQRAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoV2luZG93cykiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6QTBBQUI0RDhDRUJEMTFFMjhFM0ZENTlERUM1OEQzRTYiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6QTBBQUI0RDlDRUJEMTFFMjhFM0ZENTlERUM1OEQzRTYiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDpBMEFBQjRENkNFQkQxMUUyOEUzRkQ1OURFQzU4RDNFNiIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDpBMEFBQjREN0NFQkQxMUUyOEUzRkQ1OURFQzU4RDNFNiIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PjdPZV0AAACtSURBVHjanJPbDYUgEESvtwJKoQRLoRNL0RK0ArUCS9AOpAMclDVkw0s2mQ9XcpwJY2OM+VWMgDQ9/CsAEtoh9W6skw+S0Akd5hl1J6kADJBwADs9j9MmIszQ5GJo793qf2nwLUYc0E7xONbaBmloZKAsgCCLW0p2qCsBEEQ6F33gcBbg304I1JYA+BWHQFlAqCcclAXEykaguQSQaiyBVEmbm8RfLFgzo3MJMACZSGxiH8QaMAAAAABJRU5ErkJggg==);margin-top:2px;width:21px}.gantt_cancel_btn{margin-top:2px;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoV2luZG93cykiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6MDkzMDA3MzlDMzA0MTFFMjg2QTVFMzFEQzgwRkJERDYiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6MDkzMDA3M0FDMzA0MTFFMjg2QTVFMzFEQzgwRkJERDYiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDowOTMwMDczN0MzMDQxMUUyODZBNUUzMURDODBGQkRENiIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDowOTMwMDczOEMzMDQxMUUyODZBNUUzMURDODBGQkRENiIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PmYuYOUAAAEdSURBVHjaYvz//z8DJYAFXWDlypU8QKoIiD2A2AwqfAqIdwBxX3h4+Bdk9YzILgBqtgdS84FYEYeF94E4EWjIQZgAE5LmQCB1AKoZZKMPEAtAMYh9GSp3AKjWD8UFQAEhIPshEIOc3wHENUBb/qJ57SyQMoJyPwKxElDNO1gYFEE17wMKVmIJlzNQzeegrjaA6qmBecEbSvfh0GwMxGeBhoPoemQ9MAO0kEIbl2YTqPAFKK2IbMB3AjabYIkRZmQD7kNpMyI0G0PpO8gGbIUFJj7NQDk2INWIrIcJKfBAKcwJqvkcDs0TgFgXGo19KCkRmpDWQdWDEk0NUoCBoq0FqhkE/IEWbKJKUmZEz43QzFSKIzN1481M5ACAAAMAlfl/lCwRpagAAAAASUVORK5CYII=);width:20px}.gantt_delete_btn{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA4AAAAQCAYAAAAmlE46AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoV2luZG93cykiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6QzQzRjMxM0NDRUJEMTFFMjlCNDZDQzhFQUM0ODRCMEIiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6QzQzRjMxM0RDRUJEMTFFMjlCNDZDQzhFQUM0ODRCMEIiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDpDNDNGMzEzQUNFQkQxMUUyOUI0NkNDOEVBQzQ4NEIwQiIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDpDNDNGMzEzQkNFQkQxMUUyOUI0NkNDOEVBQzQ4NEIwQiIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PoU+5FoAAACMSURBVHja7JPdDYAgDIQLE+gmjuAIbOIKjMRIbAAb1BZLUozgz7OXfIbWKxeCAiKCwmNfXnsNP5S4mIkMrSYiEaY2LOFloO6QVF1JamPGc2IvpaeSbqXY4LkOLwU6OTyvgzBasxwnBnivYOGj/sEXg27gbd/JpWZiOf0pV7Anlq9UGqs07hTFC7sAAwCbSNs8SyqFMAAAAABJRU5ErkJggg==);margin-top:2px;width:20px}.gantt_cal_cover{width:100%;height:100%;position:fixed;z-index:10000;top:0;left:0;background-color:#000;opacity:.1;filter:progid:DXImageTransform.Microsoft.Alpha(opacity=10)}.gantt_custom_button{padding:0 3px;font-family:Arial;font-size:13px;font-weight:400;margin-right:10px;margin-top:-5px;cursor:pointer;float:right;height:21px;width:90px;border:1px solid #cecece;text-align:center;border-radius:4px}.gantt_custom_button div{cursor:pointer;float:none;height:21px;line-height:21px;vertical-align:middle}.gantt_custom_button div:first-child{display:none}.gantt_cal_light_wide{width:580px;padding:2px 4px}.gantt_cal_light_wide .gantt_cal_larea{box-sizing:border-box;border:1px solid #bababa}.gantt_cal_light_wide .gantt_cal_lsection{border:0;float:left;text-align:right;width:80px;height:20px;padding:5px 10px 0 0}.gantt_cal_light_wide .gantt_wrap_section{position:relative;padding:10px 0;overflow:hidden;border-bottom:1px solid #ebebeb}.gantt_cal_light_wide .gantt_section_time{overflow:hidden;padding-top:2px!important;padding-right:0;height:20px!important}.gantt_cal_light_wide .gantt_cal_ltext{padding-right:0}.gantt_cal_light_wide .gantt_cal_larea{padding:0 10px;width:100%}.gantt_cal_light_wide .gantt_section_time{background:transparent}.gantt_cal_light_wide .gantt_cal_checkbox label{padding-left:0}.gantt_cal_light_wide .gantt_cal_lsection .gantt_fullday{float:none;margin-right:0;font-weight:700;cursor:pointer}.gantt_cal_light_wide .gantt_custom_button{position:absolute;top:0;right:0;margin-top:2px}.gantt_cal_light_wide .gantt_repeat_right{margin-right:55px}.gantt_cal_light_wide.gantt_cal_light_full{width:738px}.gantt_cal_wide_checkbox input{margin-top:8px;margin-left:14px}.gantt_cal_light input{font-size:13px}.gantt_section_time{background-color:#fff;white-space:nowrap;padding:2px 10px 5px;padding-top:2px!important}.gantt_section_time .gantt_time_selects{float:left;height:25px}.gantt_section_time .gantt_time_selects select{height:23px;padding:2px;border:1px solid #bababa}.gantt_duration{width:100px;height:23px;float:left;white-space:nowrap;margin-left:20px;line-height:23px}.gantt_duration .gantt_duration_dec,.gantt_duration .gantt_duration_inc,.gantt_duration .gantt_duration_value{box-sizing:border-box;text-align:center;vertical-align:top;height:100%;border:1px solid #bababa}.gantt_duration .gantt_duration_value{width:40px;padding:3px 4px;border-left-width:0;border-right-width:0}.gantt_duration .gantt_duration_value.gantt_duration_value_formatted{width:70px}.gantt_duration .gantt_duration_dec,.gantt_duration .gantt_duration_inc{width:20px;padding:1px;padding-bottom:1px;background:#fff}.gantt_duration .gantt_duration_dec{-moz-border-top-left-radius:4px;-moz-border-bottom-left-radius:4px;-webkit-border-top-left-radius:4px;-webkit-border-bottom-left-radius:4px;border-top-left-radius:4px;border-bottom-left-radius:4px}.gantt_duration .gantt_duration_inc{margin-right:4px;-moz-border-top-right-radius:4px;-moz-border-bottom-right-radius:4px;-webkit-border-top-right-radius:4px;-webkit-border-bottom-right-radius:4px;border-top-right-radius:4px;border-bottom-right-radius:4px}.gantt_resources{max-height:150px;height:auto;overflow-y:auto}.gantt_resource_row{display:block;padding:10px 0;border-bottom:1px solid #ebebeb;cursor:pointer}.gantt_resource_row input[type=checkbox]:not(:checked),.gantt_resource_row input[type=checkbox]:not(:checked)~div{opacity:.5}.gantt_resource_toggle{vertical-align:middle}.gantt_resources_filter .gantt_resources_filter_input{padding:1px 2px;box-sizing:border-box}.gantt_resources_filter .switch_unsetted{vertical-align:middle}.gantt_resource_cell{display:inline-block}.gantt_resource_cell.gantt_resource_cell_checkbox{width:24px;max-width:24px;min-width:24px;vertical-align:middle}.gantt_resource_cell.gantt_resource_cell_label{width:40%;max-width:40%;vertical-align:middle}.gantt_resource_cell.gantt_resource_cell_value{width:30%;max-width:30%;vertical-align:middle}.gantt_resource_cell.gantt_resource_cell_value input,.gantt_resource_cell.gantt_resource_cell_value select{width:80%;vertical-align:middle;padding:1px 2px;box-sizing:border-box}.gantt_resource_cell.gantt_resource_cell_unit{width:10%;max-width:10%;vertical-align:middle}.gantt_resource_early_value{opacity:.8;font-size:.9em}.gantt_cal_quick_info{border:1px solid #bababa;border-radius:6px;position:absolute;z-index:300;box-shadow:3px 3px 3px rgba(0,0,0,.07);background-color:#fff;width:300px;transition:left .5s ease,right .5s;-moz-transition:left .5s ease,right .5s;-webkit-transition:left .5s ease,right .5s;-o-transition:left .5s ease,right .5s}.gantt_no_animate{transition:none;-moz-transition:none;-webkit-transition:none;-o-transition:none}.gantt_cal_quick_info.gantt_qi_left .gantt_qi_big_icon{float:right}.gantt_cal_qi_title{-webkit-border-top-left-radius:6px;-webkit-border-bottom-left-radius:0;-webkit-border-top-right-radius:6px;-webkit-border-bottom-right-radius:0;-moz-border-radius-topleft:6px;-moz-border-radius-bottomleft:0;-moz-border-radius-topright:6px;-moz-border-radius-bottomright:0;border-top-left-radius:6px;border-bottom-left-radius:0;border-top-right-radius:6px;border-bottom-right-radius:0;padding:5px 0 8px 12px;color:#494949;background-color:#dbdbdb;border-bottom:1px solid #bababa}.gantt_cal_qi_tdate{font-size:14px;font-weight:700}.gantt_cal_qi_tcontent{font-size:13px}.gantt_cal_qi_content{padding:16px 8px;font-size:13px;color:#494949;overflow:hidden}.gantt_cal_qi_controls{-webkit-border-top-left-radius:0;-webkit-border-bottom-left-radius:6px;-webkit-border-top-right-radius:0;-webkit-border-bottom-right-radius:6px;-moz-border-radius-topleft:0;-moz-border-radius-bottomleft:6px;-moz-border-radius-topright:0;-moz-border-radius-bottomright:6px;border-top-left-radius:0;border-bottom-left-radius:6px;border-top-right-radius:0;border-bottom-right-radius:6px;padding-left:7px}.gantt_cal_qi_controls .gantt_menu_icon{margin-top:6px;background-repeat:no-repeat}.gantt_cal_qi_controls .gantt_menu_icon.icon_edit{width:20px;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAAB3RJTUUH3QYFCjI5ZQj5bAAAAFNJREFUOMvt0zEOACAIA0DkwTymH8bJTRTKZGJXyaWEKPKTCQAH4Ls37cItcDUzsxHNDLZNhCq7Gt1wh9ErV7EjyGAhyGLphlnsClWuS32rn0czAV+vNGrM/LBtAAAAAElFTkSuQmCC)}.gantt_cal_qi_controls .gantt_menu_icon.icon_delete{width:20px;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA4AAAAQCAYAAAAmlE46AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoV2luZG93cykiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6QzQzRjMxM0NDRUJEMTFFMjlCNDZDQzhFQUM0ODRCMEIiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6QzQzRjMxM0RDRUJEMTFFMjlCNDZDQzhFQUM0ODRCMEIiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDpDNDNGMzEzQUNFQkQxMUUyOUI0NkNDOEVBQzQ4NEIwQiIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDpDNDNGMzEzQkNFQkQxMUUyOUI0NkNDOEVBQzQ4NEIwQiIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PoU+5FoAAACMSURBVHja7JPdDYAgDIQLE+gmjuAIbOIKjMRIbAAb1BZLUozgz7OXfIbWKxeCAiKCwmNfXnsNP5S4mIkMrSYiEaY2LOFloO6QVF1JamPGc2IvpaeSbqXY4LkOLwU6OTyvgzBasxwnBnivYOGj/sEXg27gbd/JpWZiOf0pV7Anlq9UGqs07hTFC7sAAwCbSNs8SyqFMAAAAABJRU5ErkJggg==)}.gantt_qi_big_icon{font-size:13px;border-radius:4px;font-weight:700;background:#fff;margin:5px 9px 8px 0;min-width:60px;line-height:32px;vertical-align:middle;padding:0 10px 0 5px;cursor:pointer;border:1px solid #bababa}.gantt_cal_qi_controls div{float:left;height:32px;text-align:center;line-height:32px}.gantt_cal_quick_info.gantt_qi_hidden{display:none}.gantt_tooltip{padding:10px;position:absolute;z-index:50;white-space:nowrap}.gantt_resource_marker{position:absolute;text-align:center;font-size:14px;color:#fff}.gantt_resource_marker_ok{background:rgba(78,208,134,.75)}.gantt_resource_marker_overtime{background:hsla(0,100%,76%,.69)}.gantt_histogram_label{width:100%;height:100%;position:absolute;z-index:1;font-weight:700;font-size:13px}.gantt_histogram_fill{background-color:rgba(41,157,180,.2);width:100%;position:absolute;bottom:0}.gantt_histogram_hor_bar{height:1px;margin-top:-1px}.gantt_histogram_hor_bar,.gantt_histogram_vert_bar{position:absolute;background:#299db4;margin-left:-1px}.gantt_histogram_vert_bar{width:1px}.gantt_histogram_cell{position:absolute;text-align:center;font-size:13px;color:#000}.gantt_marker{height:100%;width:2px;top:0;position:absolute;text-align:center;background-color:rgba(255,0,0,.4);box-sizing:border-box}.gantt_marker .gantt_marker_content{padding:5px;background:inherit;color:#fff;position:absolute;font-size:12px;line-height:12px;opacity:.8}.gantt_marker_area{position:absolute;top:0;left:0}.gantt_grid_editor_placeholder{position:absolute}.gantt_grid_editor_placeholder>div,.gantt_grid_editor_placeholder input,.gantt_grid_editor_placeholder select{width:100%;height:100%;box-sizing:border-box}.gantt_row_placeholder div{opacity:.5}.gantt_row_placeholder .gantt_add,.gantt_row_placeholder .gantt_file{display:none}.gantt_drag_marker.gantt_grid_dnd_marker{background-color:transparent;transition:all .1s ease}.gantt_grid_dnd_marker_line{height:4px;width:100%;background-color:#3498db}.gantt_grid_dnd_marker_line:before{background:#fff;width:12px;height:12px;box-sizing:border-box;border:3px solid #3498db;border-radius:6px;content:"";line-height:1px;display:block;position:absolute;margin-left:-11px;margin-top:-4px;pointer-events:none}.gantt_grid_dnd_marker_folder{height:100%;width:100%;position:absolute;pointer-events:none;box-sizing:border-box;box-shadow:inset 0 0 0 2px #3f98db;background:transparent}.gantt_overlay_area{display:none}.gantt_overlay,.gantt_overlay_area{position:absolute;height:inherit;width:inherit;top:0;left:0}.gantt_click_drag_rect{position:absolute;left:0;top:0;outline:1px solid #3f98db;background-color:rgba(52,152,219,.3)}.gantt_timeline_move_available,.gantt_timeline_move_available *{cursor:move}.gantt_rtl .gantt_grid{text-align:right}.gantt_rtl .gantt_cell,.gantt_rtl .gantt_row{flex-direction:row-reverse}.gantt_layout_content{width:100%;overflow:auto;box-sizing:border-box}.gantt_layout_cell{position:relative;box-sizing:border-box}.gantt_layout_cell>.gantt_layout_header{background:#33aae8;color:#fff;font-size:17px;padding:5px 10px;box-sizing:border-box}.gantt_layout_header.collapsed_x{background:#a9a9a9}.gantt_layout_header.collapsed_x .gantt_header_arrow:before{content:"\21E7"}.gantt_layout_header.collapsed_y{background:#a9a9a9}.gantt_layout_header.collapsed_y .gantt_header_arrow:before{content:"\21E9"}.gantt_layout_header{cursor:pointer}.gantt_layout_header .gantt_header_arrow{float:right;text-align:right}.gantt_layout_header .gantt_header_arrow:before{content:"\21E6"}.gantt_layout_header.vertical .gantt_header_arrow:before{content:"\21E7"}.gantt_layout_outer_scroll_vertical .gantt_layout_content{overflow-y:hidden}.gantt_layout_outer_scroll_horizontal .gantt_layout_content{overflow-x:hidden}.gantt_layout_x>.gantt_layout_cell{display:inline-block;vertical-align:top}.gantt_layout_x{white-space:nowrap}.gantt_resizing{opacity:.7;background:#f2f2f2}.gantt_layout_cell_border_right.gantt_resizer{overflow:visible;border-right:0}.gantt_resizer{cursor:e-resize;position:relative}.gantt_resizer_y{cursor:n-resize}.gantt_resizer_stick{background:#33aae8;z-index:9999;position:absolute;top:0;width:100%}.gantt_resizer_x .gantt_resizer_x{position:absolute;width:20px;height:100%;margin-left:-10px;top:0;left:0;z-index:1}.gantt_resizer_y .gantt_resizer_y{position:absolute;height:20px;width:100%;top:-10px;left:0;z-index:1}.gantt_resizer_error{background:#cd5c5c!important}.gantt_layout_cell_border_left{border-left:1px solid #bababa}.gantt_layout_cell_border_right{border-right:1px solid #bababa}.gantt_layout_cell_border_top{border-top:1px solid #bababa}.gantt_layout_cell_border_bottom{border-bottom:1px solid #bababa}.gantt_layout_cell_border_transparent{border-color:transparent}.gantt_window{position:absolute;top:50%;left:50%;z-index:999999999;background:#fff}.gantt_window_content{position:relative}.gantt_window_content_header{background:#39c;color:#fff;height:33px;padding:10px 10px 0;border-bottom:2px solid #fff;position:relative}.gantt_window_content_header_text{padding-left:10%}.gantt_window_content_header_buttons{position:absolute;top:10px;right:10px}.gantt_window_content_header_buttons:hover{color:#000;cursor:pointer}.gantt_window_content_resizer{position:absolute;width:15px;height:15px;bottom:0;line-height:15px;right:-1px;text-align:center;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA8AAAAPCAMAAAAMCGV4AAAABlBMVEUAAAAAAAClZ7nPAAAAAXRSTlMAQObYZgAAABZJREFUeAFjIAUwUshlpJDLSIhLGAAACQ4AFk79JaMAAAAASUVORK5CYII=);cursor:nw-resize;z-index:999}.gantt_window_content_frame{position:absolute;top:0;left:0;width:100%;height:100%;background:rgba(0,0,0,.1);z-index:9999}.gantt_window_drag{cursor:pointer!important}.gantt_window_resizing{overflow:visible}.gantt_window_resizing_body{overflow:hidden!important}.gantt_window_modal{background:rgba(0,0,0,.1);z-index:9999;top:0;left:0;width:100%;height:100%;position:fixed}.gantt_cal_light,.gantt_cal_quick_info,.gantt_container,.gantt_message_area,.gantt_modal_box,.gantt_tooltip{text-rendering:optimizeLegibility;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.gantt_noselect{-moz-user-select:-moz-none;-webkit-user-select:none;-ms-user-select:none;user-select:none}.gantt_noselect .gantt_grid_data .gantt_row.odd:hover,.gantt_noselect .gantt_grid_data .gantt_row:hover{background-color:unset}.gantt_drag_marker{position:absolute;top:-1000px;left:-1000px;font-family:Arial;font-size:13px;z-index:1;white-space:nowrap}.gantt_drag_marker .gantt_tree_icon.gantt_blank,.gantt_drag_marker .gantt_tree_icon.gantt_close,.gantt_drag_marker .gantt_tree_icon.gantt_open,.gantt_drag_marker .gantt_tree_indent{display:none}.gantt_empty_state_wrapper{position:relative}.gantt_empty_state{height:100%;max-width:500px;box-sizing:border-box;white-space:pre-line;overflow-wrap:break-word;display:flex;flex-direction:column;justify-content:flex-start;margin:0 auto}.gantt_empty_state_image{background-image:url("data:image/png;base64,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");background-repeat:no-repeat;width:100%;max-width:500px;max-height:500px;margin-left:auto;margin-right:auto;display:block;min-height:0;height:200px;background-size:contain;background-position-x:center;background-position-y:bottom;margin-top:40px}.gantt_empty_state_text{text-align:center}.gantt_empty_state_text_link{color:#03a9f4;background-position:100% 0;background:none;opacity:1;height:unset;cursor:pointer}.gantt_drag_marker,.gantt_drag_marker .gantt_row.odd{background-color:#fff}.gantt_drag_marker .gantt_row{border-left:1px solid #d2d2d2;border-top:1px solid #d2d2d2}.gantt_drag_marker .gantt_cell{border-color:#d2d2d2}.gantt_row.gantt_over,.gantt_task_row.gantt_over{background-color:#0070fe}.gantt_row.gantt_transparent .gantt_cell{opacity:.7}.gantt_task_row.gantt_transparent{background-color:#dbf3fe}.gantt_popup_button.gantt_delete_button{background:#46ad51;text-shadow:0 -1px 0 #307738;color:#fff;font-weight:700}.gantt_container_resize_watcher{background:transparent;width:100%;height:100%;position:absolute;top:0;left:0;z-index:-1;pointer-events:none;border:0;box-sizing:border-box;opacity:0}
src/components/dhtmlxGantt/codebase/skins/dhtmlxgantt_contrast_black.css
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1 @@
.gridHoverStyle,.gridSelection,.timelineSelection{background-color:#42425e}.gantt_grid_scale .gantt_grid_head_cell,.header_text_style{text-transform:uppercase;font-weight:700}.gantt_grid_scale .gantt_grid_head_cell{color:#c1c1c1;border-top:none!important;border-right:none!important}.gantt_grid_data .gantt_cell{border-right:none;color:#fff}.gantt_grid_placeholder_text_explanation{color:#c1c1c1}.gantt_task_link .gantt_link_arrow_right{border-width:6px;margin-top:-3px}.gantt_task_link .gantt_link_arrow_left{border-width:6px;margin-left:-6px;margin-top:-3px}.gantt_task_link .gantt_link_arrow_down,.gantt_task_link .gantt_link_arrow_up{border-width:6px}.gantt_task_line .gantt_task_progress_drag{bottom:-4px;height:10px;margin-left:-8px;width:16px}.chartHeaderBg{background-color:#000}.gantt_task .gantt_task_scale .gantt_scale_cell{color:#c1c1c1;text-transform:uppercase;font-weight:700;border-right:1px solid #7e7e7e}.gantt_row.gantt_project,.gantt_row.odd.gantt_project{background-color:#edffee}.gantt_task_row.gantt_project,.gantt_task_row.odd.gantt_project{background-color:#f5fff5}.gantt_task_line.gantt_project{background-color:#006803;border:1px solid #006803}.gantt_task_line.gantt_project .gantt_task_progress{background-color:#003b01}.gantt_popup_shadow,.modalBorder{border-color:#fff;box-shadow:inset 0 0 0 4px #0505ff;padding:4px}.buttonBg{background:#000}.gantt_cal_larea input,.gantt_cal_larea select,.gantt_cal_larea textarea{background:#000;color:#fff}.gantt_cal_larea .gantt_section_time{background:#000}.gantt_cal_larea .gantt_cal_lsection{color:#c1c1c1;font-size:14px}.gantt_cal_light .gantt_btn_set{margin:5px 10px}.gantt_btn_set.gantt_cancel_btn_set{border:2px solid #fff;background:#000;color:#fff}.gantt_btn_set.gantt_save_btn_set{border:2px solid #76ff03;background:#000;color:#76ff03}.gantt_btn_set.gantt_delete_btn_set{border:2px solid #ffc400;background:#000;color:#ffc400}.gantt_cal_light_wide{padding-left:0!important;padding-right:0!important}.gantt_cal_light_wide .gantt_cal_larea{border-left:none!important;border-right:none!important}.gantt_popup_button.gantt_ok_button{font-weight:700;border:2px solid #76ff03;background:#000;color:#76ff03}.gantt_popup_button.gantt_cancel_button{font-weight:700;color:#454544;border:2px solid #fff;background:#000;color:#fff}.gantt_popup_title{color:#fff}.gantt_qi_big_icon,.gantt_qi_big_icon.icon_edit{border:2px solid #fff;color:#fff}.gantt_qi_big_icon.icon_edit{background:#000}.gantt_qi_big_icon.icon_delete{border:2px solid #ffc400;background:#000;color:#ffc400}.gantt_tooltip{color:#fff;background:#000}.gantt_container,.gantt_tooltip{font-size:14px;border:1px solid #ff0}.gantt_container{background-color:#000;font-family:arial;position:relative;white-space:nowrap;overflow-x:hidden;overflow-y:hidden}.gantt_touch_active{overscroll-behavior:none}.gantt_task_scroll{overflow-x:scroll}.gantt_grid,.gantt_task{position:relative;overflow-x:hidden;overflow-y:hidden;display:inline-block;vertical-align:top}.gantt_grid_scale,.gantt_task_scale{color:#fff;font-size:14px;border-bottom:1px solid #ff0;box-sizing:border-box}.gantt_grid_scale,.gantt_task_scale,.gantt_task_vscroll{background-color:#000}.gantt_scale_line{box-sizing:border-box;-moz-box-sizing:border-box;border-top:1px solid #ff0}.gantt_scale_line:first-child{border-top:none}.gantt_grid_head_cell{display:inline-block;vertical-align:top;border-right:1px solid #ff0;text-align:center;position:relative;cursor:default;height:100%;box-sizing:border-box;-moz-box-sizing:border-box;line-height:33px;-moz-user-select:-moz-none;-webkit-user-select:none;user-select:none;overflow:hidden}.gantt_scale_line{clear:both}.gantt_grid_data{width:100%;overflow:hidden;position:relative}.gantt_row{position:relative;-webkit-user-select:none;-moz-user-select:none;-moz-user-select:-moz-none}.gantt_add,.gantt_grid_head_add{width:100%;height:100%;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyhpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTMyIDc5LjE1OTI4NCwgMjAxNi8wNC8xOS0xMzoxMzo0MCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTUuNSAoV2luZG93cykiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6RTk4MTk1QzM2ODc4MTFFNkFCNkFDOUZDNzZFNjgxRkIiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6RTk4MTk1QzQ2ODc4MTFFNkFCNkFDOUZDNzZFNjgxRkIiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDpFOTgxOTVDMTY4NzgxMUU2QUI2QUM5RkM3NkU2ODFGQiIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDpFOTgxOTVDMjY4NzgxMUU2QUI2QUM5RkM3NkU2ODFGQiIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/Psrbi8sAAABYSURBVHjaYiz7z8xACWDCI/cBiP9D8QdyDODHwSbaAIq9QF8DkAMMhtEBuvwHZAP4ybCcn6pe+EiGXrAeFihHAIefkQHjME8HOAOJUCCz4DFAgBgXAAQYACAZFHJhx3hLAAAAAElFTkSuQmCC);background-position:50%;background-repeat:no-repeat;cursor:pointer;position:relative;-moz-opacity:.3;opacity:.3}.gantt_grid_head_cell.gantt_grid_head_add{-moz-opacity:.6;opacity:.6;top:0}.gantt_grid_head_cell.gantt_grid_head_add:hover{-moz-opacity:1;opacity:1}.gantt_grid_data .gantt_row.odd:hover,.gantt_grid_data .gantt_row:hover{background-color:#42425e}.gantt_grid_data .gantt_row.odd:hover .gantt_add,.gantt_grid_data .gantt_row:hover .gantt_add{-moz-opacity:1;opacity:1}.gantt_row,.gantt_task_row{border-bottom:1px solid #7e7e7e;background-color:#000}.gantt_row.odd,.gantt_task_row.odd{background-color:#000}.gantt_cell,.gantt_grid_head_cell,.gantt_row,.gantt_scale_cell,.gantt_task_cell,.gantt_task_row{box-sizing:border-box;-moz-box-sizing:border-box}.gantt_grid_head_cell,.gantt_scale_cell{line-height:inherit}.gantt_grid_scale .gantt_grid_column_resize_wrap{cursor:col-resize;position:absolute;width:13px;margin-left:-7px}.gantt_grid_column_resize_wrap .gantt_grid_column_resize{background-color:#ff0;height:100%;width:1px;margin:0 auto}.gantt_task_grid_row_resize_wrap{cursor:row-resize;position:absolute;height:13px;margin-top:-7px;left:0;width:100%}.gantt_task_grid_row_resize_wrap .gantt_task_grid_row_resize{background-color:#7e7e7e;top:6px;height:1px;width:100%;margin:0 auto;position:relative}.gantt_drag_marker{pointer-events:none}.gantt_drag_marker.gantt_grid_resize_area,.gantt_drag_marker.gantt_row_grid_resize_area{background-color:hsla(0,0%,91%,.5);height:100%;width:100%;box-sizing:border-box}.gantt_drag_marker.gantt_grid_resize_area{border-left:1px solid #ff0;border-right:1px solid #ff0}.gantt_drag_marker.gantt_row_grid_resize_area{border-top:1px solid #ff0;border-bottom:1px solid #ff0;pointer-events:none}.gantt_row{display:flex}.gantt_row>div{flex-shrink:0;flex-grow:0}.gantt_cell{vertical-align:top;border-right:1px solid #7e7e7e;padding-left:6px;padding-right:6px;height:100%;overflow:hidden;white-space:nowrap;font-size:14px}.gantt_cell_tree{display:flex;flex-wrap:nowrap}.gantt_grid_data .gantt_last_cell,.gantt_grid_scale .gantt_last_cell,.gantt_task .gantt_task_scale .gantt_scale_cell.gantt_last_cell,.gantt_task_bg .gantt_last_cell{border-right-width:0}.gantt_task .gantt_task_scale .gantt_scale_cell.gantt_last_cell{border-right-width:1px}.gantt_task_bg{overflow:hidden}.gantt_scale_cell{display:inline-block;white-space:nowrap;overflow:hidden;border-right:1px solid #ff0;text-align:center;height:100%}.gantt_task_cell{display:inline-block;height:100%;border-right:1px solid #7e7e7e}.gantt_layout_cell.gantt_ver_scroll{width:0;background-color:transparent;height:1px;overflow-x:hidden;overflow-y:scroll;position:absolute;right:0;z-index:1}.gantt_ver_scroll>div{width:1px;height:1px}.gantt_hor_scroll{height:0;background-color:transparent;width:100%;clear:both;overflow-x:scroll;overflow-y:hidden}.gantt_layout_cell .gantt_hor_scroll{position:absolute}.gantt_hor_scroll>div{width:5000px;height:1px}.gantt_tree_icon,.gantt_tree_indent{flex-grow:0;flex-shrink:0}.gantt_tree_indent{width:15px;height:100%}.gantt_tree_content,.gantt_tree_icon{vertical-align:top}.gantt_tree_icon{width:28px;height:100%;background-repeat:no-repeat;background-position:50%}.gantt_tree_content{height:100%;white-space:nowrap;min-width:0}.gantt_tree_icon.gantt_open{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyhpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTMyIDc5LjE1OTI4NCwgMjAxNi8wNC8xOS0xMzoxMzo0MCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTUuNSAoV2luZG93cykiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6QjRFQzM4RjY2ODc3MTFFNjlGNUVCQUVCQzgyNkQ5RUUiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6QjRFQzM4Rjc2ODc3MTFFNjlGNUVCQUVCQzgyNkQ5RUUiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDpCNEVDMzhGNDY4NzcxMUU2OUY1RUJBRUJDODI2RDlFRSIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDpCNEVDMzhGNTY4NzcxMUU2OUY1RUJBRUJDODI2RDlFRSIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PpdfxE8AAABySURBVHjaYjx48CADucDOzo6BiYFCwILE/k+iXkZ0A+CCRAC4ZXi9sNXO6T8IE+sFkAZcBqHwvQ/tYyDKBaQGIr7A/I8rnGjiAkYsNjMSZQBy4CAHHro4zb2A7CJGUg34T4kLGMnxAuP///8pCgOAAAMAxcMbX5R+AnUAAAAASUVORK5CYII=);width:18px;cursor:pointer}.gantt_tree_icon.gantt_close{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyhpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTMyIDc5LjE1OTI4NCwgMjAxNi8wNC8xOS0xMzoxMzo0MCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTUuNSAoV2luZG93cykiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6Qjg3ODU2QTg2ODc3MTFFNkE4MDlDMDMyQkRGNDgyQTAiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6Qjg3ODU2QTk2ODc3MTFFNkE4MDlDMDMyQkRGNDgyQTAiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDpCODc4NTZBNjY4NzcxMUU2QTgwOUMwMzJCREY0ODJBMCIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDpCODc4NTZBNzY4NzcxMUU2QTgwOUMwMzJCREY0ODJBMCIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PqbUJTYAAABdSURBVHjaYjx48CADucDOzo6BiYFCwILE/k+iXkZ0A+CCRAC4ZVT1AsNWOyeiNHkf2sdAGxcQGZgo4UQTFzCSbQBy4BALKPYC1cPgPyUGMJLjAsb///9T5AWAAAMAJ4wO9WM7P60AAAAASUVORK5CYII=);width:18px;cursor:pointer}.gantt_tree_icon.gantt_blank{width:18px}.gantt_tree_icon.gantt_folder_open{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAYAAABWzo5XAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyhpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTMyIDc5LjE1OTI4NCwgMjAxNi8wNC8xOS0xMzoxMzo0MCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTUuNSAoV2luZG93cykiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6RkM2MUMyMzQ2ODc3MTFFNjhFMjE5QzYzREY2ODEzREUiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6RkM2MUMyMzU2ODc3MTFFNjhFMjE5QzYzREY2ODEzREUiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDpGQzYxQzIzMjY4NzcxMUU2OEUyMTlDNjNERjY4MTNERSIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDpGQzYxQzIzMzY4NzcxMUU2OEUyMTlDNjNERjY4MTNERSIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PlC39FYAAADWSURBVHjaYty4fi0DNQATA5UAskGeQPwMiP9jwfWkGDQXiCVxqGsgZBiyQTBDGNFwI5Jh2FwL8oUnMWHUgGQYNgBywFxiA7sBi0thGGwYVWOtFYi/IIn9JxI7oBtUBMTcZDiiHt2gE1B2C55wQMZiQPwZ6iIHZINgMZIKxFxEuOQ1EE9GdxXIoANQLA7E2UR6qweIP6K7iAHJVaVAzEuEQe+BeBqyAAuUBrloBxB7APEnMgL+BXI6ygfiR2QY8hSIk1mQBG4BsTy5CZLx////VEnZAAEGAO3yNxaCOyWPAAAAAElFTkSuQmCC)}.gantt_tree_icon.gantt_folder_closed{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAYAAABWzo5XAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyhpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTMyIDc5LjE1OTI4NCwgMjAxNi8wNC8xOS0xMzoxMzo0MCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTUuNSAoV2luZG93cykiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6RkZDMUZDMkI2ODc3MTFFNkI5QTdFOTQyM0UxNUEzRjEiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6RkZDMUZDMkM2ODc3MTFFNkI5QTdFOTQyM0UxNUEzRjEiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDpGRkMxRkMyOTY4NzcxMUU2QjlBN0U5NDIzRTE1QTNGMSIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDpGRkMxRkMyQTY4NzcxMUU2QjlBN0U5NDIzRTE1QTNGMSIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PvnU3ycAAAB9SURBVHjaYty4fi0DNQATA5UAskGeQPwMiP9jwfWkGDQXiCVxqGsgZBiyQTBDGNFwI5Jh2FwL8oUnMWHUgGQYNgBywFxiA7sBi0thGGwYTWJt1KChaNBzKP2fRAwCL5ANSgEJkOGYp0CczIIksA1PpiUIGP///0+VMAIIMAC11ShRpw6rxAAAAABJRU5ErkJggg==)}.gantt_tree_icon.gantt_file{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAYAAABWzo5XAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyhpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTMyIDc5LjE1OTI4NCwgMjAxNi8wNC8xOS0xMzoxMzo0MCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTUuNSAoV2luZG93cykiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6MDQwMTVBMUU2ODc4MTFFNkFBNDVCQkYzMzdERTM1MzYiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6MDQwMTVBMUY2ODc4MTFFNkFBNDVCQkYzMzdERTM1MzYiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDowNDAxNUExQzY4NzgxMUU2QUE0NUJCRjMzN0RFMzUzNiIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDowNDAxNUExRDY4NzgxMUU2QUE0NUJCRjMzN0RFMzUzNiIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PsHnBgAAAAB8SURBVHjaYvz//z/Dpg3rGCgBfgFBDExoYp5A/AyI/+PB9dgMQzdoLhBLEnBAAzbDWND4MEMYsRjwH80wEGjE5SJSAIrLmBgoAw3UMghnGOEDjHjCjHouGjVoOBj0HCmNEMIg8AKXQSnIkgTAUyBOxpWytxFRjGAFAAEGAOcUI0XiA1ItAAAAAElFTkSuQmCC)}.gantt_grid_head_cell .gantt_sort{position:absolute;right:5px;top:8px;width:7px;height:13px;background-repeat:no-repeat;background-position:50%}.gantt_grid_head_cell .gantt_sort.gantt_asc{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAcAAAANCAYAAABlyXS1AAAARUlEQVR4nGNgQAKGxib/GbABkIS7b8B/DAUwCRiGK0CXwFBAb1DfP/U/LszwHwi2X7qFgUEArBtdAVwCBmAKMCSQFSDzAWXXaOHsXeqkAAAAAElFTkSuQmCC)}.gantt_grid_head_cell .gantt_sort.gantt_desc{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAcAAAANCAYAAABlyXS1AAAARUlEQVR42mNgQAL1/VP/M2ADIIntF2/9x1AAlrh0C47hCmA60DFYwX88gIFGwNDY5D8uDFbg7hvwHx2jmIBTAlkB0e4BAEjlaNtBWJPnAAAAAElFTkSuQmCC)}.gantt_inserted,.gantt_updated{font-weight:700}.gantt_deleted{text-decoration:line-through}.gantt_invalid{background-color:#ffe0e0}.gantt_error{color:red}.gantt_status{right:1px;padding:5px 10px;background:hsla(0,0%,61%,.1);position:absolute;top:1px;transition:opacity .2s;opacity:0}.gantt_status.gantt_status_visible{opacity:1}#gantt_ajax_dots span{transition:opacity .2s;background-repeat:no-repeat;opacity:0}#gantt_ajax_dots span.gantt_dot_visible{opacity:1}.gantt_column_drag_marker{border:1px solid #cecece;opacity:.8;pointer-events:none}.gantt_grid_head_cell_dragged{border:1px solid #cecece;opacity:.3}.gantt_grid_target_marker{position:absolute;top:0;width:2px;height:100%;background-color:#18ffff;transform:translateX(-1px)}.gantt_grid_target_marker:after,.gantt_grid_target_marker:before{display:block;content:"";position:absolute;left:-5px;width:0;height:0;border:6px solid transparent}.gantt_grid_target_marker:before{border-top-color:#18ffff}.gantt_grid_target_marker:after{bottom:0;border-bottom-color:#18ffff}.gantt_message_area{position:fixed;right:5px;width:250px;z-index:1000}.gantt-info{min-width:120px;padding:4px 4px 4px 20px;font-family:arial;z-index:10000;margin:5px;margin-bottom:10px;transition:all .5s ease}.gantt-info.hidden{height:0;padding:0;border-width:0;margin:0;overflow:hidden}.gantt_modal_box{overflow:hidden;display:inline-block;min-width:250px;width:250px;text-align:center;position:fixed;z-index:20000;border-color:#fff;box-shadow:inset 0 0 0 4px #0505ff;padding:4px;font-family:arial;border-radius:6px;border:1px solid #ff0;background:#000}.gantt_popup_title{border-top-left-radius:6px;border-top-right-radius:6px;border-width:0}.gantt_button,.gantt_popup_button{border:1px solid #ff0;height:30px;line-height:30px;display:inline-block;margin:0 5px;border-radius:4px;background:#000}.gantt-info,.gantt_button,.gantt_popup_button{user-select:none;-webkit-user-select:none;-moz-user-select:-moz-none;cursor:pointer}.gantt_popup_text{overflow:hidden}.gantt_popup_controls{border-radius:6px;padding:10px}.gantt_popup_button{min-width:100px}div.dhx_modal_cover{background-color:#000;cursor:default;filter:progid:DXImageTransform.Microsoft.Alpha(opacity=20);opacity:.2;position:fixed;z-index:19999;left:0;top:0;width:100%;height:100%;border:none;zoom:1}.gantt-info img,.gantt_modal_box img{float:left;margin-right:20px}.gantt-alert-error,.gantt-confirm-error{border:1px solid red}.gantt_button input,.gantt_popup_button div{border-radius:4px;font-size:16px;box-sizing:content-box;padding:0;margin:0;vertical-align:top}.gantt_popup_title{border-bottom:1px solid #c1c1c1;height:40px;line-height:40px;font-size:20px}.gantt_popup_text{margin:15px 15px 5px;font-size:16px;color:#fff;min-height:30px;border-radius:6px}.gantt-error,.gantt-info{font-size:16px;color:#000;box-shadow:3px 3px 3px rgba(0,0,0,.07);padding:0;background-color:#fff;border-radius:3px;border:1px solid #fff}.gantt-info div{padding:5px 10px;background-color:#fff;border-radius:3px;border:1px solid #ff0}.gantt-error{background-color:#b60000;border:1px solid #ff0}.gantt-error div{background-color:#b60000;border:1px solid transparent;color:#fff}.gantt-warning{background-color:#ef7f00;border:1px solid #ff0}.gantt-warning div{background-color:#ef7f00;border:1px solid transparent;color:#fff}.gantt_data_area div,.gantt_grid div{-ms-touch-action:none;-webkit-tap-highlight-color:rgba(0,0,0,0)}.gantt_data_area{position:relative;overflow-x:hidden;overflow-y:hidden;-moz-user-select:-moz-none;-webkit-user-select:none;user-select:none}.gantt_links_area{position:absolute;left:0;top:0}.gantt_side_content,.gantt_task_content,.gantt_task_progress{line-height:inherit;overflow:hidden;height:100%}.gantt_task_content{font-size:14px;color:#fff;width:100%;top:0;cursor:pointer;position:absolute;white-space:nowrap;text-align:center}.gantt_task_progress{text-align:center;z-index:0;background:#0e2d7d}.gantt_task_progress_wrapper{border-radius:inherit;position:relative;width:100%;height:100%;overflow:hidden}.gantt_task_line{border-radius:2px;position:absolute;box-sizing:border-box;background-color:#0042e9;border:1px solid #0042e9;-webkit-user-select:none;-moz-user-select:none;-moz-user-select:-moz-none}.gantt_task_line.gantt_drag_move div{cursor:move}.gantt_touch_move,.gantt_touch_progress .gantt_touch_resize{transform:scale(1.02,1.1);transform-origin:50%}.gantt_touch_progress .gantt_task_progress_drag,.gantt_touch_resize .gantt_task_drag{transform:scaleY(1.3);transform-origin:50%}.gantt_side_content{position:absolute;white-space:nowrap;color:#fff;top:0;font-size:11px;font-size:13px}.gantt_side_content.gantt_left{right:100%;padding-right:20px}.gantt_side_content.gantt_right{left:100%;padding-left:20px}.gantt_side_content.gantt_link_crossing{bottom:8.75px;top:auto}.gantt_link_arrow,.gantt_task_link .gantt_line_wrapper{position:absolute;cursor:pointer}.gantt_line_wrapper div{background-color:#18ffff}.gantt_task_link:hover .gantt_line_wrapper div{box-shadow:0 0 5px 0 #18ffff}.gantt_task_link div.gantt_link_arrow{background-color:transparent;border-style:solid;width:0;height:0}.gantt_link_control{position:absolute;width:20px;top:0}.gantt_link_control div{display:none;cursor:pointer;box-sizing:border-box;position:relative;top:50%;margin-top:-7.5px;vertical-align:middle;border:1px solid #929292;border-radius:6.5px;height:13px;width:13px;background-color:#f0f0f0}.gantt_link_control.task_right div.gantt_link_point{margin-left:7px}.gantt_link_control div:hover{background-color:#fff}.gantt_link_control.task_left{left:-20px}.gantt_link_control.task_right{right:-20px}.gantt_link_target .gantt_link_control div,.gantt_task_line.gantt_drag_move .gantt_link_control div,.gantt_task_line.gantt_drag_move .gantt_task_drag,.gantt_task_line.gantt_drag_move .gantt_task_progress_drag,.gantt_task_line.gantt_drag_progress .gantt_link_control div,.gantt_task_line.gantt_drag_progress .gantt_task_drag,.gantt_task_line.gantt_drag_progress .gantt_task_progress_drag,.gantt_task_line.gantt_drag_resize .gantt_link_control div,.gantt_task_line.gantt_drag_resize .gantt_task_drag,.gantt_task_line.gantt_drag_resize .gantt_task_progress_drag,.gantt_task_line.gantt_selected .gantt_link_control div,.gantt_task_line.gantt_selected .gantt_task_drag,.gantt_task_line.gantt_selected .gantt_task_progress_drag,.gantt_task_line:hover .gantt_link_control div,.gantt_task_line:hover .gantt_task_drag,.gantt_task_line:hover .gantt_task_progress_drag{display:block}.gantt_link_source,.gantt_link_target{box-shadow:0 0 3px #0042e9}.gantt_link_target.link_finish_allow,.gantt_link_target.link_start_allow{box-shadow:0 0 3px #65ffff}.gantt_link_target.link_finish_deny,.gantt_link_target.link_start_deny{box-shadow:0 0 3px #e87e7b}.link_finish_allow .gantt_link_control.task_end_date div,.link_start_allow .gantt_link_control.task_start_date div{background-color:#65ffff;border-color:#18ffff}.link_finish_deny .gantt_link_control.task_end_date div,.link_start_deny .gantt_link_control.task_start_date div{background-color:#e87e7b;border-color:#dd3e3a}.gantt_link_arrow_right{border-width:4px 0 4px 6px;border-top-color:transparent!important;border-right-color:transparent!important;border-bottom-color:transparent!important;border-left-color:#18ffff}.gantt_link_arrow_left{border-width:4px 6px 4px 0;margin-top:-1px;border-top-color:transparent!important;border-right-color:#18ffff;border-bottom-color:transparent!important;border-left-color:transparent!important}.gantt_link_arrow_up{border-width:0 4px 6px;border-color:transparent transparent #18ffff;border-top-color:transparent!important;border-right-color:transparent!important;border-bottom-color:#18ffff;border-left-color:transparent!important}.gantt_link_arrow_down{border-width:4px 6px 0 4px;border-top-color:#18ffff;border-right-color:transparent!important;border-bottom-color:transparent!important;border-left-color:transparent!important}.gantt_task_drag,.gantt_task_progress_drag{cursor:ew-resize;display:none;position:absolute}.gantt_task_drag.task_right{cursor:e-resize}.gantt_task_drag.task_left{cursor:w-resize}.gantt_task_drag{height:100%;width:8px;z-index:1;top:-1px}.gantt_task_drag.task_left{left:-7px}.gantt_task_drag.task_right{right:-7px}.gantt_task_progress_drag{height:8px;width:8px;bottom:-4px;margin-left:-4px;background-position:bottom;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAALCAYAAAB24g05AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyhpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTMyIDc5LjE1OTI4NCwgMjAxNi8wNC8xOS0xMzoxMzo0MCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTUuNSAoV2luZG93cykiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6RDQ2MjFDRjU2ODc4MTFFNjk2MEVEQjgxRDU3RThDRjQiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6RDQ2MjFDRjY2ODc4MTFFNjk2MEVEQjgxRDU3RThDRjQiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDpENDYyMUNGMzY4NzgxMUU2OTYwRURCODFENTdFOENGNCIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDpENDYyMUNGNDY4NzgxMUU2OTYwRURCODFENTdFOENGNCIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PkyX4qoAAADrSURBVHjaYiz7z8yADXQx/mUCUr1QbjFQ3T9s6phwaOYEUqvkHBkLQBjIXg0VI2wAUKEIkNqrFc0YHLqDiQGEtWMYg0BiUDncBgAVqACpY5bVjJY+i5kYmNkYwNh7ERMDSAwkB1WDaQBQwoKJheGY+ywmVdsWoDAjkiogGyTmMZtJFajmOEgtigFAgSA2HoZ9wZuZRPVTGRlwAb0URgagGhGQWpAeqNkM+TySDL3BW5mYxQ1xa0YGL8//Z1jr8+/fl2cMRSAd/zMeMjPwyTGQBD49YmCYIf8X4gVSNSPrYWKgEIC9QIkBAAEGAKWdQQSo7CbHAAAAAElFTkSuQmCC);background-repeat:no-repeat;z-index:1}.gantt_task_progress_drag:hover{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAALCAYAAAB24g05AAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAAsTAAALEwEAmpwYAAAA+UlEQVQoz6WPP0tCURiHn9+5d7huEd5VKhIEwaEQlOtQS0HjbXBy6ANUkuEo4njAz9Bee5tu2bfoCwTRVsu5p6E7GHoJ8dneP7+H99XQB6zDyhlgmpeDoQ+ydXumIFwCHuOG+nFDfeAp7/0vsHJlYFY50WVnIjoTUTlVCszyWbHAyh0Ci1pX7ea9MCGYEJoDUeuqDSzynVWBlWspYHF0rWq9p5VT6z1xfKOqAl6tXOuPwMqlYcQ8GSnePxdF7J2JZKRyGDG3cimAgNtol2kyVrBzUBxe5vPN8zL22fcHdwL8xYOhFLMRX+/wfJX9vrBpeDlj2BIBfhvBD+rwPMTN8+ghAAAAAElFTkSuQmCC)}.gantt_link_tooltip{box-shadow:3px 3px 3px #888;background-color:#fff;border-left:1px dotted #cecece;border-top:1px dotted #cecece;font-family:Tahoma;font-size:8pt;color:#444;padding:6px;line-height:20px}.gantt_link_direction{height:0;border:0 none #18ffff;border-bottom-style:dashed;border-bottom-width:2px;transform-origin:0 0;-ms-transform-origin:0 0;-webkit-transform-origin:0 0;z-index:2;margin-left:1px;position:absolute}.gantt_grid_data .gantt_row.gantt_selected,.gantt_grid_data .gantt_row.odd.gantt_selected,.gantt_task_row.gantt_selected{background-color:#42425e}.gantt_task_row.gantt_selected .gantt_task_cell{border-right-color:#2d2d40}.gantt_task_line.gantt_selected{box-shadow:0 0 5px #0e2d7d}.gantt_task_line.gantt_project.gantt_selected{box-shadow:0 0 5px #006803}.gantt_task_line.gantt_milestone{visibility:hidden;background-color:#c06fce;border:0 solid #ef8eff;box-sizing:content-box;-moz-box-sizing:content-box}.gantt_task_line.gantt_milestone div{visibility:visible}.gantt_task_line.gantt_milestone .gantt_task_content{background:inherit;border:inherit;border-width:1px;border-radius:inherit;box-sizing:border-box;-moz-box-sizing:border-box;transform:rotate(45deg)}.gantt_task_line.gantt_task_inline_color{border-color:#999}.gantt_task_line.gantt_task_inline_color .gantt_task_progress{background-color:#363636;opacity:.2}.gantt_task_line.gantt_task_inline_color.gantt_project.gantt_selected,.gantt_task_line.gantt_task_inline_color.gantt_selected{box-shadow:0 0 5px #999}.gantt_task_link.gantt_link_inline_color:hover .gantt_line_wrapper div{box-shadow:0 0 5px 0 #999}.gantt_critical_task{background-color:#e63030;border-color:#9d3a3a}.gantt_critical_task .gantt_task_progress{background-color:rgba(0,0,0,.4)}.gantt_critical_link .gantt_line_wrapper>div{background-color:#e63030}.gantt_critical_link .gantt_link_arrow{border-color:#e63030}.gantt_btn_set:focus,.gantt_cell:focus,.gantt_grid_head_cell:focus,.gantt_popup_button:focus,.gantt_qi_big_icon:focus,.gantt_row:focus{box-shadow:inset 0 0 1px 1px #4d90fe}.gantt_split_parent,.gantt_split_subproject{opacity:.1;pointer-events:none}.gantt_rollup_child .gantt_link_control,.gantt_rollup_child:hover .gantt_link_control{display:none}.gantt_unselectable,.gantt_unselectable div{-webkit-user-select:none;-moz-user-select:none;-moz-user-select:-moz-none}.gantt_cal_light{-webkit-tap-highlight-color:transparent;background:#000;border-radius:6px;font-family:arial;border:1px solid #c1c1c1;color:#fff;font-size:14px;position:absolute;z-index:10001;width:550px;height:250px;border-color:#fff;box-shadow:inset 0 0 0 4px #0505ff;padding:4px}.gantt_cal_light_wide{width:650px}.gantt_cal_light select{font-family:arial;border:1px solid #c1c1c1;font-size:14px;padding:2px;margin:0}.gantt_cal_ltitle{padding:7px 10px;overflow:hidden;-webkit-border-top-left-radius:6px;-webkit-border-bottom-left-radius:0;-webkit-border-top-right-radius:6px;-webkit-border-bottom-right-radius:0;-moz-border-radius-topleft:6px;-moz-border-radius-bottomleft:0;-moz-border-radius-topright:6px;-moz-border-radius-bottomright:0;border-top-left-radius:6px;border-bottom-left-radius:0;border-top-right-radius:6px;border-bottom-right-radius:0}.gantt_cal_ltitle,.gantt_cal_ltitle span{white-space:nowrap}.gantt_cal_lsection{color:#727272;font-weight:700;padding:12px 0 5px 10px}.gantt_cal_lsection .gantt_fullday{float:right;margin-right:5px;font-size:12px;font-weight:400;line-height:20px;vertical-align:top;cursor:pointer}.gantt_cal_lsection{font-size:13px}.gantt_cal_ltext{padding:2px 10px;overflow:hidden}.gantt_cal_ltext textarea{overflow-y:auto;overflow-x:hidden;font-family:arial;font-size:14px;box-sizing:border-box;border:1px solid #c1c1c1;height:100%;width:100%;outline:none!important;resize:none}.gantt_section_constraint [data-constraint-time-select]{margin-left:20px}.gantt_time{font-weight:700}.gantt_cal_light .gantt_title{padding-left:10px}.gantt_cal_larea{border:1px solid #c1c1c1;border-left:none;border-right:none;background-color:#000;overflow:hidden;height:1px}.gantt_btn_set{margin:10px 7px 5px 10px;padding:5px 15px 5px 10px;float:left;border-radius:4px;border:2px solid #c1c1c1;height:32px;font-weight:700;background:#000;box-sizing:border-box;cursor:pointer}.gantt_hidden{display:none}.gantt_btn_set div{float:left;font-size:13px;height:18px;line-height:18px;background-repeat:no-repeat;vertical-align:middle}.gantt_save_btn{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyhpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTMyIDc5LjE1OTI4NCwgMjAxNi8wNC8xOS0xMzoxMzo0MCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTUuNSAoV2luZG93cykiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6MEEyMTFDOUM2ODc5MTFFNjlDOTRDREYyNUQ4NENENTEiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6MEEyMTFDOUQ2ODc5MTFFNjlDOTRDREYyNUQ4NENENTEiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDowQTIxMUM5QTY4NzkxMUU2OUM5NENERjI1RDg0Q0Q1MSIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDowQTIxMUM5QjY4NzkxMUU2OUM5NENERjI1RDg0Q0Q1MSIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PhVZXooAAAD2SURBVHjaxNO/a8JAFMBxUx1KQXAQcWj9sdhBCDg52I6FgjgIIi7duunsIl0dxNmxW3EUHaS0tFj1DxJRKiX1/AZeIYTGNMnQg8927727e++0tgqHgqyTUMDlN8E55tAjPoIzeEcWPa8nyEllM3iJupcEeXzgAm+4xdpMoGOB9JHgAmZIYooKtj+P2MWVHO3yl+Ci3DmOEar4tHahIRtSkqRgCb7GK2IYmnfGl72NG5QxRkKSlXCDZ0TxiDsYTnOwQw1PUu0FE5xhgHt8uw2SIVUGEniKPlpQTq9rHyRzYxMr7PHg1lunSez8dTg0pdT//saDAAMAj/Mt6qJaGUkAAAAASUVORK5CYII=);margin-top:2px;width:21px}.gantt_cancel_btn{margin-top:2px;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyhpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTMyIDc5LjE1OTI4NCwgMjAxNi8wNC8xOS0xMzoxMzo0MCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTUuNSAoV2luZG93cykiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6MERGODM2RkI2ODc5MTFFNkFCOTRCOTNEMkMwODJCQkUiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6MERGODM2RkM2ODc5MTFFNkFCOTRCOTNEMkMwODJCQkUiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDowREY4MzZGOTY4NzkxMUU2QUI5NEI5M0QyQzA4MkJCRSIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDowREY4MzZGQTY4NzkxMUU2QUI5NEI5M0QyQzA4MkJCRSIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/Ppyd3J4AAAFPSURBVHjajJO5SkNRFEVfnlEbU9qrjVMwYiMBEbSK4g8IllFQK/EvLCwEEYdS/AOHIiJYWinEqREtbLQKCGpQcW3YgUuI8R1YvOTdvU9uzpCqVCpRXQxAEaag2+8e4AT24CYUp4IEbbAOixBHjePHSVbhLQqEMh/CMnzBBuQhY/J+p7MFOIaO8AabsATPMAOXDX69E86hz9+35FGCQT5cwTeMNjGfgbT30AVpyMUuWAtsJzBfwzjs2FNUgoKFBwnMk/ASaAv6C58uYjtUE5gjaz+kT//RrnrzBLwG561+VmMPiWIkoVmR9fMp9oQpZhOaa1pFSTXIuvoakkfo/cc8BBdu47BuUIZdF0bmuybmHBxZq7aXa5OY8cGYO6Ep24dbG/thznuijp3CtLThMinJmme92TLptivwXr+NtVAB5z1gPb6RalPyJpZD8a8AAwBoDGzHPr0K4wAAAABJRU5ErkJggg==);width:20px}.gantt_delete_btn{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyhpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTMyIDc5LjE1OTI4NCwgMjAxNi8wNC8xOS0xMzoxMzo0MCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTUuNSAoV2luZG93cykiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6MTZBMjlFNkU2ODc5MTFFNjkxOTRGRTZGMDkwMENCMUIiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6MTZBMjlFNkY2ODc5MTFFNjkxOTRGRTZGMDkwMENCMUIiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDoxNkEyOUU2QzY4NzkxMUU2OTE5NEZFNkYwOTAwQ0IxQiIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDoxNkEyOUU2RDY4NzkxMUU2OTE5NEZFNkYwOTAwQ0IxQiIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PpeemjIAAABMSURBVHjaYvx/hAEbqAfiBjQxEL8RXSETkZphBtSjCzJCXfCfgTzAyMRAIWCBmUSpATBArFcY8QUiSWDUgFEDsBlwhAg9R5E5AAEGAFNACzFr4MENAAAAAElFTkSuQmCC);margin-top:2px;width:20px}.gantt_cal_cover{width:100%;height:100%;position:fixed;z-index:10000;top:0;left:0;background-color:#000;opacity:.1;filter:progid:DXImageTransform.Microsoft.Alpha(opacity=10)}.gantt_custom_button{padding:0 3px;font-family:arial;font-size:14px;font-weight:400;margin-right:10px;margin-top:-5px;cursor:pointer;float:right;height:21px;width:90px;border:1px solid #cecece;text-align:center;border-radius:4px}.gantt_custom_button div{cursor:pointer;float:none;height:21px;line-height:21px;vertical-align:middle}.gantt_custom_button div:first-child{display:none}.gantt_cal_light_wide{width:580px;padding:2px 4px}.gantt_cal_light_wide .gantt_cal_larea{box-sizing:border-box;border:1px solid #c1c1c1}.gantt_cal_light_wide .gantt_cal_lsection{border:0;float:left;text-align:right;width:80px;height:20px;padding:5px 10px 0 0}.gantt_cal_light_wide .gantt_wrap_section{position:relative;padding:10px 0;overflow:hidden;border-bottom:1px solid #7e7e7e}.gantt_cal_light_wide .gantt_section_time{overflow:hidden;padding-top:2px!important;padding-right:0;height:20px!important}.gantt_cal_light_wide .gantt_cal_ltext{padding-right:0}.gantt_cal_light_wide .gantt_cal_larea{padding:0 10px;width:100%}.gantt_cal_light_wide .gantt_section_time{background:transparent}.gantt_cal_light_wide .gantt_cal_checkbox label{padding-left:0}.gantt_cal_light_wide .gantt_cal_lsection .gantt_fullday{float:none;margin-right:0;font-weight:700;cursor:pointer}.gantt_cal_light_wide .gantt_custom_button{position:absolute;top:0;right:0;margin-top:2px}.gantt_cal_light_wide .gantt_repeat_right{margin-right:55px}.gantt_cal_light_wide.gantt_cal_light_full{width:738px}.gantt_cal_wide_checkbox input{margin-top:8px;margin-left:14px}.gantt_cal_light input{font-size:14px}.gantt_section_time{background-color:#fff;white-space:nowrap;padding:2px 10px 5px;padding-top:2px!important}.gantt_section_time .gantt_time_selects{float:left;height:25px}.gantt_section_time .gantt_time_selects select{height:23px;padding:2px;border:1px solid #c1c1c1}.gantt_duration{width:100px;height:23px;float:left;white-space:nowrap;margin-left:20px;line-height:23px}.gantt_duration .gantt_duration_dec,.gantt_duration .gantt_duration_inc,.gantt_duration .gantt_duration_value{box-sizing:border-box;text-align:center;vertical-align:top;height:100%;border:1px solid #c1c1c1}.gantt_duration .gantt_duration_value{width:40px;padding:3px 4px;border-left-width:0;border-right-width:0}.gantt_duration .gantt_duration_value.gantt_duration_value_formatted{width:70px}.gantt_duration .gantt_duration_dec,.gantt_duration .gantt_duration_inc{width:20px;padding:1px;padding-bottom:1px;background:#000}.gantt_duration .gantt_duration_dec{-moz-border-top-left-radius:4px;-moz-border-bottom-left-radius:4px;-webkit-border-top-left-radius:4px;-webkit-border-bottom-left-radius:4px;border-top-left-radius:4px;border-bottom-left-radius:4px}.gantt_duration .gantt_duration_inc{margin-right:4px;-moz-border-top-right-radius:4px;-moz-border-bottom-right-radius:4px;-webkit-border-top-right-radius:4px;-webkit-border-bottom-right-radius:4px;border-top-right-radius:4px;border-bottom-right-radius:4px}.gantt_resources{max-height:150px;height:auto;overflow-y:auto}.gantt_resource_row{display:block;padding:10px 0;border-bottom:1px solid #7e7e7e;cursor:pointer}.gantt_resource_row input[type=checkbox]:not(:checked),.gantt_resource_row input[type=checkbox]:not(:checked)~div{opacity:.5}.gantt_resource_toggle{vertical-align:middle}.gantt_resources_filter .gantt_resources_filter_input{padding:1px 2px;box-sizing:border-box}.gantt_resources_filter .switch_unsetted{vertical-align:middle}.gantt_resource_cell{display:inline-block}.gantt_resource_cell.gantt_resource_cell_checkbox{width:24px;max-width:24px;min-width:24px;vertical-align:middle}.gantt_resource_cell.gantt_resource_cell_label{width:40%;max-width:40%;vertical-align:middle}.gantt_resource_cell.gantt_resource_cell_value{width:30%;max-width:30%;vertical-align:middle}.gantt_resource_cell.gantt_resource_cell_value input,.gantt_resource_cell.gantt_resource_cell_value select{width:80%;vertical-align:middle;padding:1px 2px;box-sizing:border-box}.gantt_resource_cell.gantt_resource_cell_unit{width:10%;max-width:10%;vertical-align:middle}.gantt_resource_early_value{opacity:.8;font-size:.9em}.gantt_cal_quick_info{border:1px solid #ff0;border-radius:6px;position:absolute;z-index:300;border-color:#fff;box-shadow:inset 0 0 0 4px #0505ff;padding:4px;background-color:#000;width:300px;transition:left .5s ease,right .5s;-moz-transition:left .5s ease,right .5s;-webkit-transition:left .5s ease,right .5s;-o-transition:left .5s ease,right .5s}.gantt_no_animate{transition:none;-moz-transition:none;-webkit-transition:none;-o-transition:none}.gantt_cal_quick_info.gantt_qi_left .gantt_qi_big_icon{float:right}.gantt_cal_qi_title{-webkit-border-top-left-radius:6px;-webkit-border-bottom-left-radius:0;-webkit-border-top-right-radius:6px;-webkit-border-bottom-right-radius:0;-moz-border-radius-topleft:6px;-moz-border-radius-bottomleft:0;-moz-border-radius-topright:6px;-moz-border-radius-bottomright:0;border-top-left-radius:6px;border-bottom-left-radius:0;border-top-right-radius:6px;border-bottom-right-radius:0;padding:5px 0 8px 12px;color:#fff;background-color:#000;border-bottom:1px solid #ff0}.gantt_cal_qi_tdate{font-size:14px;font-weight:700}.gantt_cal_qi_tcontent{font-size:14px}.gantt_cal_qi_content{padding:16px 8px;font-size:14px;color:#fff;overflow:hidden}.gantt_cal_qi_controls{-webkit-border-top-left-radius:0;-webkit-border-bottom-left-radius:6px;-webkit-border-top-right-radius:0;-webkit-border-bottom-right-radius:6px;-moz-border-radius-topleft:0;-moz-border-radius-bottomleft:6px;-moz-border-radius-topright:0;-moz-border-radius-bottomright:6px;border-top-left-radius:0;border-bottom-left-radius:6px;border-top-right-radius:0;border-bottom-right-radius:6px;padding-left:7px}.gantt_cal_qi_controls .gantt_menu_icon{margin-top:6px;background-repeat:no-repeat}.gantt_cal_qi_controls .gantt_menu_icon.icon_edit{width:20px;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAAB3RJTUUH3QYFCjI5ZQj5bAAAAFNJREFUOMvt0zEOACAIA0DkwTymH8bJTRTKZGJXyaWEKPKTCQAH4Ls37cItcDUzsxHNDLZNhCq7Gt1wh9ErV7EjyGAhyGLphlnsClWuS32rn0czAV+vNGrM/LBtAAAAAElFTkSuQmCC)}.gantt_cal_qi_controls .gantt_menu_icon.icon_delete{width:20px;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyhpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTMyIDc5LjE1OTI4NCwgMjAxNi8wNC8xOS0xMzoxMzo0MCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTUuNSAoV2luZG93cykiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6MTZBMjlFNkU2ODc5MTFFNjkxOTRGRTZGMDkwMENCMUIiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6MTZBMjlFNkY2ODc5MTFFNjkxOTRGRTZGMDkwMENCMUIiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDoxNkEyOUU2QzY4NzkxMUU2OTE5NEZFNkYwOTAwQ0IxQiIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDoxNkEyOUU2RDY4NzkxMUU2OTE5NEZFNkYwOTAwQ0IxQiIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PpeemjIAAABMSURBVHjaYvx/hAEbqAfiBjQxEL8RXSETkZphBtSjCzJCXfCfgTzAyMRAIWCBmUSpATBArFcY8QUiSWDUgFEDsBlwhAg9R5E5AAEGAFNACzFr4MENAAAAAElFTkSuQmCC)}.gantt_qi_big_icon{font-size:13px;border-radius:4px;font-weight:700;background:#000;margin:5px 9px 8px 0;min-width:60px;line-height:32px;vertical-align:middle;padding:0 10px 0 5px;cursor:pointer;border:1px solid #ff0}.gantt_cal_qi_controls div{float:left;height:32px;text-align:center;line-height:32px}.gantt_cal_quick_info.gantt_qi_hidden{display:none}.gantt_tooltip{padding:10px;position:absolute;z-index:50;white-space:nowrap}.gantt_resource_marker{position:absolute;text-align:center;font-size:14px;color:#fff}.gantt_resource_marker_ok{background:rgba(78,208,134,.75)}.gantt_resource_marker_overtime{background:hsla(0,100%,76%,.69)}.gantt_histogram_label{width:100%;height:100%;position:absolute;z-index:1;font-weight:700;font-size:14px}.gantt_histogram_fill{background-color:rgba(41,157,180,.2);width:100%;position:absolute;bottom:0}.gantt_histogram_hor_bar{height:1px;margin-top:-1px}.gantt_histogram_hor_bar,.gantt_histogram_vert_bar{position:absolute;background:#299db4;margin-left:-1px}.gantt_histogram_vert_bar{width:1px}.gantt_histogram_cell{position:absolute;text-align:center;font-size:14px;color:#000}.gantt_marker{height:100%;width:2px;top:0;position:absolute;text-align:center;background-color:rgba(255,0,0,.4);box-sizing:border-box}.gantt_marker .gantt_marker_content{padding:5px;background:inherit;color:#fff;position:absolute;font-size:12px;line-height:12px;opacity:.8}.gantt_marker_area{position:absolute;top:0;left:0}.gantt_grid_editor_placeholder{position:absolute}.gantt_grid_editor_placeholder>div,.gantt_grid_editor_placeholder input,.gantt_grid_editor_placeholder select{width:100%;height:100%;box-sizing:border-box}.gantt_row_placeholder div{opacity:.5}.gantt_row_placeholder .gantt_add,.gantt_row_placeholder .gantt_file{display:none}.gantt_drag_marker.gantt_grid_dnd_marker{background-color:transparent;transition:all .1s ease}.gantt_grid_dnd_marker_line{height:4px;width:100%;background-color:#3498db}.gantt_grid_dnd_marker_line:before{background:#fff;width:12px;height:12px;box-sizing:border-box;border:3px solid #3498db;border-radius:6px;content:"";line-height:1px;display:block;position:absolute;margin-left:-11px;margin-top:-4px;pointer-events:none}.gantt_grid_dnd_marker_folder{height:100%;width:100%;position:absolute;pointer-events:none;box-sizing:border-box;box-shadow:inset 0 0 0 2px #3f98db;background:transparent}.gantt_overlay_area{display:none}.gantt_overlay,.gantt_overlay_area{position:absolute;height:inherit;width:inherit;top:0;left:0}.gantt_click_drag_rect{position:absolute;left:0;top:0;outline:1px solid #3f98db;background-color:rgba(52,152,219,.3)}.gantt_timeline_move_available,.gantt_timeline_move_available *{cursor:move}.gantt_rtl .gantt_grid{text-align:right}.gantt_rtl .gantt_cell,.gantt_rtl .gantt_row{flex-direction:row-reverse}.gantt_layout_content{width:100%;overflow:auto;box-sizing:border-box}.gantt_layout_cell{position:relative;box-sizing:border-box}.gantt_layout_cell>.gantt_layout_header{background:#33aae8;color:#fff;font-size:17px;padding:5px 10px;box-sizing:border-box}.gantt_layout_header.collapsed_x{background:#a9a9a9}.gantt_layout_header.collapsed_x .gantt_header_arrow:before{content:"\21E7"}.gantt_layout_header.collapsed_y{background:#a9a9a9}.gantt_layout_header.collapsed_y .gantt_header_arrow:before{content:"\21E9"}.gantt_layout_header{cursor:pointer}.gantt_layout_header .gantt_header_arrow{float:right;text-align:right}.gantt_layout_header .gantt_header_arrow:before{content:"\21E6"}.gantt_layout_header.vertical .gantt_header_arrow:before{content:"\21E7"}.gantt_layout_outer_scroll_vertical .gantt_layout_content{overflow-y:hidden}.gantt_layout_outer_scroll_horizontal .gantt_layout_content{overflow-x:hidden}.gantt_layout_x>.gantt_layout_cell{display:inline-block;vertical-align:top}.gantt_layout_x{white-space:nowrap}.gantt_resizing{opacity:.7;background:#f2f2f2}.gantt_layout_cell_border_right.gantt_resizer{overflow:visible;border-right:0}.gantt_resizer{cursor:e-resize;position:relative}.gantt_resizer_y{cursor:n-resize}.gantt_resizer_stick{background:#33aae8;z-index:9999;position:absolute;top:0;width:100%}.gantt_resizer_x .gantt_resizer_x{position:absolute;width:20px;height:100%;margin-left:-10px;top:0;left:0;z-index:1}.gantt_resizer_y .gantt_resizer_y{position:absolute;height:20px;width:100%;top:-10px;left:0;z-index:1}.gantt_resizer_error{background:#cd5c5c!important}.gantt_layout_cell_border_left{border-left:1px solid #ff0}.gantt_layout_cell_border_right{border-right:1px solid #ff0}.gantt_layout_cell_border_top{border-top:1px solid #ff0}.gantt_layout_cell_border_bottom{border-bottom:1px solid #ff0}.gantt_layout_cell_border_transparent{border-color:transparent}.gantt_window{position:absolute;top:50%;left:50%;z-index:999999999;background:#fff}.gantt_window_content{position:relative}.gantt_window_content_header{background:#39c;color:#fff;height:33px;padding:10px 10px 0;border-bottom:2px solid #fff;position:relative}.gantt_window_content_header_text{padding-left:10%}.gantt_window_content_header_buttons{position:absolute;top:10px;right:10px}.gantt_window_content_header_buttons:hover{color:#000;cursor:pointer}.gantt_window_content_resizer{position:absolute;width:15px;height:15px;bottom:0;line-height:15px;right:-1px;text-align:center;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA8AAAAPCAMAAAAMCGV4AAAABlBMVEUAAAAAAAClZ7nPAAAAAXRSTlMAQObYZgAAABZJREFUeAFjIAUwUshlpJDLSIhLGAAACQ4AFk79JaMAAAAASUVORK5CYII=);cursor:nw-resize;z-index:999}.gantt_window_content_frame{position:absolute;top:0;left:0;width:100%;height:100%;background:rgba(0,0,0,.1);z-index:9999}.gantt_window_drag{cursor:pointer!important}.gantt_window_resizing{overflow:visible}.gantt_window_resizing_body{overflow:hidden!important}.gantt_window_modal{background:rgba(0,0,0,.1);z-index:9999;top:0;left:0;width:100%;height:100%;position:fixed}.gantt_cal_light,.gantt_cal_quick_info,.gantt_container,.gantt_message_area,.gantt_modal_box,.gantt_tooltip{text-rendering:optimizeLegibility;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.gantt_noselect{-moz-user-select:-moz-none;-webkit-user-select:none;-ms-user-select:none;user-select:none}.gantt_noselect .gantt_grid_data .gantt_row.odd:hover,.gantt_noselect .gantt_grid_data .gantt_row:hover{background-color:unset}.gantt_drag_marker{position:absolute;top:-1000px;left:-1000px;font-family:arial;font-size:14px;z-index:1;white-space:nowrap}.gantt_drag_marker .gantt_tree_icon.gantt_blank,.gantt_drag_marker .gantt_tree_icon.gantt_close,.gantt_drag_marker .gantt_tree_icon.gantt_open,.gantt_drag_marker .gantt_tree_indent{display:none}.gantt_empty_state_wrapper{position:relative}.gantt_empty_state{height:100%;max-width:500px;box-sizing:border-box;white-space:pre-line;overflow-wrap:break-word;display:flex;flex-direction:column;justify-content:flex-start;margin:0 auto}.gantt_empty_state_image{background-image:url("data:image/png;base64,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");background-repeat:no-repeat;width:100%;max-width:500px;max-height:500px;margin-left:auto;margin-right:auto;display:block;min-height:0;height:200px;background-size:contain;background-position-x:center;background-position-y:bottom;margin-top:40px}.gantt_empty_state_text{text-align:center}.gantt_empty_state_text_link{color:#03a9f4;background-position:100% 0;background:none;opacity:1;height:unset;cursor:pointer}.gantt_drag_marker,.gantt_drag_marker .gantt_row.odd{background-color:#000}.gantt_drag_marker .gantt_row{border-left:1px solid #656565;border-top:1px solid #656565}.gantt_drag_marker .gantt_cell{border-color:#656565}.gantt_row.gantt_over,.gantt_task_row.gantt_over{background-color:#0070fe}.gantt_row.gantt_transparent .gantt_cell{opacity:.7}.gantt_task_row.gantt_transparent{background-color:#d0ddff}.gantt_popup_button.gantt_delete_button{font-weight:700;border:2px solid #76ff03;background:#000;color:#76ff03}.gantt_container_resize_watcher{background:transparent;width:100%;height:100%;position:absolute;top:0;left:0;z-index:-1;pointer-events:none;border:0;box-sizing:border-box;opacity:0}
src/components/dhtmlxGantt/codebase/skins/dhtmlxgantt_contrast_white.css
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1 @@
.buttonBg{background:#fff}.gridHoverStyle,.gridSelection,.timelineSelection{background-color:#5868c5}.gantt_grid_scale .gantt_grid_head_cell,.header_text_style{text-transform:uppercase;font-weight:700}.gantt_grid_scale .gantt_grid_head_cell{color:#585858;border-top:none!important;border-right:none!important}.gantt_grid_data .gantt_cell{border-right:none;color:#000}.gantt_grid_data .gantt_row.gantt_selected .gantt_cell,.gantt_grid_data .gantt_row:hover .gantt_cell{color:#fff}.gantt_task_link .gantt_link_arrow_right{border-width:6px;margin-top:-3px}.gantt_task_link .gantt_link_arrow_left{border-width:6px;margin-left:-6px;margin-top:-3px}.gantt_task_link .gantt_link_arrow_down,.gantt_task_link .gantt_link_arrow_up{border-width:6px}.gantt_task_line .gantt_task_progress_drag{bottom:-4px;height:10px;margin-left:-8px;width:16px}.chartHeaderBg{background-color:#fff}.gantt_task .gantt_task_scale .gantt_scale_cell{color:#585858;text-transform:uppercase;font-weight:700;border-right:1px solid #000}.gantt_row.gantt_project,.gantt_row.odd.gantt_project{background-color:#edfff4}.gantt_task_row.gantt_project,.gantt_task_row.odd.gantt_project{background-color:#f5fff9}.gantt_task_line.gantt_project{background-color:#74ffa9}.gantt_task_line.gantt_project .gantt_task_progress{background-color:#47bb55}.gantt_cal_larea input,.gantt_cal_larea select,.gantt_cal_larea textarea{color:#000;border:#000}.gantt_cal_larea .gantt_cal_lsection{color:#000;font-size:14px}.gantt_popup_shadow,.modalBorder{border-color:#000;box-shadow:inset 0 0 0 2px #000;padding:2px}.gantt_cal_larea,.lightboxHeaderBackground{background:#fff}.gantt_cal_light .gantt_btn_set{margin:5px 10px}.gantt_btn_set.gantt_cancel_btn_set{border:2px solid #000;background:#fff;color:#000}.gantt_btn_set.gantt_save_btn_set{border-color:#000;background:#060;color:#000;border:2px solid transparent;color:#fff}.gantt_btn_set.gantt_delete_btn_set{border-color:#000;background:#9f3500;color:#000;border:2px solid transparent;color:#fff}.gantt_cal_light_wide{padding-left:0!important;padding-right:0!important}.gantt_cal_light_wide .gantt_cal_larea{border-left:none!important;border-right:none!important}.gantt_popup_button.gantt_ok_button{font-weight:700;border-color:#000;background:#060;color:#000;border:2px solid transparent;color:#fff}.gantt_popup_button.gantt_cancel_button{font-weight:700;color:#454544;border:2px solid #000;background:#fff;color:#000}.gantt_popup_title{color:#000}.gantt_qi_big_icon,.gantt_qi_big_icon.icon_edit{border:2px solid #000;color:#000}.gantt_qi_big_icon.icon_edit{background:#fff}.gantt_qi_big_icon.icon_delete{border-color:#000;background:#9f3500;color:#000;border:2px solid transparent;color:#fff}.gantt_tooltip{color:#000;background:#fff}.gantt_container,.gantt_tooltip{font-size:14px;border:1px solid #000}.gantt_container{background-color:#fff;font-family:arial;position:relative;white-space:nowrap;overflow-x:hidden;overflow-y:hidden}.gantt_touch_active{overscroll-behavior:none}.gantt_task_scroll{overflow-x:scroll}.gantt_grid,.gantt_task{position:relative;overflow-x:hidden;overflow-y:hidden;display:inline-block;vertical-align:top}.gantt_grid_scale,.gantt_task_scale{color:#262626;font-size:14px;border-bottom:1px solid #000;box-sizing:border-box}.gantt_grid_scale,.gantt_task_scale,.gantt_task_vscroll{background-color:#fff}.gantt_scale_line{box-sizing:border-box;-moz-box-sizing:border-box;border-top:1px solid #000}.gantt_scale_line:first-child{border-top:none}.gantt_grid_head_cell{display:inline-block;vertical-align:top;border-right:1px solid #000;text-align:center;position:relative;cursor:default;height:100%;box-sizing:border-box;-moz-box-sizing:border-box;line-height:33px;-moz-user-select:-moz-none;-webkit-user-select:none;user-select:none;overflow:hidden}.gantt_scale_line{clear:both}.gantt_grid_data{width:100%;overflow:hidden;position:relative}.gantt_row{position:relative;-webkit-user-select:none;-moz-user-select:none;-moz-user-select:-moz-none}.gantt_add,.gantt_grid_head_add{width:100%;height:100%;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyhpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTMyIDc5LjE1OTI4NCwgMjAxNi8wNC8xOS0xMzoxMzo0MCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTUuNSAoV2luZG93cykiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6NkM1NEUwREQ2ODc4MTFFNkJCN0REMkNCNDBBRDc4Q0UiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6NkM1NEUwREU2ODc4MTFFNkJCN0REMkNCNDBBRDc4Q0UiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo2QzU0RTBEQjY4NzgxMUU2QkI3REQyQ0I0MEFENzhDRSIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDo2QzU0RTBEQzY4NzgxMUU2QkI3REQyQ0I0MEFENzhDRSIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PopaRyYAAABHSURBVHjaYmCgIfgAxP+h+AMuRYx4DPhPjFomSp05eAxADrD/WPzPgEX+A3LA/CfTAYxU88JHMvR+HE0HhA34iINNXQAQYAAFOhSSoOBmvgAAAABJRU5ErkJggg==);background-position:50%;background-repeat:no-repeat;cursor:pointer;position:relative;-moz-opacity:.3;opacity:.3}.gantt_grid_head_cell.gantt_grid_head_add{-moz-opacity:.6;opacity:.6;top:0}.gantt_grid_head_cell.gantt_grid_head_add:hover{-moz-opacity:1;opacity:1}.gantt_grid_data .gantt_row.odd:hover,.gantt_grid_data .gantt_row:hover{background-color:#5868c5}.gantt_grid_data .gantt_row.odd:hover .gantt_add,.gantt_grid_data .gantt_row:hover .gantt_add{-moz-opacity:1;opacity:1}.gantt_row,.gantt_task_row{border-bottom:1px solid #000;background-color:#fff}.gantt_row.odd,.gantt_task_row.odd{background-color:#fff}.gantt_cell,.gantt_grid_head_cell,.gantt_row,.gantt_scale_cell,.gantt_task_cell,.gantt_task_row{box-sizing:border-box;-moz-box-sizing:border-box}.gantt_grid_head_cell,.gantt_scale_cell{line-height:inherit}.gantt_grid_scale .gantt_grid_column_resize_wrap{cursor:col-resize;position:absolute;width:13px;margin-left:-7px}.gantt_grid_column_resize_wrap .gantt_grid_column_resize{background-color:#000;height:100%;width:1px;margin:0 auto}.gantt_task_grid_row_resize_wrap{cursor:row-resize;position:absolute;height:13px;margin-top:-7px;left:0;width:100%}.gantt_task_grid_row_resize_wrap .gantt_task_grid_row_resize{background-color:#000;top:6px;height:1px;width:100%;margin:0 auto;position:relative}.gantt_drag_marker{pointer-events:none}.gantt_drag_marker.gantt_grid_resize_area,.gantt_drag_marker.gantt_row_grid_resize_area{background-color:hsla(0,0%,91%,.5);height:100%;width:100%;box-sizing:border-box}.gantt_drag_marker.gantt_grid_resize_area{border-left:1px solid #000;border-right:1px solid #000}.gantt_drag_marker.gantt_row_grid_resize_area{border-top:1px solid #000;border-bottom:1px solid #000;pointer-events:none}.gantt_row{display:flex}.gantt_row>div{flex-shrink:0;flex-grow:0}.gantt_cell{vertical-align:top;border-right:1px solid #000;padding-left:6px;padding-right:6px;height:100%;overflow:hidden;white-space:nowrap;font-size:15px}.gantt_cell_tree{display:flex;flex-wrap:nowrap}.gantt_grid_data .gantt_last_cell,.gantt_grid_scale .gantt_last_cell,.gantt_task .gantt_task_scale .gantt_scale_cell.gantt_last_cell,.gantt_task_bg .gantt_last_cell{border-right-width:0}.gantt_task .gantt_task_scale .gantt_scale_cell.gantt_last_cell{border-right-width:1px}.gantt_task_bg{overflow:hidden}.gantt_scale_cell{white-space:nowrap;overflow:hidden;text-align:center}.gantt_scale_cell,.gantt_task_cell{display:inline-block;border-right:1px solid #000;height:100%}.gantt_layout_cell.gantt_ver_scroll{width:0;background-color:transparent;height:1px;overflow-x:hidden;overflow-y:scroll;position:absolute;right:0;z-index:1}.gantt_ver_scroll>div{width:1px;height:1px}.gantt_hor_scroll{height:0;background-color:transparent;width:100%;clear:both;overflow-x:scroll;overflow-y:hidden}.gantt_layout_cell .gantt_hor_scroll{position:absolute}.gantt_hor_scroll>div{width:5000px;height:1px}.gantt_tree_icon,.gantt_tree_indent{flex-grow:0;flex-shrink:0}.gantt_tree_indent{width:15px;height:100%}.gantt_tree_content,.gantt_tree_icon{vertical-align:top}.gantt_tree_icon{width:28px;height:100%;background-repeat:no-repeat;background-position:50%}.gantt_tree_content{height:100%;white-space:nowrap;min-width:0}.gantt_tree_icon.gantt_open{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyhpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTMyIDc5LjE1OTI4NCwgMjAxNi8wNC8xOS0xMzoxMzo0MCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTUuNSAoV2luZG93cykiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6QzVDNzJCOEM2ODc3MTFFNkFGNTdEMzMyODI3QzgxN0EiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6QzVDNzJCOEQ2ODc3MTFFNkFGNTdEMzMyODI3QzgxN0EiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDpDNUM3MkI4QTY4NzcxMUU2QUY1N0QzMzI4MjdDODE3QSIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDpDNUM3MkI4QjY4NzcxMUU2QUY1N0QzMzI4MjdDODE3QSIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/Pin6TiQAAABfSURBVHja1JLBDoAwCEOp2Ufyh/CXnSezLDoU9CAnLi3tC1BVyY6ZySbFacPOh1rMBuLuuKPcax/HogqMkpUZvApxBZMzvE8T4OQy/gXxqk5sMH5YJgEyFUCyxKALMAAp9xIuO3IRpAAAAABJRU5ErkJggg==);width:18px;cursor:pointer}.gantt_tree_icon.gantt_close{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyhpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTMyIDc5LjE1OTI4NCwgMjAxNi8wNC8xOS0xMzoxMzo0MCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTUuNSAoV2luZG93cykiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6Qzk5M0JBOUI2ODc3MTFFNjg3NkRDN0U4RTlDQjZBRjEiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6Qzk5M0JBOUM2ODc3MTFFNjg3NkRDN0U4RTlDQjZBRjEiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDpDOTkzQkE5OTY4NzcxMUU2ODc2REM3RThFOUNCNkFGMSIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDpDOTkzQkE5QTY4NzcxMUU2ODc2REM3RThFOUNCNkFGMSIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PkhdOa8AAABXSURBVHjatFJBDsAwCJJmj/SH+kt2M91OVi0nYwICEaoqVZiZLGni2WYecvEXiGUCcWw0grh7irQXP+sgWeanpysOUBaofGU7wngH7Aig4gAkWxFeAQYA3h0OMhsl2ScAAAAASUVORK5CYII=);width:18px;cursor:pointer}.gantt_tree_icon.gantt_blank{width:18px}.gantt_tree_icon.gantt_folder_open{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAYAAABWzo5XAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyhpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTMyIDc5LjE1OTI4NCwgMjAxNi8wNC8xOS0xMzoxMzo0MCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTUuNSAoV2luZG93cykiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6RkM2MUMyMzQ2ODc3MTFFNjhFMjE5QzYzREY2ODEzREUiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6RkM2MUMyMzU2ODc3MTFFNjhFMjE5QzYzREY2ODEzREUiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDpGQzYxQzIzMjY4NzcxMUU2OEUyMTlDNjNERjY4MTNERSIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDpGQzYxQzIzMzY4NzcxMUU2OEUyMTlDNjNERjY4MTNERSIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PlC39FYAAADWSURBVHjaYty4fi0DNQATA5UAskGeQPwMiP9jwfWkGDQXiCVxqGsgZBiyQTBDGNFwI5Jh2FwL8oUnMWHUgGQYNgBywFxiA7sBi0thGGwYVWOtFYi/IIn9JxI7oBtUBMTcZDiiHt2gE1B2C55wQMZiQPwZ6iIHZINgMZIKxFxEuOQ1EE9GdxXIoANQLA7E2UR6qweIP6K7iAHJVaVAzEuEQe+BeBqyAAuUBrloBxB7APEnMgL+BXI6ygfiR2QY8hSIk1mQBG4BsTy5CZLx////VEnZAAEGAO3yNxaCOyWPAAAAAElFTkSuQmCC)}.gantt_tree_icon.gantt_folder_closed{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAYAAABWzo5XAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyhpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTMyIDc5LjE1OTI4NCwgMjAxNi8wNC8xOS0xMzoxMzo0MCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTUuNSAoV2luZG93cykiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6RkZDMUZDMkI2ODc3MTFFNkI5QTdFOTQyM0UxNUEzRjEiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6RkZDMUZDMkM2ODc3MTFFNkI5QTdFOTQyM0UxNUEzRjEiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDpGRkMxRkMyOTY4NzcxMUU2QjlBN0U5NDIzRTE1QTNGMSIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDpGRkMxRkMyQTY4NzcxMUU2QjlBN0U5NDIzRTE1QTNGMSIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PvnU3ycAAAB9SURBVHjaYty4fi0DNQATA5UAskGeQPwMiP9jwfWkGDQXiCVxqGsgZBiyQTBDGNFwI5Jh2FwL8oUnMWHUgGQYNgBywFxiA7sBi0thGGwYTWJt1KChaNBzKP2fRAwCL5ANSgEJkOGYp0CczIIksA1PpiUIGP///0+VMAIIMAC11ShRpw6rxAAAAABJRU5ErkJggg==)}.gantt_tree_icon.gantt_file{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAYAAABWzo5XAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyhpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTMyIDc5LjE1OTI4NCwgMjAxNi8wNC8xOS0xMzoxMzo0MCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTUuNSAoV2luZG93cykiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6MDQwMTVBMUU2ODc4MTFFNkFBNDVCQkYzMzdERTM1MzYiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6MDQwMTVBMUY2ODc4MTFFNkFBNDVCQkYzMzdERTM1MzYiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDowNDAxNUExQzY4NzgxMUU2QUE0NUJCRjMzN0RFMzUzNiIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDowNDAxNUExRDY4NzgxMUU2QUE0NUJCRjMzN0RFMzUzNiIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PsHnBgAAAAB8SURBVHjaYvz//z/Dpg3rGCgBfgFBDExoYp5A/AyI/+PB9dgMQzdoLhBLEnBAAzbDWND4MEMYsRjwH80wEGjE5SJSAIrLmBgoAw3UMghnGOEDjHjCjHouGjVoOBj0HCmNEMIg8AKXQSnIkgTAUyBOxpWytxFRjGAFAAEGAOcUI0XiA1ItAAAAAElFTkSuQmCC)}.gantt_grid_head_cell .gantt_sort{position:absolute;right:5px;top:8px;width:7px;height:13px;background-repeat:no-repeat;background-position:50%}.gantt_grid_head_cell .gantt_sort.gantt_asc{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAcAAAANCAYAAABlyXS1AAAARUlEQVR4nGNgQAKGxib/GbABkIS7b8B/DAUwCRiGK0CXwFBAb1DfP/U/LszwHwi2X7qFgUEArBtdAVwCBmAKMCSQFSDzAWXXaOHsXeqkAAAAAElFTkSuQmCC)}.gantt_grid_head_cell .gantt_sort.gantt_desc{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAcAAAANCAYAAABlyXS1AAAARUlEQVR42mNgQAL1/VP/M2ADIIntF2/9x1AAlrh0C47hCmA60DFYwX88gIFGwNDY5D8uDFbg7hvwHx2jmIBTAlkB0e4BAEjlaNtBWJPnAAAAAElFTkSuQmCC)}.gantt_inserted,.gantt_updated{font-weight:700}.gantt_deleted{text-decoration:line-through}.gantt_invalid{background-color:#ffe0e0}.gantt_error{color:red}.gantt_status{right:1px;padding:5px 10px;background:hsla(0,0%,61%,.1);position:absolute;top:1px;transition:opacity .2s;opacity:0}.gantt_status.gantt_status_visible{opacity:1}#gantt_ajax_dots span{transition:opacity .2s;background-repeat:no-repeat;opacity:0}#gantt_ajax_dots span.gantt_dot_visible{opacity:1}.gantt_column_drag_marker{border:1px solid #cecece;opacity:.8;pointer-events:none}.gantt_grid_head_cell_dragged{border:1px solid #cecece;opacity:.3}.gantt_grid_target_marker{position:absolute;top:0;width:2px;height:100%;background-color:#000;transform:translateX(-1px)}.gantt_grid_target_marker:after,.gantt_grid_target_marker:before{display:block;content:"";position:absolute;left:-5px;width:0;height:0;border:6px solid transparent}.gantt_grid_target_marker:before{border-top-color:#000}.gantt_grid_target_marker:after{bottom:0;border-bottom-color:#000}.gantt_message_area{position:fixed;right:5px;width:250px;z-index:1000}.gantt-info{min-width:120px;padding:4px 4px 4px 20px;font-family:arial;z-index:10000;margin:5px;margin-bottom:10px;transition:all .5s ease}.gantt-info.hidden{height:0;padding:0;border-width:0;margin:0;overflow:hidden}.gantt_modal_box{overflow:hidden;display:inline-block;min-width:250px;width:250px;text-align:center;position:fixed;z-index:20000;border-color:#000;box-shadow:inset 0 0 0 2px #000;padding:2px;font-family:arial;border-radius:6px;border:1px solid #000;background:#fff}.gantt_popup_title{border-top-left-radius:6px;border-top-right-radius:6px;border-width:0}.gantt_button,.gantt_popup_button{border:1px solid #000;height:30px;line-height:30px;display:inline-block;margin:0 5px;border-radius:4px;background:#fff}.gantt-info,.gantt_button,.gantt_popup_button{user-select:none;-webkit-user-select:none;-moz-user-select:-moz-none;cursor:pointer}.gantt_popup_text{overflow:hidden}.gantt_popup_controls{border-radius:6px;padding:10px}.gantt_popup_button{min-width:100px}div.dhx_modal_cover{background-color:#000;cursor:default;filter:progid:DXImageTransform.Microsoft.Alpha(opacity=20);opacity:.2;position:fixed;z-index:19999;left:0;top:0;width:100%;height:100%;border:none;zoom:1}.gantt-info img,.gantt_modal_box img{float:left;margin-right:20px}.gantt-alert-error,.gantt-confirm-error{border:1px solid red}.gantt_button input,.gantt_popup_button div{border-radius:4px;font-size:16px;box-sizing:content-box;padding:0;margin:0;vertical-align:top}.gantt_popup_title{border-bottom:1px solid #000;height:40px;line-height:40px;font-size:20px}.gantt_popup_text{margin:15px 15px 5px;font-size:16px;color:#000;min-height:30px;border-radius:6px}.gantt-error,.gantt-info{font-size:16px;color:#000;box-shadow:3px 3px 3px rgba(0,0,0,.07);padding:0;background-color:#fff;border-radius:3px;border:1px solid #fff}.gantt-info div{padding:5px 10px;background-color:#fff;border-radius:3px;border:1px solid #000}.gantt-error{background-color:#b60000;border:1px solid #000}.gantt-error div{background-color:#b60000;border:1px solid #940000;color:#fff}.gantt-warning{background-color:#ef7f00;border:1px solid #000}.gantt-warning div{background-color:#ef7f00;border:1px solid #c97110;color:#fff}.gantt_data_area div,.gantt_grid div{-ms-touch-action:none;-webkit-tap-highlight-color:rgba(0,0,0,0)}.gantt_data_area{position:relative;overflow-x:hidden;overflow-y:hidden;-moz-user-select:-moz-none;-webkit-user-select:none;user-select:none}.gantt_links_area{position:absolute;left:0;top:0}.gantt_side_content,.gantt_task_content,.gantt_task_progress{line-height:inherit;overflow:hidden;height:100%}.gantt_task_content{font-size:15px;color:#000;width:100%;top:0;cursor:pointer;position:absolute;white-space:nowrap;text-align:center}.gantt_task_progress{text-align:center;z-index:0;background:#18eeff}.gantt_task_progress_wrapper{border-radius:inherit;position:relative;width:100%;height:100%;overflow:hidden}.gantt_task_line{border-radius:1px;position:absolute;box-sizing:border-box;background-color:#bbf9ff;border:1px solid #000;-webkit-user-select:none;-moz-user-select:none;-moz-user-select:-moz-none}.gantt_task_line.gantt_drag_move div{cursor:move}.gantt_touch_move,.gantt_touch_progress .gantt_touch_resize{transform:scale(1.02,1.1);transform-origin:50%}.gantt_touch_progress .gantt_task_progress_drag,.gantt_touch_resize .gantt_task_drag{transform:scaleY(1.3);transform-origin:50%}.gantt_side_content{position:absolute;white-space:nowrap;color:#6e6e6e;top:0;font-size:11px;font-size:14px}.gantt_side_content.gantt_left{right:100%;padding-right:20px}.gantt_side_content.gantt_right{left:100%;padding-left:20px}.gantt_side_content.gantt_link_crossing{bottom:8.75px;top:auto}.gantt_link_arrow,.gantt_task_link .gantt_line_wrapper{position:absolute;cursor:pointer}.gantt_line_wrapper div{background-color:#000}.gantt_task_link:hover .gantt_line_wrapper div{box-shadow:0 0 5px 0 #000}.gantt_task_link div.gantt_link_arrow{background-color:transparent;border-style:solid;width:0;height:0}.gantt_link_control{position:absolute;width:20px;top:0}.gantt_link_control div{display:none;cursor:pointer;box-sizing:border-box;position:relative;top:50%;margin-top:-7.5px;vertical-align:middle;border:1px solid #929292;border-radius:6.5px;height:13px;width:13px;background-color:#f0f0f0}.gantt_link_control.task_right div.gantt_link_point{margin-left:7px}.gantt_link_control div:hover{background-color:#fff}.gantt_link_control.task_left{left:-20px}.gantt_link_control.task_right{right:-20px}.gantt_link_target .gantt_link_control div,.gantt_task_line.gantt_drag_move .gantt_link_control div,.gantt_task_line.gantt_drag_move .gantt_task_drag,.gantt_task_line.gantt_drag_move .gantt_task_progress_drag,.gantt_task_line.gantt_drag_progress .gantt_link_control div,.gantt_task_line.gantt_drag_progress .gantt_task_drag,.gantt_task_line.gantt_drag_progress .gantt_task_progress_drag,.gantt_task_line.gantt_drag_resize .gantt_link_control div,.gantt_task_line.gantt_drag_resize .gantt_task_drag,.gantt_task_line.gantt_drag_resize .gantt_task_progress_drag,.gantt_task_line.gantt_selected .gantt_link_control div,.gantt_task_line.gantt_selected .gantt_task_drag,.gantt_task_line.gantt_selected .gantt_task_progress_drag,.gantt_task_line:hover .gantt_link_control div,.gantt_task_line:hover .gantt_task_drag,.gantt_task_line:hover .gantt_task_progress_drag{display:block}.gantt_link_source,.gantt_link_target{box-shadow:0 0 3px #bbf9ff}.gantt_link_target.link_finish_allow,.gantt_link_target.link_start_allow{box-shadow:0 0 3px #262626}.gantt_link_target.link_finish_deny,.gantt_link_target.link_start_deny{box-shadow:0 0 3px #e87e7b}.link_finish_allow .gantt_link_control.task_end_date div,.link_start_allow .gantt_link_control.task_start_date div{background-color:#262626;border-color:#000}.link_finish_deny .gantt_link_control.task_end_date div,.link_start_deny .gantt_link_control.task_start_date div{background-color:#e87e7b;border-color:#dd3e3a}.gantt_link_arrow_right{border-width:4px 0 4px 6px;border-top-color:transparent!important;border-right-color:transparent!important;border-bottom-color:transparent!important;border-left-color:#000}.gantt_link_arrow_left{border-width:4px 6px 4px 0;margin-top:-1px;border-top-color:transparent!important;border-right-color:#000;border-bottom-color:transparent!important;border-left-color:transparent!important}.gantt_link_arrow_up{border-width:0 4px 6px;border-color:transparent transparent #000;border-top-color:transparent!important;border-right-color:transparent!important;border-bottom-color:#000;border-left-color:transparent!important}.gantt_link_arrow_down{border-width:4px 6px 0 4px;border-top-color:#000;border-right-color:transparent!important;border-bottom-color:transparent!important;border-left-color:transparent!important}.gantt_task_drag,.gantt_task_progress_drag{cursor:ew-resize;display:none;position:absolute}.gantt_task_drag.task_right{cursor:e-resize}.gantt_task_drag.task_left{cursor:w-resize}.gantt_task_drag{height:100%;width:8px;z-index:1;top:-1px}.gantt_task_drag.task_left{left:-7px}.gantt_task_drag.task_right{right:-7px}.gantt_task_progress_drag{height:8px;width:8px;bottom:-4px;margin-left:-4px;background-position:bottom;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAALCAYAAAB24g05AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyhpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTMyIDc5LjE1OTI4NCwgMjAxNi8wNC8xOS0xMzoxMzo0MCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTUuNSAoV2luZG93cykiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6QzM0N0ZFRkM2ODc4MTFFNjhFNUREOTU2N0ZBMkI4ODUiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6QzM0N0ZFRkQ2ODc4MTFFNjhFNUREOTU2N0ZBMkI4ODUiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDpDMzQ3RkVGQTY4NzgxMUU2OEU1REQ5NTY3RkEyQjg4NSIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDpDMzQ3RkVGQjY4NzgxMUU2OEU1REQ5NTY3RkEyQjg4NSIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/Pkl1dsMAAADJSURBVHjapJK9DcIwEIXjKA2SSxqnZghar0Cb7EBBmRlYwF4Bam+QMgPQuYUeKVLwcc+QAmQIKJ/05J9772TpLIgoSyGEyHnZP4879oWkEQ3exSxYB601Qbw/4i7pTYSXrLaqKur7PqquaxRa1L42YFasU9M0FEKgEexxhxo8yQbMuiiKszGGPmGtJfZc4H1pwGyklFfnHE0BD7zIjAPYKqWGruvoV+Aty/KGbByE957+BRlkxWOS6b8wBf+VLM9mEl8wp8FdgAEAX8VEJCVY4FsAAAAASUVORK5CYII=);background-repeat:no-repeat;z-index:1}.gantt_task_progress_drag:hover{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAALCAYAAAB24g05AAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAAsTAAALEwEAmpwYAAABJElEQVQoz6WRsWqDUBSG/3uvXFHQoBwcMgtu1U6BQAn4BoUMTi7t5JBH0EHo1pdw6liwa8mQMVM6BzrHJUOgNZJws4XQEkjItx04/wfn/MAZiEhKKVdSyhURSVwDEfU1TfsJw1CFYag0Tfslov5FYdd1B5zzXRzHqq5rVde1iuNYcc53rusO/u6L08FxnHS9Xn8kScKzLIMQAkIIDIdD7Pd7Pp/PnxzH+W7bdvFP0Ov1XjabzetkMmHj8RiMsaOYMYYoikBEbDabPdq2rW+328+jwLKs967rnouiwGg0Onue7/sIggDT6fTBMIz7ruvemGmaC13X78qyhO/7F/1puVwiz3O0bfvFAKiqquB53lVNNU2DNE3BAVwdPs1w3AgDoG4RHADj3FVF5NgPuQAAAABJRU5ErkJggg==)}.gantt_link_tooltip{box-shadow:3px 3px 3px #888;background-color:#fff;border-left:1px dotted #cecece;border-top:1px dotted #cecece;font-family:Tahoma;font-size:8pt;color:#444;padding:6px;line-height:20px}.gantt_link_direction{height:0;border:0 none #000;border-bottom-style:dashed;border-bottom-width:2px;transform-origin:0 0;-ms-transform-origin:0 0;-webkit-transform-origin:0 0;z-index:2;margin-left:1px;position:absolute}.gantt_grid_data .gantt_row.gantt_selected,.gantt_grid_data .gantt_row.odd.gantt_selected,.gantt_task_row.gantt_selected{background-color:#5868c5}.gantt_task_row.gantt_selected .gantt_task_cell{border-right-color:#3d4dad}.gantt_task_line.gantt_selected{box-shadow:0 0 5px #18eeff}.gantt_task_line.gantt_project.gantt_selected{box-shadow:0 0 5px #74ffa9}.gantt_task_line.gantt_milestone{visibility:hidden;background-color:#c06fce;border:0 solid #6e2a7a;box-sizing:content-box;-moz-box-sizing:content-box}.gantt_task_line.gantt_milestone div{visibility:visible}.gantt_task_line.gantt_milestone .gantt_task_content{background:inherit;border:inherit;border-width:1px;border-radius:inherit;box-sizing:border-box;-moz-box-sizing:border-box;transform:rotate(45deg)}.gantt_task_line.gantt_task_inline_color{border-color:#999}.gantt_task_line.gantt_task_inline_color .gantt_task_progress{background-color:#363636;opacity:.2}.gantt_task_line.gantt_task_inline_color.gantt_project.gantt_selected,.gantt_task_line.gantt_task_inline_color.gantt_selected{box-shadow:0 0 5px #999}.gantt_task_link.gantt_link_inline_color:hover .gantt_line_wrapper div{box-shadow:0 0 5px 0 #999}.gantt_critical_task{background-color:#e63030;border-color:#9d3a3a}.gantt_critical_task .gantt_task_progress{background-color:rgba(0,0,0,.4)}.gantt_critical_link .gantt_line_wrapper>div{background-color:#e63030}.gantt_critical_link .gantt_link_arrow{border-color:#e63030}.gantt_btn_set:focus,.gantt_cell:focus,.gantt_grid_head_cell:focus,.gantt_popup_button:focus,.gantt_qi_big_icon:focus,.gantt_row:focus{box-shadow:inset 0 0 1px 1px #4d90fe}.gantt_split_parent,.gantt_split_subproject{opacity:.1;pointer-events:none}.gantt_rollup_child .gantt_link_control,.gantt_rollup_child:hover .gantt_link_control{display:none}.gantt_unselectable,.gantt_unselectable div{-webkit-user-select:none;-moz-user-select:none;-moz-user-select:-moz-none}.gantt_cal_light{-webkit-tap-highlight-color:transparent;background:#fff;border-radius:6px;font-family:arial;border:1px solid #c1c1c1;color:#262626;font-size:14px;position:absolute;z-index:10001;width:550px;height:250px;border-color:#000;box-shadow:inset 0 0 0 2px #000;padding:2px}.gantt_cal_light_wide{width:650px}.gantt_cal_light select{font-family:arial;border:1px solid #c1c1c1;font-size:14px;padding:2px;margin:0}.gantt_cal_ltitle{padding:7px 10px;overflow:hidden;-webkit-border-top-left-radius:6px;-webkit-border-bottom-left-radius:0;-webkit-border-top-right-radius:6px;-webkit-border-bottom-right-radius:0;-moz-border-radius-topleft:6px;-moz-border-radius-bottomleft:0;-moz-border-radius-topright:6px;-moz-border-radius-bottomright:0;border-top-left-radius:6px;border-bottom-left-radius:0;border-top-right-radius:6px;border-bottom-right-radius:0}.gantt_cal_ltitle,.gantt_cal_ltitle span{white-space:nowrap}.gantt_cal_lsection{color:#727272;font-weight:700;padding:12px 0 5px 10px}.gantt_cal_lsection .gantt_fullday{float:right;margin-right:5px;font-size:12px;font-weight:400;line-height:20px;vertical-align:top;cursor:pointer}.gantt_cal_lsection{font-size:13px}.gantt_cal_ltext{padding:2px 10px;overflow:hidden}.gantt_cal_ltext textarea{overflow-y:auto;overflow-x:hidden;font-family:arial;font-size:14px;box-sizing:border-box;border:1px solid #c1c1c1;height:100%;width:100%;outline:none!important;resize:none}.gantt_section_constraint [data-constraint-time-select]{margin-left:20px}.gantt_time{font-weight:700}.gantt_cal_light .gantt_title{padding-left:10px}.gantt_cal_larea{border:1px solid #c1c1c1;border-left:none;border-right:none;background-color:#fff;overflow:hidden;height:1px}.gantt_btn_set{margin:10px 7px 5px 10px;padding:5px 15px 5px 10px;float:left;border-radius:4px;border:2px solid #c1c1c1;height:32px;font-weight:700;background:#fff;box-sizing:border-box;cursor:pointer}.gantt_hidden{display:none}.gantt_btn_set div{float:left;font-size:13px;height:18px;line-height:18px;background-repeat:no-repeat;vertical-align:middle}.gantt_save_btn{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyhpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTMyIDc5LjE1OTI4NCwgMjAxNi8wNC8xOS0xMzoxMzo0MCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTUuNSAoV2luZG93cykiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6NTM5MTFCMzA2ODc4MTFFNjk0MEE5ODRFRjQ3MEY2MkQiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6NTM5MTFCMzE2ODc4MTFFNjk0MEE5ODRFRjQ3MEY2MkQiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo1MzkxMUIyRTY4NzgxMUU2OTQwQTk4NEVGNDcwRjYyRCIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDo1MzkxMUIyRjY4NzgxMUU2OTQwQTk4NEVGNDcwRjYyRCIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/Pnl+P+YAAADRSURBVHjaYvz//z8DJYCJgUJArgEyQHwIiPUYQF4gESsA8b3/ELCDVM1qQPwIqvkwEPORolkbiJ9DNe8BYm5wBAAJPahp8ng0GwLxa6jmrUDMCZMDEVugEg+BWB2LZnMgfg9Vsw6I2ZDlQQQPEO+FKngJtQ2mwBaIP0HllgExC7oFMAYHEG+AKgTZZg3ErkD8FSo2F4iZsXkPmQMyfQlUA0jjdyh7KhAz4gofdAFGqAYY6ManGYRZ0FIYKGNkA/EHIP4HxLWEkiTjkM1McAAQYAAwa97nPE+LsgAAAABJRU5ErkJggg==);margin-top:2px;width:21px}.gantt_cancel_btn{margin-top:2px;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyhpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTMyIDc5LjE1OTI4NCwgMjAxNi8wNC8xOS0xMzoxMzo0MCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTUuNSAoV2luZG93cykiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6NTc0QzgxQ0U2ODc4MTFFNkE5NTJDMTkyNTg2QUExRDAiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6NTc0QzgxQ0Y2ODc4MTFFNkE5NTJDMTkyNTg2QUExRDAiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo1NzRDODFDQzY4NzgxMUU2QTk1MkMxOTI1ODZBQTFEMCIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDo1NzRDODFDRDY4NzgxMUU2QTk1MkMxOTI1ODZBQTFEMCIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/Pk+05wsAAAFbSURBVHjajNM7LwRRGMbxNQYFSpXKNqwVEtFsIhIismQ/wOg3roVoNL6BhhWFy2p9A5dCKCjEJktiCQWJQkOJiEXi/ybPyJiwmTf5ZWbPnOedObNnqjzPi4WqHVkMo0Vjd9hDHlfByU7gvBYruMAs2lAnCY3ZtTU0hBtYeBvT+MQyUmiUlMbs2hh2/SauGixiEA/I4Dy0rBPcYkhP1osFTNkTJDGO8j9hqyYcKnyDdz1J0tELq9baKoXtRpfow7oyWWuQ1sStCOEBPAbmpq1BXD+KEcNWZzrG3djfFQ734ylwvUbHsqNNYtUdMWzVoeO9ox1mNRox7M+12rcGm/jSX3kUIdypuZbJW4MSNrRlW3FdIdyFHc21v73kb+U5HPtvFvPoQb3Y+RJO0YwDfRs/38IzRrCq7T2DAl6koDFXd85o5/76Gq3JpNaY05b9wKveSU5LmMCbH/oWYAA8HFpKXgW38QAAAABJRU5ErkJggg==);width:20px}.gantt_delete_btn{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyhpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTMyIDc5LjE1OTI4NCwgMjAxNi8wNC8xOS0xMzoxMzo0MCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTUuNSAoV2luZG93cykiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6NUFDNTg4MDI2ODc4MTFFNkI5QkY5OTIyMjkyMTFFNTkiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6NUFDNTg4MDM2ODc4MTFFNkI5QkY5OTIyMjkyMTFFNTkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo1QUM1ODgwMDY4NzgxMUU2QjlCRjk5MjIyOTIxMUU1OSIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDo1QUM1ODgwMTY4NzgxMUU2QjlCRjk5MjIyOTIxMUU1OSIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PuQSVckAAABGSURBVHjaYvj//z8DFlz/HxPUY1NLrGachjCCTQGaw0AeYGRioBCwwEyi1AAYINYrcAsp9sKoAaMGYDPgCBF6jiJzAAIMAPUxcjmgixXRAAAAAElFTkSuQmCC);margin-top:2px;width:20px}.gantt_cal_cover{width:100%;height:100%;position:fixed;z-index:10000;top:0;left:0;background-color:#000;opacity:.1;filter:progid:DXImageTransform.Microsoft.Alpha(opacity=10)}.gantt_custom_button{padding:0 3px;font-family:arial;font-size:14px;font-weight:400;margin-right:10px;margin-top:-5px;cursor:pointer;float:right;height:21px;width:90px;border:1px solid #cecece;text-align:center;border-radius:4px}.gantt_custom_button div{cursor:pointer;float:none;height:21px;line-height:21px;vertical-align:middle}.gantt_custom_button div:first-child{display:none}.gantt_cal_light_wide{width:580px;padding:2px 4px}.gantt_cal_light_wide .gantt_cal_larea{box-sizing:border-box;border:1px solid #c1c1c1}.gantt_cal_light_wide .gantt_cal_lsection{border:0;float:left;text-align:right;width:80px;height:20px;padding:5px 10px 0 0}.gantt_cal_light_wide .gantt_wrap_section{position:relative;padding:10px 0;overflow:hidden;border-bottom:1px solid #000}.gantt_cal_light_wide .gantt_section_time{overflow:hidden;padding-top:2px!important;padding-right:0;height:20px!important}.gantt_cal_light_wide .gantt_cal_ltext{padding-right:0}.gantt_cal_light_wide .gantt_cal_larea{padding:0 10px;width:100%}.gantt_cal_light_wide .gantt_section_time{background:transparent}.gantt_cal_light_wide .gantt_cal_checkbox label{padding-left:0}.gantt_cal_light_wide .gantt_cal_lsection .gantt_fullday{float:none;margin-right:0;font-weight:700;cursor:pointer}.gantt_cal_light_wide .gantt_custom_button{position:absolute;top:0;right:0;margin-top:2px}.gantt_cal_light_wide .gantt_repeat_right{margin-right:55px}.gantt_cal_light_wide.gantt_cal_light_full{width:738px}.gantt_cal_wide_checkbox input{margin-top:8px;margin-left:14px}.gantt_cal_light input{font-size:14px}.gantt_section_time{background-color:#fff;white-space:nowrap;padding:2px 10px 5px;padding-top:2px!important}.gantt_section_time .gantt_time_selects{float:left;height:25px}.gantt_section_time .gantt_time_selects select{height:23px;padding:2px;border:1px solid #c1c1c1}.gantt_duration{width:100px;height:23px;float:left;white-space:nowrap;margin-left:20px;line-height:23px}.gantt_duration .gantt_duration_dec,.gantt_duration .gantt_duration_inc,.gantt_duration .gantt_duration_value{box-sizing:border-box;text-align:center;vertical-align:top;height:100%;border:1px solid #c1c1c1}.gantt_duration .gantt_duration_value{width:40px;padding:3px 4px;border-left-width:0;border-right-width:0}.gantt_duration .gantt_duration_value.gantt_duration_value_formatted{width:70px}.gantt_duration .gantt_duration_dec,.gantt_duration .gantt_duration_inc{width:20px;padding:1px;padding-bottom:1px;background:#fff}.gantt_duration .gantt_duration_dec{-moz-border-top-left-radius:4px;-moz-border-bottom-left-radius:4px;-webkit-border-top-left-radius:4px;-webkit-border-bottom-left-radius:4px;border-top-left-radius:4px;border-bottom-left-radius:4px}.gantt_duration .gantt_duration_inc{margin-right:4px;-moz-border-top-right-radius:4px;-moz-border-bottom-right-radius:4px;-webkit-border-top-right-radius:4px;-webkit-border-bottom-right-radius:4px;border-top-right-radius:4px;border-bottom-right-radius:4px}.gantt_resources{max-height:150px;height:auto;overflow-y:auto}.gantt_resource_row{display:block;padding:10px 0;border-bottom:1px solid #000;cursor:pointer}.gantt_resource_row input[type=checkbox]:not(:checked),.gantt_resource_row input[type=checkbox]:not(:checked)~div{opacity:.5}.gantt_resource_toggle{vertical-align:middle}.gantt_resources_filter .gantt_resources_filter_input{padding:1px 2px;box-sizing:border-box}.gantt_resources_filter .switch_unsetted{vertical-align:middle}.gantt_resource_cell{display:inline-block}.gantt_resource_cell.gantt_resource_cell_checkbox{width:24px;max-width:24px;min-width:24px;vertical-align:middle}.gantt_resource_cell.gantt_resource_cell_label{width:40%;max-width:40%;vertical-align:middle}.gantt_resource_cell.gantt_resource_cell_value{width:30%;max-width:30%;vertical-align:middle}.gantt_resource_cell.gantt_resource_cell_value input,.gantt_resource_cell.gantt_resource_cell_value select{width:80%;vertical-align:middle;padding:1px 2px;box-sizing:border-box}.gantt_resource_cell.gantt_resource_cell_unit{width:10%;max-width:10%;vertical-align:middle}.gantt_resource_early_value{opacity:.8;font-size:.9em}.gantt_cal_quick_info{border:1px solid #000;border-radius:6px;position:absolute;z-index:300;border-color:#000;box-shadow:inset 0 0 0 2px #000;padding:2px;background-color:#fff;width:300px;transition:left .5s ease,right .5s;-moz-transition:left .5s ease,right .5s;-webkit-transition:left .5s ease,right .5s;-o-transition:left .5s ease,right .5s}.gantt_no_animate{transition:none;-moz-transition:none;-webkit-transition:none;-o-transition:none}.gantt_cal_quick_info.gantt_qi_left .gantt_qi_big_icon{float:right}.gantt_cal_qi_title{-webkit-border-top-left-radius:6px;-webkit-border-bottom-left-radius:0;-webkit-border-top-right-radius:6px;-webkit-border-bottom-right-radius:0;-moz-border-radius-topleft:6px;-moz-border-radius-bottomleft:0;-moz-border-radius-topright:6px;-moz-border-radius-bottomright:0;border-top-left-radius:6px;border-bottom-left-radius:0;border-top-right-radius:6px;border-bottom-right-radius:0;padding:5px 0 8px 12px;color:#000;background-color:#fff;border-bottom:1px solid #000}.gantt_cal_qi_tdate{font-size:14px;font-weight:700}.gantt_cal_qi_tcontent{font-size:14px}.gantt_cal_qi_content{padding:16px 8px;font-size:14px;color:#000;overflow:hidden}.gantt_cal_qi_controls{-webkit-border-top-left-radius:0;-webkit-border-bottom-left-radius:6px;-webkit-border-top-right-radius:0;-webkit-border-bottom-right-radius:6px;-moz-border-radius-topleft:0;-moz-border-radius-bottomleft:6px;-moz-border-radius-topright:0;-moz-border-radius-bottomright:6px;border-top-left-radius:0;border-bottom-left-radius:6px;border-top-right-radius:0;border-bottom-right-radius:6px;padding-left:7px}.gantt_cal_qi_controls .gantt_menu_icon{margin-top:6px;background-repeat:no-repeat}.gantt_cal_qi_controls .gantt_menu_icon.icon_edit{width:20px;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAAB3RJTUUH3QYFCjI5ZQj5bAAAAFNJREFUOMvt0zEOACAIA0DkwTymH8bJTRTKZGJXyaWEKPKTCQAH4Ls37cItcDUzsxHNDLZNhCq7Gt1wh9ErV7EjyGAhyGLphlnsClWuS32rn0czAV+vNGrM/LBtAAAAAElFTkSuQmCC)}.gantt_cal_qi_controls .gantt_menu_icon.icon_delete{width:20px;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyhpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTMyIDc5LjE1OTI4NCwgMjAxNi8wNC8xOS0xMzoxMzo0MCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTUuNSAoV2luZG93cykiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6NUFDNTg4MDI2ODc4MTFFNkI5QkY5OTIyMjkyMTFFNTkiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6NUFDNTg4MDM2ODc4MTFFNkI5QkY5OTIyMjkyMTFFNTkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo1QUM1ODgwMDY4NzgxMUU2QjlCRjk5MjIyOTIxMUU1OSIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDo1QUM1ODgwMTY4NzgxMUU2QjlCRjk5MjIyOTIxMUU1OSIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PuQSVckAAABGSURBVHjaYvj//z8DFlz/HxPUY1NLrGachjCCTQGaw0AeYGRioBCwwEyi1AAYINYrcAsp9sKoAaMGYDPgCBF6jiJzAAIMAPUxcjmgixXRAAAAAElFTkSuQmCC)}.gantt_qi_big_icon{font-size:13px;border-radius:4px;font-weight:700;background:#fff;margin:5px 9px 8px 0;min-width:60px;line-height:32px;vertical-align:middle;padding:0 10px 0 5px;cursor:pointer;border:1px solid #000}.gantt_cal_qi_controls div{float:left;height:32px;text-align:center;line-height:32px}.gantt_cal_quick_info.gantt_qi_hidden{display:none}.gantt_tooltip{padding:10px;position:absolute;z-index:50;white-space:nowrap}.gantt_resource_marker{position:absolute;text-align:center;font-size:14px;color:#fff}.gantt_resource_marker_ok{background:rgba(78,208,134,.75)}.gantt_resource_marker_overtime{background:hsla(0,100%,76%,.69)}.gantt_histogram_label{width:100%;height:100%;position:absolute;z-index:1;font-weight:700;font-size:14px}.gantt_histogram_fill{background-color:rgba(41,157,180,.2);width:100%;position:absolute;bottom:0}.gantt_histogram_hor_bar{height:1px;margin-top:-1px}.gantt_histogram_hor_bar,.gantt_histogram_vert_bar{position:absolute;background:#299db4;margin-left:-1px}.gantt_histogram_vert_bar{width:1px}.gantt_histogram_cell{position:absolute;text-align:center;font-size:14px;color:#000}.gantt_marker{height:100%;width:2px;top:0;position:absolute;text-align:center;background-color:rgba(255,0,0,.4);box-sizing:border-box}.gantt_marker .gantt_marker_content{padding:5px;background:inherit;color:#fff;position:absolute;font-size:12px;line-height:12px;opacity:.8}.gantt_marker_area{position:absolute;top:0;left:0}.gantt_grid_editor_placeholder{position:absolute}.gantt_grid_editor_placeholder>div,.gantt_grid_editor_placeholder input,.gantt_grid_editor_placeholder select{width:100%;height:100%;box-sizing:border-box}.gantt_row_placeholder div{opacity:.5}.gantt_row_placeholder .gantt_add,.gantt_row_placeholder .gantt_file{display:none}.gantt_drag_marker.gantt_grid_dnd_marker{background-color:transparent;transition:all .1s ease}.gantt_grid_dnd_marker_line{height:4px;width:100%;background-color:#3498db}.gantt_grid_dnd_marker_line:before{background:#fff;width:12px;height:12px;box-sizing:border-box;border:3px solid #3498db;border-radius:6px;content:"";line-height:1px;display:block;position:absolute;margin-left:-11px;margin-top:-4px;pointer-events:none}.gantt_grid_dnd_marker_folder{height:100%;width:100%;position:absolute;pointer-events:none;box-sizing:border-box;box-shadow:inset 0 0 0 2px #3f98db;background:transparent}.gantt_overlay_area{display:none}.gantt_overlay,.gantt_overlay_area{position:absolute;height:inherit;width:inherit;top:0;left:0}.gantt_click_drag_rect{position:absolute;left:0;top:0;outline:1px solid #3f98db;background-color:rgba(52,152,219,.3)}.gantt_timeline_move_available,.gantt_timeline_move_available *{cursor:move}.gantt_rtl .gantt_grid{text-align:right}.gantt_rtl .gantt_cell,.gantt_rtl .gantt_row{flex-direction:row-reverse}.gantt_layout_content{width:100%;overflow:auto;box-sizing:border-box}.gantt_layout_cell{position:relative;box-sizing:border-box}.gantt_layout_cell>.gantt_layout_header{background:#33aae8;color:#fff;font-size:17px;padding:5px 10px;box-sizing:border-box}.gantt_layout_header.collapsed_x{background:#a9a9a9}.gantt_layout_header.collapsed_x .gantt_header_arrow:before{content:"\21E7"}.gantt_layout_header.collapsed_y{background:#a9a9a9}.gantt_layout_header.collapsed_y .gantt_header_arrow:before{content:"\21E9"}.gantt_layout_header{cursor:pointer}.gantt_layout_header .gantt_header_arrow{float:right;text-align:right}.gantt_layout_header .gantt_header_arrow:before{content:"\21E6"}.gantt_layout_header.vertical .gantt_header_arrow:before{content:"\21E7"}.gantt_layout_outer_scroll_vertical .gantt_layout_content{overflow-y:hidden}.gantt_layout_outer_scroll_horizontal .gantt_layout_content{overflow-x:hidden}.gantt_layout_x>.gantt_layout_cell{display:inline-block;vertical-align:top}.gantt_layout_x{white-space:nowrap}.gantt_resizing{opacity:.7;background:#f2f2f2}.gantt_layout_cell_border_right.gantt_resizer{overflow:visible;border-right:0}.gantt_resizer{cursor:e-resize;position:relative}.gantt_resizer_y{cursor:n-resize}.gantt_resizer_stick{background:#33aae8;z-index:9999;position:absolute;top:0;width:100%}.gantt_resizer_x .gantt_resizer_x{position:absolute;width:20px;height:100%;margin-left:-10px;top:0;left:0;z-index:1}.gantt_resizer_y .gantt_resizer_y{position:absolute;height:20px;width:100%;top:-10px;left:0;z-index:1}.gantt_resizer_error{background:#cd5c5c!important}.gantt_layout_cell_border_left{border-left:1px solid #000}.gantt_layout_cell_border_right{border-right:1px solid #000}.gantt_layout_cell_border_top{border-top:1px solid #000}.gantt_layout_cell_border_bottom{border-bottom:1px solid #000}.gantt_layout_cell_border_transparent{border-color:transparent}.gantt_window{position:absolute;top:50%;left:50%;z-index:999999999;background:#fff}.gantt_window_content{position:relative}.gantt_window_content_header{background:#39c;color:#fff;height:33px;padding:10px 10px 0;border-bottom:2px solid #fff;position:relative}.gantt_window_content_header_text{padding-left:10%}.gantt_window_content_header_buttons{position:absolute;top:10px;right:10px}.gantt_window_content_header_buttons:hover{color:#000;cursor:pointer}.gantt_window_content_resizer{position:absolute;width:15px;height:15px;bottom:0;line-height:15px;right:-1px;text-align:center;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA8AAAAPCAMAAAAMCGV4AAAABlBMVEUAAAAAAAClZ7nPAAAAAXRSTlMAQObYZgAAABZJREFUeAFjIAUwUshlpJDLSIhLGAAACQ4AFk79JaMAAAAASUVORK5CYII=);cursor:nw-resize;z-index:999}.gantt_window_content_frame{position:absolute;top:0;left:0;width:100%;height:100%;background:rgba(0,0,0,.1);z-index:9999}.gantt_window_drag{cursor:pointer!important}.gantt_window_resizing{overflow:visible}.gantt_window_resizing_body{overflow:hidden!important}.gantt_window_modal{background:rgba(0,0,0,.1);z-index:9999;top:0;left:0;width:100%;height:100%;position:fixed}.gantt_cal_light,.gantt_cal_quick_info,.gantt_container,.gantt_message_area,.gantt_modal_box,.gantt_tooltip{text-rendering:optimizeLegibility;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.gantt_noselect{-moz-user-select:-moz-none;-webkit-user-select:none;-ms-user-select:none;user-select:none}.gantt_noselect .gantt_grid_data .gantt_row.odd:hover,.gantt_noselect .gantt_grid_data .gantt_row:hover{background-color:unset}.gantt_drag_marker{position:absolute;top:-1000px;left:-1000px;font-family:arial;font-size:14px;z-index:1;white-space:nowrap}.gantt_drag_marker .gantt_tree_icon.gantt_blank,.gantt_drag_marker .gantt_tree_icon.gantt_close,.gantt_drag_marker .gantt_tree_icon.gantt_open,.gantt_drag_marker .gantt_tree_indent{display:none}.gantt_empty_state_wrapper{position:relative}.gantt_empty_state{height:100%;max-width:500px;box-sizing:border-box;white-space:pre-line;overflow-wrap:break-word;display:flex;flex-direction:column;justify-content:flex-start;margin:0 auto}.gantt_empty_state_image{background-image:url("data:image/png;base64,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");background-repeat:no-repeat;width:100%;max-width:500px;max-height:500px;margin-left:auto;margin-right:auto;display:block;min-height:0;height:200px;background-size:contain;background-position-x:center;background-position-y:bottom;margin-top:40px}.gantt_empty_state_text{text-align:center}.gantt_empty_state_text_link{color:#03a9f4;background-position:100% 0;background:none;opacity:1;height:unset;cursor:pointer}.gantt_drag_marker,.gantt_drag_marker .gantt_row.odd{background-color:#fff}.gantt_drag_marker .gantt_row{border-left:1px solid #000;border-top:1px solid #000}.gantt_drag_marker .gantt_cell{border-color:#000}.gantt_row.gantt_over,.gantt_task_row.gantt_over{background-color:#0070fe}.gantt_row.gantt_transparent .gantt_cell{opacity:.7}.gantt_task_row.gantt_transparent{background-color:#fff}.gantt_popup_button.gantt_delete_button{font-weight:700;border-color:#000;background:#060;color:#000;border:2px solid transparent;color:#fff}.gantt_container_resize_watcher{background:transparent;width:100%;height:100%;position:absolute;top:0;left:0;z-index:-1;pointer-events:none;border:0;box-sizing:border-box;opacity:0}
src/components/dhtmlxGantt/codebase/skins/dhtmlxgantt_material.css
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1 @@
.buttonBg{background:#fff}.gantt_task_line.gantt_critical_task{background-color:#ff5252;border:1px solid #ff5252}.gantt_task_line.gantt_critical_task .gantt_task_progress{background-color:rgba(0,0,0,.15)}.gantt_task_line.gantt_critical_task.gantt_milestone,.gantt_task_line.gantt_critical_task.gantt_project{border-color:#ff5252}.gantt_links_area .gantt_task_link:hover .gantt_line_wrapper div{box-shadow:0 1px 3px 0 rgba(0,0,0,.2)}.gantt_links_area .gantt_task_link:hover .gantt_link_arrow_left:before,.gantt_links_area .gantt_task_link:hover .gantt_link_arrow_right:before{content:"";position:absolute;width:0;height:0;border:3px solid;transform-origin:center;box-shadow:0 2px 3px 0 rgba(0,0,0,.2)}.gantt_links_area .gantt_task_link:hover .gantt_link_arrow_right:before{border-color:transparent transparent #87a4bc #87a4bc;transform:skewY(-40deg);top:-3px;left:-7px}.gantt_links_area .gantt_task_link:hover .gantt_link_arrow_left:before{border-color:transparent #87a4bc #87a4bc transparent;transform:skewY(40deg);top:-3px;left:1px}.gantt_task_link.gantt_critical_link:hover .gantt_line_wrapper div{box-shadow:0 2px 4px 0 rgba(255,82,82,.2)}.gantt_task_link.gantt_critical_link:hover .gantt_link_arrow_left:before,.gantt_task_link.gantt_critical_link:hover .gantt_link_arrow_right:before{border-color:transparent;box-shadow:0 2px 3px 0 rgba(255,82,82,.4),0 1px 1px 0 rgba(255,82,82,.25)}.gridHoverStyle,.gridSelection,.timelineSelection{background-color:rgba(0,199,181,.2)}.gantt_layout_cell.grid_cell{border-right:none}.gantt_grid .gantt_grid_scale,.gantt_grid .gantt_row{border-right:1px solid #d7d7d7}.gantt_grid .gantt_grid_scale .gantt_grid_head_cell.gantt_grid_head_text{text-align:left;padding-left:15px}.gantt_grid .gantt_grid_scale .gantt_grid_head_cell{color:rgba(0,0,0,.54);border:none;text-transform:uppercase;font-weight:500}.gantt_grid .gantt_grid_scale .gantt_grid_column_resize_wrap{opacity:0}.gantt_grid .gantt_grid_scale:hover .gantt_grid_column_resize_wrap{opacity:1}div.gantt_grid_scale:after,div.gantt_scale_line:last-child:after{content:"";width:100%;display:block;height:1px;background-color:transparent;position:absolute;box-shadow:0 1px 2px 0 rgba(0,0,0,.2),0 2px 3px 0 rgba(0,0,0,.1);z-index:1}div.gantt_scale_line:last-child:after{bottom:-1px}.gantt_grid_data .gantt_cell{border-right:none;border-left:none;color:rgba(0,0,0,.8);font-weight:400}.gantt_data_area .gantt_task_row:last-child,.gantt_grid_data .gantt_row:last-child{border-bottom:1px solid #d7d7d7}.gantt_task_line:hover .gantt_link_control div,.gantt_task_line:hover .gantt_task_drag,.gantt_task_line:hover .gantt_task_progress_drag{animation:a .15s}.gantt_task_line.gantt_drag_animation .gantt_link_control div,.gantt_task_line.gantt_drag_animation .gantt_task_drag,.gantt_task_line.gantt_drag_animation .gantt_task_progress_drag,.gantt_task_line.gantt_drag_move .gantt_link_control div,.gantt_task_line.gantt_drag_move .gantt_task_drag,.gantt_task_line.gantt_drag_move .gantt_task_progress_drag,.gantt_task_line.gantt_drag_progress .gantt_link_control div,.gantt_task_line.gantt_drag_progress .gantt_task_drag,.gantt_task_line.gantt_drag_progress .gantt_task_progress_drag,.gantt_task_line.gantt_drag_resize .gantt_link_control div,.gantt_task_line.gantt_drag_resize .gantt_task_drag,.gantt_task_line.gantt_drag_resize .gantt_task_progress_drag{animation:a 0}.gantt_task_line.gantt_selected .gantt_link_control div,.gantt_task_line.gantt_selected .gantt_task_drag,.gantt_task_line.gantt_selected .gantt_task_progress_drag,.gantt_task_line.gantt_selected:hover .gantt_link_control div,.gantt_task_line.gantt_selected:hover .gantt_task_drag,.gantt_task_line.gantt_selected:hover .gantt_task_progress_drag{animation:none}.gantt_grid_data .gantt_row,.gantt_grid_data .gantt_row.odd{transition:background .15s}.gantt_grid_column_resize_wrap{transition:opacity .15s}.gantt_link_line_down,.gantt_link_line_left,.gantt_link_line_right,.gantt_link_line_up{transition:box-shadow .15s}@keyframes a{0%{opacity:0}to{opacity:1}}.gantt_task_link .gantt_link_arrow_right{border-width:6px 7px;margin-left:-2px;margin-top:-3px}.gantt_task_link .gantt_link_arrow_left{border-width:6px 7px;margin-left:-6px;margin-top:-3px}.gantt_task_link .gantt_link_arrow_down,.gantt_task_link .gantt_link_arrow_up{border-width:6px}.gantt_task_line.gantt_milestone{margin-top:-1px}.gantt_task_line.gantt_milestone .gantt_link_control.task_left{left:-21px}.gantt_task_line.gantt_milestone .gantt_link_control.task_right{right:-19px}.gantt_task_line.gantt_milestone .gantt_side_content{color:rgba(0,0,0,.8)}.gantt_task_line.gantt_milestone .gantt_side_content.gantt_right{margin-left:3px}.gantt_task_line.gantt_milestone .gantt_side_content.gantt_left{margin-right:3px}.gantt_task_line.gantt_milestone .gantt_task_content{padding:0}.gantt_task_line{font-weight:500}.gantt_task_line .gantt_task_drag{background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAQAAAAECAYAAACp8Z5+AAAAHElEQVQYV2NkQAOMIP6vX7/+g2g2NjZG7ALIugAfzQgFD7inoAAAAABJRU5ErkJggg==);opacity:.95}.gantt_task_line .gantt_task_drag.task_left{left:9px}.gantt_task_line .gantt_task_drag.task_right{right:9px}.gantt_task_line .gantt_link_point{border:2px solid;border-color:inherit;height:15px;background-color:#fafafa;width:15px;border-radius:100%;box-shadow:0 3px 5px 0 rgba(0,0,0,.1),0 1px 2px 0 rgba(0,0,0,.1)}.gantt_task_line .gantt_link_control{top:-1px;border-color:inherit}.gantt_task_line .gantt_link_control.task_left{left:-17px}.gantt_task_line .gantt_link_control.task_right{right:-15px}.gantt_task_line.gantt_thin_task .gantt_task_drag.task_end_date{left:3px}.gantt_task_line.gantt_thin_task .gantt_task_drag.task_start_date{left:-13px}.chartHeaderBg{background-color:#fff}.gantt_task .gantt_task_scale .gantt_scale_cell{color:rgba(0,0,0,.54);text-transform:uppercase;font-weight:500}.gantt_row.gantt_project{background-color:#edfffb}.gantt_task_row.gantt_project{background-color:#f5fffc}.gantt_task_line.gantt_project{background-color:#1de9b6;border-color:#16e1ae}.gantt_task_line.gantt_project .gantt_task_content{color:rgba(0,0,0,.6);font-weight:500}.gantt_task_content{text-overflow:ellipsis;box-sizing:border-box;padding:0 17px}div.gantt_cal_light{border:0;box-shadow:0 2px 3px 0 rgba(0,0,0,.2),0 0 3px 1px rgba(0,0,0,.1);width:560px;padding:25px}div.gantt_cal_light .gantt_cal_ltitle{text-overflow:ellipsis;font-size:16px;margin:-15px 0 0;padding:16px 5px 9px 7px;color:rgba(0,0,0,.8)}div.gantt_cal_light .gantt_cal_ltitle .gantt_mark{display:none}div.gantt_cal_light .gantt_cal_ltitle .gantt_time{font-weight:500}div.gantt_cal_light .gantt_cal_ltitle .gantt_title{font-weight:400}div.gantt_cal_light .gantt_cal_ltext{padding:7px}div.gantt_cal_light .gantt_cal_ltext textarea{padding:6px 8px}div.gantt_cal_light .gantt_cal_ltext:focus,div.gantt_cal_light .gantt_cal_ltext textarea:focus{outline-color:rgba(68,138,255,.9);box-shadow:none}div.gantt_cal_light .gantt_cal_lsection{padding:12px 0 5px 7px;color:rgba(0,0,0,.8);font-size:14px;font-weight:500}div.gantt_cal_light .gantt_cal_larea{border:0;padding:2px 0 0;color:rgba(0,0,0,.8)}div.gantt_cal_light .gantt_section_time{padding:10px 7px}div.gantt_cal_light .gantt_section_time :focus{outline-color:rgba(68,138,255,.9);box-shadow:none}div.gantt_cal_light .gantt_btn_set{margin:10px 7px;text-transform:uppercase;height:32px;padding:7px 15px}div.gantt_cal_light .gantt_section_time select,div.gantt_cal_light select{height:30px}div.gantt_cal_light select:focus{outline-color:rgba(68,138,255,.9);box-shadow:none}div.gantt_cal_light_wide{width:650px}.gantt_popup_button{float:right;text-transform:uppercase;font-weight:500}.gantt_cal_quick_info .gantt_qi_big_icon{font-weight:500;height:32px;text-transform:uppercase}.gantt_cal_quick_info .gantt_qi_big_icon div{padding-top:1px}.gantt_cal_light .gantt_btn_set.gantt_cancel_btn_set{background:#fff;color:#116aff}.gantt_cal_light .gantt_btn_set.gantt_cancel_btn_set .gantt_cancel_btn{display:none}.gantt_popup_button.gantt_cancel_button{color:#116aff}.gantt_cal_light .gantt_btn_set.gantt_cancel_btn_set:hover,.gantt_popup_button.gantt_cancel_button:hover{background:rgba(17,106,255,.25);color:#005cf7}.gantt_cal_light .gantt_btn_set.gantt_cancel_btn_set:focus,.gantt_popup_button.gantt_cancel_button:focus{background:rgba(17,106,255,.35);color:#0053dd;outline:none;box-shadow:none}.gantt_cal_light .gantt_btn_set.gantt_delete_btn_set{background:#fff;color:#ff584c}.gantt_cal_light .gantt_btn_set.gantt_delete_btn_set .gantt_delete_btn{display:none}.gantt_qi_big_icon.icon_delete{background:#fff;color:#ff584c}.gantt_qi_big_icon.icon_delete .gantt_menu_icon{display:none}.gantt_cal_light .gantt_btn_set.gantt_delete_btn_set:hover,.gantt_qi_big_icon.icon_delete:hover{background:rgba(255,88,76,.25)}.gantt_cal_light .gantt_btn_set.gantt_delete_btn_set:focus,.gantt_qi_big_icon.icon_delete:focus{background:rgba(255,88,76,.35);color:#ff4032;outline:none;box-shadow:none}.gantt_cal_light .gantt_btn_set.gantt_save_btn_set .gantt_save_btn,.gantt_qi_big_icon.icon_edit .gantt_menu_icon{display:none}.gantt_cal_light .gantt_btn_set.gantt_save_btn_set,.gantt_popup_button.gantt_ok_button,.gantt_qi_big_icon.icon_edit{background-color:#448aff;color:#fff}.gantt_cal_light .gantt_btn_set.gantt_save_btn_set:hover,.gantt_popup_button.gantt_ok_button:hover,.gantt_qi_big_icon.icon_edit:hover{background-color:#005cf6}.gantt_cal_light .gantt_btn_set.gantt_save_btn_set:focus,.gantt_popup_button.gantt_ok_button:focus,.gantt_qi_big_icon.icon_edit:focus{background-color:#005cf6;outline:none;box-shadow:none}.gantt_duration{color:rgba(0,0,0,.54);font-weight:500}.gantt_duration .gantt_duration_dec{color:transparent}.gantt_duration .gantt_duration_inc{color:transparent;margin-right:2px}div.gantt_duration .gantt_duration_dec{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAM0lEQVQ4T2NkoBAwUqifYdQABiqFgcaMDf/JiY0bGQGM4Fig2ABybIfpGU0H1EoHlMQCAIgYCBGYGr9NAAAAAElFTkSuQmCC);background-repeat:no-repeat;background-position:50%}div.gantt_duration .gantt_duration_inc{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAO0lEQVQ4T2NkoBAw4tOvMWPDf5D8jYwAnOpGDWBgoE4YwEKb1BgFxQ7YBRQbgMvm0XSACNyBywvEpAsA12c4ER3FU64AAAAASUVORK5CYII=);background-repeat:no-repeat;background-position:50%}.gantt_task_line.gantt_milestone{border-radius:2px}.gantt-info{border-radius:2px;border-width:0;width:237px}.gantt-info div{border:0;padding:11px}.gantt_cal_quick_info{padding:15px 25px;min-width:210px;max-width:400px;font-size:16px}.gantt_cal_quick_info .gantt_cal_qi_title{padding:5px 0 10px;border-bottom:0}.gantt_cal_quick_info .gantt_cal_qi_title .gantt_cal_qi_tcontent{display:none}.gantt_cal_quick_info .gantt_cal_qi_title .gantt_cal_qi_tdate{font-size:16px;font-weight:500}.gantt_cal_quick_info .gantt_cal_qi_content{padding:8px 0;font-size:14px;text-overflow:ellipsis}.gantt_cal_quick_info .gantt_cal_qi_controls{padding:5px 0 0;float:right}.gantt_tooltip{box-shadow:0 2px 3px 0 rgba(0,0,0,.2),0 0 3px 1px rgba(0,0,0,.1);background-color:#fff;border:0;font-family:Roboto,arial,sans-serif;font-size:14px;line-height:1.5em;overflow:hidden}.gantt_modal_box,.gantt_tooltip{color:rgba(0,0,0,.8);max-width:400px;text-overflow:ellipsis}.gantt_modal_box{padding:15px 25px}.gantt_modal_box .gantt_popup_text{font-size:14px;line-height:1.5;text-align:left;padding:1px 0;margin:0}.gantt_modal_box .gantt_popup_title{background-color:#fff;margin:0;padding:4px 0 14px;text-align:left;font-weight:500}.gantt_tree_icon.gantt_file,.gantt_tree_icon.gantt_folder_closed,.gantt_tree_icon.gantt_folder_open{display:none}.gantt_popup_shadow{box-shadow:0 2px 3px 0 rgba(0,0,0,.2),0 0 3px 1px rgba(0,0,0,.1)}.gantt_task_line .gantt_side_content{font-size:14px;color:rgba(0,0,0,.54)}div.gantt_drag_marker{z-index:4}div.gantt_drag_marker .gantt_link_tooltip{font-size:14px;font-family:Roboto;border-width:0;box-shadow:0 2px 3px 0 rgba(0,0,0,.2),0 0 3px 1px rgba(0,0,0,.1)}.switch_unsetted{display:none}.matherial_checkbox_icon{background-size:cover;height:1.3em;width:1.3em;display:inline-block;vertical-align:-.3em}.matherial_checkbox_checked,.switch_unsetted:checked+.matherial_checkbox_icon,label.gantt_resource_row input[type=checkbox]:checked+div.gantt_resource_cell_checkbox .matherial_checkbox_icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24'%3E%3Cpath fill='none' d='M0 0h24v24H0V0z'/%3E%3Cg fill-opacity='.8'%3E%3Cpath d='M19 3H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm0 16H5V5h14v14z'/%3E%3Cpath d='M17.99 9l-1.41-1.42-6.59 6.59-2.58-2.57-1.42 1.41 4 3.99z'/%3E%3C/g%3E%3C/svg%3E")}.matherial_checkbox_unchecked,.switch_unsetted+.matherial_checkbox_icon,label.gantt_resource_row input[type=checkbox]+div.gantt_resource_cell_checkbox .matherial_checkbox_icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24'%3E%3Cpath fill='none' d='M0 0h24v24H0V0z'/%3E%3Cpath d='M19 5v14H5V5h14m0-2H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2z' fill-opacity='.8'/%3E%3C/svg%3E")}label.gantt_resource_row input[type=checkbox]{display:none}label.gantt_resource_row select{height:calc(1.3em + 4px);border-width:.5px}.gantt_container{background-color:#fff;font-family:Roboto,arial,sans-serif;font-size:14px;border:1px solid #d7d7d7;position:relative;white-space:nowrap;overflow-x:hidden;overflow-y:hidden}.gantt_touch_active{overscroll-behavior:none}.gantt_task_scroll{overflow-x:scroll}.gantt_grid,.gantt_task{position:relative;overflow-x:hidden;overflow-y:hidden;display:inline-block;vertical-align:top}.gantt_grid_scale,.gantt_task_scale{color:rgba(31,31,31,.8);font-size:14px;border-bottom:1px solid #d7d7d7;box-sizing:border-box}.gantt_grid_scale,.gantt_task_scale,.gantt_task_vscroll{background-color:#fff}.gantt_scale_line{box-sizing:border-box;-moz-box-sizing:border-box;border-top:1px solid #d7d7d7}.gantt_scale_line:first-child{border-top:none}.gantt_grid_head_cell{display:inline-block;vertical-align:top;border-right:1px solid #d7d7d7;text-align:center;position:relative;cursor:default;height:100%;box-sizing:border-box;-moz-box-sizing:border-box;line-height:35px;-moz-user-select:-moz-none;-webkit-user-select:none;user-select:none;overflow:hidden}.gantt_scale_line{clear:both}.gantt_grid_data{width:100%;overflow:hidden;position:relative}.gantt_row{position:relative;-webkit-user-select:none;-moz-user-select:none;-moz-user-select:-moz-none}.gantt_add,.gantt_grid_head_add{width:100%;height:100%;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAO0lEQVQ4T2NkoBAw4tMvuGHWf5D8+4A0nOpGDWBgoE4YwEKb1BgFxQ7YBRQbgMvm0XSACNyBywvEpAsAxlc4EbYmh6oAAAAASUVORK5CYII=);background-position:50%;background-repeat:no-repeat;cursor:pointer;position:relative;-moz-opacity:.6;opacity:.6}.gantt_grid_head_cell.gantt_grid_head_add{-moz-opacity:.6;opacity:.6;top:0}.gantt_grid_head_cell.gantt_grid_head_add:hover{-moz-opacity:1;opacity:1}.gantt_grid_data .gantt_row.odd:hover,.gantt_grid_data .gantt_row:hover{background-color:rgba(0,199,181,.2)}.gantt_grid_data .gantt_row.odd:hover .gantt_add,.gantt_grid_data .gantt_row:hover .gantt_add{-moz-opacity:1;opacity:1}.gantt_row,.gantt_task_row{border-bottom:0;background-color:#fff}.gantt_row.odd,.gantt_task_row.odd{background-color:#fff}.gantt_cell,.gantt_grid_head_cell,.gantt_row,.gantt_scale_cell,.gantt_task_cell,.gantt_task_row{box-sizing:border-box;-moz-box-sizing:border-box}.gantt_grid_head_cell,.gantt_scale_cell{line-height:inherit}.gantt_grid_scale .gantt_grid_column_resize_wrap{cursor:col-resize;position:absolute;width:13px;margin-left:-7px}.gantt_grid_column_resize_wrap .gantt_grid_column_resize{background-color:#d7d7d7;height:100%;width:1px;margin:0 auto}.gantt_task_grid_row_resize_wrap{cursor:row-resize;position:absolute;height:13px;margin-top:-7px;left:0;width:100%}.gantt_task_grid_row_resize_wrap .gantt_task_grid_row_resize{background-color:#d7d7d7;top:6px;height:1px;width:100%;margin:0 auto;position:relative}.gantt_drag_marker{pointer-events:none}.gantt_drag_marker.gantt_grid_resize_area,.gantt_drag_marker.gantt_row_grid_resize_area{background-color:hsla(0,0%,91%,.5);height:100%;width:100%;box-sizing:border-box}.gantt_drag_marker.gantt_grid_resize_area{border-left:1px solid #d7d7d7;border-right:1px solid #d7d7d7}.gantt_drag_marker.gantt_row_grid_resize_area{border-top:1px solid #d7d7d7;border-bottom:1px solid #d7d7d7;pointer-events:none}.gantt_row{display:flex}.gantt_row>div{flex-shrink:0;flex-grow:0}.gantt_cell{vertical-align:top;border-right:1px solid #d7d7d7;padding-left:6px;padding-right:6px;height:100%;overflow:hidden;white-space:nowrap;font-size:14px;font-weight:500}.gantt_cell_tree{display:flex;flex-wrap:nowrap}.gantt_grid_data .gantt_last_cell,.gantt_grid_scale .gantt_last_cell,.gantt_task .gantt_task_scale .gantt_scale_cell.gantt_last_cell,.gantt_task_bg .gantt_last_cell{border-right-width:0}.gantt_task .gantt_task_scale .gantt_scale_cell.gantt_last_cell{border-right-width:1px}.gantt_task_bg{overflow:hidden}.gantt_scale_cell{white-space:nowrap;overflow:hidden;text-align:center}.gantt_scale_cell,.gantt_task_cell{display:inline-block;border-right:1px solid #d7d7d7;height:100%}.gantt_layout_cell.gantt_ver_scroll{width:0;background-color:transparent;height:1px;overflow-x:hidden;overflow-y:scroll;position:absolute;right:0;z-index:1}.gantt_ver_scroll>div{width:1px;height:1px}.gantt_hor_scroll{height:0;background-color:transparent;width:100%;clear:both;overflow-x:scroll;overflow-y:hidden}.gantt_layout_cell .gantt_hor_scroll{position:absolute}.gantt_hor_scroll>div{width:5000px;height:1px}.gantt_tree_icon,.gantt_tree_indent{flex-grow:0;flex-shrink:0}.gantt_tree_indent{width:15px;height:100%}.gantt_tree_content,.gantt_tree_icon{vertical-align:top}.gantt_tree_icon{width:28px;height:100%;background-repeat:no-repeat;background-position:50%}.gantt_tree_content{height:100%;white-space:nowrap;min-width:0}.gantt_tree_icon.gantt_open{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAsAAAALCAYAAACprHcmAAAACXBIWXMAAAuUAAALlAF37bb0AAAAIGNIUk0AAHolAACAgwAA+f8AAIDoAABSCAABFVgAADqXAAAXb9daH5AAAAH/SURBVHgBAO8BEP4B////AAAAAAB1dXWV2NjYa+7u7gAJCQkA////AAAAAAAAAAAAvb29AAAAAAACAAAAAAAAAAAGBgZqKysrvREREQD7+/sACAgIAAgICAAICAgAAAAAAAAAAAACAAAAAAAAAAD6+vr1BAQEQisrK8YQEBAA9vb2AP39/QD9/f0AAAAAAAAAAAACAAAAAAAAAAABAQEA+fn5AAUFBTkqKirWCAgIBPLy8gD5+fkAAAAAAAAAAAACAAAAAAAAAAAAAAAAAQEBAPn5+QADAwMpMjIy3xkZGRsEBAQAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAEBAQD4+PgABQUFHCQkJKoVFRUwAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAP///wAICAgA+/v76N3d3Vvx8fHgAAAAAAAAAAAEAAAAAAAAAAAAAAAA////AAcHBwD9/f3b0dHRLfDw8PkGBgYAAAAAAAAAAAAEAAAAAAAAAAD///8ABwcHAPv7+8vY2Ng29/f3AA4ODgAAAAAAAAAAAAAAAAACAAAAAAAAAAAGBgYL+/v7w9LS0jbu7u4ACAgIAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAD4+Pia2traPvj4+AAMDAwA////AAAAAAAAAAAAAAAAAAAAAAABAAD//z9HdQMRW/QpAAAAAElFTkSuQmCC);width:18px;cursor:pointer}.gantt_tree_icon.gantt_close{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAsAAAALCAYAAACprHcmAAAACXBIWXMAAAuUAAALlAF37bb0AAAAIGNIUk0AAHolAACAgwAA+f8AAIDoAABSCAABFVgAADqXAAAXb9daH5AAAAH/SURBVHgBAO8BEP4B////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABcnJymQgICGb6+vr1AQEBAAAAAAAAAAAAAAAAAAAAAAD///8ABgYGC/r6+pYDFxcXtBEREUMGBgYk/Pz8BgEBAQYAAAAGAAAABv///wYHBwcG/f39vtfX11cC8PDwANLS0j77+/vLBwcHAP///wAAAAAA////AAcHBwD7+/vH1NTUQ+7u7gACCAgIAPT09ADY2Ng2/f392wcHBwD+/v4ABwcHAP39/dfY2Ng68/PzAAkJCQAC////AAwMDADy8vIA0dHRLf///+gMDAwA////5NDQ0C7y8vIADAwMAP///wACAAAAAP///wAHBwcA8PDw+dnZ2Tn39/fG2NjYOPHx8fwHBwcAAAAAAAAAAAADJCQkAAAAAAAAAAAA////APv7+/D8/PzO7+/v2wICAgAEBAQAAgICAPz8/AAB////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAD//4RfjvnDJoM6AAAAAElFTkSuQmCC);width:18px;cursor:pointer}.gantt_tree_icon.gantt_blank{width:18px}.gantt_tree_icon.gantt_file,.gantt_tree_icon.gantt_folder_closed,.gantt_tree_icon.gantt_folder_open{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAC0lEQVQYV2NgAAIAAAUAAarVyFEAAAAASUVORK5CYII=)}.gantt_grid_head_cell .gantt_sort{position:absolute;right:5px;top:8px;width:7px;height:13px;background-repeat:no-repeat;background-position:50%}.gantt_grid_head_cell .gantt_sort.gantt_asc{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAcAAAANCAYAAABlyXS1AAAARUlEQVR4nGNgQAKGxib/GbABkIS7b8B/DAUwCRiGK0CXwFBAb1DfP/U/LszwHwi2X7qFgUEArBtdAVwCBmAKMCSQFSDzAWXXaOHsXeqkAAAAAElFTkSuQmCC)}.gantt_grid_head_cell .gantt_sort.gantt_desc{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAcAAAANCAYAAABlyXS1AAAARUlEQVR42mNgQAL1/VP/M2ADIIntF2/9x1AAlrh0C47hCmA60DFYwX88gIFGwNDY5D8uDFbg7hvwHx2jmIBTAlkB0e4BAEjlaNtBWJPnAAAAAElFTkSuQmCC)}.gantt_inserted,.gantt_updated{font-weight:700}.gantt_deleted{text-decoration:line-through}.gantt_invalid{background-color:#ffe0e0}.gantt_error{color:red}.gantt_status{right:1px;padding:5px 10px;background:hsla(0,0%,61%,.1);position:absolute;top:1px;transition:opacity .2s;opacity:0}.gantt_status.gantt_status_visible{opacity:1}#gantt_ajax_dots span{transition:opacity .2s;background-repeat:no-repeat;opacity:0}#gantt_ajax_dots span.gantt_dot_visible{opacity:1}.gantt_column_drag_marker{border:1px solid #cecece;opacity:.8;pointer-events:none}.gantt_grid_head_cell_dragged{border:1px solid #cecece;opacity:.3}.gantt_grid_target_marker{position:absolute;top:0;width:2px;height:100%;background-color:#87a4bc;transform:translateX(-1px)}.gantt_grid_target_marker:after,.gantt_grid_target_marker:before{display:block;content:"";position:absolute;left:-5px;width:0;height:0;border:6px solid transparent}.gantt_grid_target_marker:before{border-top-color:#87a4bc}.gantt_grid_target_marker:after{bottom:0;border-bottom-color:#87a4bc}.gantt_message_area{position:fixed;right:5px;width:250px;z-index:1000}.gantt-info{min-width:120px;padding:4px 4px 4px 20px;font-family:Roboto,arial,sans-serif;z-index:10000;margin:5px;margin-bottom:10px;transition:all .5s ease}.gantt-info.hidden{height:0;padding:0;border-width:0;margin:0;overflow:hidden}.gantt_modal_box{overflow:hidden;display:inline-block;min-width:210px;width:210px;text-align:center;position:fixed;z-index:20000;box-shadow:0 2px 3px 0 rgba(0,0,0,.2),0 0 3px 1px rgba(0,0,0,.1);font-family:Roboto,arial,sans-serif;border-radius:2px;border:0;background:#fff}.gantt_popup_title{border-top-left-radius:2px;border-top-right-radius:2px;border-width:0}.gantt_button,.gantt_popup_button{border:0;height:32px;line-height:32px;display:inline-block;margin:4px 0 4px 14px;border-radius:2px;background:#fff}.gantt-info,.gantt_button,.gantt_popup_button{user-select:none;-webkit-user-select:none;-moz-user-select:-moz-none;cursor:pointer}.gantt_popup_text{overflow:hidden}.gantt_popup_controls{border-radius:6px;padding:4px 0 0}.gantt_popup_button{min-width:80px}div.dhx_modal_cover{background-color:#000;cursor:default;filter:progid:DXImageTransform.Microsoft.Alpha(opacity=20);opacity:.2;position:fixed;z-index:19999;left:0;top:0;width:100%;height:100%;border:none;zoom:1}.gantt-info img,.gantt_modal_box img{float:left;margin-right:20px}.gantt-alert-error,.gantt-confirm-error{border:1px solid red}.gantt_button input,.gantt_popup_button div{border-radius:2px;font-size:14px;box-sizing:content-box;padding:1px;margin:0;vertical-align:top}.gantt_popup_title{border-bottom:0;height:auto;line-height:16px;font-size:16px}.gantt_popup_text{margin:15px 15px 5px;font-size:14px;color:rgba(0,0,0,.8);min-height:30px;border-radius:2px}.gantt-error,.gantt-info{font-size:14px;color:#000;box-shadow:0 10px 20px 0 rgba(0,0,0,.2),0 1px 6px 0 rgba(0,0,0,.2);padding:0;background-color:#fff;border-radius:3px;border:1px solid #fff}.gantt-info div{padding:5px 10px;background-color:#fff;border-radius:3px;border:1px solid #d7d7d7}.gantt-error,.gantt-error div{background-color:#ff5252;border:1px solid #ff5252}.gantt-error div{color:#fff}.gantt-warning,.gantt-warning div{background-color:#ffab00;border:1px solid #ffab00}.gantt-warning div{color:#fff}.gantt_data_area div,.gantt_grid div{-ms-touch-action:none;-webkit-tap-highlight-color:rgba(0,0,0,0)}.gantt_data_area{position:relative;overflow-x:hidden;overflow-y:hidden;-moz-user-select:-moz-none;-webkit-user-select:none;user-select:none}.gantt_links_area{position:absolute;left:0;top:0}.gantt_side_content,.gantt_task_content,.gantt_task_progress{line-height:inherit;overflow:hidden;height:100%}.gantt_task_content{font-size:14px;color:#fff;width:100%;top:0;cursor:pointer;position:absolute;white-space:nowrap;text-align:center}.gantt_task_progress{text-align:center;z-index:0;background:rgba(0,0,0,.15)}.gantt_task_progress_wrapper{border-radius:inherit;position:relative;width:100%;height:100%;overflow:hidden}.gantt_task_line{border-radius:50px;position:absolute;box-sizing:border-box;background-color:#448aff;border:1px solid #448aff;-webkit-user-select:none;-moz-user-select:none;-moz-user-select:-moz-none}.gantt_task_line.gantt_drag_move div{cursor:move}.gantt_touch_move,.gantt_touch_progress .gantt_touch_resize{transform:scale(1.02,1.1);transform-origin:50%}.gantt_touch_progress .gantt_task_progress_drag,.gantt_touch_resize .gantt_task_drag{transform:scaleY(1.3);transform-origin:50%}.gantt_side_content{position:absolute;white-space:nowrap;color:#6e6e6e;top:0;font-size:11px;font-size:13px}.gantt_side_content.gantt_left{right:100%;padding-right:20px}.gantt_side_content.gantt_right{left:100%;padding-left:20px}.gantt_side_content.gantt_link_crossing{bottom:8px;top:auto}.gantt_link_arrow,.gantt_task_link .gantt_line_wrapper{position:absolute;cursor:pointer}.gantt_line_wrapper div{background-color:#87a4bc}.gantt_task_link:hover .gantt_line_wrapper div{box-shadow:0 0 5px 0 #87a4bc}.gantt_task_link div.gantt_link_arrow{background-color:transparent;border-style:solid;width:0;height:0}.gantt_link_control{position:absolute;width:20px;top:0}.gantt_link_control div{display:none;cursor:pointer;box-sizing:border-box;position:relative;top:50%;margin-top:-7.5px;vertical-align:middle;border:1px solid #929292;border-radius:6.5px;height:13px;width:13px;background-color:#f0f0f0}.gantt_link_control.task_right div.gantt_link_point{margin-left:7px}.gantt_link_control div:hover{background-color:#fff}.gantt_link_control.task_left{left:-20px}.gantt_link_control.task_right{right:-20px}.gantt_link_target .gantt_link_control div,.gantt_task_line.gantt_drag_move .gantt_link_control div,.gantt_task_line.gantt_drag_move .gantt_task_drag,.gantt_task_line.gantt_drag_move .gantt_task_progress_drag,.gantt_task_line.gantt_drag_progress .gantt_link_control div,.gantt_task_line.gantt_drag_progress .gantt_task_drag,.gantt_task_line.gantt_drag_progress .gantt_task_progress_drag,.gantt_task_line.gantt_drag_resize .gantt_link_control div,.gantt_task_line.gantt_drag_resize .gantt_task_drag,.gantt_task_line.gantt_drag_resize .gantt_task_progress_drag,.gantt_task_line.gantt_selected .gantt_link_control div,.gantt_task_line.gantt_selected .gantt_task_drag,.gantt_task_line.gantt_selected .gantt_task_progress_drag,.gantt_task_line:hover .gantt_link_control div,.gantt_task_line:hover .gantt_task_drag,.gantt_task_line:hover .gantt_task_progress_drag{display:block}.gantt_link_source,.gantt_link_target{box-shadow:0 0 3px #448aff}.gantt_link_target.link_finish_allow,.gantt_link_target.link_start_allow{box-shadow:0 0 3px #b8c9d7}.gantt_link_target.link_finish_deny,.gantt_link_target.link_start_deny{box-shadow:0 0 3px #ff5252}.link_finish_allow .gantt_link_control.task_end_date div,.link_start_allow .gantt_link_control.task_start_date div{background-color:#b8c9d7;border-color:#87a4bc}.link_finish_deny .gantt_link_control.task_end_date div,.link_start_deny .gantt_link_control.task_start_date div{background-color:#ff5252;border-color:#ff0505}.gantt_link_arrow_right{border-width:6px 0 6px 6px;border-top-color:transparent!important;border-right-color:transparent!important;border-bottom-color:transparent!important;border-left-color:#87a4bc}.gantt_link_arrow_left{border-width:6px 6px 6px 0;margin-top:-1px;border-top-color:transparent!important;border-right-color:#87a4bc;border-bottom-color:transparent!important;border-left-color:transparent!important}.gantt_link_arrow_up{border-width:0 6px 6px;border-color:transparent transparent #87a4bc;border-top-color:transparent!important;border-right-color:transparent!important;border-bottom-color:#87a4bc;border-left-color:transparent!important}.gantt_link_arrow_down{border-width:6px 6px 0;border-top-color:#87a4bc;border-right-color:transparent!important;border-bottom-color:transparent!important;border-left-color:transparent!important}.gantt_task_drag,.gantt_task_progress_drag{cursor:ew-resize;display:none;position:absolute}.gantt_task_drag.task_right{cursor:e-resize}.gantt_task_drag.task_left{cursor:w-resize}.gantt_task_drag{height:80%;width:8px;z-index:1;top:10%}.gantt_task_drag.task_left{left:-7px}.gantt_task_drag.task_right{right:-7px}.gantt_task_progress_drag{height:19px;width:25px;bottom:-10px;margin-left:-14px;background-position:bottom;background-repeat:no-repeat;z-index:1}.gantt_task_progress_drag,.gantt_task_progress_drag:hover{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABkAAAATCAYAAABlcqYFAAAABGdBTUEAALGPC/xhBQAAAeNJREFUOBGlU0tOAkEQdQAHiIpDjPGz87fxCu400Wt4C1gRbsAhPARbbsCKxISFsjDqUiMfgRl8r+WRYmCExEoeVV1d9V51N+NtrG/ektLJktxCalmjLVq1b2sTBf8isXuKrY+mCpbcxrMBUrNoPrBkjFmXBjaBfL1evxyPx412u32CtWoRzsVcJxqb4sRZ5LaAvVqtdjUajV4msDAMn1ut1jnyHICDqBdhsqnITp5D+Q5wUK1WrweDwSsFZBRqNpsX2F9LKEmgAIKjcrl82+/330Ru/bpCfwkcl0qlu16v926J4/EqIQnQ63F5RTzBWgISNG+08D4S4UYG8IFt4JBXtOoEEpBPEpKITpGHwH6lUrlJegMRJvkoip46nc4peBy3BOQpxJMUG43Gve/7Z/g3+ZguDUKPwJ4zz/MmQiqVijKZTJjNZodBEHSLxWI3l8s9FgqFBxS7JgnQU4TfRADsArw2ijLP66SxTl82v/rQ4BvxF/ABfAJDYMI3sMZmNnWnng0kp4iGQeiMtURciMSDaR5uvpFkOg1JOYBycQFsOZOQhosLMu+Ifsvnr0ATWnLGcXMkSKre+lmtJWFSaxHG/azRBFaIaa4FV5ZEorwrwk98rTy9RJRbWNtmG6vhv94J/gATDnWOR2FfEQAAAABJRU5ErkJggg==)}.gantt_link_tooltip{box-shadow:3px 3px 3px #888;background-color:#fff;border-left:1px solid #cecece;border-top:1px solid #cecece;font-family:Tahoma;font-size:14px;color:rgba(0,0,0,.8);padding:11px;line-height:20px}.gantt_link_direction{height:0;border:0 none #87a4bc;border-bottom-style:dashed;border-bottom-width:2px;transform-origin:0 0;-ms-transform-origin:0 0;-webkit-transform-origin:0 0;z-index:2;margin-left:1px;position:absolute}.gantt_grid_data .gantt_row.gantt_selected,.gantt_grid_data .gantt_row.odd.gantt_selected,.gantt_task_row.gantt_selected{background-color:rgba(0,199,181,.2)}.gantt_task_row.gantt_selected .gantt_task_cell{border-right-color:rgba(145,210,210,.7)}.gantt_task_line.gantt_project.gantt_selected,.gantt_task_line.gantt_selected{box-shadow:none}.gantt_task_line.gantt_milestone{visibility:hidden;background-color:#ffc107;border:0 solid #ffc107;box-sizing:content-box;-moz-box-sizing:content-box}.gantt_task_line.gantt_milestone div{visibility:visible}.gantt_task_line.gantt_milestone .gantt_task_content{background:inherit;border:inherit;border-width:1px;border-radius:inherit;box-sizing:border-box;-moz-box-sizing:border-box;transform:rotate(45deg)}.gantt_task_line.gantt_task_inline_color{border-color:#999}.gantt_task_line.gantt_task_inline_color .gantt_task_progress{background-color:#363636;opacity:.2}.gantt_task_line.gantt_task_inline_color.gantt_project.gantt_selected,.gantt_task_line.gantt_task_inline_color.gantt_selected{box-shadow:0 0 5px #999}.gantt_task_link.gantt_link_inline_color:hover .gantt_line_wrapper div{box-shadow:0 0 5px 0 #999}.gantt_critical_task{background-color:#ff5252;border-color:#9d3a3a}.gantt_critical_task .gantt_task_progress{background-color:rgba(0,0,0,.4)}.gantt_critical_link .gantt_line_wrapper>div{background-color:#ff5252}.gantt_critical_link .gantt_link_arrow{border-color:#ff5252}.gantt_btn_set:focus,.gantt_cell:focus,.gantt_grid_head_cell:focus,.gantt_popup_button:focus,.gantt_qi_big_icon:focus,.gantt_row:focus{box-shadow:inset 0 0 1px 1px #4d90fe}.gantt_split_parent,.gantt_split_subproject{opacity:.1;pointer-events:none}.gantt_rollup_child .gantt_link_control,.gantt_rollup_child:hover .gantt_link_control{display:none}.gantt_unselectable,.gantt_unselectable div{-webkit-user-select:none;-moz-user-select:none;-moz-user-select:-moz-none}.gantt_cal_light{-webkit-tap-highlight-color:transparent;background:#fff;border-radius:2px;font-family:Roboto,arial,sans-serif;border:1px solid #d7d7d7;color:rgba(31,31,31,.8);font-size:14px;position:absolute;z-index:10001;width:550px;height:250px;box-shadow:0 2px 3px 0 rgba(0,0,0,.2),0 0 3px 1px rgba(0,0,0,.1)}.gantt_cal_light_wide{width:650px}.gantt_cal_light select{font-family:Roboto,arial,sans-serif;border:1px solid #d7d7d7;font-size:14px;padding:2px;margin:0}.gantt_cal_ltitle{padding:7px 10px;overflow:hidden;-webkit-border-top-left-radius:2px;-webkit-border-bottom-left-radius:0;-webkit-border-top-right-radius:2px;-webkit-border-bottom-right-radius:0;-moz-border-radius-topleft:2px;-moz-border-radius-bottomleft:0;-moz-border-radius-topright:2px;-moz-border-radius-bottomright:0;border-top-left-radius:2px;border-bottom-left-radius:0;border-top-right-radius:2px;border-bottom-right-radius:0}.gantt_cal_ltitle,.gantt_cal_ltitle span{white-space:nowrap}.gantt_cal_lsection{color:#727272;font-weight:700;padding:12px 0 5px 10px}.gantt_cal_lsection .gantt_fullday{float:right;margin-right:5px;font-size:12px;font-weight:400;line-height:20px;vertical-align:top;cursor:pointer}.gantt_cal_lsection{font-size:13px}.gantt_cal_ltext{padding:2px 10px;overflow:hidden}.gantt_cal_ltext textarea{overflow-y:auto;overflow-x:hidden;font-family:Roboto,arial,sans-serif;font-size:14px;box-sizing:border-box;border:1px solid #d7d7d7;height:100%;width:100%;outline:none!important;resize:none}.gantt_section_constraint [data-constraint-time-select]{margin-left:20px}.gantt_time{font-weight:700}.gantt_cal_light .gantt_title{padding-left:10px}.gantt_cal_larea{border:1px solid #d7d7d7;border-left:none;border-right:none;background-color:#fff;overflow:hidden;height:1px}.gantt_btn_set{margin:10px 7px 5px 10px;padding:6px 15px;float:left;border-radius:2px;border:0 solid #d7d7d7;height:32px;font-weight:500;background:#fff;box-sizing:border-box;cursor:pointer}.gantt_hidden{display:none}.gantt_btn_set div{float:left;font-size:14px;height:20px;line-height:20px;background-repeat:no-repeat;vertical-align:middle}.gantt_save_btn{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAC0lEQVQYV2NgAAIAAAUAAarVyFEAAAAASUVORK5CYII=);margin-top:2px;width:21px}.gantt_cancel_btn,.gantt_delete_btn{margin-top:2px;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAC0lEQVQYV2NgAAIAAAUAAarVyFEAAAAASUVORK5CYII=);width:20px}.gantt_cal_cover{width:100%;height:100%;position:fixed;z-index:10000;top:0;left:0;background-color:#000;opacity:.1;filter:progid:DXImageTransform.Microsoft.Alpha(opacity=10)}.gantt_custom_button{padding:0 3px;font-family:Roboto,arial,sans-serif;font-size:14px;font-weight:400;margin-right:10px;margin-top:-5px;cursor:pointer;float:right;height:21px;width:90px;border:1px solid #cecece;text-align:center;border-radius:4px}.gantt_custom_button div{cursor:pointer;float:none;height:21px;line-height:21px;vertical-align:middle}.gantt_custom_button div:first-child{display:none}.gantt_cal_light_wide{width:580px;padding:2px 4px}.gantt_cal_light_wide .gantt_cal_larea{box-sizing:border-box;border:1px solid #d7d7d7}.gantt_cal_light_wide .gantt_cal_lsection{border:0;float:left;text-align:right;width:80px;height:20px;padding:5px 10px 0 0}.gantt_cal_light_wide .gantt_wrap_section{position:relative;padding:10px 0;overflow:hidden;border-bottom:1px solid #d7d7d7}.gantt_cal_light_wide .gantt_section_time{overflow:hidden;padding-top:2px!important;padding-right:0;height:20px!important}.gantt_cal_light_wide .gantt_cal_ltext{padding-right:0}.gantt_cal_light_wide .gantt_cal_larea{padding:0 10px;width:100%}.gantt_cal_light_wide .gantt_section_time{background:transparent}.gantt_cal_light_wide .gantt_cal_checkbox label{padding-left:0}.gantt_cal_light_wide .gantt_cal_lsection .gantt_fullday{float:none;margin-right:0;font-weight:700;cursor:pointer}.gantt_cal_light_wide .gantt_custom_button{position:absolute;top:0;right:0;margin-top:2px}.gantt_cal_light_wide .gantt_repeat_right{margin-right:55px}.gantt_cal_light_wide.gantt_cal_light_full{width:738px}.gantt_cal_wide_checkbox input{margin-top:8px;margin-left:14px}.gantt_cal_light input{font-size:14px}.gantt_section_time{background-color:#fff;white-space:nowrap;padding:2px 10px 5px;padding-top:2px!important}.gantt_section_time .gantt_time_selects{float:left;height:25px}.gantt_section_time .gantt_time_selects select{height:23px;padding:2px;border:1px solid #d7d7d7}.gantt_duration{width:100px;height:30px;float:left;white-space:nowrap;margin-left:20px;line-height:32px}.gantt_duration .gantt_duration_dec,.gantt_duration .gantt_duration_inc,.gantt_duration .gantt_duration_value{box-sizing:border-box;text-align:center;vertical-align:top;height:100%;border:1px solid #d7d7d7}.gantt_duration .gantt_duration_value{width:36px;padding:3px 4px;border-left-width:0;border-right-width:0}.gantt_duration .gantt_duration_value.gantt_duration_value_formatted{width:66px}.gantt_duration .gantt_duration_dec,.gantt_duration .gantt_duration_inc{width:30px;padding:1px;padding-bottom:1px;background:#fff}.gantt_duration .gantt_duration_dec{-moz-border-top-left-radius:2px;-moz-border-bottom-left-radius:2px;-webkit-border-top-left-radius:2px;-webkit-border-bottom-left-radius:2px;border-top-left-radius:2px;border-bottom-left-radius:2px}.gantt_duration .gantt_duration_inc{margin-right:4px;-moz-border-top-right-radius:2px;-moz-border-bottom-right-radius:2px;-webkit-border-top-right-radius:2px;-webkit-border-bottom-right-radius:2px;border-top-right-radius:2px;border-bottom-right-radius:2px}.gantt_resources{max-height:150px;height:auto;overflow-y:auto}.gantt_resource_row{display:block;padding:10px 0;border-bottom:1px solid #d7d7d7;cursor:pointer}.gantt_resource_row input[type=checkbox]:not(:checked),.gantt_resource_row input[type=checkbox]:not(:checked)~div{opacity:.5}.gantt_resource_toggle{vertical-align:middle}.gantt_resources_filter .gantt_resources_filter_input{padding:1px 2px;box-sizing:border-box}.gantt_resources_filter .switch_unsetted{vertical-align:middle}.gantt_resource_cell{display:inline-block}.gantt_resource_cell.gantt_resource_cell_checkbox{width:24px;max-width:24px;min-width:24px;vertical-align:middle}.gantt_resource_cell.gantt_resource_cell_label{width:40%;max-width:40%;vertical-align:middle}.gantt_resource_cell.gantt_resource_cell_value{width:30%;max-width:30%;vertical-align:middle}.gantt_resource_cell.gantt_resource_cell_value input,.gantt_resource_cell.gantt_resource_cell_value select{width:80%;vertical-align:middle;padding:1px 2px;box-sizing:border-box}.gantt_resource_cell.gantt_resource_cell_unit{width:10%;max-width:10%;vertical-align:middle}.gantt_resource_early_value{opacity:.8;font-size:.9em}.gantt_cal_quick_info{border:0;border-radius:2px;position:absolute;z-index:300;box-shadow:0 2px 3px 0 rgba(0,0,0,.2),0 0 3px 1px rgba(0,0,0,.1);background-color:#fff;width:auto;transition:left .5s ease,right .5s;-moz-transition:left .5s ease,right .5s;-webkit-transition:left .5s ease,right .5s;-o-transition:left .5s ease,right .5s}.gantt_no_animate{transition:none;-moz-transition:none;-webkit-transition:none;-o-transition:none}.gantt_cal_quick_info.gantt_qi_left .gantt_qi_big_icon{float:right}.gantt_cal_qi_title{-webkit-border-top-left-radius:2px;-webkit-border-bottom-left-radius:0;-webkit-border-top-right-radius:2px;-webkit-border-bottom-right-radius:0;-moz-border-radius-topleft:2px;-moz-border-radius-bottomleft:0;-moz-border-radius-topright:2px;-moz-border-radius-bottomright:0;border-top-left-radius:2px;border-bottom-left-radius:0;border-top-right-radius:2px;border-bottom-right-radius:0;padding:5px 0 8px 12px;color:rgba(0,0,0,.8);background-color:#fff;border-bottom:1px solid #d7d7d7}.gantt_cal_qi_tdate{font-size:14px;font-weight:700}.gantt_cal_qi_tcontent{font-size:14px}.gantt_cal_qi_content{padding:16px 8px;font-size:14px;color:rgba(0,0,0,.8);overflow:hidden}.gantt_cal_qi_controls{-webkit-border-top-left-radius:0;-webkit-border-bottom-left-radius:2px;-webkit-border-top-right-radius:0;-webkit-border-bottom-right-radius:2px;-moz-border-radius-topleft:0;-moz-border-radius-bottomleft:2px;-moz-border-radius-topright:0;-moz-border-radius-bottomright:2px;border-top-left-radius:0;border-bottom-left-radius:2px;border-top-right-radius:0;border-bottom-right-radius:2px;padding-left:7px}.gantt_cal_qi_controls .gantt_menu_icon{margin-top:6px;background-repeat:no-repeat}.gantt_cal_qi_controls .gantt_menu_icon.icon_delete,.gantt_cal_qi_controls .gantt_menu_icon.icon_edit{width:20px;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAC0lEQVQYV2NgAAIAAAUAAarVyFEAAAAASUVORK5CYII=)}.gantt_qi_big_icon{font-size:14px;border-radius:2px;font-weight:500;background:#fff;margin:4px 0 4px 14px;min-width:auto;line-height:32px;vertical-align:middle;padding:0 16px;cursor:pointer;border:0}.gantt_cal_qi_controls div{float:left;height:32px;text-align:center;line-height:32px}.gantt_cal_quick_info.gantt_qi_hidden{display:none}.gantt_tooltip{padding:10px;position:absolute;z-index:50;white-space:nowrap}.gantt_resource_marker{position:absolute;text-align:center;font-size:14px;color:#fff}.gantt_resource_marker_ok{background:rgba(78,208,134,.75)}.gantt_resource_marker_overtime{background:hsla(0,100%,76%,.69)}.gantt_histogram_label{width:100%;height:100%;position:absolute;z-index:1;font-weight:700;font-size:14px}.gantt_histogram_fill{background-color:rgba(41,157,180,.2);width:100%;position:absolute;bottom:0}.gantt_histogram_hor_bar{height:1px;margin-top:-1px}.gantt_histogram_hor_bar,.gantt_histogram_vert_bar{position:absolute;background:#299db4;margin-left:-1px}.gantt_histogram_vert_bar{width:1px}.gantt_histogram_cell{position:absolute;text-align:center;font-size:14px;color:#000}.gantt_marker{height:100%;width:2px;top:0;position:absolute;text-align:center;background-color:rgba(255,0,0,.4);box-sizing:border-box}.gantt_marker .gantt_marker_content{padding:5px;background:inherit;color:#fff;position:absolute;font-size:12px;line-height:12px;opacity:.8}.gantt_marker_area{position:absolute;top:0;left:0}.gantt_grid_editor_placeholder{position:absolute}.gantt_grid_editor_placeholder>div,.gantt_grid_editor_placeholder input,.gantt_grid_editor_placeholder select{width:100%;height:100%;box-sizing:border-box}.gantt_row_placeholder div{opacity:.5}.gantt_row_placeholder .gantt_add,.gantt_row_placeholder .gantt_file{display:none}.gantt_drag_marker.gantt_grid_dnd_marker{background-color:transparent;transition:all .1s ease}.gantt_grid_dnd_marker_line{height:4px;width:100%;background-color:#3498db}.gantt_grid_dnd_marker_line:before{background:#fff;width:12px;height:12px;box-sizing:border-box;border:3px solid #3498db;border-radius:6px;content:"";line-height:1px;display:block;position:absolute;margin-left:-11px;margin-top:-4px;pointer-events:none}.gantt_grid_dnd_marker_folder{height:100%;width:100%;position:absolute;pointer-events:none;box-sizing:border-box;box-shadow:inset 0 0 0 2px #3f98db;background:transparent}.gantt_overlay_area{display:none}.gantt_overlay,.gantt_overlay_area{position:absolute;height:inherit;width:inherit;top:0;left:0}.gantt_click_drag_rect{position:absolute;left:0;top:0;outline:1px solid #3f98db;background-color:rgba(52,152,219,.3)}.gantt_timeline_move_available,.gantt_timeline_move_available *{cursor:move}.gantt_rtl .gantt_grid{text-align:right}.gantt_rtl .gantt_cell,.gantt_rtl .gantt_row{flex-direction:row-reverse}.gantt_layout_content{width:100%;overflow:auto;box-sizing:border-box}.gantt_layout_cell{position:relative;box-sizing:border-box}.gantt_layout_cell>.gantt_layout_header{background:#33aae8;color:#fff;font-size:17px;padding:5px 10px;box-sizing:border-box}.gantt_layout_header.collapsed_x{background:#a9a9a9}.gantt_layout_header.collapsed_x .gantt_header_arrow:before{content:"\21E7"}.gantt_layout_header.collapsed_y{background:#a9a9a9}.gantt_layout_header.collapsed_y .gantt_header_arrow:before{content:"\21E9"}.gantt_layout_header{cursor:pointer}.gantt_layout_header .gantt_header_arrow{float:right;text-align:right}.gantt_layout_header .gantt_header_arrow:before{content:"\21E6"}.gantt_layout_header.vertical .gantt_header_arrow:before{content:"\21E7"}.gantt_layout_outer_scroll_vertical .gantt_layout_content{overflow-y:hidden}.gantt_layout_outer_scroll_horizontal .gantt_layout_content{overflow-x:hidden}.gantt_layout_x>.gantt_layout_cell{display:inline-block;vertical-align:top}.gantt_layout_x{white-space:nowrap}.gantt_resizing{opacity:.7;background:#f2f2f2}.gantt_layout_cell_border_right.gantt_resizer{overflow:visible;border-right:0}.gantt_resizer{cursor:e-resize;position:relative}.gantt_resizer_y{cursor:n-resize}.gantt_resizer_stick{background:#33aae8;z-index:9999;position:absolute;top:0;width:100%}.gantt_resizer_x .gantt_resizer_x{position:absolute;width:20px;height:100%;margin-left:-10px;top:0;left:0;z-index:1}.gantt_resizer_y .gantt_resizer_y{position:absolute;height:20px;width:100%;top:-10px;left:0;z-index:1}.gantt_resizer_error{background:#cd5c5c!important}.gantt_layout_cell_border_left{border-left:1px solid #d7d7d7}.gantt_layout_cell_border_right{border-right:1px solid #d7d7d7}.gantt_layout_cell_border_top{border-top:1px solid #d7d7d7}.gantt_layout_cell_border_bottom{border-bottom:1px solid #d7d7d7}.gantt_layout_cell_border_transparent{border-color:transparent}.gantt_window{position:absolute;top:50%;left:50%;z-index:999999999;background:#fff}.gantt_window_content{position:relative}.gantt_window_content_header{background:#39c;color:#fff;height:33px;padding:10px 10px 0;border-bottom:2px solid #fff;position:relative}.gantt_window_content_header_text{padding-left:10%}.gantt_window_content_header_buttons{position:absolute;top:10px;right:10px}.gantt_window_content_header_buttons:hover{color:#000;cursor:pointer}.gantt_window_content_resizer{position:absolute;width:15px;height:15px;bottom:0;line-height:15px;right:-1px;text-align:center;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA8AAAAPCAMAAAAMCGV4AAAABlBMVEUAAAAAAAClZ7nPAAAAAXRSTlMAQObYZgAAABZJREFUeAFjIAUwUshlpJDLSIhLGAAACQ4AFk79JaMAAAAASUVORK5CYII=);cursor:nw-resize;z-index:999}.gantt_window_content_frame{position:absolute;top:0;left:0;width:100%;height:100%;background:rgba(0,0,0,.1);z-index:9999}.gantt_window_drag{cursor:pointer!important}.gantt_window_resizing{overflow:visible}.gantt_window_resizing_body{overflow:hidden!important}.gantt_window_modal{background:rgba(0,0,0,.1);z-index:9999;top:0;left:0;width:100%;height:100%;position:fixed}.gantt_cal_light,.gantt_cal_quick_info,.gantt_container,.gantt_message_area,.gantt_modal_box,.gantt_tooltip{text-rendering:optimizeLegibility;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.gantt_noselect{-moz-user-select:-moz-none;-webkit-user-select:none;-ms-user-select:none;user-select:none}.gantt_noselect .gantt_grid_data .gantt_row.odd:hover,.gantt_noselect .gantt_grid_data .gantt_row:hover{background-color:unset}.gantt_drag_marker{position:absolute;top:-1000px;left:-1000px;font-family:Roboto,arial,sans-serif;font-size:14px;z-index:1;white-space:nowrap}.gantt_drag_marker .gantt_tree_icon.gantt_blank,.gantt_drag_marker .gantt_tree_icon.gantt_close,.gantt_drag_marker .gantt_tree_icon.gantt_open,.gantt_drag_marker .gantt_tree_indent{display:none}.gantt_empty_state_wrapper{position:relative}.gantt_empty_state{height:100%;max-width:500px;box-sizing:border-box;white-space:pre-line;overflow-wrap:break-word;display:flex;flex-direction:column;justify-content:flex-start;margin:0 auto}.gantt_empty_state_image{background-image:url("data:image/png;base64,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");background-repeat:no-repeat;width:100%;max-width:500px;max-height:500px;margin-left:auto;margin-right:auto;display:block;min-height:0;height:200px;background-size:contain;background-position-x:center;background-position-y:bottom;margin-top:40px}.gantt_empty_state_text{text-align:center}.gantt_empty_state_text_link{color:#03a9f4;background-position:100% 0;background:none;opacity:1;height:unset;cursor:pointer}.gantt_drag_marker,.gantt_drag_marker .gantt_row.odd{background-color:#fff}.gantt_drag_marker .gantt_row{border-left:1px solid #bebebe;border-top:1px solid #bebebe}.gantt_drag_marker .gantt_cell{border-color:#bebebe}.gantt_row.gantt_over,.gantt_task_row.gantt_over{background-color:#0070fe}.gantt_row.gantt_transparent .gantt_cell{opacity:.7}.gantt_task_row.gantt_transparent{background-color:#fff}.gantt_popup_button.gantt_delete_button{background-color:#448aff;color:#fff}.gantt_container_resize_watcher{background:transparent;width:100%;height:100%;position:absolute;top:0;left:0;z-index:-1;pointer-events:none;border:0;box-sizing:border-box;opacity:0}
src/components/dhtmlxGantt/codebase/skins/dhtmlxgantt_meadow.css
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1 @@
.buttonBg{background:#fff}.chartHeaderBg{background-color:#f4f2ea}.gridHoverStyle{background-color:#ffebbc!important}.gantt_grid_scale .gantt_grid_head_cell{border-top:none!important;border-right:none!important}.gantt_grid_data .gantt_cell{border-right:none}.gridSelection,.timelineSelection{background-color:#ffebbc!important}.gantt_task_link .gantt_link_arrow_left,.gantt_task_link .gantt_link_arrow_right{margin-top:-1px}.gantt_task_line .gantt_task_progress_drag{bottom:-4px;height:10px;margin-left:-8px;width:16px}.gantt_task .gantt_task_scale .gantt_scale_cell{border-right:1px solid #cac8bd}.gantt_row.gantt_project .gantt_cell,.gantt_row.odd.gantt_project .gantt_cell{background-color:#edf4ff}.gantt_task_row.gantt_project .gantt_task_cell,.gantt_task_row.odd.gantt_project .gantt_task_cell{background-color:#f5f8ff}.gantt_task_line.gantt_project{background-color:#c7d8f7;border:1px solid #7ba3ed}.gantt_task_line.gantt_project .gantt_task_progress{background-color:#9ab9f1}.gantt_cal_light .gantt_cal_ltitle{padding:7px 10px}.gantt_cal_light .gantt_cal_ltext textarea{border:1px solid #d8d6ce}.gantt_cal_light .gantt_cal_larea{border-color:#d8d6ce!important;background-color:#fcfaf3}.gantt_cal_light .gantt_cal_larea .gantt_section_time{background-color:#fcfaf3}.buttonBg{background:#e0ded7}.gantt_cal_light .gantt_btn_set{height:27px;margin:5px 10px;padding:0 15px 0 10px}.gantt_cal_light .gantt_btn_set div{height:25px;margin-top:0;background-position:50%;line-height:25px}.gantt_btn_set.gantt_save_btn_set{border:1px solid #98d27e;background:#a7d991}.gantt_btn_set.gantt_cancel_btn_set{background:#fff;background:#e0ded7;border:1px solid #cac8bd}.gantt_btn_set.gantt_delete_btn_set{border:1px solid #ffad54;background:#ffb96d}.gantt_cal_light_wide{padding:0!important}.gantt_cal_light_wide .gantt_cal_larea{border-left:none!important;border-right:none!important}.gantt_cal_light_wide .gantt_cal_larea .gantt_cal_lsection{width:90px}.gantt_cal_light_wide .gantt_btn_set{margin:7px 10px}.gantt_popup_button.gantt_ok_button{border:1px solid #98d27e;background:#a7d991}.gantt_popup_title{background-color:#f4f2ea}.gantt_popup_shadow{box-shadow:3px 3px 3px rgba(0,0,0,.07)}.gantt_data_area .gantt_cal_quick_info{background-color:#f4f2ea}.gantt_data_area .gantt_cal_qi_content{background:#fcfaf3;border-bottom:1px solid #cac8bd}.gantt_qi_big_icon.icon_delete{border-color:#ffad54;background:#ffb96d}.gantt_tooltip{box-shadow:3px 3px 3px rgba(0,0,0,.07);border-left:1px solid rgba(0,0,0,.07);border-top:1px solid rgba(0,0,0,.07);font-size:8pt;color:#3f3f3f}.gantt_container,.gantt_tooltip{background-color:#fff;font-family:Verdana}.gantt_container{font-size:11px;border:1px solid #cac8bd;position:relative;white-space:nowrap;overflow-x:hidden;overflow-y:hidden}.gantt_touch_active{overscroll-behavior:none}.gantt_task_scroll{overflow-x:scroll}.gantt_grid,.gantt_task{position:relative;overflow-x:hidden;overflow-y:hidden;display:inline-block;vertical-align:top}.gantt_grid_scale,.gantt_task_scale{color:#3f3f3f;font-size:8pt;border-bottom:1px solid #cac8bd;box-sizing:border-box}.gantt_grid_scale,.gantt_task_scale,.gantt_task_vscroll{background-color:#f4f2ea}.gantt_scale_line{box-sizing:border-box;-moz-box-sizing:border-box;border-top:1px solid #cac8bd}.gantt_scale_line:first-child{border-top:none}.gantt_grid_head_cell{display:inline-block;vertical-align:top;border-right:1px solid #cac8bd;text-align:center;position:relative;cursor:default;height:100%;box-sizing:border-box;-moz-box-sizing:border-box;line-height:28px;-moz-user-select:-moz-none;-webkit-user-select:none;user-select:none;overflow:hidden}.gantt_scale_line{clear:both}.gantt_grid_data{width:100%;overflow:hidden;position:relative}.gantt_row{position:relative;-webkit-user-select:none;-moz-user-select:none;-moz-user-select:-moz-none}.gantt_add,.gantt_grid_head_add{width:100%;height:100%;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoV2luZG93cykiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6MDAzOTZDREFDN0FGMTFFMkE1MDhCNkFCRDk3RkY4NTkiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6MDAzOTZDREJDN0FGMTFFMkE1MDhCNkFCRDk3RkY4NTkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDowMDM5NkNEOEM3QUYxMUUyQTUwOEI2QUJEOTdGRjg1OSIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDowMDM5NkNEOUM3QUYxMUUyQTUwOEI2QUJEOTdGRjg1OSIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PnzqpNoAAAEFSURBVHjapJPPDsFAEMbHZqXSi1ZC3Dg7O9bbeA7v4czZE4hLSRwkbiI4cCAN4Uyqs/pPs1vbrTDJHL7Mb77sbr8WeuMu/FOEMQaStplYdgYHFBnKjK1atZqI8+ViZZ2AMmS5x1QxFNHLNVAx1EPMNVAxBBFtvxnfuq4LUKDTTLwXXsFqNprKE1RMM2y+9oe9FV3Bw5++/3svfMRWpS0MV7fFx0Ka2e62kQEhBEbzoTA0DAPqtXqinbMD643IFGkR3KcL1Cib0yA4/DBY4A2u15ug45oFHD05x44sO+kc+FwhI0j4RZBQlUT5kH+0JS4VBpKfqaSVYDDpJ1rz9eNxlxq8BBgAcMHBu6BPeX8AAAAASUVORK5CYII=);background-position:50%;background-repeat:no-repeat;cursor:pointer;position:relative;-moz-opacity:.3;opacity:.3}.gantt_grid_head_cell.gantt_grid_head_add{-moz-opacity:.6;opacity:.6;top:0}.gantt_grid_head_cell.gantt_grid_head_add:hover{-moz-opacity:1;opacity:1}.gantt_grid_data .gantt_row.odd:hover,.gantt_grid_data .gantt_row:hover{background-color:#ffebbc!important}.gantt_grid_data .gantt_row.odd:hover .gantt_add,.gantt_grid_data .gantt_row:hover .gantt_add{-moz-opacity:1;opacity:1}.gantt_row,.gantt_task_row{border-bottom:1px solid #eae9e5;background-color:#fff}.gantt_row.odd,.gantt_task_row.odd{background-color:#fff}.gantt_cell,.gantt_grid_head_cell,.gantt_row,.gantt_scale_cell,.gantt_task_cell,.gantt_task_row{box-sizing:border-box;-moz-box-sizing:border-box}.gantt_grid_head_cell,.gantt_scale_cell{line-height:inherit}.gantt_grid_scale .gantt_grid_column_resize_wrap{cursor:col-resize;position:absolute;width:13px;margin-left:-7px}.gantt_grid_column_resize_wrap .gantt_grid_column_resize{background-color:#cac8bd;height:100%;width:1px;margin:0 auto}.gantt_task_grid_row_resize_wrap{cursor:row-resize;position:absolute;height:13px;margin-top:-7px;left:0;width:100%}.gantt_task_grid_row_resize_wrap .gantt_task_grid_row_resize{background-color:#eae9e5;top:6px;height:1px;width:100%;margin:0 auto;position:relative}.gantt_drag_marker{pointer-events:none}.gantt_drag_marker.gantt_grid_resize_area,.gantt_drag_marker.gantt_row_grid_resize_area{background-color:hsla(0,0%,91%,.5);height:100%;width:100%;box-sizing:border-box}.gantt_drag_marker.gantt_grid_resize_area{border-left:1px solid #cac8bd;border-right:1px solid #cac8bd}.gantt_drag_marker.gantt_row_grid_resize_area{border-top:1px solid #cac8bd;border-bottom:1px solid #cac8bd;pointer-events:none}.gantt_row{display:flex}.gantt_row>div{flex-shrink:0;flex-grow:0}.gantt_cell{vertical-align:top;border-right:1px solid #eae9e5;padding-left:6px;padding-right:6px;height:100%;overflow:hidden;white-space:nowrap;font-size:8pt}.gantt_cell_tree{display:flex;flex-wrap:nowrap}.gantt_grid_data .gantt_last_cell,.gantt_grid_scale .gantt_last_cell,.gantt_task .gantt_task_scale .gantt_scale_cell.gantt_last_cell,.gantt_task_bg .gantt_last_cell{border-right-width:0}.gantt_task .gantt_task_scale .gantt_scale_cell.gantt_last_cell{border-right-width:1px}.gantt_task_bg{overflow:hidden}.gantt_scale_cell{display:inline-block;white-space:nowrap;overflow:hidden;border-right:1px solid #cac8bd;text-align:center;height:100%}.gantt_task_cell{display:inline-block;height:100%;border-right:1px solid #eae9e5}.gantt_layout_cell.gantt_ver_scroll{width:0;background-color:transparent;height:1px;overflow-x:hidden;overflow-y:scroll;position:absolute;right:0;z-index:1}.gantt_ver_scroll>div{width:1px;height:1px}.gantt_hor_scroll{height:0;background-color:transparent;width:100%;clear:both;overflow-x:scroll;overflow-y:hidden}.gantt_layout_cell .gantt_hor_scroll{position:absolute}.gantt_hor_scroll>div{width:5000px;height:1px}.gantt_tree_icon,.gantt_tree_indent{flex-grow:0;flex-shrink:0}.gantt_tree_indent{width:15px;height:100%}.gantt_tree_content,.gantt_tree_icon{vertical-align:top}.gantt_tree_icon{width:28px;height:100%;background-repeat:no-repeat;background-position:50%}.gantt_tree_content{height:100%;white-space:nowrap;min-width:0}.gantt_tree_icon.gantt_open{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAYAAABWzo5XAAAAWUlEQVQ4T2NkoBJgpJI5DCPVoJaWlv+EwrCmpgYcPHjDCGRQdXU1TrNaW1sZyDKIkZGR4f9/hCMHziCQS9AByGUD5yKYa6gWRujeI8lrVElHhAxBlh/GmRYA5MZIE4VV1O8AAAAASUVORK5CYII=);width:18px;cursor:pointer}.gantt_tree_icon.gantt_close{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAYAAABWzo5XAAAATElEQVQ4T2NkoBJgpJI5DCPVoJaWlv+EwrCmpgYcPHjDCGRQdXU1TrNaW1sZhrhBjIyYIfD//3+GYeA1XNFGkteoko4IGYIsP4wzLQBu8jwTv5HhogAAAABJRU5ErkJggg==);width:18px;cursor:pointer}.gantt_tree_icon.gantt_blank{width:18px}.gantt_tree_icon.gantt_folder_open{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAYAAABWzo5XAAAB30lEQVQ4T2NkQAKnZyn9R+bjY5um3WNElodz0A0xSbqMas6/nwzf/3AwcLL8YPjxYhvDlR11DMiGoRgkp63OIGY0ieHPt7cMF9ZGwQ0yjj0EZv/4L8TAwfiO4f+3awzn1mbgNsgkdidEM6sU3JA/Hy+jGhq+jOH/n09EGoTsKZihQK+dWWDCYBQ8AyxLnIugBv3/9RbMArmAkUuL4exiOwYD/26w2IWNpbi9Zhy5gYHh3zewxn9/PjMw/3nDwPD7HQODsDdY89nlAQw6Hk1gNt7ABjkb2YD/f78w/P3xloFFLoth8cRsBi2xp8QZZOxdDnYBzACQzb+/f2BgUywAB7iyaRA89DiFDVBchRL9Rs6RYBfADADRf398ZuDUrIUYZB6GiIZ/fxh4pP0YLm5IAIcVikH61m4YhjD++cbArtUI1oDson9/fjDwqqQxXFodgGmQlpEZ2CCQKyAmfgIG/i8GDt1u0gxS19IE6we54v//P2BDQABmkKKhF8JrQBZOF4EMghsC0kKuQZICXxj4xbQhroECRkYWoIvawYEtp20NF2dm42dgk4ljuLk5AjWMQCpgJQDMQJgumEEo/oJyYCUASpkCU4hcpIAMFXfeBHYRehmEbDBWg5AVIBuKzyAAfjsXIj7TBm0AAAAASUVORK5CYII=)}.gantt_tree_icon.gantt_folder_closed{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAYAAABWzo5XAAAB90lEQVQ4T2NkQAKnZyn9R+bjY5um3WNElodzQIboWYUwsGnU4tR/Zp4+g6J1NQM/HzvDhe11DMiGoRhkErMHiyHMEDE2IQaQQZwcHAxqXvMZLq6LJMUgiCH//3xlYOSSJccgqAG/3oAN+vv7GwMLtxzDmSWOYBepe85kuLA+npCLmMEuYPj3neHfjxcQF/1+z8AibAU0yAVskIZbN8P5Tbm4DTKO2AI2AOQCxr+fwAb8+/2JgVXEAWzg2RU+EBc5VuEPbIPAhSgGMPwFuuznawZWuQSGxZPSGbTEnoINUrXJYbi0pwe3iww8m8AugBkAcsXv728Y2FXyGC6sDmJgZmZmYGNlZVC1TGRgYOZGMQw1HTlmgl0AM+D/ny9gNrtqMTi6QQaJC3Mw8Mm5gcU5pZzgYYWRIH/9+MzA+P8nMMC/AMPoK8O/P78YuHXrwLHEyMzGICnMCjHo3zcGDuV0sEtBCRPFIE1DB7ABkJiCGPL/3y8GHv0WuEEi/CwMwkru+A3S0DWBGwA2DGgICGAYpGALFsfpInUNTYa//xgYGKEGwAzjNugChxHIayAXicibMfxnZMdtkKTANwYeEV2G/0xsYMNANDjgJRIYHh4qhwQwMPrlVXUYGFl4GL7xeoLFUcIIpIiUYgRsKhDASgCUMgUmSQ5NNYMAK+sKIlqSof0AAAAASUVORK5CYII=)}.gantt_tree_icon.gantt_file{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAYAAABWzo5XAAAA/klEQVQ4T63Uyw5FMBAG4CliIcHOE9pIeBrCxou69py/yUgvnLRymogS85lOL4L+1ITu1HUtfdx5no04xFwvgPR9T3EckxDOd8rf913du64jGzOgcRxpWRYDQvB5nrSuK5VleSVsYwY0TRNt20ZRFKlgzuI4DgUVRWGMXMccCEHcgEkp1ZCQaZ7n/hACuUboA8YFDNkCR7+qKmqa5qqVk5E9azrGKDDUKwgCzBgAYHjOsiwcAsb14hqmafoOQhY8k+gnSeIPIYAb9xl7Bekgw1hrQcW+Q9Te+m6jIOjXJn6EhmFQm9anYfbatnUXJIJ9jxH+kX4C3J8XPilZ33wAwx73EyvYLYIAAAAASUVORK5CYII=)}.gantt_grid_head_cell .gantt_sort{position:absolute;right:5px;top:8px;width:7px;height:13px;background-repeat:no-repeat;background-position:50%}.gantt_grid_head_cell .gantt_sort.gantt_asc{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAcAAAANCAYAAABlyXS1AAAARUlEQVR42mNgQAL1/VP/M2ADIIntF2/9x1AAlrh0C47hCmA60DFYwX88gIFGwNDY5D8uDFbg7hvwHx2jmIBTAlkB0e4BAEjlaNtBWJPnAAAAAElFTkSuQmCC)}.gantt_grid_head_cell .gantt_sort.gantt_desc{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAcAAAANCAYAAABlyXS1AAAARUlEQVR4nGNgQAKGxib/GbABkIS7b8B/DAUwCRiGK0CXwFBAb1DfP/U/LszwHwi2X7qFgUEArBtdAVwCBmAKMCSQFSDzAWXXaOHsXeqkAAAAAElFTkSuQmCC)}.gantt_inserted,.gantt_updated{font-weight:700}.gantt_deleted{text-decoration:line-through}.gantt_invalid{background-color:#ffe0e0}.gantt_error{color:red}.gantt_status{right:1px;padding:5px 10px;background:hsla(0,0%,61%,.1);position:absolute;top:1px;transition:opacity .2s;opacity:0}.gantt_status.gantt_status_visible{opacity:1}#gantt_ajax_dots span{transition:opacity .2s;background-repeat:no-repeat;opacity:0}#gantt_ajax_dots span.gantt_dot_visible{opacity:1}.gantt_column_drag_marker{border:1px solid #cecece;opacity:.8;pointer-events:none}.gantt_grid_head_cell_dragged{border:1px solid #cecece;opacity:.3}.gantt_grid_target_marker{position:absolute;top:0;width:2px;height:100%;background-color:#ffb96d;transform:translateX(-1px)}.gantt_grid_target_marker:after,.gantt_grid_target_marker:before{display:block;content:"";position:absolute;left:-5px;width:0;height:0;border:6px solid transparent}.gantt_grid_target_marker:before{border-top-color:#ffb96d}.gantt_grid_target_marker:after{bottom:0;border-bottom-color:#ffb96d}.gantt_message_area{position:fixed;right:5px;width:250px;z-index:1000}.gantt-info{min-width:120px;padding:4px 4px 4px 20px;font-family:Verdana;z-index:10000;margin:5px;margin-bottom:10px;transition:all .5s ease}.gantt-info.hidden{height:0;padding:0;border-width:0;margin:0;overflow:hidden}.gantt_modal_box{overflow:hidden;display:inline-block;min-width:250px;width:250px;text-align:center;position:fixed;z-index:20000;box-shadow:3px 3px 3px rgba(0,0,0,.07);font-family:Verdana;border-radius:6px;border:1px solid #cac8bd;background:#fcfaf3}.gantt_popup_title{border-top-left-radius:6px;border-top-right-radius:6px;border-width:0}.gantt_button,.gantt_popup_button{border:1px solid #cac8bd;height:25px;line-height:25px;display:inline-block;margin:0 5px;border-radius:4px;background:#fff;background:#e0ded7}.gantt-info,.gantt_button,.gantt_popup_button{user-select:none;-webkit-user-select:none;-moz-user-select:-moz-none;cursor:pointer}.gantt_popup_text{overflow:hidden}.gantt_popup_controls{border-radius:6px;padding:10px}.gantt_popup_button{min-width:100px}div.dhx_modal_cover{background-color:#000;cursor:default;filter:progid:DXImageTransform.Microsoft.Alpha(opacity=20);opacity:.2;position:fixed;z-index:19999;left:0;top:0;width:100%;height:100%;border:none;zoom:1}.gantt-info img,.gantt_modal_box img{float:left;margin-right:20px}.gantt-alert-error,.gantt-confirm-error{border:1px solid red}.gantt_button input,.gantt_popup_button div{border-radius:4px;font-size:14px;box-sizing:content-box;padding:0;margin:0;vertical-align:top}.gantt_popup_title{border-bottom:1px solid #cac8bd;height:40px;line-height:40px;font-size:20px}.gantt_popup_text{margin:15px 15px 5px;font-size:14px;color:#000;min-height:30px;border-radius:6px}.gantt-error,.gantt-info{font-size:14px;color:#000;box-shadow:3px 3px 3px rgba(0,0,0,.07);padding:0;background-color:#fff;border-radius:3px;border:1px solid #fff}.gantt-info div{padding:5px 10px;background-color:#fff;border-radius:3px;border:1px solid #cac8bd}.gantt-error{background-color:#d81b1b;border:1px solid #ff3c3c}.gantt-error div{background-color:#d81b1b;border:1px solid #940000;color:#fff}.gantt-warning{background-color:#ff9000;border:1px solid #ffa633}.gantt-warning div{background-color:#ff9000;border:1px solid #b36500;color:#fff}.gantt_data_area div,.gantt_grid div{-ms-touch-action:none;-webkit-tap-highlight-color:rgba(0,0,0,0)}.gantt_data_area{position:relative;overflow-x:hidden;overflow-y:hidden;-moz-user-select:-moz-none;-webkit-user-select:none;user-select:none}.gantt_links_area{position:absolute;left:0;top:0}.gantt_side_content,.gantt_task_content,.gantt_task_progress{line-height:inherit;overflow:hidden;height:100%}.gantt_task_content{font-size:11px;color:#3f3f3f;width:100%;top:0;cursor:pointer;position:absolute;white-space:nowrap;text-align:center}.gantt_task_progress{text-align:center;z-index:0;background:#a7d991}.gantt_task_progress_wrapper{border-radius:inherit;position:relative;width:100%;height:100%;overflow:hidden}.gantt_task_line{border-radius:2px;position:absolute;box-sizing:border-box;background-color:#e1ffd4;border:1px solid #7fbc64;-webkit-user-select:none;-moz-user-select:none;-moz-user-select:-moz-none}.gantt_task_line.gantt_drag_move div{cursor:move}.gantt_touch_move,.gantt_touch_progress .gantt_touch_resize{transform:scale(1.02,1.1);transform-origin:50%}.gantt_touch_progress .gantt_task_progress_drag,.gantt_touch_resize .gantt_task_drag{transform:scaleY(1.3);transform-origin:50%}.gantt_side_content{position:absolute;white-space:nowrap;color:#6e6e6e;top:0;font-size:11px;font-size:10px}.gantt_side_content.gantt_left{right:100%;padding-right:20px}.gantt_side_content.gantt_right{left:100%;padding-left:20px}.gantt_side_content.gantt_link_crossing{bottom:6.75px;top:auto}.gantt_link_arrow,.gantt_task_link .gantt_line_wrapper{position:absolute;cursor:pointer}.gantt_line_wrapper div{background-color:#ffb96d}.gantt_task_link:hover .gantt_line_wrapper div{box-shadow:0 0 5px 0 #ffb96d}.gantt_task_link div.gantt_link_arrow{background-color:transparent;border-style:solid;width:0;height:0}.gantt_link_control{position:absolute;width:20px;top:0}.gantt_link_control div{display:none;cursor:pointer;box-sizing:border-box;position:relative;top:50%;margin-top:-7.5px;vertical-align:middle;border:1px solid #929292;border-radius:6.5px;height:13px;width:13px;background-color:#f0f0f0}.gantt_link_control.task_right div.gantt_link_point{margin-left:7px}.gantt_link_control div:hover{background-color:#fff}.gantt_link_control.task_left{left:-20px}.gantt_link_control.task_right{right:-20px}.gantt_link_target .gantt_link_control div,.gantt_task_line.gantt_drag_move .gantt_link_control div,.gantt_task_line.gantt_drag_move .gantt_task_drag,.gantt_task_line.gantt_drag_move .gantt_task_progress_drag,.gantt_task_line.gantt_drag_progress .gantt_link_control div,.gantt_task_line.gantt_drag_progress .gantt_task_drag,.gantt_task_line.gantt_drag_progress .gantt_task_progress_drag,.gantt_task_line.gantt_drag_resize .gantt_link_control div,.gantt_task_line.gantt_drag_resize .gantt_task_drag,.gantt_task_line.gantt_drag_resize .gantt_task_progress_drag,.gantt_task_line.gantt_selected .gantt_link_control div,.gantt_task_line.gantt_selected .gantt_task_drag,.gantt_task_line.gantt_selected .gantt_task_progress_drag,.gantt_task_line:hover .gantt_link_control div,.gantt_task_line:hover .gantt_task_drag,.gantt_task_line:hover .gantt_task_progress_drag{display:block}.gantt_link_source,.gantt_link_target{box-shadow:0 0 3px #a7d991}.gantt_link_target.link_finish_allow,.gantt_link_target.link_start_allow{box-shadow:0 0 3px #ffdeba}.gantt_link_target.link_finish_deny,.gantt_link_target.link_start_deny{box-shadow:0 0 3px #e87e7b}.link_finish_allow .gantt_link_control.task_end_date div,.link_start_allow .gantt_link_control.task_start_date div{background-color:#ffdeba;border-color:#ffb96d}.link_finish_deny .gantt_link_control.task_end_date div,.link_start_deny .gantt_link_control.task_start_date div{background-color:#e87e7b;border-color:#dd3e3a}.gantt_link_arrow_right{border-width:4px 0 4px 6px;border-top-color:transparent!important;border-right-color:transparent!important;border-bottom-color:transparent!important;border-left-color:#ffb96d}.gantt_link_arrow_left{border-width:4px 6px 4px 0;margin-top:-1px;border-top-color:transparent!important;border-right-color:#ffb96d;border-bottom-color:transparent!important;border-left-color:transparent!important}.gantt_link_arrow_up{border-width:0 4px 6px;border-color:transparent transparent #ffb96d;border-top-color:transparent!important;border-right-color:transparent!important;border-bottom-color:#ffb96d;border-left-color:transparent!important}.gantt_link_arrow_down{border-width:4px 6px 0 4px;border-top-color:#ffb96d;border-right-color:transparent!important;border-bottom-color:transparent!important;border-left-color:transparent!important}.gantt_task_drag,.gantt_task_progress_drag{cursor:ew-resize;display:none;position:absolute}.gantt_task_drag.task_right{cursor:e-resize}.gantt_task_drag.task_left{cursor:w-resize}.gantt_task_drag{height:100%;width:8px;z-index:1;top:-1px}.gantt_task_drag.task_left{left:-7px}.gantt_task_drag.task_right{right:-7px}.gantt_task_progress_drag{height:8px;width:8px;bottom:-4px;margin-left:-4px;background-position:bottom;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAJCAYAAAAGuM1UAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoV2luZG93cykiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6Q0JCMkQyRDhDOTFDMTFFMjg3RTFCNUEzNUQwRDMxNjEiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6Q0JCMkQyRDlDOTFDMTFFMjg3RTFCNUEzNUQwRDMxNjEiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDpDQkIyRDJENkM5MUMxMUUyODdFMUI1QTM1RDBEMzE2MSIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDpDQkIyRDJEN0M5MUMxMUUyODdFMUI1QTM1RDBEMzE2MSIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/Ppy3ICwAAADsSURBVHjafFBbaoNQEB1vghtIPlJX4Z/iX/cSsoZQGl80JZvIAvxVf1yNX6EFH+ADK8Y6nblQaGzagXNnmHPODHMVRIR5+L7/Sqm2bfv0i2TDT3ied4zjGBlU7+f8XPzCwrZtsSzLb9PTXQMRfhRFWFUVdl0nURQFco+45xsDNdwwDOVUNuR5LlHXNWZZhsyR5sDahRDC1XXdsSwLFCHgo+/hc5okhusVVFUFTdNgHMfHIAhQ0N2OaZowkbtpGhiG4Qa0RX6OYRicvCU9b2maPqzWa/grKtpE93D5zoZtkiRnyhv4Py6E3ZcAAwDb89Sl5rtPtAAAAABJRU5ErkJggg==);background-repeat:no-repeat;z-index:1}.gantt_task_progress_drag:hover{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAJCAYAAAAGuM1UAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAjklEQVQY043LwQ0BURjE8aEKPfy3EoWoQQTZCKKI5yUvX0m7W4Jw1sC4cNjF8kvmNDMT2xqqquoo6d627emttN0LcIgIR4SB5bAfjvcR4ZfnafXxAOxKKR4qpRhY9w5AnXP2NzlnAxvbElCnlPxLSsnAVoD/BXgq6do0jSyNpuk6SbpNgLmks6SZxl0kLR44uvaQZ7V7eAAAAABJRU5ErkJggg==)}.gantt_link_tooltip{box-shadow:3px 3px 3px #888;background-color:#fff;border-left:1px dotted #cecece;border-top:1px dotted #cecece;font-family:Tahoma;font-size:8pt;color:#444;padding:6px;line-height:20px}.gantt_link_direction{height:0;border:0 none #ffb96d;border-bottom-style:dashed;border-bottom-width:2px;transform-origin:0 0;-ms-transform-origin:0 0;-webkit-transform-origin:0 0;z-index:2;margin-left:1px;position:absolute}.gantt_grid_data .gantt_row.gantt_selected,.gantt_grid_data .gantt_row.odd.gantt_selected,.gantt_task_row.gantt_selected{background-color:#ffebbc!important}.gantt_task_row.gantt_selected .gantt_task_cell{border-right-color:#ffdc89}.gantt_task_line.gantt_selected{box-shadow:0 0 5px #a7d991}.gantt_task_line.gantt_project.gantt_selected{box-shadow:0 0 5px #9ab9f1}.gantt_task_line.gantt_milestone{visibility:hidden;background-color:#db7dc5;border:0 solid #cd49ae;box-sizing:content-box;-moz-box-sizing:content-box}.gantt_task_line.gantt_milestone div{visibility:visible}.gantt_task_line.gantt_milestone .gantt_task_content{background:inherit;border:inherit;border-width:1px;border-radius:inherit;box-sizing:border-box;-moz-box-sizing:border-box;transform:rotate(45deg)}.gantt_task_line.gantt_task_inline_color{border-color:#999}.gantt_task_line.gantt_task_inline_color .gantt_task_progress{background-color:#363636;opacity:.2}.gantt_task_line.gantt_task_inline_color.gantt_project.gantt_selected,.gantt_task_line.gantt_task_inline_color.gantt_selected{box-shadow:0 0 5px #999}.gantt_task_link.gantt_link_inline_color:hover .gantt_line_wrapper div{box-shadow:0 0 5px 0 #999}.gantt_critical_task{background-color:#e63030;border-color:#9d3a3a}.gantt_critical_task .gantt_task_progress{background-color:rgba(0,0,0,.4)}.gantt_critical_link .gantt_line_wrapper>div{background-color:#e63030}.gantt_critical_link .gantt_link_arrow{border-color:#e63030}.gantt_btn_set:focus,.gantt_cell:focus,.gantt_grid_head_cell:focus,.gantt_popup_button:focus,.gantt_qi_big_icon:focus,.gantt_row:focus{box-shadow:inset 0 0 1px 1px #4d90fe}.gantt_split_parent,.gantt_split_subproject{opacity:.1;pointer-events:none}.gantt_rollup_child .gantt_link_control,.gantt_rollup_child:hover .gantt_link_control{display:none}.gantt_unselectable,.gantt_unselectable div{-webkit-user-select:none;-moz-user-select:none;-moz-user-select:-moz-none}.gantt_cal_light{-webkit-tap-highlight-color:transparent;background:#f4f2ea;border-radius:6px;font-family:Verdana;font-size:11px;border:1px solid #cac8bd;color:#3f3f3f;font-size:8pt;position:absolute;z-index:10001;width:550px;height:250px;box-shadow:3px 3px 3px rgba(0,0,0,.07)}.gantt_cal_light_wide{width:650px}.gantt_cal_light select{font-family:Verdana;border:1px solid #cac8bd;font-size:11px;padding:2px;margin:0}.gantt_cal_ltitle{padding:7px 10px;overflow:hidden;-webkit-border-top-left-radius:6px;-webkit-border-bottom-left-radius:0;-webkit-border-top-right-radius:6px;-webkit-border-bottom-right-radius:0;-moz-border-radius-topleft:6px;-moz-border-radius-bottomleft:0;-moz-border-radius-topright:6px;-moz-border-radius-bottomright:0;border-top-left-radius:6px;border-bottom-left-radius:0;border-top-right-radius:6px;border-bottom-right-radius:0}.gantt_cal_ltitle,.gantt_cal_ltitle span{white-space:nowrap}.gantt_cal_lsection{color:#727272;font-weight:700;padding:12px 0 5px 10px}.gantt_cal_lsection .gantt_fullday{float:right;margin-right:5px;font-size:12px;font-weight:400;line-height:20px;vertical-align:top;cursor:pointer}.gantt_cal_lsection{font-size:13px}.gantt_cal_ltext{padding:2px 10px;overflow:hidden}.gantt_cal_ltext textarea{overflow-y:auto;overflow-x:hidden;font-family:Verdana;font-size:11px;box-sizing:border-box;border:1px solid #cac8bd;height:100%;width:100%;outline:none!important;resize:none}.gantt_section_constraint [data-constraint-time-select]{margin-left:20px}.gantt_time{font-weight:700}.gantt_cal_light .gantt_title{padding-left:10px}.gantt_cal_larea{border:1px solid #cac8bd;border-left:none;border-right:none;background-color:#fff;overflow:hidden;height:1px}.gantt_btn_set{margin:10px 7px 5px 10px;padding:5px 15px 5px 10px;float:left;border-radius:4px;border:0 solid #cac8bd;height:27px;color:#4f4f4f;background:#fff;background:#e0ded7;box-sizing:border-box;cursor:pointer}.gantt_hidden{display:none}.gantt_btn_set div{float:left;font-size:13px;height:17px;line-height:17px;background-repeat:no-repeat;vertical-align:middle}.gantt_save_btn{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAYAAABWzo5XAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoV2luZG93cykiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6QUUzMDA3NzlDOTFEMTFFMkJBQTNFMTU1NTdFNUNFMTMiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6QUUzMDA3N0FDOTFEMTFFMkJBQTNFMTU1NTdFNUNFMTMiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDpBRTMwMDc3N0M5MUQxMUUyQkFBM0UxNTU1N0U1Q0UxMyIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDpBRTMwMDc3OEM5MUQxMUUyQkFBM0UxNTU1N0U1Q0UxMyIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PtHrmoUAAAF4SURBVHjaYvr//z8DNTATA5UA1QxiIUdTQEAAG5CaA8S6QGyyYcOGvyzkGMLIyLgSGC4BHBwcr1RUVBhJdhHQEGagIctAhjAzM/9OSkrqd3Nz+ws3CKjAA0hNA+JcoDO34jIESC0FGhIM4tvb2y8FGjIbyPwPD2wNDQ1RIKUItG09UIM3LkOAOBzEB3rnaF5eXieQ+RYl1jo6Og4oKCicAtrGCjXMA82Q+TBD+Pj4HtfU1NQDmTewRf/jjIyMNmDgfYAatgnJMFDsxIIYrKysX7Ozs9sFBAT240xHQO/t8PT0BGliQHLZdiA3AabGz89vlrm5+RIg8x++BPkzPj5+Msj/UMM4gBTciwYGBttiY2MnAJmfiUnZj4CB2MzFxfUGWVBcXPx6WVlZE0ie6CwiJye3D+il6UCvgZ0PCreCggKQ4adIzWu/w8LCpoO8wsLC8j0yMnKipqbmelh6wQUYQUUADmACxDpADArwl4RSPT6DBqYYAQgwANyusz7jloxAAAAAAElFTkSuQmCC);margin-top:2px;width:21px}.gantt_cancel_btn{margin-top:2px;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAYAAABWzo5XAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoV2luZG93cykiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6QjQxN0VEOUZDOTFEMTFFMkFFMjE4MDI4MUJDNDQ1NDkiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6QjQxN0VEQTBDOTFEMTFFMkFFMjE4MDI4MUJDNDQ1NDkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDpCNDE3RUQ5REM5MUQxMUUyQUUyMTgwMjgxQkM0NDU0OSIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDpCNDE3RUQ5RUM5MUQxMUUyQUUyMTgwMjgxQkM0NDU0OSIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/Pq9E2PUAAAH/SURBVHjaYvz//z8DNQAjTQ0KCAjgAVJFQOwBxGZQ4VNAvAOI+zZs2PCFoEFAQ+wZGRkXAMUVsNrMyPgAKJcANOwgToOAhgQCqXUgtqCg4ANXV9ctzs7Od0D8vXv3quzYsSPw06dP0lDl/kDDNmEYBDRECGjbYyCfS09Pb0dNTc1sNja2M0CpF1C1EjExMfu/fPmiBHXZZ5CrgYa9A/FZYCaysLCU/vnzh0tUVPRGU1NTPVDoNBD/R3ItyKVKAgICj/79+8cIdJksSA9QrBIkz4RkUBCINjU1XQUNWGRDQC4zBhrycMGCBYW2trbLkPWgGPTz50+wk6WlpTegBT6yIaCYXMfJybkRJPf7928ZDIOYmZl/g+jjx4+/xmcISPz27dsfYNowDOLi4gIb8PDhQ1N8hkDVGIBobm7ulxgGAb0EClyGX79+leAzBCjH9vXr13pkPSgGhYeHTwd6DxhUP62ghjzCZggw2icCw0YdGNDfQXrgkQVjGBgYHPHx8Zm9cePGHGhA/gdq/ANkysGUAHELMO3ogji+vr6zQXpwZREFkEErV66M//btmwi2LAIMyzdAlyz09/efDAoufJlW8tWrVx7Tp08PevDggc779+8VYFlGQUHhSmZm5joxMTFQ5n1OTDHCCsT6QAxKJ2JQsVdA/ASIL4J8TrPyCCDAAK8E80CvM3cMAAAAAElFTkSuQmCC);width:20px}.gantt_delete_btn{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAYAAABWzo5XAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoV2luZG93cykiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6QjkzQUQ0MjVDOTFEMTFFMkEwRERFNzQ5NzZCRjlBODgiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6QjkzQUQ0MjZDOTFEMTFFMkEwRERFNzQ5NzZCRjlBODgiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDpCOTNBRDQyM0M5MUQxMUUyQTBEREU3NDk3NkJGOUE4OCIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDpCOTNBRDQyNEM5MUQxMUUyQTBEREU3NDk3NkJGOUE4OCIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/Pmbo+yIAAAB9SURBVHjaYvz//z8DNQALPsmAgAC4LRs2bGDEaxLIRdiwv78/kPqfBsNQPk71jDCvIdtOLEB2JRMDlQAjUmCnkaF/FtYwgoUDsTQypprXRg0a0QYhp2yGpqamzefOnfMhpMnIyGhLXV2dL06DgMAYigmBs1CM0yCyAUCAAQAlK4lJjSOjGQAAAABJRU5ErkJggg==);margin-top:2px;width:20px}.gantt_cal_cover{width:100%;height:100%;position:fixed;z-index:10000;top:0;left:0;background-color:#000;opacity:.1;filter:progid:DXImageTransform.Microsoft.Alpha(opacity=10)}.gantt_custom_button{padding:0 3px;font-family:Verdana;font-size:11px;font-weight:400;margin-right:10px;margin-top:-5px;cursor:pointer;float:right;height:21px;width:90px;border:1px solid #cecece;text-align:center;border-radius:4px}.gantt_custom_button div{cursor:pointer;float:none;height:21px;line-height:21px;vertical-align:middle}.gantt_custom_button div:first-child{display:none}.gantt_cal_light_wide{width:580px;padding:2px 4px}.gantt_cal_light_wide .gantt_cal_larea{box-sizing:border-box;border:1px solid #cac8bd}.gantt_cal_light_wide .gantt_cal_lsection{border:0;float:left;text-align:right;width:80px;height:20px;padding:5px 10px 0 0}.gantt_cal_light_wide .gantt_wrap_section{position:relative;padding:10px 0;overflow:hidden;border-bottom:1px solid #eae9e5}.gantt_cal_light_wide .gantt_section_time{overflow:hidden;padding-top:2px!important;padding-right:0;height:20px!important}.gantt_cal_light_wide .gantt_cal_ltext{padding-right:0}.gantt_cal_light_wide .gantt_cal_larea{padding:0 10px;width:100%}.gantt_cal_light_wide .gantt_section_time{background:transparent}.gantt_cal_light_wide .gantt_cal_checkbox label{padding-left:0}.gantt_cal_light_wide .gantt_cal_lsection .gantt_fullday{float:none;margin-right:0;font-weight:700;cursor:pointer}.gantt_cal_light_wide .gantt_custom_button{position:absolute;top:0;right:0;margin-top:2px}.gantt_cal_light_wide .gantt_repeat_right{margin-right:55px}.gantt_cal_light_wide.gantt_cal_light_full{width:738px}.gantt_cal_wide_checkbox input{margin-top:8px;margin-left:14px}.gantt_cal_light input{font-size:11px}.gantt_section_time{background-color:#fff;white-space:nowrap;padding:2px 10px 5px;padding-top:2px!important}.gantt_section_time .gantt_time_selects{float:left;height:25px}.gantt_section_time .gantt_time_selects select{height:23px;padding:2px;border:1px solid #cac8bd}.gantt_duration{width:100px;height:23px;float:left;white-space:nowrap;margin-left:20px;line-height:23px}.gantt_duration .gantt_duration_dec,.gantt_duration .gantt_duration_inc,.gantt_duration .gantt_duration_value{box-sizing:border-box;text-align:center;vertical-align:top;height:100%;border:1px solid #cac8bd}.gantt_duration .gantt_duration_value{width:40px;padding:3px 4px;border-left-width:0;border-right-width:0}.gantt_duration .gantt_duration_value.gantt_duration_value_formatted{width:70px}.gantt_duration .gantt_duration_dec,.gantt_duration .gantt_duration_inc{width:20px;padding:1px;padding-bottom:1px;background:#fff;background:#e0ded7}.gantt_duration .gantt_duration_dec{-moz-border-top-left-radius:4px;-moz-border-bottom-left-radius:4px;-webkit-border-top-left-radius:4px;-webkit-border-bottom-left-radius:4px;border-top-left-radius:4px;border-bottom-left-radius:4px}.gantt_duration .gantt_duration_inc{margin-right:4px;-moz-border-top-right-radius:4px;-moz-border-bottom-right-radius:4px;-webkit-border-top-right-radius:4px;-webkit-border-bottom-right-radius:4px;border-top-right-radius:4px;border-bottom-right-radius:4px}.gantt_resources{max-height:150px;height:auto;overflow-y:auto}.gantt_resource_row{display:block;padding:10px 0;border-bottom:1px solid #eae9e5;cursor:pointer}.gantt_resource_row input[type=checkbox]:not(:checked),.gantt_resource_row input[type=checkbox]:not(:checked)~div{opacity:.5}.gantt_resource_toggle{vertical-align:middle}.gantt_resources_filter .gantt_resources_filter_input{padding:1px 2px;box-sizing:border-box}.gantt_resources_filter .switch_unsetted{vertical-align:middle}.gantt_resource_cell{display:inline-block}.gantt_resource_cell.gantt_resource_cell_checkbox{width:24px;max-width:24px;min-width:24px;vertical-align:middle}.gantt_resource_cell.gantt_resource_cell_label{width:40%;max-width:40%;vertical-align:middle}.gantt_resource_cell.gantt_resource_cell_value{width:30%;max-width:30%;vertical-align:middle}.gantt_resource_cell.gantt_resource_cell_value input,.gantt_resource_cell.gantt_resource_cell_value select{width:80%;vertical-align:middle;padding:1px 2px;box-sizing:border-box}.gantt_resource_cell.gantt_resource_cell_unit{width:10%;max-width:10%;vertical-align:middle}.gantt_resource_early_value{opacity:.8;font-size:.9em}.gantt_cal_quick_info{border:1px solid #cac8bd;border-radius:6px;position:absolute;z-index:300;box-shadow:3px 3px 3px rgba(0,0,0,.07);background-color:#fcfaf3;width:300px;transition:left .5s ease,right .5s;-moz-transition:left .5s ease,right .5s;-webkit-transition:left .5s ease,right .5s;-o-transition:left .5s ease,right .5s}.gantt_no_animate{transition:none;-moz-transition:none;-webkit-transition:none;-o-transition:none}.gantt_cal_quick_info.gantt_qi_left .gantt_qi_big_icon{float:right}.gantt_cal_qi_title{-webkit-border-top-left-radius:6px;-webkit-border-bottom-left-radius:0;-webkit-border-top-right-radius:6px;-webkit-border-bottom-right-radius:0;-moz-border-radius-topleft:6px;-moz-border-radius-bottomleft:0;-moz-border-radius-topright:6px;-moz-border-radius-bottomright:0;border-top-left-radius:6px;border-bottom-left-radius:0;border-top-right-radius:6px;border-bottom-right-radius:0;padding:5px 0 8px 12px;color:#3f3f3f;background-color:#f4f2ea;border-bottom:1px solid #cac8bd}.gantt_cal_qi_tdate{font-size:14px;font-weight:700}.gantt_cal_qi_tcontent{font-size:11px}.gantt_cal_qi_content{padding:16px 8px;font-size:13px;color:#3f3f3f;overflow:hidden}.gantt_cal_qi_controls{-webkit-border-top-left-radius:0;-webkit-border-bottom-left-radius:6px;-webkit-border-top-right-radius:0;-webkit-border-bottom-right-radius:6px;-moz-border-radius-topleft:0;-moz-border-radius-bottomleft:6px;-moz-border-radius-topright:0;-moz-border-radius-bottomright:6px;border-top-left-radius:0;border-bottom-left-radius:6px;border-top-right-radius:0;border-bottom-right-radius:6px;padding-left:7px}.gantt_cal_qi_controls .gantt_menu_icon{margin-top:3.5px;background-repeat:no-repeat}.gantt_cal_qi_controls .gantt_menu_icon.icon_edit{width:20px;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAAB3RJTUUH3QYFDgcMloNXJQAAAFNJREFUOMvt0zEOACAIA0Dkg30rL8TJTRTKZGJXyaWEKPKTCQAH4Ls37cItcDUzsxHNDLZNhCq7Gt1wh9ErV7EjyGAhyGLphlnsClWuS32rn0czAT/KLVk9yshBAAAAAElFTkSuQmCC)}.gantt_cal_qi_controls .gantt_menu_icon.icon_delete{width:20px;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAYAAABWzo5XAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoV2luZG93cykiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6QjkzQUQ0MjVDOTFEMTFFMkEwRERFNzQ5NzZCRjlBODgiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6QjkzQUQ0MjZDOTFEMTFFMkEwRERFNzQ5NzZCRjlBODgiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDpCOTNBRDQyM0M5MUQxMUUyQTBEREU3NDk3NkJGOUE4OCIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDpCOTNBRDQyNEM5MUQxMUUyQTBEREU3NDk3NkJGOUE4OCIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/Pmbo+yIAAAB9SURBVHjaYvz//z8DNQALPsmAgAC4LRs2bGDEaxLIRdiwv78/kPqfBsNQPk71jDCvIdtOLEB2JRMDlQAjUmCnkaF/FtYwgoUDsTQypprXRg0a0QYhp2yGpqamzefOnfMhpMnIyGhLXV2dL06DgMAYigmBs1CM0yCyAUCAAQAlK4lJjSOjGQAAAABJRU5ErkJggg==)}.gantt_qi_big_icon{font-size:13px;border-radius:4px;color:#4f4f4f;background:#fff;background:#e0ded7;margin:5px 9px 8px 0;min-width:60px;line-height:27px;vertical-align:middle;padding:0 10px 0 5px;cursor:pointer;border:1px solid #cac8bd}.gantt_cal_qi_controls div{float:left;height:27px;text-align:center;line-height:27px}.gantt_cal_quick_info.gantt_qi_hidden{display:none}.gantt_tooltip{padding:10px;position:absolute;z-index:50;white-space:nowrap}.gantt_resource_marker{position:absolute;text-align:center;font-size:14px;color:#fff}.gantt_resource_marker_ok{background:rgba(78,208,134,.75)}.gantt_resource_marker_overtime{background:hsla(0,100%,76%,.69)}.gantt_histogram_label{width:100%;height:100%;position:absolute;z-index:1;font-weight:700;font-size:11px}.gantt_histogram_fill{background-color:rgba(41,157,180,.2);width:100%;position:absolute;bottom:0}.gantt_histogram_hor_bar{height:1px;margin-top:-1px}.gantt_histogram_hor_bar,.gantt_histogram_vert_bar{position:absolute;background:#299db4;margin-left:-1px}.gantt_histogram_vert_bar{width:1px}.gantt_histogram_cell{position:absolute;text-align:center;font-size:11px;color:#000}.gantt_marker{height:100%;width:2px;top:0;position:absolute;text-align:center;background-color:rgba(255,0,0,.4);box-sizing:border-box}.gantt_marker .gantt_marker_content{padding:5px;background:inherit;color:#fff;position:absolute;font-size:12px;line-height:12px;opacity:.8}.gantt_marker_area{position:absolute;top:0;left:0}.gantt_grid_editor_placeholder{position:absolute}.gantt_grid_editor_placeholder>div,.gantt_grid_editor_placeholder input,.gantt_grid_editor_placeholder select{width:100%;height:100%;box-sizing:border-box}.gantt_row_placeholder div{opacity:.5}.gantt_row_placeholder .gantt_add,.gantt_row_placeholder .gantt_file{display:none}.gantt_drag_marker.gantt_grid_dnd_marker{background-color:transparent;transition:all .1s ease}.gantt_grid_dnd_marker_line{height:4px;width:100%;background-color:#3498db}.gantt_grid_dnd_marker_line:before{background:#fff;width:12px;height:12px;box-sizing:border-box;border:3px solid #3498db;border-radius:6px;content:"";line-height:1px;display:block;position:absolute;margin-left:-11px;margin-top:-4px;pointer-events:none}.gantt_grid_dnd_marker_folder{height:100%;width:100%;position:absolute;pointer-events:none;box-sizing:border-box;box-shadow:inset 0 0 0 2px #3f98db;background:transparent}.gantt_overlay_area{display:none}.gantt_overlay,.gantt_overlay_area{position:absolute;height:inherit;width:inherit;top:0;left:0}.gantt_click_drag_rect{position:absolute;left:0;top:0;outline:1px solid #3f98db;background-color:rgba(52,152,219,.3)}.gantt_timeline_move_available,.gantt_timeline_move_available *{cursor:move}.gantt_rtl .gantt_grid{text-align:right}.gantt_rtl .gantt_cell,.gantt_rtl .gantt_row{flex-direction:row-reverse}.gantt_layout_content{width:100%;overflow:auto;box-sizing:border-box}.gantt_layout_cell{position:relative;box-sizing:border-box}.gantt_layout_cell>.gantt_layout_header{background:#33aae8;color:#fff;font-size:17px;padding:5px 10px;box-sizing:border-box}.gantt_layout_header.collapsed_x{background:#a9a9a9}.gantt_layout_header.collapsed_x .gantt_header_arrow:before{content:"\21E7"}.gantt_layout_header.collapsed_y{background:#a9a9a9}.gantt_layout_header.collapsed_y .gantt_header_arrow:before{content:"\21E9"}.gantt_layout_header{cursor:pointer}.gantt_layout_header .gantt_header_arrow{float:right;text-align:right}.gantt_layout_header .gantt_header_arrow:before{content:"\21E6"}.gantt_layout_header.vertical .gantt_header_arrow:before{content:"\21E7"}.gantt_layout_outer_scroll_vertical .gantt_layout_content{overflow-y:hidden}.gantt_layout_outer_scroll_horizontal .gantt_layout_content{overflow-x:hidden}.gantt_layout_x>.gantt_layout_cell{display:inline-block;vertical-align:top}.gantt_layout_x{white-space:nowrap}.gantt_resizing{opacity:.7;background:#f2f2f2}.gantt_layout_cell_border_right.gantt_resizer{overflow:visible;border-right:0}.gantt_resizer{cursor:e-resize;position:relative}.gantt_resizer_y{cursor:n-resize}.gantt_resizer_stick{background:#33aae8;z-index:9999;position:absolute;top:0;width:100%}.gantt_resizer_x .gantt_resizer_x{position:absolute;width:20px;height:100%;margin-left:-10px;top:0;left:0;z-index:1}.gantt_resizer_y .gantt_resizer_y{position:absolute;height:20px;width:100%;top:-10px;left:0;z-index:1}.gantt_resizer_error{background:#cd5c5c!important}.gantt_layout_cell_border_left{border-left:1px solid #cac8bd}.gantt_layout_cell_border_right{border-right:1px solid #cac8bd}.gantt_layout_cell_border_top{border-top:1px solid #cac8bd}.gantt_layout_cell_border_bottom{border-bottom:1px solid #cac8bd}.gantt_layout_cell_border_transparent{border-color:transparent}.gantt_window{position:absolute;top:50%;left:50%;z-index:999999999;background:#fff}.gantt_window_content{position:relative}.gantt_window_content_header{background:#39c;color:#fff;height:33px;padding:10px 10px 0;border-bottom:2px solid #fff;position:relative}.gantt_window_content_header_text{padding-left:10%}.gantt_window_content_header_buttons{position:absolute;top:10px;right:10px}.gantt_window_content_header_buttons:hover{color:#000;cursor:pointer}.gantt_window_content_resizer{position:absolute;width:15px;height:15px;bottom:0;line-height:15px;right:-1px;text-align:center;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA8AAAAPCAMAAAAMCGV4AAAABlBMVEUAAAAAAAClZ7nPAAAAAXRSTlMAQObYZgAAABZJREFUeAFjIAUwUshlpJDLSIhLGAAACQ4AFk79JaMAAAAASUVORK5CYII=);cursor:nw-resize;z-index:999}.gantt_window_content_frame{position:absolute;top:0;left:0;width:100%;height:100%;background:rgba(0,0,0,.1);z-index:9999}.gantt_window_drag{cursor:pointer!important}.gantt_window_resizing{overflow:visible}.gantt_window_resizing_body{overflow:hidden!important}.gantt_window_modal{background:rgba(0,0,0,.1);z-index:9999;top:0;left:0;width:100%;height:100%;position:fixed}.gantt_cal_light,.gantt_cal_quick_info,.gantt_container,.gantt_message_area,.gantt_modal_box,.gantt_tooltip{text-rendering:optimizeLegibility;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.gantt_noselect{-moz-user-select:-moz-none;-webkit-user-select:none;-ms-user-select:none;user-select:none}.gantt_noselect .gantt_grid_data .gantt_row.odd:hover,.gantt_noselect .gantt_grid_data .gantt_row:hover{background-color:unset}.gantt_drag_marker{position:absolute;top:-1000px;left:-1000px;font-family:Verdana;font-size:11px;z-index:1;white-space:nowrap}.gantt_drag_marker .gantt_tree_icon.gantt_blank,.gantt_drag_marker .gantt_tree_icon.gantt_close,.gantt_drag_marker .gantt_tree_icon.gantt_open,.gantt_drag_marker .gantt_tree_indent{display:none}.gantt_empty_state_wrapper{position:relative}.gantt_empty_state{height:100%;max-width:500px;box-sizing:border-box;white-space:pre-line;overflow-wrap:break-word;display:flex;flex-direction:column;justify-content:flex-start;margin:0 auto}.gantt_empty_state_image{background-image:url("data:image/png;base64,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");background-repeat:no-repeat;width:100%;max-width:500px;max-height:500px;margin-left:auto;margin-right:auto;display:block;min-height:0;height:200px;background-size:contain;background-position-x:center;background-position-y:bottom;margin-top:40px}.gantt_empty_state_text{text-align:center}.gantt_empty_state_text_link{color:#03a9f4;background-position:100% 0;background:none;opacity:1;height:unset;cursor:pointer}.gantt_drag_marker,.gantt_drag_marker .gantt_row.odd{background-color:#fff}.gantt_drag_marker .gantt_row{border-left:1px solid #d3d1c8;border-top:1px solid #d3d1c8}.gantt_drag_marker .gantt_cell{border-color:#d3d1c8}.gantt_row.gantt_over,.gantt_task_row.gantt_over{background-color:#0070fe}.gantt_row.gantt_transparent .gantt_cell{opacity:.7}.gantt_task_row.gantt_transparent{background-color:#fff}.gantt_popup_button.gantt_delete_button{border:1px solid #98d27e;background:#a7d991}.gantt_container_resize_watcher{background:transparent;width:100%;height:100%;position:absolute;top:0;left:0;z-index:-1;pointer-events:none;border:0;box-sizing:border-box;opacity:0}
src/components/dhtmlxGantt/codebase/skins/dhtmlxgantt_skyblue.css
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1 @@
.buttonBg{background:#fff}.gridHoverStyle{background-color:#ffe6b1!important;background-color:#ffebc1;background-image:linear-gradient(0deg,#ffe09d 0,#ffeabb);border-top-color:#ffc341;border-bottom-color:#ffc341}.gridSelection,.timelineSelection{background-color:#ffe6b1!important;border-bottom-color:#ffc341}.timelineSelection{background-color:#ffebc1;background-image:linear-gradient(0deg,#ffe09d 0,#ffeabb);border-top-color:#ffc341}.timelineSelection .gantt_task_cell{border-right-color:#ffce65}.gantt_popup_shadow{box-shadow:3px 3px 3px rgba(0,0,0,.07)}.gantt_cal_quick_info .gantt_cal_qi_title{background:#fff}.gantt_cal_qi_controls .gantt_qi_big_icon .gantt_menu_icon.icon_delete{margin-top:5px}.gantt_popup_title{box-shadow:inset 0 1px 1px #fff;background-color:#dfedff;background:-webkit-gradient(linear,left top,left bottom,color-stop(0,#e4f0ff),color-stop(50%,#dfedff),color-stop(100%,#d5e8ff));background-image:-o-linear-gradient(top,#e4f0ff 0,#dfedff 60%,#d5e8ff 100%);background-position:0 1px;background-repeat:repeat-x}.gantt_tooltip{box-shadow:3px 3px 3px rgba(0,0,0,.07);border-left:1px solid rgba(0,0,0,.07);border-top:1px solid rgba(0,0,0,.07);font-size:8pt;color:#1e2022}.gantt_container,.gantt_tooltip{background-color:#fff;font-family:Tahoma}.gantt_container{font-size:11px;border:1px solid #a4bed4;position:relative;white-space:nowrap;overflow-x:hidden;overflow-y:hidden}.gantt_touch_active{overscroll-behavior:none}.gantt_task_scroll{overflow-x:scroll}.gantt_grid,.gantt_task{position:relative;overflow-x:hidden;overflow-y:hidden;display:inline-block;vertical-align:top}.gantt_grid_scale,.gantt_task_scale{color:#42464b;border-bottom:1px solid #a4bed4;box-sizing:border-box}.gantt_grid_scale,.gantt_task_scale,.gantt_task_vscroll{box-shadow:inset 0 1px 1px #fff;background-color:#dfedff;background:-webkit-gradient(linear,left top,left bottom,color-stop(0,#e4f0ff),color-stop(50%,#dfedff),color-stop(100%,#d5e8ff));background-image:-o-linear-gradient(top,#e4f0ff 0,#dfedff 60%,#d5e8ff 100%);background-position:0 1px;background-repeat:repeat-x}.gantt_scale_line{box-sizing:border-box;-moz-box-sizing:border-box;border-top:1px solid #a4bed4}.gantt_scale_line:first-child{border-top:none}.gantt_grid_head_cell{display:inline-block;vertical-align:top;border-right:1px solid #a4bed4;text-align:center;position:relative;cursor:default;height:100%;box-sizing:border-box;-moz-box-sizing:border-box;line-height:25px;-moz-user-select:-moz-none;-webkit-user-select:none;user-select:none;overflow:hidden}.gantt_scale_line{clear:both}.gantt_grid_data{width:100%;overflow:hidden;position:relative}.gantt_row{position:relative;-webkit-user-select:none;-moz-user-select:none;-moz-user-select:-moz-none}.gantt_add,.gantt_grid_head_add{width:100%;height:100%;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoV2luZG93cykiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6NzZCMThBRUFCRTQ0MTFFMkFFMEFGMEFBMzJEN0RBRTIiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6NzZCMThBRUJCRTQ0MTFFMkFFMEFGMEFBMzJEN0RBRTIiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo3NkIxOEFFOEJFNDQxMUUyQUUwQUYwQUEzMkQ3REFFMiIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDo3NkIxOEFFOUJFNDQxMUUyQUUwQUYwQUEzMkQ3REFFMiIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PkVHygEAAAEpSURBVHjaYgzeGcyABfxnwA4Y0QVY/v79i1VlsUMxCr/3QC9WdTgN+P//P8Ohr4fAbDtuOwZc6lj+/PmDVeLfv39wTSA2LnU4DQC5AGYAiI1LHRNQ4j861pfSZ3j36x1YEwiD2CAxbGoZbRbZ/K/3qUcx9cPvDwzXv11n+PL3C5jPw8zDoMmlySDAKoCirnFLI8QLID/ufLOTARf48OcDw/Gfx1HE3EXcwa5j+f37N95AwgVAekB64QaATISB97/fM1z5dIXh85/PYD4vCy+DDp8OgyCrIIYBjFoTtDBSnYWyBYO9rj3DsbfHwHwrYSuGg5cPMpy4ewIzFoCmMKLjwzcOMwiwCMBjAcQGiWFTizchweRompDwuiBANoCgCxjFasQoys4AAQYARt4I/K036xQAAAAASUVORK5CYII=);background-position:50%;background-repeat:no-repeat;cursor:pointer;position:relative;-moz-opacity:.3;opacity:.3}.gantt_grid_head_cell.gantt_grid_head_add{-moz-opacity:.6;opacity:.6;top:0}.gantt_grid_head_cell.gantt_grid_head_add:hover{-moz-opacity:1;opacity:1}.gantt_grid_data .gantt_row.odd:hover,.gantt_grid_data .gantt_row:hover{background-color:#ffe6b1!important;background-color:#ffebc1;background-image:linear-gradient(0deg,#ffe09d 0,#ffeabb);border-top-color:#ffc341;border-bottom-color:#ffc341}.gantt_grid_data .gantt_row.odd:hover .gantt_add,.gantt_grid_data .gantt_row:hover .gantt_add{-moz-opacity:1;opacity:1}.gantt_row,.gantt_task_row{border-bottom:1px solid #ebebeb;background-color:#fff}.gantt_row.odd,.gantt_task_row.odd{background-color:#fff}.gantt_cell,.gantt_grid_head_cell,.gantt_row,.gantt_scale_cell,.gantt_task_cell,.gantt_task_row{box-sizing:border-box;-moz-box-sizing:border-box}.gantt_grid_head_cell,.gantt_scale_cell{line-height:inherit}.gantt_grid_scale .gantt_grid_column_resize_wrap{cursor:col-resize;position:absolute;width:13px;margin-left:-7px}.gantt_grid_column_resize_wrap .gantt_grid_column_resize{background-color:#a4bed4;height:100%;width:1px;margin:0 auto}.gantt_task_grid_row_resize_wrap{cursor:row-resize;position:absolute;height:13px;margin-top:-7px;left:0;width:100%}.gantt_task_grid_row_resize_wrap .gantt_task_grid_row_resize{background-color:#ebebeb;top:6px;height:1px;width:100%;margin:0 auto;position:relative}.gantt_drag_marker{pointer-events:none}.gantt_drag_marker.gantt_grid_resize_area,.gantt_drag_marker.gantt_row_grid_resize_area{background-color:hsla(0,0%,91%,.5);height:100%;width:100%;box-sizing:border-box}.gantt_drag_marker.gantt_grid_resize_area{border-left:1px solid #a4bed4;border-right:1px solid #a4bed4}.gantt_drag_marker.gantt_row_grid_resize_area{border-top:1px solid #a4bed4;border-bottom:1px solid #a4bed4;pointer-events:none}.gantt_row{display:flex}.gantt_row>div{flex-shrink:0;flex-grow:0}.gantt_cell{vertical-align:top;border-right:1px solid #ebebeb;padding-left:6px;padding-right:6px;height:100%;overflow:hidden;white-space:nowrap}.gantt_cell_tree{display:flex;flex-wrap:nowrap}.gantt_grid_data .gantt_last_cell,.gantt_grid_scale .gantt_last_cell,.gantt_task .gantt_task_scale .gantt_scale_cell.gantt_last_cell,.gantt_task_bg .gantt_last_cell{border-right-width:0}.gantt_task .gantt_task_scale .gantt_scale_cell.gantt_last_cell{border-right-width:1px}.gantt_task_bg{overflow:hidden}.gantt_scale_cell{display:inline-block;white-space:nowrap;overflow:hidden;border-right:1px solid #a4bed4;text-align:center;height:100%}.gantt_task_cell{display:inline-block;height:100%;border-right:1px solid #ebebeb}.gantt_layout_cell.gantt_ver_scroll{width:0;background-color:transparent;height:1px;overflow-x:hidden;overflow-y:scroll;position:absolute;right:0;z-index:1}.gantt_ver_scroll>div{width:1px;height:1px}.gantt_hor_scroll{height:0;background-color:transparent;width:100%;clear:both;overflow-x:scroll;overflow-y:hidden}.gantt_layout_cell .gantt_hor_scroll{position:absolute}.gantt_hor_scroll>div{width:5000px;height:1px}.gantt_tree_icon,.gantt_tree_indent{flex-grow:0;flex-shrink:0}.gantt_tree_indent{width:15px;height:100%}.gantt_tree_content,.gantt_tree_icon{vertical-align:top}.gantt_tree_icon{width:28px;height:100%;background-repeat:no-repeat;background-position:50%}.gantt_tree_content{height:100%;white-space:nowrap;min-width:0}.gantt_tree_icon.gantt_open{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAYAAABWzo5XAAAAWUlEQVQ4T2NkoBJgpJI5DCPVoJaWlv+EwrCmpgYcPHjDCGRQdXU1TrNaW1sZyDKIkZGR4f9/hCMHziCQS9AByGUD5yKYa6gWRujeI8lrVElHhAxBlh/GmRYA5MZIE4VV1O8AAAAASUVORK5CYII=);width:18px;cursor:pointer}.gantt_tree_icon.gantt_close{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAYAAABWzo5XAAAATElEQVQ4T2NkoBJgpJI5DCPVoJaWlv+EwrCmpgYcPHjDCGRQdXU1TrNaW1sZhrhBjIyYIfD//3+GYeA1XNFGkteoko4IGYIsP4wzLQBu8jwTv5HhogAAAABJRU5ErkJggg==);width:18px;cursor:pointer}.gantt_tree_icon.gantt_blank{width:18px}.gantt_tree_icon.gantt_folder_open{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAYAAABWzo5XAAAB30lEQVQ4T2NkQAKnZyn9R+bjY5um3WNElodz0A0xSbqMas6/nwzf/3AwcLL8YPjxYhvDlR11DMiGoRgkp63OIGY0ieHPt7cMF9ZGwQ0yjj0EZv/4L8TAwfiO4f+3awzn1mbgNsgkdidEM6sU3JA/Hy+jGhq+jOH/n09EGoTsKZihQK+dWWDCYBQ8AyxLnIugBv3/9RbMArmAkUuL4exiOwYD/26w2IWNpbi9Zhy5gYHh3zewxn9/PjMw/3nDwPD7HQODsDdY89nlAQw6Hk1gNt7ABjkb2YD/f78w/P3xloFFLoth8cRsBi2xp8QZZOxdDnYBzACQzb+/f2BgUywAB7iyaRA89DiFDVBchRL9Rs6RYBfADADRf398ZuDUrIUYZB6GiIZ/fxh4pP0YLm5IAIcVikH61m4YhjD++cbArtUI1oDson9/fjDwqqQxXFodgGmQlpEZ2CCQKyAmfgIG/i8GDt1u0gxS19IE6we54v//P2BDQABmkKKhF8JrQBZOF4EMghsC0kKuQZICXxj4xbQhroECRkYWoIvawYEtp20NF2dm42dgk4ljuLk5AjWMQCpgJQDMQJgumEEo/oJyYCUASpkCU4hcpIAMFXfeBHYRehmEbDBWg5AVIBuKzyAAfjsXIj7TBm0AAAAASUVORK5CYII=)}.gantt_tree_icon.gantt_folder_closed{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAYAAABWzo5XAAAB90lEQVQ4T2NkQAKnZyn9R+bjY5um3WNElodzQIboWYUwsGnU4tR/Zp4+g6J1NQM/HzvDhe11DMiGoRhkErMHiyHMEDE2IQaQQZwcHAxqXvMZLq6LJMUgiCH//3xlYOSSJccgqAG/3oAN+vv7GwMLtxzDmSWOYBepe85kuLA+npCLmMEuYPj3neHfjxcQF/1+z8AibAU0yAVskIZbN8P5Tbm4DTKO2AI2AOQCxr+fwAb8+/2JgVXEAWzg2RU+EBc5VuEPbIPAhSgGMPwFuuznawZWuQSGxZPSGbTEnoINUrXJYbi0pwe3iww8m8AugBkAcsXv728Y2FXyGC6sDmJgZmZmYGNlZVC1TGRgYOZGMQw1HTlmgl0AM+D/ny9gNrtqMTi6QQaJC3Mw8Mm5gcU5pZzgYYWRIH/9+MzA+P8nMMC/AMPoK8O/P78YuHXrwLHEyMzGICnMCjHo3zcGDuV0sEtBCRPFIE1DB7ABkJiCGPL/3y8GHv0WuEEi/CwMwkru+A3S0DWBGwA2DGgICGAYpGALFsfpInUNTYa//xgYGKEGwAzjNugChxHIayAXicibMfxnZMdtkKTANwYeEV2G/0xsYMNANDjgJRIYHh4qhwQwMPrlVXUYGFl4GL7xeoLFUcIIpIiUYgRsKhDASgCUMgUmSQ5NNYMAK+sKIlqSof0AAAAASUVORK5CYII=)}.gantt_tree_icon.gantt_file{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAYAAABWzo5XAAAA/klEQVQ4T63Uyw5FMBAG4CliIcHOE9pIeBrCxou69py/yUgvnLRymogS85lOL4L+1ITu1HUtfdx5no04xFwvgPR9T3EckxDOd8rf913du64jGzOgcRxpWRYDQvB5nrSuK5VleSVsYwY0TRNt20ZRFKlgzuI4DgUVRWGMXMccCEHcgEkp1ZCQaZ7n/hACuUboA8YFDNkCR7+qKmqa5qqVk5E9azrGKDDUKwgCzBgAYHjOsiwcAsb14hqmafoOQhY8k+gnSeIPIYAb9xl7Bekgw1hrQcW+Q9Te+m6jIOjXJn6EhmFQm9anYfbatnUXJIJ9jxH+kX4C3J8XPilZ33wAwx73EyvYLYIAAAAASUVORK5CYII=)}.gantt_grid_head_cell .gantt_sort{position:absolute;right:5px;top:8px;width:7px;height:13px;background-repeat:no-repeat;background-position:50%}.gantt_grid_head_cell .gantt_sort.gantt_asc{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAcAAAANCAYAAABlyXS1AAAARUlEQVR4nGNgQAKGxib/GbABkIS7b8B/DAUwCRiGK0CXwFBAb1DfP/U/LszwHwi2X7qFgUEArBtdAVwCBmAKMCSQFSDzAWXXaOHsXeqkAAAAAElFTkSuQmCC)}.gantt_grid_head_cell .gantt_sort.gantt_desc{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAcAAAANCAYAAABlyXS1AAAARUlEQVR42mNgQAL1/VP/M2ADIIntF2/9x1AAlrh0C47hCmA60DFYwX88gIFGwNDY5D8uDFbg7hvwHx2jmIBTAlkB0e4BAEjlaNtBWJPnAAAAAElFTkSuQmCC)}.gantt_inserted,.gantt_updated{font-weight:700}.gantt_deleted{text-decoration:line-through}.gantt_invalid{background-color:#ffe0e0}.gantt_error{color:red}.gantt_status{right:1px;padding:5px 10px;background:hsla(0,0%,61%,.1);position:absolute;top:1px;transition:opacity .2s;opacity:0}.gantt_status.gantt_status_visible{opacity:1}#gantt_ajax_dots span{transition:opacity .2s;background-repeat:no-repeat;opacity:0}#gantt_ajax_dots span.gantt_dot_visible{opacity:1}.gantt_column_drag_marker{border:1px solid #cecece;opacity:.8;pointer-events:none}.gantt_grid_head_cell_dragged{border:1px solid #cecece;opacity:.3}.gantt_grid_target_marker{position:absolute;top:0;width:2px;height:100%;background-color:#4a8f43;transform:translateX(-1px)}.gantt_grid_target_marker:after,.gantt_grid_target_marker:before{display:block;content:"";position:absolute;left:-5px;width:0;height:0;border:6px solid transparent}.gantt_grid_target_marker:before{border-top-color:#4a8f43}.gantt_grid_target_marker:after{bottom:0;border-bottom-color:#4a8f43}.gantt_message_area{position:fixed;right:5px;width:250px;z-index:1000}.gantt-info{min-width:120px;padding:4px 4px 4px 20px;font-family:Tahoma;z-index:10000;margin:5px;margin-bottom:10px;transition:all .5s ease}.gantt-info.hidden{height:0;padding:0;border-width:0;margin:0;overflow:hidden}.gantt_modal_box{overflow:hidden;display:inline-block;min-width:250px;width:250px;text-align:center;position:fixed;z-index:20000;box-shadow:3px 3px 3px rgba(0,0,0,.07);font-family:Tahoma;border-radius:0;border:1px solid #a4bed4;background:#fff}.gantt_popup_title{border-top-left-radius:0;border-top-right-radius:0;border-width:0}.gantt_button,.gantt_popup_button{border:1px solid #a4bed4;height:24px;line-height:24px;display:inline-block;margin:0 5px;border-radius:4px;background:#fff;background-color:#f8f8f8;background-image:linear-gradient(0deg,#e6e6e6 0,#fff)}.gantt-info,.gantt_button,.gantt_popup_button{user-select:none;-webkit-user-select:none;-moz-user-select:-moz-none;cursor:pointer}.gantt_popup_text{overflow:hidden}.gantt_popup_controls{border-radius:6px;padding:10px}.gantt_popup_button{min-width:100px}div.dhx_modal_cover{background-color:#000;cursor:default;filter:progid:DXImageTransform.Microsoft.Alpha(opacity=20);opacity:.2;position:fixed;z-index:19999;left:0;top:0;width:100%;height:100%;border:none;zoom:1}.gantt-info img,.gantt_modal_box img{float:left;margin-right:20px}.gantt-alert-error,.gantt-confirm-error{border:1px solid red}.gantt_button input,.gantt_popup_button div{border-radius:4px;font-size:15px;box-sizing:content-box;padding:0;margin:0;vertical-align:top}.gantt_popup_title{border-bottom:1px solid #a4bed4;height:40px;line-height:40px;font-size:20px}.gantt_popup_text{margin:15px 15px 5px;font-size:14px;color:#000;min-height:30px;border-radius:0}.gantt-error,.gantt-info{font-size:14px;color:#000;box-shadow:3px 3px 3px rgba(0,0,0,.07);padding:0;background-color:#fff;border-radius:3px;border:1px solid #fff}.gantt-info div{padding:5px 10px;background-color:#fff;border-radius:3px;border:1px solid #a4bed4}.gantt-error{background-color:#d81b1b;border:1px solid #ff3c3c}.gantt-error div{background-color:#d81b1b;border:1px solid #940000;color:#fff}.gantt-warning{background-color:#ffa000;border:1px solid #ffb333}.gantt-warning div{background-color:#ffa000;border:1px solid #b37000;color:#fff}.gantt_data_area div,.gantt_grid div{-ms-touch-action:none;-webkit-tap-highlight-color:rgba(0,0,0,0)}.gantt_data_area{position:relative;overflow-x:hidden;overflow-y:hidden;-moz-user-select:-moz-none;-webkit-user-select:none;user-select:none}.gantt_links_area{position:absolute;left:0;top:0}.gantt_side_content,.gantt_task_content,.gantt_task_progress{line-height:inherit;overflow:hidden;height:100%}.gantt_task_content{font-size:12px;color:#1e2022;width:100%;top:0;cursor:pointer;position:absolute;white-space:nowrap;text-align:center}.gantt_task_progress{text-align:center;z-index:0;background:#5aa0d3;background-color:#82b7de;background-image:linear-gradient(0deg,#abcee8 0,#5aa0d3 36%,#bfdaee)}.gantt_task_progress_wrapper{border-radius:inherit;position:relative;width:100%;height:100%;overflow:hidden}.gantt_task_line{border-radius:0;position:absolute;box-sizing:border-box;background-color:#eff6fb;border:1px solid #3588c5;-webkit-user-select:none;-moz-user-select:none;-moz-user-select:-moz-none}.gantt_task_line.gantt_drag_move div{cursor:move}.gantt_touch_move,.gantt_touch_progress .gantt_touch_resize{transform:scale(1.02,1.1);transform-origin:50%}.gantt_touch_progress .gantt_task_progress_drag,.gantt_touch_resize .gantt_task_drag{transform:scaleY(1.3);transform-origin:50%}.gantt_side_content{position:absolute;white-space:nowrap;color:#6e6e6e;top:0;font-size:11px}.gantt_side_content.gantt_left{right:100%;padding-right:20px}.gantt_side_content.gantt_right{left:100%;padding-left:20px}.gantt_side_content.gantt_link_crossing{bottom:6.75px;top:auto}.gantt_link_arrow,.gantt_task_link .gantt_line_wrapper{position:absolute;cursor:pointer}.gantt_line_wrapper div{background-color:#4a8f43}.gantt_task_link:hover .gantt_line_wrapper div{box-shadow:0 0 5px 0 #4a8f43}.gantt_task_link div.gantt_link_arrow{background-color:transparent;border-style:solid;width:0;height:0}.gantt_link_control{position:absolute;width:20px;top:0}.gantt_link_control div{display:none;cursor:pointer;box-sizing:border-box;position:relative;top:50%;margin-top:-7.5px;vertical-align:middle;border:1px solid #929292;border-radius:6.5px;height:13px;width:13px;background-color:#f0f0f0}.gantt_link_control.task_right div.gantt_link_point{margin-left:7px}.gantt_link_control div:hover{background-color:#fff}.gantt_link_control.task_left{left:-20px}.gantt_link_control.task_right{right:-20px}.gantt_link_target .gantt_link_control div,.gantt_task_line.gantt_drag_move .gantt_link_control div,.gantt_task_line.gantt_drag_move .gantt_task_drag,.gantt_task_line.gantt_drag_move .gantt_task_progress_drag,.gantt_task_line.gantt_drag_progress .gantt_link_control div,.gantt_task_line.gantt_drag_progress .gantt_task_drag,.gantt_task_line.gantt_drag_progress .gantt_task_progress_drag,.gantt_task_line.gantt_drag_resize .gantt_link_control div,.gantt_task_line.gantt_drag_resize .gantt_task_drag,.gantt_task_line.gantt_drag_resize .gantt_task_progress_drag,.gantt_task_line.gantt_selected .gantt_link_control div,.gantt_task_line.gantt_selected .gantt_task_drag,.gantt_task_line.gantt_selected .gantt_task_progress_drag,.gantt_task_line:hover .gantt_link_control div,.gantt_task_line:hover .gantt_task_drag,.gantt_task_line:hover .gantt_task_progress_drag{display:block}.gantt_link_source,.gantt_link_target{box-shadow:0 0 3px #0070fe}.gantt_link_target.link_finish_allow,.gantt_link_target.link_start_allow{box-shadow:0 0 3px #6eb867}.gantt_link_target.link_finish_deny,.gantt_link_target.link_start_deny{box-shadow:0 0 3px #e87e7b}.link_finish_allow .gantt_link_control.task_end_date div,.link_start_allow .gantt_link_control.task_start_date div{background-color:#6eb867;border-color:#4a8f43}.link_finish_deny .gantt_link_control.task_end_date div,.link_start_deny .gantt_link_control.task_start_date div{background-color:#e87e7b;border-color:#dd3e3a}.gantt_link_arrow_right{border-width:4px 0 4px 8px;border-top-color:transparent!important;border-right-color:transparent!important;border-bottom-color:transparent!important;border-left-color:#4a8f43}.gantt_link_arrow_left{border-width:4px 8px 4px 0;margin-top:-1px;border-top-color:transparent!important;border-right-color:#4a8f43;border-bottom-color:transparent!important;border-left-color:transparent!important}.gantt_link_arrow_up{border-width:0 4px 8px;border-color:transparent transparent #4a8f43;border-top-color:transparent!important;border-right-color:transparent!important;border-bottom-color:#4a8f43;border-left-color:transparent!important}.gantt_link_arrow_down{border-width:4px 8px 0 4px;border-top-color:#4a8f43;border-right-color:transparent!important;border-bottom-color:transparent!important;border-left-color:transparent!important}.gantt_task_drag,.gantt_task_progress_drag{cursor:ew-resize;display:none;position:absolute}.gantt_task_drag.task_right{cursor:e-resize}.gantt_task_drag.task_left{cursor:w-resize}.gantt_task_drag{height:100%;width:8px;z-index:1;top:-1px}.gantt_task_drag.task_left{left:-7px}.gantt_task_drag.task_right{right:-7px}.gantt_task_progress_drag{height:8px;width:8px;bottom:-4px;margin-left:-4px;background-position:bottom;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAICAYAAADED76LAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoV2luZG93cykiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6NDNGNzQ1MTZCQkRBMTFFMjlBMjRBRkU0RkNCMTUzNkUiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6NDNGNzQ1MTdCQkRBMTFFMjlBMjRBRkU0RkNCMTUzNkUiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo0M0Y3NDUxNEJCREExMUUyOUEyNEFGRTRGQ0IxNTM2RSIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDo0M0Y3NDUxNUJCREExMUUyOUEyNEFGRTRGQ0IxNTM2RSIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PrBLI3EAAACISURBVHjafE07DkMhDAuftQdgYuCWbZ9a0WtwGJC4BgMbYmVGaZLpqWpryZFjOwrACSmlSLzCN1DwrLUik/TtM3yUUnDOiWMMZE3enTNF4gghRO89KKXkABGh9w6ttcPSHp1zsNaCvbcUjDHAHhVemg1rrVxprYWs2ZOMR84ZfoGfXuAP3gIMABorQUvC1invAAAAAElFTkSuQmCC);background-repeat:no-repeat;z-index:1}.gantt_task_progress_drag:hover{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAICAYAAADED76LAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAUklEQVQY04XNsQ2AMAxE0W+oGYjZCAIxmuk9gze5VCmIIvLaf9KtfD3ADrwM3JmpzBRw9PGKCDURIaC0eLq7eu4uoBggSaNLzIyFCQM0G2x/gwpRwTYDaW9lwQAAAABJRU5ErkJggg==)}.gantt_link_tooltip{box-shadow:3px 3px 3px #888;background-color:#fff;border-left:1px dotted #cecece;border-top:1px dotted #cecece;font-family:Tahoma;font-size:8pt;color:#444;padding:6px;line-height:20px}.gantt_link_direction{height:0;border:0 none #4a8f43;border-bottom-style:dashed;border-bottom-width:2px;transform-origin:0 0;-ms-transform-origin:0 0;-webkit-transform-origin:0 0;z-index:2;margin-left:1px;position:absolute}.gantt_grid_data .gantt_row.gantt_selected,.gantt_grid_data .gantt_row.odd.gantt_selected,.gantt_task_row.gantt_selected{background-color:#ffe6b1!important;border-bottom-color:#ffc341}.gantt_task_row.gantt_selected{background-color:#ffebc1;background-image:linear-gradient(0deg,#ffe09d 0,#ffeabb);border-top-color:#ffc341}.gantt_task_row.gantt_selected .gantt_task_cell{border-right-color:#ffb30e;border-right-color:#ffce65}.gantt_task_line.gantt_selected{box-shadow:0 0 5px #5aa0d3}.gantt_task_line.gantt_project.gantt_selected{box-shadow:0 0 5px #9ab9f1}.gantt_task_line.gantt_milestone{visibility:hidden;background-color:#db7dc5;border:0 solid #cd49ae;box-sizing:content-box;-moz-box-sizing:content-box}.gantt_task_line.gantt_milestone div{visibility:visible}.gantt_task_line.gantt_milestone .gantt_task_content{background:inherit;border:inherit;border-width:1px;border-radius:inherit;box-sizing:border-box;-moz-box-sizing:border-box;transform:rotate(45deg)}.gantt_task_line.gantt_task_inline_color{border-color:#999}.gantt_task_line.gantt_task_inline_color .gantt_task_progress{background-color:#363636;opacity:.2}.gantt_task_line.gantt_task_inline_color.gantt_project.gantt_selected,.gantt_task_line.gantt_task_inline_color.gantt_selected{box-shadow:0 0 5px #999}.gantt_task_link.gantt_link_inline_color:hover .gantt_line_wrapper div{box-shadow:0 0 5px 0 #999}.gantt_critical_task{background-color:#e63030;border-color:#9d3a3a}.gantt_critical_task .gantt_task_progress{background-color:rgba(0,0,0,.4)}.gantt_critical_link .gantt_line_wrapper>div{background-color:#e63030}.gantt_critical_link .gantt_link_arrow{border-color:#e63030}.gantt_btn_set:focus,.gantt_cell:focus,.gantt_grid_head_cell:focus,.gantt_popup_button:focus,.gantt_qi_big_icon:focus,.gantt_row:focus{box-shadow:inset 0 0 1px 1px #4d90fe}.gantt_split_parent,.gantt_split_subproject{opacity:.1;pointer-events:none}.gantt_rollup_child .gantt_link_control,.gantt_rollup_child:hover .gantt_link_control{display:none}.gantt_unselectable,.gantt_unselectable div{-webkit-user-select:none;-moz-user-select:none;-moz-user-select:-moz-none}.gantt_cal_light{-webkit-tap-highlight-color:transparent;background-color:#eff6fb;border-radius:0;font-family:Tahoma;font-size:11px;border:1px solid #a4bed4;color:#42464b;position:absolute;z-index:10001;width:550px;height:250px;box-shadow:3px 3px 3px rgba(0,0,0,.07)}.gantt_cal_light_wide{width:650px}.gantt_cal_light select{font-family:Tahoma;border:1px solid #a4bed4;font-size:11px;padding:2px;margin:0}.gantt_cal_ltitle{padding:7px 10px;overflow:hidden;-webkit-border-top-left-radius:0;-webkit-border-bottom-left-radius:0;-webkit-border-top-right-radius:0;-webkit-border-bottom-right-radius:0;-moz-border-radius-topleft:0;-moz-border-radius-bottomleft:0;-moz-border-radius-topright:0;-moz-border-radius-bottomright:0;border-top-left-radius:0;border-bottom-left-radius:0;border-top-right-radius:0;border-bottom-right-radius:0}.gantt_cal_ltitle,.gantt_cal_ltitle span{white-space:nowrap}.gantt_cal_lsection{color:#727272;font-weight:700;padding:12px 0 5px 10px}.gantt_cal_lsection .gantt_fullday{float:right;margin-right:5px;font-size:12px;font-weight:400;line-height:20px;vertical-align:top;cursor:pointer}.gantt_cal_lsection{font-size:13px}.gantt_cal_ltext{padding:2px 10px;overflow:hidden}.gantt_cal_ltext textarea{overflow-y:auto;overflow-x:hidden;font-family:Tahoma;font-size:11px;box-sizing:border-box;border:1px solid #a4bed4;height:100%;width:100%;outline:none!important;resize:none}.gantt_section_constraint [data-constraint-time-select]{margin-left:20px}.gantt_time{font-weight:700}.gantt_cal_light .gantt_title{padding-left:10px}.gantt_cal_larea{border:1px solid #a4bed4;border-left:none;border-right:none;background-color:#fff;overflow:hidden;height:1px}.gantt_btn_set{margin:10px 7px 5px 10px;padding:2px 25px 2px 10px;float:left;border-radius:4px;border:1px solid #a4bed4;height:26px;color:#42464b;background:#fff;background-color:#f8f8f8;background-image:linear-gradient(0deg,#e6e6e6 0,#fff);box-sizing:border-box;cursor:pointer}.gantt_hidden{display:none}.gantt_btn_set div{float:left;font-size:13px;height:20px;line-height:20px;background-repeat:no-repeat;vertical-align:middle}.gantt_save_btn{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoV2luZG93cykiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6QkE5Nzc4RENDMzAzMTFFMjk4QjNBODhDMUM4QUUwNEQiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6QkE5Nzc4RERDMzAzMTFFMjk4QjNBODhDMUM4QUUwNEQiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDpCQTk3NzhEQUMzMDMxMUUyOThCM0E4OEMxQzhBRTA0RCIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDpCQTk3NzhEQkMzMDMxMUUyOThCM0E4OEMxQzhBRTA0RCIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/Pr5Ot2UAAAFoSURBVHjapFO7SgNRED0rxkjEELbcQksLBUMg4EfkG7YV/AFTpBAUfNQisVDQD7CQlBaWwoZ8gNEiFttmg3GTfbF6JtzFTUJYyIHhDnfOnJm5Dy2OYywDjQJnF5ex/dXDweENNtaAzT/jur46IY1D4McHvv3J+nZ7BGNrG436sSaU3ucHqtUqzP1sVcflMizLEl8EwjBEFEXwomwC5DInEeDGaDSC62cTIJc5iUAQBGJukE1A8YkVNYLv++h232WMRUYOuakRlOLTwzU8z1tYPZ/Po1QqJR0kAgQDWTEjwLaIWq0GwzDmJtm2jVarNSvAeeQQXVe6ME1Tgs1mMyXA2GAwQKFQmH8G/X4fjuOgWCxKkP40yMnlcukO1MNgAivoui5B+tMgh3H1DuQa66fnaLfbGA6HMgY7oNGfNnL+v0RN/cbnl9f46qSBSqUiM9J4ZQSvVgl0Oh1pf2d3D4/3d5q27Hf+FWAAc90EKSR5k78AAAAASUVORK5CYII=);margin-top:2px;width:21px}.gantt_cancel_btn{margin-top:2px;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoV2luZG93cykiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6QzU4NTQ3NUZDMzAzMTFFMkE0MjRGNTQzQjE0MTNDQkIiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6QzU4NTQ3NjBDMzAzMTFFMkE0MjRGNTQzQjE0MTNDQkIiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDpDNTg1NDc1REMzMDMxMUUyQTQyNEY1NDNCMTQxM0NCQiIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDpDNTg1NDc1RUMzMDMxMUUyQTQyNEY1NDNCMTQxM0NCQiIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PkVB3hoAAAEYSURBVHjapJM9CsJAEIUTFStbQRA8gKCNKSIIeohUVraC9oKiGBRsBDvBylbwEkJQCys9gJUgeIOAxDfwEpYNpsmDL7PZ+cn+TMwgCIw0yhgplZPH3bbVuRqYgiYogxe4ABc8wqD69RpbQR6MwQ04TDZoHc6LP/tvC2uw4Fi+Vgcmrct58W9iW4BaYAB80OGSQ8my7xz7jDsAT11Bn3alJYvUa1pp8VGBNu0uIVm2s9fiowJF8OWJ/0sWPRlX1At8eLqlhGRRhXEfvcCJtpeQLOpq8VGBLe04Ibmh+Ld6AY8HWOBVzUCVvio780z/LrxCtQ9EQ+5tBOZElRzeUmmqWCfKlyfAAkfw5vyb7xb9vlrATPs7/wQYAISgQGDaq6hUAAAAAElFTkSuQmCC);width:20px}.gantt_delete_btn{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoV2luZG93cykiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6RTA3M0M1MzJDMzAzMTFFMkE5ODZDRjhENzQ2MUZFNzkiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6RTA3M0M1MzNDMzAzMTFFMkE5ODZDRjhENzQ2MUZFNzkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDpFMDczQzUzMEMzMDMxMUUyQTk4NkNGOEQ3NDYxRkU3OSIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDpFMDczQzUzMUMzMDMxMUUyQTk4NkNGOEQ3NDYxRkU3OSIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/Pplu0sEAAAErSURBVHja3FOxboMwED0nIQNbJoaOZM0YyMhGqwz8BOQ3mm5I/AHwCayoGVlhZUSMHTIhsSCEhOtzawRIlZDY+qTTs893z6fzmVBKYQ12YhEEweB0HAf3tCxLUFUVXWSeiDGIzW/ynRE9HA7coihCBtd1AVn40TCO2X1ewbthGCBJEiiKAtvtFggh0HUdWJYFfd9zez6f3JckiS1EhEDmeZ623+9BlmWejCaAfWqahou0bQumab7MK9DP5zM9nU5c4Hg8ch4nF0XBOc9zuF6vg/pm3pw0TSdNDcPwp8QsG2LiOIY/BZagqqp1AmP8M4Gvuq5B1/XJqNq2zVnTNMBzjBsLEHxnHBrf91/Z/nPBpW+32+0hPuFODAt79wtbfiwQuLD4x6SCNfgWYAAfQYJFsOV+5AAAAABJRU5ErkJggg==);margin-top:2px;width:20px}.gantt_cal_cover{width:100%;height:100%;position:fixed;z-index:10000;top:0;left:0;background-color:#000;opacity:.1;filter:progid:DXImageTransform.Microsoft.Alpha(opacity=10)}.gantt_custom_button{padding:0 3px;font-family:Tahoma;font-size:11px;font-weight:400;margin-right:10px;margin-top:-5px;cursor:pointer;float:right;height:21px;width:90px;border:1px solid #cecece;text-align:center;border-radius:4px}.gantt_custom_button div{cursor:pointer;float:none;height:21px;line-height:21px;vertical-align:middle}.gantt_custom_button div:first-child{display:none}.gantt_cal_light_wide{width:580px;padding:2px 4px}.gantt_cal_light_wide .gantt_cal_larea{box-sizing:border-box;border:1px solid #a4bed4}.gantt_cal_light_wide .gantt_cal_lsection{border:0;float:left;text-align:right;width:80px;height:20px;padding:5px 10px 0 0}.gantt_cal_light_wide .gantt_wrap_section{position:relative;padding:10px 0;overflow:hidden;border-bottom:1px solid #ebebeb}.gantt_cal_light_wide .gantt_section_time{overflow:hidden;padding-top:2px!important;padding-right:0;height:20px!important}.gantt_cal_light_wide .gantt_cal_ltext{padding-right:0}.gantt_cal_light_wide .gantt_cal_larea{padding:0 10px;width:100%}.gantt_cal_light_wide .gantt_section_time{background:transparent}.gantt_cal_light_wide .gantt_cal_checkbox label{padding-left:0}.gantt_cal_light_wide .gantt_cal_lsection .gantt_fullday{float:none;margin-right:0;font-weight:700;cursor:pointer}.gantt_cal_light_wide .gantt_custom_button{position:absolute;top:0;right:0;margin-top:2px}.gantt_cal_light_wide .gantt_repeat_right{margin-right:55px}.gantt_cal_light_wide.gantt_cal_light_full{width:738px}.gantt_cal_wide_checkbox input{margin-top:8px;margin-left:14px}.gantt_cal_light input{font-size:11px}.gantt_section_time{background-color:#fff;white-space:nowrap;padding:2px 10px 5px;padding-top:2px!important}.gantt_section_time .gantt_time_selects{float:left;height:25px}.gantt_section_time .gantt_time_selects select{height:23px;padding:2px;border:1px solid #a4bed4}.gantt_duration{width:100px;height:23px;float:left;white-space:nowrap;margin-left:20px;line-height:23px}.gantt_duration .gantt_duration_dec,.gantt_duration .gantt_duration_inc,.gantt_duration .gantt_duration_value{box-sizing:border-box;text-align:center;vertical-align:top;height:100%;border:1px solid #a4bed4}.gantt_duration .gantt_duration_value{width:40px;padding:3px 4px;border-left-width:0;border-right-width:0}.gantt_duration .gantt_duration_value.gantt_duration_value_formatted{width:70px}.gantt_duration .gantt_duration_dec,.gantt_duration .gantt_duration_inc{width:20px;padding:1px;padding-bottom:1px;background:#fff;background-color:#f8f8f8;background-image:linear-gradient(0deg,#e6e6e6 0,#fff)}.gantt_duration .gantt_duration_dec{-moz-border-top-left-radius:4px;-moz-border-bottom-left-radius:4px;-webkit-border-top-left-radius:4px;-webkit-border-bottom-left-radius:4px;border-top-left-radius:4px;border-bottom-left-radius:4px}.gantt_duration .gantt_duration_inc{margin-right:4px;-moz-border-top-right-radius:4px;-moz-border-bottom-right-radius:4px;-webkit-border-top-right-radius:4px;-webkit-border-bottom-right-radius:4px;border-top-right-radius:4px;border-bottom-right-radius:4px}.gantt_resources{max-height:150px;height:auto;overflow-y:auto}.gantt_resource_row{display:block;padding:10px 0;border-bottom:1px solid #ebebeb;cursor:pointer}.gantt_resource_row input[type=checkbox]:not(:checked),.gantt_resource_row input[type=checkbox]:not(:checked)~div{opacity:.5}.gantt_resource_toggle{vertical-align:middle}.gantt_resources_filter .gantt_resources_filter_input{padding:1px 2px;box-sizing:border-box}.gantt_resources_filter .switch_unsetted{vertical-align:middle}.gantt_resource_cell{display:inline-block}.gantt_resource_cell.gantt_resource_cell_checkbox{width:24px;max-width:24px;min-width:24px;vertical-align:middle}.gantt_resource_cell.gantt_resource_cell_label{width:40%;max-width:40%;vertical-align:middle}.gantt_resource_cell.gantt_resource_cell_value{width:30%;max-width:30%;vertical-align:middle}.gantt_resource_cell.gantt_resource_cell_value input,.gantt_resource_cell.gantt_resource_cell_value select{width:80%;vertical-align:middle;padding:1px 2px;box-sizing:border-box}.gantt_resource_cell.gantt_resource_cell_unit{width:10%;max-width:10%;vertical-align:middle}.gantt_resource_early_value{opacity:.8;font-size:.9em}.gantt_cal_quick_info{border:1px solid #a4bed4;border-radius:0;position:absolute;z-index:300;box-shadow:3px 3px 3px rgba(0,0,0,.07);background-color:#fff;width:300px;transition:left .5s ease,right .5s;-moz-transition:left .5s ease,right .5s;-webkit-transition:left .5s ease,right .5s;-o-transition:left .5s ease,right .5s}.gantt_no_animate{transition:none;-moz-transition:none;-webkit-transition:none;-o-transition:none}.gantt_cal_quick_info.gantt_qi_left .gantt_qi_big_icon{float:right}.gantt_cal_qi_title{-webkit-border-top-left-radius:0;-webkit-border-bottom-left-radius:0;-webkit-border-top-right-radius:0;-webkit-border-bottom-right-radius:0;-moz-border-radius-topleft:0;-moz-border-radius-bottomleft:0;-moz-border-radius-topright:0;-moz-border-radius-bottomright:0;border-top-left-radius:0;border-bottom-left-radius:0;border-top-right-radius:0;border-bottom-right-radius:0;padding:5px 0 8px 12px;color:#1e2022;box-shadow:inset 0 1px 1px #fff;background-color:#dfedff;background:-webkit-gradient(linear,left top,left bottom,color-stop(0,#e4f0ff),color-stop(50%,#dfedff),color-stop(100%,#d5e8ff));background-image:-o-linear-gradient(top,#e4f0ff 0,#dfedff 60%,#d5e8ff 100%);background-position:0 1px;background-repeat:repeat-x;border-bottom:1px solid #a4bed4}.gantt_cal_qi_tdate{font-size:14px;font-weight:700}.gantt_cal_qi_tcontent{font-size:11px}.gantt_cal_qi_content{padding:16px 8px;font-size:13px;color:#1e2022;overflow:hidden}.gantt_cal_qi_controls{-webkit-border-top-left-radius:0;-webkit-border-bottom-left-radius:0;-webkit-border-top-right-radius:0;-webkit-border-bottom-right-radius:0;-moz-border-radius-topleft:0;-moz-border-radius-bottomleft:0;-moz-border-radius-topright:0;-moz-border-radius-bottomright:0;border-top-left-radius:0;border-bottom-left-radius:0;border-top-right-radius:0;border-bottom-right-radius:0;padding-left:7px}.gantt_cal_qi_controls .gantt_menu_icon{margin-top:3px;background-repeat:no-repeat}.gantt_cal_qi_controls .gantt_menu_icon.icon_edit{width:20px;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAAB3RJTUUH3QYFDhEuX3ujFgAAAFNJREFUOMvt0zEOACAIA0DksTyqn8XJTRTKZGJXyaWEKPKTCQAH4Ls37cItcDUzsxHNDLZNhCq7Gt1wh9ErV7EjyGAhyGLphlnsClWuS32rn0czAV+sNUIROnQoAAAAAElFTkSuQmCC)}.gantt_cal_qi_controls .gantt_menu_icon.icon_delete{width:20px;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoV2luZG93cykiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6RTA3M0M1MzJDMzAzMTFFMkE5ODZDRjhENzQ2MUZFNzkiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6RTA3M0M1MzNDMzAzMTFFMkE5ODZDRjhENzQ2MUZFNzkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDpFMDczQzUzMEMzMDMxMUUyQTk4NkNGOEQ3NDYxRkU3OSIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDpFMDczQzUzMUMzMDMxMUUyQTk4NkNGOEQ3NDYxRkU3OSIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/Pplu0sEAAAErSURBVHja3FOxboMwED0nIQNbJoaOZM0YyMhGqwz8BOQ3mm5I/AHwCayoGVlhZUSMHTIhsSCEhOtzawRIlZDY+qTTs893z6fzmVBKYQ12YhEEweB0HAf3tCxLUFUVXWSeiDGIzW/ynRE9HA7coihCBtd1AVn40TCO2X1ewbthGCBJEiiKAtvtFggh0HUdWJYFfd9zez6f3JckiS1EhEDmeZ623+9BlmWejCaAfWqahou0bQumab7MK9DP5zM9nU5c4Hg8ch4nF0XBOc9zuF6vg/pm3pw0TSdNDcPwp8QsG2LiOIY/BZagqqp1AmP8M4Gvuq5B1/XJqNq2zVnTNMBzjBsLEHxnHBrf91/Z/nPBpW+32+0hPuFODAt79wtbfiwQuLD4x6SCNfgWYAAfQYJFsOV+5AAAAABJRU5ErkJggg==)}.gantt_qi_big_icon{font-size:13px;border-radius:4px;color:#42464b;background:#fff;background-color:#f8f8f8;background-image:linear-gradient(0deg,#e6e6e6 0,#fff);margin:5px 9px 8px 0;min-width:60px;line-height:26px;vertical-align:middle;padding:0 10px 0 5px;cursor:pointer;border:1px solid #a4bed4}.gantt_cal_qi_controls div{float:left;height:26px;text-align:center;line-height:26px}.gantt_cal_quick_info.gantt_qi_hidden{display:none}.gantt_tooltip{padding:10px;position:absolute;z-index:50;white-space:nowrap}.gantt_resource_marker{position:absolute;text-align:center;font-size:14px;color:#fff}.gantt_resource_marker_ok{background:rgba(78,208,134,.75)}.gantt_resource_marker_overtime{background:hsla(0,100%,76%,.69)}.gantt_histogram_label{width:100%;height:100%;position:absolute;z-index:1;font-weight:700;font-size:11px}.gantt_histogram_fill{background-color:rgba(41,157,180,.2);width:100%;position:absolute;bottom:0}.gantt_histogram_hor_bar{height:1px;margin-top:-1px}.gantt_histogram_hor_bar,.gantt_histogram_vert_bar{position:absolute;background:#299db4;margin-left:-1px}.gantt_histogram_vert_bar{width:1px}.gantt_histogram_cell{position:absolute;text-align:center;font-size:11px;color:#000}.gantt_marker{height:100%;width:2px;top:0;position:absolute;text-align:center;background-color:rgba(255,0,0,.4);box-sizing:border-box}.gantt_marker .gantt_marker_content{padding:5px;background:inherit;color:#fff;position:absolute;font-size:12px;line-height:12px;opacity:.8}.gantt_marker_area{position:absolute;top:0;left:0}.gantt_grid_editor_placeholder{position:absolute}.gantt_grid_editor_placeholder>div,.gantt_grid_editor_placeholder input,.gantt_grid_editor_placeholder select{width:100%;height:100%;box-sizing:border-box}.gantt_row_placeholder div{opacity:.5}.gantt_row_placeholder .gantt_add,.gantt_row_placeholder .gantt_file{display:none}.gantt_drag_marker.gantt_grid_dnd_marker{background-color:transparent;transition:all .1s ease}.gantt_grid_dnd_marker_line{height:4px;width:100%;background-color:#3498db}.gantt_grid_dnd_marker_line:before{background:#fff;width:12px;height:12px;box-sizing:border-box;border:3px solid #3498db;border-radius:6px;content:"";line-height:1px;display:block;position:absolute;margin-left:-11px;margin-top:-4px;pointer-events:none}.gantt_grid_dnd_marker_folder{height:100%;width:100%;position:absolute;pointer-events:none;box-sizing:border-box;box-shadow:inset 0 0 0 2px #3f98db;background:transparent}.gantt_overlay_area{display:none}.gantt_overlay,.gantt_overlay_area{position:absolute;height:inherit;width:inherit;top:0;left:0}.gantt_click_drag_rect{position:absolute;left:0;top:0;outline:1px solid #3f98db;background-color:rgba(52,152,219,.3)}.gantt_timeline_move_available,.gantt_timeline_move_available *{cursor:move}.gantt_rtl .gantt_grid{text-align:right}.gantt_rtl .gantt_cell,.gantt_rtl .gantt_row{flex-direction:row-reverse}.gantt_layout_content{width:100%;overflow:auto;box-sizing:border-box}.gantt_layout_cell{position:relative;box-sizing:border-box}.gantt_layout_cell>.gantt_layout_header{background:#33aae8;color:#fff;font-size:17px;padding:5px 10px;box-sizing:border-box}.gantt_layout_header.collapsed_x{background:#a9a9a9}.gantt_layout_header.collapsed_x .gantt_header_arrow:before{content:"\21E7"}.gantt_layout_header.collapsed_y{background:#a9a9a9}.gantt_layout_header.collapsed_y .gantt_header_arrow:before{content:"\21E9"}.gantt_layout_header{cursor:pointer}.gantt_layout_header .gantt_header_arrow{float:right;text-align:right}.gantt_layout_header .gantt_header_arrow:before{content:"\21E6"}.gantt_layout_header.vertical .gantt_header_arrow:before{content:"\21E7"}.gantt_layout_outer_scroll_vertical .gantt_layout_content{overflow-y:hidden}.gantt_layout_outer_scroll_horizontal .gantt_layout_content{overflow-x:hidden}.gantt_layout_x>.gantt_layout_cell{display:inline-block;vertical-align:top}.gantt_layout_x{white-space:nowrap}.gantt_resizing{opacity:.7;background:#f2f2f2}.gantt_layout_cell_border_right.gantt_resizer{overflow:visible;border-right:0}.gantt_resizer{cursor:e-resize;position:relative}.gantt_resizer_y{cursor:n-resize}.gantt_resizer_stick{background:#33aae8;z-index:9999;position:absolute;top:0;width:100%}.gantt_resizer_x .gantt_resizer_x{position:absolute;width:20px;height:100%;margin-left:-10px;top:0;left:0;z-index:1}.gantt_resizer_y .gantt_resizer_y{position:absolute;height:20px;width:100%;top:-10px;left:0;z-index:1}.gantt_resizer_error{background:#cd5c5c!important}.gantt_layout_cell_border_left{border-left:1px solid #a4bed4}.gantt_layout_cell_border_right{border-right:1px solid #a4bed4}.gantt_layout_cell_border_top{border-top:1px solid #a4bed4}.gantt_layout_cell_border_bottom{border-bottom:1px solid #a4bed4}.gantt_layout_cell_border_transparent{border-color:transparent}.gantt_window{position:absolute;top:50%;left:50%;z-index:999999999;background:#fff}.gantt_window_content{position:relative}.gantt_window_content_header{background:#39c;color:#fff;height:33px;padding:10px 10px 0;border-bottom:2px solid #fff;position:relative}.gantt_window_content_header_text{padding-left:10%}.gantt_window_content_header_buttons{position:absolute;top:10px;right:10px}.gantt_window_content_header_buttons:hover{color:#000;cursor:pointer}.gantt_window_content_resizer{position:absolute;width:15px;height:15px;bottom:0;line-height:15px;right:-1px;text-align:center;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA8AAAAPCAMAAAAMCGV4AAAABlBMVEUAAAAAAAClZ7nPAAAAAXRSTlMAQObYZgAAABZJREFUeAFjIAUwUshlpJDLSIhLGAAACQ4AFk79JaMAAAAASUVORK5CYII=);cursor:nw-resize;z-index:999}.gantt_window_content_frame{position:absolute;top:0;left:0;width:100%;height:100%;background:rgba(0,0,0,.1);z-index:9999}.gantt_window_drag{cursor:pointer!important}.gantt_window_resizing{overflow:visible}.gantt_window_resizing_body{overflow:hidden!important}.gantt_window_modal{background:rgba(0,0,0,.1);z-index:9999;top:0;left:0;width:100%;height:100%;position:fixed}.gantt_cal_light,.gantt_cal_quick_info,.gantt_container,.gantt_message_area,.gantt_modal_box,.gantt_tooltip{text-rendering:optimizeLegibility;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.gantt_noselect{-moz-user-select:-moz-none;-webkit-user-select:none;-ms-user-select:none;user-select:none}.gantt_noselect .gantt_grid_data .gantt_row.odd:hover,.gantt_noselect .gantt_grid_data .gantt_row:hover{background-color:unset}.gantt_drag_marker{position:absolute;top:-1000px;left:-1000px;font-family:Tahoma;font-size:11px;z-index:1;white-space:nowrap}.gantt_drag_marker .gantt_tree_icon.gantt_blank,.gantt_drag_marker .gantt_tree_icon.gantt_close,.gantt_drag_marker .gantt_tree_icon.gantt_open,.gantt_drag_marker .gantt_tree_indent{display:none}.gantt_empty_state_wrapper{position:relative}.gantt_empty_state{height:100%;max-width:500px;box-sizing:border-box;white-space:pre-line;overflow-wrap:break-word;display:flex;flex-direction:column;justify-content:flex-start;margin:0 auto}.gantt_empty_state_image{background-image:url("data:image/png;base64,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");background-repeat:no-repeat;width:100%;max-width:500px;max-height:500px;margin-left:auto;margin-right:auto;display:block;min-height:0;height:200px;background-size:contain;background-position-x:center;background-position-y:bottom;margin-top:40px}.gantt_empty_state_text{text-align:center}.gantt_empty_state_text_link{color:#03a9f4;background-position:100% 0;background:none;opacity:1;height:unset;cursor:pointer}.gantt_drag_marker,.gantt_drag_marker .gantt_row.odd{background-color:#fff}.gantt_drag_marker .gantt_row{border-left:1px solid #d2d2d2;border-top:1px solid #d2d2d2}.gantt_drag_marker .gantt_cell{border-color:#d2d2d2}.gantt_row.gantt_over,.gantt_task_row.gantt_over{background-color:#0070fe}.gantt_row.gantt_transparent .gantt_cell{opacity:.7}.gantt_task_row.gantt_transparent{background-color:#e4f0ff}.gantt_container_resize_watcher{background:transparent;width:100%;height:100%;position:absolute;top:0;left:0;z-index:-1;pointer-events:none;border:0;box-sizing:border-box;opacity:0}
src/components/dhtmlxGantt/codebase/skins/dhtmlxgantt_terrace.css
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1 @@
.gridHoverStyle,.gridSelection,.timelineSelection{background-color:#fff3a1}.gantt_grid_scale .gantt_grid_head_cell{color:#a6a6a6;border-top:none!important;border-right:none!important}.gantt_grid_data .gantt_cell{border-right:none;color:#454545}.gantt_task_link .gantt_link_arrow_right{border-width:6px;margin-top:-3px}.gantt_task_link .gantt_link_arrow_left{border-width:6px;margin-left:-6px;margin-top:-3px}.gantt_task_link .gantt_link_arrow_down,.gantt_task_link .gantt_link_arrow_up{border-width:6px}.gantt_task_line .gantt_task_progress_drag{bottom:-4px;height:10px;margin-left:-8px;width:16px}.chartHeaderBg{background-color:#fff}.gantt_task .gantt_task_scale .gantt_scale_cell{color:#a6a6a6;border-right:1px solid #ebebeb}.gantt_row.gantt_project,.gantt_row.odd.gantt_project{background-color:#edffef}.gantt_task_row.gantt_project,.gantt_task_row.odd.gantt_project{background-color:#f5fff6}.gantt_task_line.gantt_project{background-color:#65c16f;border:1px solid #3c9445}.gantt_task_line.gantt_project .gantt_task_progress{background-color:#46ad51}.buttonBg{background:#fff}.gantt_cal_light .gantt_btn_set{margin:5px 10px}.gantt_btn_set.gantt_cancel_btn_set{background:#fff;color:#454545;border:1px solid #cecece}.gantt_btn_set.gantt_save_btn_set{background:#3db9d3;text-shadow:0 -1px 0 #248a9f;color:#fff}.gantt_btn_set.gantt_delete_btn_set{text-shadow:0 -1px 0 #6f6f6f;background:#ec8e00;text-shadow:0 -1px 0 #a60;color:#fff}.gantt_cal_light_wide{padding-left:0!important;padding-right:0!important}.gantt_cal_light_wide .gantt_cal_larea{border-left:none!important;border-right:none!important}.gantt_popup_button.gantt_ok_button{background:#3db9d3;text-shadow:0 -1px 0 #248a9f;color:#fff;font-weight:700;border-width:0}.gantt_popup_button.gantt_cancel_button{font-weight:700;color:#454544}.gantt_popup_title{background-color:#fff}.gantt_popup_shadow{box-shadow:3px 3px 3px rgba(0,0,0,.07)}.gantt_qi_big_icon.icon_edit{color:#454545;background:#fff}.gantt_qi_big_icon.icon_delete{text-shadow:0 -1px 0 #a60;background:#ec8e00;color:#fff;border-width:0}.gantt_tooltip{box-shadow:3px 3px 3px rgba(0,0,0,.07);border-left:1px solid rgba(0,0,0,.07);border-top:1px solid rgba(0,0,0,.07);font-size:8pt;color:#454545}.gantt_container,.gantt_tooltip{background-color:#fff;font-family:Arial}.gantt_container{font-size:13px;border:1px solid #cecece;position:relative;white-space:nowrap;overflow-x:hidden;overflow-y:hidden}.gantt_touch_active{overscroll-behavior:none}.gantt_task_scroll{overflow-x:scroll}.gantt_grid,.gantt_task{position:relative;overflow-x:hidden;overflow-y:hidden;display:inline-block;vertical-align:top}.gantt_grid_scale,.gantt_task_scale{color:#6b6b6b;font-size:12px;border-bottom:1px solid #cecece;box-sizing:border-box}.gantt_grid_scale,.gantt_task_scale,.gantt_task_vscroll{background-color:#fff}.gantt_scale_line{box-sizing:border-box;-moz-box-sizing:border-box;border-top:1px solid #cecece}.gantt_scale_line:first-child{border-top:none}.gantt_grid_head_cell{display:inline-block;vertical-align:top;border-right:1px solid #cecece;text-align:center;position:relative;cursor:default;height:100%;box-sizing:border-box;-moz-box-sizing:border-box;line-height:33px;-moz-user-select:-moz-none;-webkit-user-select:none;user-select:none;overflow:hidden}.gantt_scale_line{clear:both}.gantt_grid_data{width:100%;overflow:hidden;position:relative}.gantt_row{position:relative;-webkit-user-select:none;-moz-user-select:none;-moz-user-select:-moz-none}.gantt_add,.gantt_grid_head_add{width:100%;height:100%;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoV2luZG93cykiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6NTQ3MjMyMENDNkI0MTFFMjk4MTI5QTg3MDhFNDVDQTkiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6NTQ3MjMyMERDNkI0MTFFMjk4MTI5QTg3MDhFNDVDQTkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo1NDcyMzIwQUM2QjQxMUUyOTgxMjlBODcwOEU0NUNBOSIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDo1NDcyMzIwQkM2QjQxMUUyOTgxMjlBODcwOEU0NUNBOSIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PshZT8UAAABbSURBVHjaYrTdeZmBEsCER+4wEP+H4sPkGGCDg020ARR7gb4GIAcYDKMDdPnDyAbYkGG5DVW9cIQMvUdBBAuUY4vDz8iAcZinA2zgCHqAYQMseAywJcYFAAEGAM+UFGuohFczAAAAAElFTkSuQmCC);background-position:50%;background-repeat:no-repeat;cursor:pointer;position:relative;-moz-opacity:.3;opacity:.3}.gantt_grid_head_cell.gantt_grid_head_add{-moz-opacity:.6;opacity:.6;top:0}.gantt_grid_head_cell.gantt_grid_head_add:hover{-moz-opacity:1;opacity:1}.gantt_grid_data .gantt_row.odd:hover,.gantt_grid_data .gantt_row:hover{background-color:#fff3a1}.gantt_grid_data .gantt_row.odd:hover .gantt_add,.gantt_grid_data .gantt_row:hover .gantt_add{-moz-opacity:1;opacity:1}.gantt_row,.gantt_task_row{border-bottom:1px solid #ebebeb;background-color:#fff}.gantt_row.odd,.gantt_task_row.odd{background-color:#fff}.gantt_cell,.gantt_grid_head_cell,.gantt_row,.gantt_scale_cell,.gantt_task_cell,.gantt_task_row{box-sizing:border-box;-moz-box-sizing:border-box}.gantt_grid_head_cell,.gantt_scale_cell{line-height:inherit}.gantt_grid_scale .gantt_grid_column_resize_wrap{cursor:col-resize;position:absolute;width:13px;margin-left:-7px}.gantt_grid_column_resize_wrap .gantt_grid_column_resize{background-color:#cecece;height:100%;width:1px;margin:0 auto}.gantt_task_grid_row_resize_wrap{cursor:row-resize;position:absolute;height:13px;margin-top:-7px;left:0;width:100%}.gantt_task_grid_row_resize_wrap .gantt_task_grid_row_resize{background-color:#ebebeb;top:6px;height:1px;width:100%;margin:0 auto;position:relative}.gantt_drag_marker{pointer-events:none}.gantt_drag_marker.gantt_grid_resize_area,.gantt_drag_marker.gantt_row_grid_resize_area{background-color:hsla(0,0%,91%,.5);height:100%;width:100%;box-sizing:border-box}.gantt_drag_marker.gantt_grid_resize_area{border-left:1px solid #cecece;border-right:1px solid #cecece}.gantt_drag_marker.gantt_row_grid_resize_area{border-top:1px solid #cecece;border-bottom:1px solid #cecece;pointer-events:none}.gantt_row{display:flex}.gantt_row>div{flex-shrink:0;flex-grow:0}.gantt_cell{vertical-align:top;border-right:1px solid #ebebeb;padding-left:6px;padding-right:6px;height:100%;overflow:hidden;white-space:nowrap;font-size:13px}.gantt_cell_tree{display:flex;flex-wrap:nowrap}.gantt_grid_data .gantt_last_cell,.gantt_grid_scale .gantt_last_cell,.gantt_task .gantt_task_scale .gantt_scale_cell.gantt_last_cell,.gantt_task_bg .gantt_last_cell{border-right-width:0}.gantt_task .gantt_task_scale .gantt_scale_cell.gantt_last_cell{border-right-width:1px}.gantt_task_bg{overflow:hidden}.gantt_scale_cell{display:inline-block;white-space:nowrap;overflow:hidden;border-right:1px solid #cecece;text-align:center;height:100%}.gantt_task_cell{display:inline-block;height:100%;border-right:1px solid #ebebeb}.gantt_layout_cell.gantt_ver_scroll{width:0;background-color:transparent;height:1px;overflow-x:hidden;overflow-y:scroll;position:absolute;right:0;z-index:1}.gantt_ver_scroll>div{width:1px;height:1px}.gantt_hor_scroll{height:0;background-color:transparent;width:100%;clear:both;overflow-x:scroll;overflow-y:hidden}.gantt_layout_cell .gantt_hor_scroll{position:absolute}.gantt_hor_scroll>div{width:5000px;height:1px}.gantt_tree_icon,.gantt_tree_indent{flex-grow:0;flex-shrink:0}.gantt_tree_indent{width:15px;height:100%}.gantt_tree_content,.gantt_tree_icon{vertical-align:top}.gantt_tree_icon{width:28px;height:100%;background-repeat:no-repeat;background-position:50%}.gantt_tree_content{height:100%;white-space:nowrap;min-width:0}.gantt_tree_icon.gantt_open{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAYAAABWzo5XAAAArklEQVQ4T2NkoBJgpJI5DEPAoFOnTv0/c+YMQR+bmJgwmJmZwX2E4bVp06b9j4yMZODg4MBp2I8fPxiWL1/OkJWVNUAGcXJyMnz//h3uQrJdRLFBIAPQAchlJLsIFuCMjIwM////B5sJMoRkg2CuIdtrQcHBDOxsbHBfCQgIMHz48AHO//nrF8O6tWsJR7+7uzsDIxMTznT0/98/hp07d+I3iGopm2DewKFg8OV+AJWkfRMrTobLAAAAAElFTkSuQmCC);width:18px;cursor:pointer}.gantt_tree_icon.gantt_close{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAYAAABWzo5XAAAAkUlEQVQ4T2NkoBJgpJI5DEPAoFOnTv0/c+YMQR+bmJgwmJmZwX2E4bVp06b9j4yMZODg4MBp2I8fPxiWL1/OkJWVNeIN4uTkxAin79+/M5AcRtgCHGQIyQbhijaiDQoKDmZgZ2PDGf0/f/1iWLd2LeHod3d3Z2BkYsJp0P9//xh27tyJ3yCqpWyCeQOHgsGX+wEZpW4T5LCxKwAAAABJRU5ErkJggg==);width:18px;cursor:pointer}.gantt_tree_icon.gantt_blank{width:18px}.gantt_tree_icon.gantt_folder_open{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAYAAABWzo5XAAAAs0lEQVQ4T62T0Q2EIBBEpQlzuaaMsQoqooqLsSljbMLLmMxmUXBR4U+Qt7Mzi2sqLVeJ00SgEMKWAnvvzYLyAyHfT5sU2fXDJSwCAXK8MI0/UTkva7IIFJsg3NSwnKdFoKtAWOQ1CN7CEqeTotE5L7QyJhmBcklZM4ZgTiAr3iOU3kD93ppO5SkMjB1EeXdBWoSkRql3YeIRe+cGvktS056JR9wsmeBUkujCfNXWCPC8GugPqn5ii/hV+FoAAAAASUVORK5CYII=)}.gantt_tree_icon.gantt_folder_closed{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAYAAABWzo5XAAAAfElEQVQ4T2NkoBJgpJI5DCgGTZ8+/T82gzMzMwlaCFcAM0RKQgyrI/0Dg/EahmIQyBB0DRvXr4W78tmLV1gtAbmYoEEgnciG4QpTogzCFyEwSyg2CBS2oCAZNQh3cA+hMAJ5AlcKxuVBlOgnNgVjMwyUrQjmamKLGaoZBAAOTFyLnFFW4wAAAABJRU5ErkJggg==)}.gantt_tree_icon.gantt_file{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAYAAABWzo5XAAAAeElEQVQ4T2NkoBJgRDZn+vTp/wmZm5mZiaIHph7DICkJMUJmMfgHBmMYhtUgbAo3rl+L4lp0NUQbBPI2umuRDaPIIFAYwAyjv0HoMQALM5JdhG4QLMxGDcKdyIdoGIE89OzFK4KZF5Rl8EY/QROQFGA1iBQD0NUCAJVjcxO0naAQAAAAAElFTkSuQmCC)}.gantt_grid_head_cell .gantt_sort{position:absolute;right:5px;top:8px;width:7px;height:13px;background-repeat:no-repeat;background-position:50%}.gantt_grid_head_cell .gantt_sort.gantt_asc{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAcAAAANCAYAAABlyXS1AAAARUlEQVR4nGNgQAKGxib/GbABkIS7b8B/DAUwCRiGK0CXwFBAb1DfP/U/LszwHwi2X7qFgUEArBtdAVwCBmAKMCSQFSDzAWXXaOHsXeqkAAAAAElFTkSuQmCC)}.gantt_grid_head_cell .gantt_sort.gantt_desc{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAcAAAANCAYAAABlyXS1AAAARUlEQVR42mNgQAL1/VP/M2ADIIntF2/9x1AAlrh0C47hCmA60DFYwX88gIFGwNDY5D8uDFbg7hvwHx2jmIBTAlkB0e4BAEjlaNtBWJPnAAAAAElFTkSuQmCC)}.gantt_inserted,.gantt_updated{font-weight:700}.gantt_deleted{text-decoration:line-through}.gantt_invalid{background-color:#ffe0e0}.gantt_error{color:red}.gantt_status{right:1px;padding:5px 10px;background:hsla(0,0%,61%,.1);position:absolute;top:1px;transition:opacity .2s;opacity:0}.gantt_status.gantt_status_visible{opacity:1}#gantt_ajax_dots span{transition:opacity .2s;background-repeat:no-repeat;opacity:0}#gantt_ajax_dots span.gantt_dot_visible{opacity:1}.gantt_column_drag_marker{border:1px solid #cecece;opacity:.8;pointer-events:none}.gantt_grid_head_cell_dragged{border:1px solid #cecece;opacity:.3}.gantt_grid_target_marker{position:absolute;top:0;width:2px;height:100%;background-color:#ffa011;transform:translateX(-1px)}.gantt_grid_target_marker:after,.gantt_grid_target_marker:before{display:block;content:"";position:absolute;left:-5px;width:0;height:0;border:6px solid transparent}.gantt_grid_target_marker:before{border-top-color:#ffa011}.gantt_grid_target_marker:after{bottom:0;border-bottom-color:#ffa011}.gantt_message_area{position:fixed;right:5px;width:250px;z-index:1000}.gantt-info{min-width:120px;padding:4px 4px 4px 20px;font-family:Arial;z-index:10000;margin:5px;margin-bottom:10px;transition:all .5s ease}.gantt-info.hidden{height:0;padding:0;border-width:0;margin:0;overflow:hidden}.gantt_modal_box{overflow:hidden;display:inline-block;min-width:250px;width:250px;text-align:center;position:fixed;z-index:20000;box-shadow:3px 3px 3px rgba(0,0,0,.07);font-family:Arial;border-radius:6px;border:1px solid #cecece;background:#fff}.gantt_popup_title{border-top-left-radius:6px;border-top-right-radius:6px;border-width:0}.gantt_button,.gantt_popup_button{border:1px solid #cecece;height:30px;line-height:30px;display:inline-block;margin:0 5px;border-radius:4px;background:#fff}.gantt-info,.gantt_button,.gantt_popup_button{user-select:none;-webkit-user-select:none;-moz-user-select:-moz-none;cursor:pointer}.gantt_popup_text{overflow:hidden}.gantt_popup_controls{border-radius:6px;padding:10px}.gantt_popup_button{min-width:100px}div.dhx_modal_cover{background-color:#000;cursor:default;filter:progid:DXImageTransform.Microsoft.Alpha(opacity=20);opacity:.2;position:fixed;z-index:19999;left:0;top:0;width:100%;height:100%;border:none;zoom:1}.gantt-info img,.gantt_modal_box img{float:left;margin-right:20px}.gantt-alert-error,.gantt-confirm-error{border:1px solid red}.gantt_button input,.gantt_popup_button div{border-radius:4px;font-size:14px;box-sizing:content-box;padding:0;margin:0;vertical-align:top}.gantt_popup_title{border-bottom:1px solid #cecece;height:40px;line-height:40px;font-size:20px}.gantt_popup_text{margin:15px 15px 5px;font-size:14px;color:#000;min-height:30px;border-radius:6px}.gantt-error,.gantt-info{font-size:14px;color:#000;box-shadow:3px 3px 3px rgba(0,0,0,.07);padding:0;background-color:#fff;border-radius:3px;border:1px solid #fff}.gantt-info div{padding:5px 10px;background-color:#fff;border-radius:3px;border:1px solid #cecece}.gantt-error{background-color:#d81b1b;border:1px solid #ff3c3c}.gantt-error div{background-color:#d81b1b;border:1px solid #940000;color:#fff}.gantt-warning{background-color:#ff9000;border:1px solid #ffa633}.gantt-warning div{background-color:#ff9000;border:1px solid #b36500;color:#fff}.gantt_data_area div,.gantt_grid div{-ms-touch-action:none;-webkit-tap-highlight-color:rgba(0,0,0,0)}.gantt_data_area{position:relative;overflow-x:hidden;overflow-y:hidden;-moz-user-select:-moz-none;-webkit-user-select:none;user-select:none}.gantt_links_area{position:absolute;left:0;top:0}.gantt_side_content,.gantt_task_content,.gantt_task_progress{line-height:inherit;overflow:hidden;height:100%}.gantt_task_content{font-size:12px;color:#fff;width:100%;top:0;cursor:pointer;position:absolute;white-space:nowrap;text-align:center}.gantt_task_progress{text-align:center;z-index:0;background:#299cb4}.gantt_task_progress_wrapper{border-radius:inherit;position:relative;width:100%;height:100%;overflow:hidden}.gantt_task_line{border-radius:2px;position:absolute;box-sizing:border-box;background-color:#3db9d3;border:1px solid #2898b0;-webkit-user-select:none;-moz-user-select:none;-moz-user-select:-moz-none}.gantt_task_line.gantt_drag_move div{cursor:move}.gantt_touch_move,.gantt_touch_progress .gantt_touch_resize{transform:scale(1.02,1.1);transform-origin:50%}.gantt_touch_progress .gantt_task_progress_drag,.gantt_touch_resize .gantt_task_drag{transform:scaleY(1.3);transform-origin:50%}.gantt_side_content{position:absolute;white-space:nowrap;color:#6e6e6e;top:0;font-size:11px}.gantt_side_content.gantt_left{right:100%;padding-right:20px}.gantt_side_content.gantt_right{left:100%;padding-left:20px}.gantt_side_content.gantt_link_crossing{bottom:8.75px;top:auto}.gantt_link_arrow,.gantt_task_link .gantt_line_wrapper{position:absolute;cursor:pointer}.gantt_line_wrapper div{background-color:#ffa011}.gantt_task_link:hover .gantt_line_wrapper div{box-shadow:0 0 5px 0 #ffa011}.gantt_task_link div.gantt_link_arrow{background-color:transparent;border-style:solid;width:0;height:0}.gantt_link_control{position:absolute;width:20px;top:0}.gantt_link_control div{display:none;cursor:pointer;box-sizing:border-box;position:relative;top:50%;margin-top:-7.5px;vertical-align:middle;border:1px solid #929292;border-radius:6.5px;height:13px;width:13px;background-color:#f0f0f0}.gantt_link_control.task_right div.gantt_link_point{margin-left:7px}.gantt_link_control div:hover{background-color:#fff}.gantt_link_control.task_left{left:-20px}.gantt_link_control.task_right{right:-20px}.gantt_link_target .gantt_link_control div,.gantt_task_line.gantt_drag_move .gantt_link_control div,.gantt_task_line.gantt_drag_move .gantt_task_drag,.gantt_task_line.gantt_drag_move .gantt_task_progress_drag,.gantt_task_line.gantt_drag_progress .gantt_link_control div,.gantt_task_line.gantt_drag_progress .gantt_task_drag,.gantt_task_line.gantt_drag_progress .gantt_task_progress_drag,.gantt_task_line.gantt_drag_resize .gantt_link_control div,.gantt_task_line.gantt_drag_resize .gantt_task_drag,.gantt_task_line.gantt_drag_resize .gantt_task_progress_drag,.gantt_task_line.gantt_selected .gantt_link_control div,.gantt_task_line.gantt_selected .gantt_task_drag,.gantt_task_line.gantt_selected .gantt_task_progress_drag,.gantt_task_line:hover .gantt_link_control div,.gantt_task_line:hover .gantt_task_drag,.gantt_task_line:hover .gantt_task_progress_drag{display:block}.gantt_link_source,.gantt_link_target{box-shadow:0 0 3px #3db9d3}.gantt_link_target.link_finish_allow,.gantt_link_target.link_start_allow{box-shadow:0 0 3px #ffbf5e}.gantt_link_target.link_finish_deny,.gantt_link_target.link_start_deny{box-shadow:0 0 3px #e87e7b}.link_finish_allow .gantt_link_control.task_end_date div,.link_start_allow .gantt_link_control.task_start_date div{background-color:#ffbf5e;border-color:#ffa011}.link_finish_deny .gantt_link_control.task_end_date div,.link_start_deny .gantt_link_control.task_start_date div{background-color:#e87e7b;border-color:#dd3e3a}.gantt_link_arrow_right{border-width:4px 0 4px 6px;border-top-color:transparent!important;border-right-color:transparent!important;border-bottom-color:transparent!important;border-left-color:#ffa011}.gantt_link_arrow_left{border-width:4px 6px 4px 0;margin-top:-1px;border-top-color:transparent!important;border-right-color:#ffa011;border-bottom-color:transparent!important;border-left-color:transparent!important}.gantt_link_arrow_up{border-width:0 4px 6px;border-color:transparent transparent #ffa011;border-top-color:transparent!important;border-right-color:transparent!important;border-bottom-color:#ffa011;border-left-color:transparent!important}.gantt_link_arrow_down{border-width:4px 6px 0 4px;border-top-color:#ffa011;border-right-color:transparent!important;border-bottom-color:transparent!important;border-left-color:transparent!important}.gantt_task_drag,.gantt_task_progress_drag{cursor:ew-resize;display:none;position:absolute}.gantt_task_drag.task_right{cursor:e-resize}.gantt_task_drag.task_left{cursor:w-resize}.gantt_task_drag{height:100%;width:8px;z-index:1;top:-1px}.gantt_task_drag.task_left{left:-7px}.gantt_task_drag.task_right{right:-7px}.gantt_task_progress_drag{height:8px;width:8px;bottom:-4px;margin-left:-4px;background-position:bottom;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAALCAYAAAB24g05AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoV2luZG93cykiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6MkY3Rjk0RUVDMkYzMTFFMkI1OThEQTA3ODU0OTkzMEEiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6MkY3Rjk0RUZDMkYzMTFFMkI1OThEQTA3ODU0OTkzMEEiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDoyRjdGOTRFQ0MyRjMxMUUyQjU5OERBMDc4NTQ5OTMwQSIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDoyRjdGOTRFREMyRjMxMUUyQjU5OERBMDc4NTQ5OTMwQSIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PobPBzIAAADkSURBVHjaYpk2bRoDDsAExL1QdjEQ/8OmiAWHZk4gXqymqhQM4ty6fU8OSMUA8XdiDBAB4k0a6iqWRga6EKcwMQXduHlnL5DpB8Rv0J2JDFSA+JiOtgZcMwiA2CAxkBxUDVYDLEAKgIpV9XQ0MZwFEgPJAZnHoWpRDAgC4n2W5saiQKfjClQGkBxQDciL+6B6wAbkA/EqJwdrTkUFOQZCAKQGpBbIXA3SCzJggo+XK7OEuBgDsQCkFqgHrBfsBT5eHgZSAUwP2IBfv36TbABMDygdtK1Zv6UESLORaAbIhG6AAAMAKN8wE24DXWcAAAAASUVORK5CYII=);background-repeat:no-repeat;z-index:1}.gantt_task_progress_drag:hover{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAALCAYAAAB24g05AAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAs0lEQVQoz6WMPW7CQBgFJxZaiZ60qcgdwjVMmzu8gpwhDULabXyBdHAGuzRHivQiQZovigS2+Jtu95t5T03TMITtCtjEc5VSOgx5k5F4CnxJWgKUUl5sv6eUvk/daiCeAe1fDCCpBtq4jQ/YngO9pMWpGH99OOcDtt8ifmWEuO3D/R+wXQOdpGcuIGkGdNFQ2RawlTTlSsLd2RY55+O95JyPFQ/y8MAE+CylfADpxvYHWP8CXj+JR4wdKHYAAAAASUVORK5CYII=)}.gantt_link_tooltip{box-shadow:3px 3px 3px #888;background-color:#fff;border-left:1px dotted #cecece;border-top:1px dotted #cecece;font-family:Tahoma;font-size:8pt;color:#444;padding:6px;line-height:20px}.gantt_link_direction{height:0;border:0 none #ffa011;border-bottom-style:dashed;border-bottom-width:2px;transform-origin:0 0;-ms-transform-origin:0 0;-webkit-transform-origin:0 0;z-index:2;margin-left:1px;position:absolute}.gantt_grid_data .gantt_row.gantt_selected,.gantt_grid_data .gantt_row.odd.gantt_selected,.gantt_task_row.gantt_selected{background-color:#fff3a1}.gantt_task_row.gantt_selected .gantt_task_cell{border-right-color:#ffec6e}.gantt_task_line.gantt_selected{box-shadow:0 0 5px #299cb4}.gantt_task_line.gantt_project.gantt_selected{box-shadow:0 0 5px #46ad51}.gantt_task_line.gantt_milestone{visibility:hidden;background-color:#d33daf;border:0 solid #61164f;box-sizing:content-box;-moz-box-sizing:content-box}.gantt_task_line.gantt_milestone div{visibility:visible}.gantt_task_line.gantt_milestone .gantt_task_content{background:inherit;border:inherit;border-width:1px;border-radius:inherit;box-sizing:border-box;-moz-box-sizing:border-box;transform:rotate(45deg)}.gantt_task_line.gantt_task_inline_color{border-color:#999}.gantt_task_line.gantt_task_inline_color .gantt_task_progress{background-color:#363636;opacity:.2}.gantt_task_line.gantt_task_inline_color.gantt_project.gantt_selected,.gantt_task_line.gantt_task_inline_color.gantt_selected{box-shadow:0 0 5px #999}.gantt_task_link.gantt_link_inline_color:hover .gantt_line_wrapper div{box-shadow:0 0 5px 0 #999}.gantt_critical_task{background-color:#e63030;border-color:#9d3a3a}.gantt_critical_task .gantt_task_progress{background-color:rgba(0,0,0,.4)}.gantt_critical_link .gantt_line_wrapper>div{background-color:#e63030}.gantt_critical_link .gantt_link_arrow{border-color:#e63030}.gantt_btn_set:focus,.gantt_cell:focus,.gantt_grid_head_cell:focus,.gantt_popup_button:focus,.gantt_qi_big_icon:focus,.gantt_row:focus{box-shadow:inset 0 0 1px 1px #4d90fe}.gantt_split_parent,.gantt_split_subproject{opacity:.1;pointer-events:none}.gantt_rollup_child .gantt_link_control,.gantt_rollup_child:hover .gantt_link_control{display:none}.gantt_unselectable,.gantt_unselectable div{-webkit-user-select:none;-moz-user-select:none;-moz-user-select:-moz-none}.gantt_cal_light{-webkit-tap-highlight-color:transparent;background:#fff;border-radius:6px;font-family:Arial;font-size:13px;border:1px solid #cecece;color:#6b6b6b;font-size:12px;position:absolute;z-index:10001;width:550px;height:250px;box-shadow:3px 3px 3px rgba(0,0,0,.07)}.gantt_cal_light_wide{width:650px}.gantt_cal_light select{font-family:Arial;border:1px solid #cecece;font-size:13px;padding:2px;margin:0}.gantt_cal_ltitle{padding:7px 10px;overflow:hidden;-webkit-border-top-left-radius:6px;-webkit-border-bottom-left-radius:0;-webkit-border-top-right-radius:6px;-webkit-border-bottom-right-radius:0;-moz-border-radius-topleft:6px;-moz-border-radius-bottomleft:0;-moz-border-radius-topright:6px;-moz-border-radius-bottomright:0;border-top-left-radius:6px;border-bottom-left-radius:0;border-top-right-radius:6px;border-bottom-right-radius:0}.gantt_cal_ltitle,.gantt_cal_ltitle span{white-space:nowrap}.gantt_cal_lsection{color:#727272;font-weight:700;padding:12px 0 5px 10px}.gantt_cal_lsection .gantt_fullday{float:right;margin-right:5px;font-size:12px;font-weight:400;line-height:20px;vertical-align:top;cursor:pointer}.gantt_cal_lsection{font-size:13px}.gantt_cal_ltext{padding:2px 10px;overflow:hidden}.gantt_cal_ltext textarea{overflow-y:auto;overflow-x:hidden;font-family:Arial;font-size:13px;box-sizing:border-box;border:1px solid #cecece;height:100%;width:100%;outline:none!important;resize:none}.gantt_section_constraint [data-constraint-time-select]{margin-left:20px}.gantt_time{font-weight:700}.gantt_cal_light .gantt_title{padding-left:10px}.gantt_cal_larea{border:1px solid #cecece;border-left:none;border-right:none;background-color:#fff;overflow:hidden;height:1px}.gantt_btn_set{margin:10px 7px 5px 10px;padding:5px 15px 5px 10px;float:left;border-radius:4px;border:0 solid #cecece;height:32px;font-weight:700;background:#fff;box-sizing:border-box;cursor:pointer}.gantt_hidden{display:none}.gantt_btn_set div{float:left;font-size:13px;height:22px;line-height:22px;background-repeat:no-repeat;vertical-align:middle}.gantt_save_btn{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoV2luZG93cykiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6MTk1OUU5RDFDMzA0MTFFMkExMUZBQTdDNDAzOUE5RjMiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6MTk1OUU5RDJDMzA0MTFFMkExMUZBQTdDNDAzOUE5RjMiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDoxOTU5RTlDRkMzMDQxMUUyQTExRkFBN0M0MDM5QTlGMyIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDoxOTU5RTlEMEMzMDQxMUUyQTExRkFBN0M0MDM5QTlGMyIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PjDroXYAAAEXSURBVHjaYvz//z8DJYCRUgPIAUxAbAnEHiAHMIBcQCwGaRYXF3e6evXqoffv39/dv38/CymaGSUkJBzv3LlzCsj///fv3wdAihkkIQnEvkAshU8zLy+v7a1bt06ANP/79+87kDIAy505cybq06dPr3p7ezuwGQLTfOPGjWP/ESAZLg8kPKBO+g01RBJNszWyZqC6uSgWgIg/f/4shxnS2dnZBjMEqNkSFGBImi8CKTYMA4BYCGjIczRDHC5dunQQSfN7IKWI4UUkjjdMMdCwnw8ePLjwHxV4Yw1gZA5Q47z/2EELzhhCE+ABGvIQWSeQvwcU38QaAML2wHj+C/X3MyAlijeB4ZBoBOIPQGxJKIVSnBsBAgwABddBclWfcZUAAAAASUVORK5CYII=);margin-top:2px;width:21px}.gantt_cancel_btn{margin-top:2px;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoV2luZG93cykiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6MDkzMDA3MzlDMzA0MTFFMjg2QTVFMzFEQzgwRkJERDYiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6MDkzMDA3M0FDMzA0MTFFMjg2QTVFMzFEQzgwRkJERDYiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDowOTMwMDczN0MzMDQxMUUyODZBNUUzMURDODBGQkRENiIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDowOTMwMDczOEMzMDQxMUUyODZBNUUzMURDODBGQkRENiIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PmYuYOUAAAEdSURBVHjaYvz//z8DJYAFXWDlypU8QKoIiD2A2AwqfAqIdwBxX3h4+Bdk9YzILgBqtgdS84FYEYeF94E4EWjIQZgAE5LmQCB1AKoZZKMPEAtAMYh9GSp3AKjWD8UFQAEhIPshEIOc3wHENUBb/qJ57SyQMoJyPwKxElDNO1gYFEE17wMKVmIJlzNQzeegrjaA6qmBecEbSvfh0GwMxGeBhoPoemQ9MAO0kEIbl2YTqPAFKK2IbMB3AjabYIkRZmQD7kNpMyI0G0PpO8gGbIUFJj7NQDk2INWIrIcJKfBAKcwJqvkcDs0TgFgXGo19KCkRmpDWQdWDEk0NUoCBoq0FqhkE/IEWbKJKUmZEz43QzFSKIzN1481M5ACAAAMAlfl/lCwRpagAAAAASUVORK5CYII=);width:20px}.gantt_delete_btn{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoV2luZG93cykiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6MjFENzI3NUNDMzA0MTFFMjhBNjJGQTc3MUIyQzYzNEYiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6MjFENzI3NURDMzA0MTFFMjhBNjJGQTc3MUIyQzYzNEYiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDoyMUQ3Mjc1QUMzMDQxMUUyOEE2MkZBNzcxQjJDNjM0RiIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDoyMUQ3Mjc1QkMzMDQxMUUyOEE2MkZBNzcxQjJDNjM0RiIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PmUD0gAAAABvSURBVHjaYvz//z8DIyMjAxYQicReji4J0ofKQNP8HwmgGQbXB8IsWGwDSSwDuioKjY9uBthVjFAXYHUGAQA2kYmBUoAUBpGk0LAwgBvwH+YX4mkwptgLowYMRgOITUyYKRFIN/wnDjQgJySAAAMApryKzL8wjfUAAAAASUVORK5CYII=);margin-top:2px;width:20px}.gantt_cal_cover{width:100%;height:100%;position:fixed;z-index:10000;top:0;left:0;background-color:#000;opacity:.1;filter:progid:DXImageTransform.Microsoft.Alpha(opacity=10)}.gantt_custom_button{padding:0 3px;font-family:Arial;font-size:13px;font-weight:400;margin-right:10px;margin-top:-5px;cursor:pointer;float:right;height:21px;width:90px;border:1px solid #cecece;text-align:center;border-radius:4px}.gantt_custom_button div{cursor:pointer;float:none;height:21px;line-height:21px;vertical-align:middle}.gantt_custom_button div:first-child{display:none}.gantt_cal_light_wide{width:580px;padding:2px 4px}.gantt_cal_light_wide .gantt_cal_larea{box-sizing:border-box;border:1px solid #cecece}.gantt_cal_light_wide .gantt_cal_lsection{border:0;float:left;text-align:right;width:80px;height:20px;padding:5px 10px 0 0}.gantt_cal_light_wide .gantt_wrap_section{position:relative;padding:10px 0;overflow:hidden;border-bottom:1px solid #ebebeb}.gantt_cal_light_wide .gantt_section_time{overflow:hidden;padding-top:2px!important;padding-right:0;height:20px!important}.gantt_cal_light_wide .gantt_cal_ltext{padding-right:0}.gantt_cal_light_wide .gantt_cal_larea{padding:0 10px;width:100%}.gantt_cal_light_wide .gantt_section_time{background:transparent}.gantt_cal_light_wide .gantt_cal_checkbox label{padding-left:0}.gantt_cal_light_wide .gantt_cal_lsection .gantt_fullday{float:none;margin-right:0;font-weight:700;cursor:pointer}.gantt_cal_light_wide .gantt_custom_button{position:absolute;top:0;right:0;margin-top:2px}.gantt_cal_light_wide .gantt_repeat_right{margin-right:55px}.gantt_cal_light_wide.gantt_cal_light_full{width:738px}.gantt_cal_wide_checkbox input{margin-top:8px;margin-left:14px}.gantt_cal_light input{font-size:13px}.gantt_section_time{background-color:#fff;white-space:nowrap;padding:2px 10px 5px;padding-top:2px!important}.gantt_section_time .gantt_time_selects{float:left;height:25px}.gantt_section_time .gantt_time_selects select{height:23px;padding:2px;border:1px solid #cecece}.gantt_duration{width:100px;height:23px;float:left;white-space:nowrap;margin-left:20px;line-height:23px}.gantt_duration .gantt_duration_dec,.gantt_duration .gantt_duration_inc,.gantt_duration .gantt_duration_value{box-sizing:border-box;text-align:center;vertical-align:top;height:100%;border:1px solid #cecece}.gantt_duration .gantt_duration_value{width:40px;padding:3px 4px;border-left-width:0;border-right-width:0}.gantt_duration .gantt_duration_value.gantt_duration_value_formatted{width:70px}.gantt_duration .gantt_duration_dec,.gantt_duration .gantt_duration_inc{width:20px;padding:1px;padding-bottom:1px;background:#fff}.gantt_duration .gantt_duration_dec{-moz-border-top-left-radius:4px;-moz-border-bottom-left-radius:4px;-webkit-border-top-left-radius:4px;-webkit-border-bottom-left-radius:4px;border-top-left-radius:4px;border-bottom-left-radius:4px}.gantt_duration .gantt_duration_inc{margin-right:4px;-moz-border-top-right-radius:4px;-moz-border-bottom-right-radius:4px;-webkit-border-top-right-radius:4px;-webkit-border-bottom-right-radius:4px;border-top-right-radius:4px;border-bottom-right-radius:4px}.gantt_resources{max-height:150px;height:auto;overflow-y:auto}.gantt_resource_row{display:block;padding:10px 0;border-bottom:1px solid #ebebeb;cursor:pointer}.gantt_resource_row input[type=checkbox]:not(:checked),.gantt_resource_row input[type=checkbox]:not(:checked)~div{opacity:.5}.gantt_resource_toggle{vertical-align:middle}.gantt_resources_filter .gantt_resources_filter_input{padding:1px 2px;box-sizing:border-box}.gantt_resources_filter .switch_unsetted{vertical-align:middle}.gantt_resource_cell{display:inline-block}.gantt_resource_cell.gantt_resource_cell_checkbox{width:24px;max-width:24px;min-width:24px;vertical-align:middle}.gantt_resource_cell.gantt_resource_cell_label{width:40%;max-width:40%;vertical-align:middle}.gantt_resource_cell.gantt_resource_cell_value{width:30%;max-width:30%;vertical-align:middle}.gantt_resource_cell.gantt_resource_cell_value input,.gantt_resource_cell.gantt_resource_cell_value select{width:80%;vertical-align:middle;padding:1px 2px;box-sizing:border-box}.gantt_resource_cell.gantt_resource_cell_unit{width:10%;max-width:10%;vertical-align:middle}.gantt_resource_early_value{opacity:.8;font-size:.9em}.gantt_cal_quick_info{border:1px solid #cecece;border-radius:6px;position:absolute;z-index:300;box-shadow:3px 3px 3px rgba(0,0,0,.07);background-color:#fff;width:300px;transition:left .5s ease,right .5s;-moz-transition:left .5s ease,right .5s;-webkit-transition:left .5s ease,right .5s;-o-transition:left .5s ease,right .5s}.gantt_no_animate{transition:none;-moz-transition:none;-webkit-transition:none;-o-transition:none}.gantt_cal_quick_info.gantt_qi_left .gantt_qi_big_icon{float:right}.gantt_cal_qi_title{-webkit-border-top-left-radius:6px;-webkit-border-bottom-left-radius:0;-webkit-border-top-right-radius:6px;-webkit-border-bottom-right-radius:0;-moz-border-radius-topleft:6px;-moz-border-radius-bottomleft:0;-moz-border-radius-topright:6px;-moz-border-radius-bottomright:0;border-top-left-radius:6px;border-bottom-left-radius:0;border-top-right-radius:6px;border-bottom-right-radius:0;padding:5px 0 8px 12px;color:#454545;background-color:#fff;border-bottom:1px solid #cecece}.gantt_cal_qi_tdate{font-size:14px;font-weight:700}.gantt_cal_qi_tcontent{font-size:13px}.gantt_cal_qi_content{padding:16px 8px;font-size:13px;color:#454545;overflow:hidden}.gantt_cal_qi_controls{-webkit-border-top-left-radius:0;-webkit-border-bottom-left-radius:6px;-webkit-border-top-right-radius:0;-webkit-border-bottom-right-radius:6px;-moz-border-radius-topleft:0;-moz-border-radius-bottomleft:6px;-moz-border-radius-topright:0;-moz-border-radius-bottomright:6px;border-top-left-radius:0;border-bottom-left-radius:6px;border-top-right-radius:0;border-bottom-right-radius:6px;padding-left:7px}.gantt_cal_qi_controls .gantt_menu_icon{margin-top:6px;background-repeat:no-repeat}.gantt_cal_qi_controls .gantt_menu_icon.icon_edit{width:20px;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAAB3RJTUUH3QYFCjI5ZQj5bAAAAFNJREFUOMvt0zEOACAIA0DkwTymH8bJTRTKZGJXyaWEKPKTCQAH4Ls37cItcDUzsxHNDLZNhCq7Gt1wh9ErV7EjyGAhyGLphlnsClWuS32rn0czAV+vNGrM/LBtAAAAAElFTkSuQmCC)}.gantt_cal_qi_controls .gantt_menu_icon.icon_delete{width:20px;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoV2luZG93cykiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6MjFENzI3NUNDMzA0MTFFMjhBNjJGQTc3MUIyQzYzNEYiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6MjFENzI3NURDMzA0MTFFMjhBNjJGQTc3MUIyQzYzNEYiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDoyMUQ3Mjc1QUMzMDQxMUUyOEE2MkZBNzcxQjJDNjM0RiIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDoyMUQ3Mjc1QkMzMDQxMUUyOEE2MkZBNzcxQjJDNjM0RiIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PmUD0gAAAABvSURBVHjaYvz//z8DIyMjAxYQicReji4J0ofKQNP8HwmgGQbXB8IsWGwDSSwDuioKjY9uBthVjFAXYHUGAQA2kYmBUoAUBpGk0LAwgBvwH+YX4mkwptgLowYMRgOITUyYKRFIN/wnDjQgJySAAAMApryKzL8wjfUAAAAASUVORK5CYII=)}.gantt_qi_big_icon{font-size:13px;border-radius:4px;font-weight:700;background:#fff;margin:5px 9px 8px 0;min-width:60px;line-height:32px;vertical-align:middle;padding:0 10px 0 5px;cursor:pointer;border:1px solid #cecece}.gantt_cal_qi_controls div{float:left;height:32px;text-align:center;line-height:32px}.gantt_cal_quick_info.gantt_qi_hidden{display:none}.gantt_tooltip{padding:10px;position:absolute;z-index:50;white-space:nowrap}.gantt_resource_marker{position:absolute;text-align:center;font-size:14px;color:#fff}.gantt_resource_marker_ok{background:rgba(78,208,134,.75)}.gantt_resource_marker_overtime{background:hsla(0,100%,76%,.69)}.gantt_histogram_label{width:100%;height:100%;position:absolute;z-index:1;font-weight:700;font-size:13px}.gantt_histogram_fill{background-color:rgba(41,157,180,.2);width:100%;position:absolute;bottom:0}.gantt_histogram_hor_bar{height:1px;margin-top:-1px}.gantt_histogram_hor_bar,.gantt_histogram_vert_bar{position:absolute;background:#299db4;margin-left:-1px}.gantt_histogram_vert_bar{width:1px}.gantt_histogram_cell{position:absolute;text-align:center;font-size:13px;color:#000}.gantt_marker{height:100%;width:2px;top:0;position:absolute;text-align:center;background-color:rgba(255,0,0,.4);box-sizing:border-box}.gantt_marker .gantt_marker_content{padding:5px;background:inherit;color:#fff;position:absolute;font-size:12px;line-height:12px;opacity:.8}.gantt_marker_area{position:absolute;top:0;left:0}.gantt_grid_editor_placeholder{position:absolute}.gantt_grid_editor_placeholder>div,.gantt_grid_editor_placeholder input,.gantt_grid_editor_placeholder select{width:100%;height:100%;box-sizing:border-box}.gantt_row_placeholder div{opacity:.5}.gantt_row_placeholder .gantt_add,.gantt_row_placeholder .gantt_file{display:none}.gantt_drag_marker.gantt_grid_dnd_marker{background-color:transparent;transition:all .1s ease}.gantt_grid_dnd_marker_line{height:4px;width:100%;background-color:#3498db}.gantt_grid_dnd_marker_line:before{background:#fff;width:12px;height:12px;box-sizing:border-box;border:3px solid #3498db;border-radius:6px;content:"";line-height:1px;display:block;position:absolute;margin-left:-11px;margin-top:-4px;pointer-events:none}.gantt_grid_dnd_marker_folder{height:100%;width:100%;position:absolute;pointer-events:none;box-sizing:border-box;box-shadow:inset 0 0 0 2px #3f98db;background:transparent}.gantt_overlay_area{display:none}.gantt_overlay,.gantt_overlay_area{position:absolute;height:inherit;width:inherit;top:0;left:0}.gantt_click_drag_rect{position:absolute;left:0;top:0;outline:1px solid #3f98db;background-color:rgba(52,152,219,.3)}.gantt_timeline_move_available,.gantt_timeline_move_available *{cursor:move}.gantt_rtl .gantt_grid{text-align:right}.gantt_rtl .gantt_cell,.gantt_rtl .gantt_row{flex-direction:row-reverse}.gantt_layout_content{width:100%;overflow:auto;box-sizing:border-box}.gantt_layout_cell{position:relative;box-sizing:border-box}.gantt_layout_cell>.gantt_layout_header{background:#33aae8;color:#fff;font-size:17px;padding:5px 10px;box-sizing:border-box}.gantt_layout_header.collapsed_x{background:#a9a9a9}.gantt_layout_header.collapsed_x .gantt_header_arrow:before{content:"\21E7"}.gantt_layout_header.collapsed_y{background:#a9a9a9}.gantt_layout_header.collapsed_y .gantt_header_arrow:before{content:"\21E9"}.gantt_layout_header{cursor:pointer}.gantt_layout_header .gantt_header_arrow{float:right;text-align:right}.gantt_layout_header .gantt_header_arrow:before{content:"\21E6"}.gantt_layout_header.vertical .gantt_header_arrow:before{content:"\21E7"}.gantt_layout_outer_scroll_vertical .gantt_layout_content{overflow-y:hidden}.gantt_layout_outer_scroll_horizontal .gantt_layout_content{overflow-x:hidden}.gantt_layout_x>.gantt_layout_cell{display:inline-block;vertical-align:top}.gantt_layout_x{white-space:nowrap}.gantt_resizing{opacity:.7;background:#f2f2f2}.gantt_layout_cell_border_right.gantt_resizer{overflow:visible;border-right:0}.gantt_resizer{cursor:e-resize;position:relative}.gantt_resizer_y{cursor:n-resize}.gantt_resizer_stick{background:#33aae8;z-index:9999;position:absolute;top:0;width:100%}.gantt_resizer_x .gantt_resizer_x{position:absolute;width:20px;height:100%;margin-left:-10px;top:0;left:0;z-index:1}.gantt_resizer_y .gantt_resizer_y{position:absolute;height:20px;width:100%;top:-10px;left:0;z-index:1}.gantt_resizer_error{background:#cd5c5c!important}.gantt_layout_cell_border_left{border-left:1px solid #cecece}.gantt_layout_cell_border_right{border-right:1px solid #cecece}.gantt_layout_cell_border_top{border-top:1px solid #cecece}.gantt_layout_cell_border_bottom{border-bottom:1px solid #cecece}.gantt_layout_cell_border_transparent{border-color:transparent}.gantt_window{position:absolute;top:50%;left:50%;z-index:999999999;background:#fff}.gantt_window_content{position:relative}.gantt_window_content_header{background:#39c;color:#fff;height:33px;padding:10px 10px 0;border-bottom:2px solid #fff;position:relative}.gantt_window_content_header_text{padding-left:10%}.gantt_window_content_header_buttons{position:absolute;top:10px;right:10px}.gantt_window_content_header_buttons:hover{color:#000;cursor:pointer}.gantt_window_content_resizer{position:absolute;width:15px;height:15px;bottom:0;line-height:15px;right:-1px;text-align:center;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA8AAAAPCAMAAAAMCGV4AAAABlBMVEUAAAAAAAClZ7nPAAAAAXRSTlMAQObYZgAAABZJREFUeAFjIAUwUshlpJDLSIhLGAAACQ4AFk79JaMAAAAASUVORK5CYII=);cursor:nw-resize;z-index:999}.gantt_window_content_frame{position:absolute;top:0;left:0;width:100%;height:100%;background:rgba(0,0,0,.1);z-index:9999}.gantt_window_drag{cursor:pointer!important}.gantt_window_resizing{overflow:visible}.gantt_window_resizing_body{overflow:hidden!important}.gantt_window_modal{background:rgba(0,0,0,.1);z-index:9999;top:0;left:0;width:100%;height:100%;position:fixed}.gantt_cal_light,.gantt_cal_quick_info,.gantt_container,.gantt_message_area,.gantt_modal_box,.gantt_tooltip{text-rendering:optimizeLegibility;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.gantt_noselect{-moz-user-select:-moz-none;-webkit-user-select:none;-ms-user-select:none;user-select:none}.gantt_noselect .gantt_grid_data .gantt_row.odd:hover,.gantt_noselect .gantt_grid_data .gantt_row:hover{background-color:unset}.gantt_drag_marker{position:absolute;top:-1000px;left:-1000px;font-family:Arial;font-size:13px;z-index:1;white-space:nowrap}.gantt_drag_marker .gantt_tree_icon.gantt_blank,.gantt_drag_marker .gantt_tree_icon.gantt_close,.gantt_drag_marker .gantt_tree_icon.gantt_open,.gantt_drag_marker .gantt_tree_indent{display:none}.gantt_empty_state_wrapper{position:relative}.gantt_empty_state{height:100%;max-width:500px;box-sizing:border-box;white-space:pre-line;overflow-wrap:break-word;display:flex;flex-direction:column;justify-content:flex-start;margin:0 auto}.gantt_empty_state_image{background-image:url("data:image/png;base64,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");background-repeat:no-repeat;width:100%;max-width:500px;max-height:500px;margin-left:auto;margin-right:auto;display:block;min-height:0;height:200px;background-size:contain;background-position-x:center;background-position-y:bottom;margin-top:40px}.gantt_empty_state_text{text-align:center}.gantt_empty_state_text_link{color:#03a9f4;background-position:100% 0;background:none;opacity:1;height:unset;cursor:pointer}.gantt_drag_marker,.gantt_drag_marker .gantt_row.odd{background-color:#fff}.gantt_drag_marker .gantt_row{border-left:1px solid #d2d2d2;border-top:1px solid #d2d2d2}.gantt_drag_marker .gantt_cell{border-color:#d2d2d2}.gantt_row.gantt_over,.gantt_task_row.gantt_over{background-color:#0070fe}.gantt_row.gantt_transparent .gantt_cell{opacity:.7}.gantt_task_row.gantt_transparent{background-color:#f8fdfd}.gantt_popup_button.gantt_delete_button{background:#3db9d3;text-shadow:0 -1px 0 #248a9f;color:#fff;font-weight:700;border-width:0}.gantt_container_resize_watcher{background:transparent;width:100%;height:100%;position:absolute;top:0;left:0;z-index:-1;pointer-events:none;border:0;box-sizing:border-box;opacity:0}
src/components/dhtmlxGantt/codebase/sources/dhtmlxgantt.css
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,2027 @@
/*
@license
dhtmlxGantt v.8.0.6 Standard
This version of dhtmlxGantt is distributed under GPL 2.0 license and can be legally used in GPL projects.
To use dhtmlxGantt in non-GPL projects (and get Pro version of the product), please obtain Individual, Commercial, Enterprise or Ultimate license on our site https://dhtmlx.com/docs/products/dhtmlxGantt/#licensing or contact us at info@dhtmlx.com
(c) XB Software
*/
.buttonBg {
  background: #fff;
}
/* colors for items with inline styles assigned (task.color, link.color)*/
.gridHoverStyle {
  background-color: #FFF3A1;
}
.gridSelection {
  background-color: #FFF3A1;
}
.timelineSelection {
  background-color: #FFF3A1;
}
.gantt_grid_scale .gantt_grid_head_cell {
  color: #a6a6a6;
  border-top: none !important;
  border-right: none !important;
}
.gantt_grid_data .gantt_cell {
  border-right: none;
  color: #454545;
}
/*
    Tasks
*/
.gantt_task_link .gantt_link_arrow_right {
  border-width: 6px 6px 6px 6px;
  margin-top: -3px;
}
.gantt_task_link .gantt_link_arrow_left {
  border-width: 6px 6px 6px 6px;
  margin-left: -6px;
  margin-top: -3px;
}
.gantt_task_link .gantt_link_arrow_up {
  border-width: 6px 6px 6px 6px;
}
.gantt_task_link .gantt_link_arrow_down {
  border-width: 6px 6px 6px 6px;
}
.gantt_task_line .gantt_task_progress_drag {
  bottom: -4px;
  height: 10px;
  margin-left: -8px;
  width: 16px;
}
.chartHeaderBg {
  background-color: #fff;
}
.gantt_task .gantt_task_scale .gantt_scale_cell {
  color: #a6a6a6;
  border-right: 1px solid #ebebeb;
}
/*
    project highlight
*/
.gantt_row.gantt_project,
.gantt_row.odd.gantt_project {
  background-color: #edffef;
}
.gantt_task_row.gantt_project,
.gantt_task_row.odd.gantt_project {
  background-color: #f5fff6;
}
.gantt_task_line.gantt_project {
  background-color: #65c16f;
  border: 1px solid #3c9445;
}
.gantt_task_line.gantt_project .gantt_task_progress {
  background-color: #46ad51;
}
/*
    milestone
*/
/*
    lightbox
*/
.buttonBg {
  background: #fff;
}
.gantt_cal_light .gantt_btn_set {
  margin: 5px 10px;
}
.gantt_btn_set.gantt_cancel_btn_set {
  background: #fff;
  color: #454545;
  border: 1px solid #CECECE;
}
.gantt_btn_set.gantt_save_btn_set {
  background: #3db9d3;
  text-shadow: 0 -1px 0 #248a9f;
  color: #fff;
}
.gantt_btn_set.gantt_delete_btn_set {
  text-shadow: 0 -1px 0 #6F6F6F;
  background: #ec8e00;
  text-shadow: 0 -1px 0 #aa6600;
  color: #fff;
}
.gantt_delete_btn {
  margin-top: 2px;
  width: 20px;
}
.gantt_cal_light_wide {
  padding-left: 0 !important;
  padding-right: 0 !important;
}
.gantt_cal_light_wide .gantt_cal_larea {
  border-left: none !important;
  border-right: none !important;
}
/*
    Message
*/
.gantt_popup_button.gantt_ok_button {
  background: #3db9d3;
  text-shadow: 0 -1px 0 #248a9f;
  color: #fff;
  font-weight: bold;
  border-width: 0;
}
.gantt_popup_button.gantt_cancel_button {
  font-weight: bold;
  color: #454544;
}
.gantt_popup_title {
  background-color: #fff;
}
.gantt_popup_shadow {
  box-shadow: 3px 3px 3px rgba(0, 0, 0, 0.07);
}
/*
    Quick info
*/
.gantt_qi_big_icon.icon_edit {
  color: #454545;
  background: #fff;
}
.gantt_qi_big_icon.icon_delete {
  text-shadow: 0 -1px 0 #aa6600;
  background: #ec8e00;
  color: #fff;
  border-width: 0;
}
/*links dnd*/
.gantt_tooltip {
  box-shadow: 3px 3px 3px rgba(0, 0, 0, 0.07);
  background-color: white;
  border-left: 1px solid rgba(0, 0, 0, 0.07);
  border-top: 1px solid rgba(0, 0, 0, 0.07);
  font-family: "Arial";
  font-size: 8pt;
  color: #454545;
}
.gantt_container {
  background-color: #FFFFFF;
  font-family: "Arial";
  font-size: 13px;
  border: 1px solid #CECECE;
  position: relative;
  white-space: nowrap;
  overflow-x: hidden;
  overflow-y: hidden;
}
.gantt_touch_active {
  overscroll-behavior: none;
}
.gantt_task_scroll {
  overflow-x: scroll;
}
.gantt_task,
.gantt_grid {
  position: relative;
  overflow-x: hidden;
  overflow-y: hidden;
  display: inline-block;
  vertical-align: top;
}
.gantt_grid_scale,
.gantt_task_scale {
  color: #6b6b6b;
  font-size: 12px;
  border-bottom: 1px solid #CECECE;
  -moz-box-sizing: border-box;
  box-sizing: border-box;
}
.gantt_grid_scale {
  background-color: #fff;
}
.gantt_task_scale {
  background-color: #fff;
}
.gantt_task_vscroll {
  background-color: #fff;
}
.gantt_scale_line {
  box-sizing: border-box;
  -moz-box-sizing: border-box;
  border-top: 1px solid #CECECE;
}
.gantt_scale_line:first-child {
  border-top: none;
}
.gantt_grid_head_cell {
  display: inline-block;
  vertical-align: top;
  border-right: 1px solid #CECECE;
  text-align: center;
  position: relative;
  cursor: default;
  height: 100%;
  box-sizing: border-box;
  -moz-box-sizing: border-box;
  line-height: 33px;
  -moz-user-select: -moz-none;
  -webkit-user-select: none;
  user-select: none;
  overflow: hidden;
}
.gantt_scale_line {
  clear: both;
}
.gantt_grid_data {
  width: 100%;
  overflow: hidden;
  position: relative;
}
.gantt_row {
  position: relative;
  -webkit-user-select: none;
  -moz-user-select: none;
  -moz-user-select: -moz-none;
}
.gantt_add,
.gantt_grid_head_add {
  width: 100%;
  height: 100%;
  background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoV2luZG93cykiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6NTQ3MjMyMENDNkI0MTFFMjk4MTI5QTg3MDhFNDVDQTkiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6NTQ3MjMyMERDNkI0MTFFMjk4MTI5QTg3MDhFNDVDQTkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo1NDcyMzIwQUM2QjQxMUUyOTgxMjlBODcwOEU0NUNBOSIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDo1NDcyMzIwQkM2QjQxMUUyOTgxMjlBODcwOEU0NUNBOSIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PshZT8UAAABbSURBVHjaYrTdeZmBEsCER+4wEP+H4sPkGGCDg020ARR7gb4GIAcYDKMDdPnDyAbYkGG5DVW9cIQMvUdBBAuUY4vDz8iAcZinA2zgCHqAYQMseAywJcYFAAEGAM+UFGuohFczAAAAAElFTkSuQmCC);
  background-position: center center;
  background-repeat: no-repeat;
  cursor: pointer;
  position: relative;
  -moz-opacity: 0.3;
  opacity: 0.3;
}
.gantt_grid_head_cell.gantt_grid_head_add {
  -moz-opacity: 0.6;
  opacity: 0.6;
  top: 0;
}
.gantt_grid_head_cell.gantt_grid_head_add:hover {
  -moz-opacity: 1;
  opacity: 1;
}
.gantt_grid_data .gantt_row:hover,
.gantt_grid_data .gantt_row.odd:hover {
  background-color: #FFF3A1;
}
.gantt_grid_data .gantt_row:hover .gantt_add,
.gantt_grid_data .gantt_row.odd:hover .gantt_add {
  -moz-opacity: 1;
  opacity: 1;
}
.gantt_task_row,
.gantt_row {
  border-bottom: 1px solid #ebebeb;
}
.gantt_row,
.gantt_task_row {
  background-color: #FFFFFF;
}
.gantt_row.odd,
.gantt_task_row.odd {
  background-color: #FFFFFF;
}
.gantt_row,
.gantt_cell,
.gantt_task_row,
.gantt_task_cell,
.gantt_grid_head_cell,
.gantt_scale_cell {
  box-sizing: border-box;
  -moz-box-sizing: border-box;
}
.gantt_grid_head_cell,
.gantt_scale_cell {
  line-height: inherit;
}
.gantt_grid_scale .gantt_grid_column_resize_wrap {
  cursor: col-resize;
  position: absolute;
  width: 13px;
  margin-left: -7px;
}
.gantt_grid_column_resize_wrap .gantt_grid_column_resize {
  background-color: #CECECE;
  height: 100%;
  width: 1px;
  margin: 0 auto;
}
.gantt_task_grid_row_resize_wrap {
  cursor: row-resize;
  position: absolute;
  height: 13px;
  margin-top: -7px;
  left: 0px;
  width: 100%;
}
.gantt_task_grid_row_resize_wrap .gantt_task_grid_row_resize {
  background-color: #ebebeb;
  top: 6px;
  height: 1px;
  width: 100%;
  margin: 0 auto;
  position: relative;
}
.gantt_drag_marker {
  pointer-events: none;
}
.gantt_drag_marker.gantt_grid_resize_area,
.gantt_drag_marker.gantt_row_grid_resize_area {
  background-color: rgba(231, 231, 231, 0.5);
  height: 100%;
  width: 100%;
  -moz-box-sizing: border-box;
  -webkit-box-sizing: border-box;
  box-sizing: border-box;
}
.gantt_drag_marker.gantt_grid_resize_area {
  border-left: 1px solid #CECECE;
  border-right: 1px solid #CECECE;
}
.gantt_drag_marker.gantt_row_grid_resize_area {
  border-top: 1px solid #CECECE;
  border-bottom: 1px solid #CECECE;
  pointer-events: none;
}
.gantt_row {
  display: flex;
}
.gantt_row > div {
  flex-shrink: 0;
  flex-grow: 0;
}
.gantt_cell {
  vertical-align: top;
  border-right: 1px solid #ebebeb;
  padding-left: 6px;
  padding-right: 6px;
  height: 100%;
  overflow: hidden;
  white-space: nowrap;
  font-size: 13px;
}
.gantt_cell_tree {
  display: flex;
  flex-wrap: nowrap;
}
.gantt_grid_scale .gantt_last_cell,
.gantt_grid_data .gantt_last_cell,
.gantt_task .gantt_task_scale .gantt_scale_cell.gantt_last_cell,
.gantt_task_bg .gantt_last_cell {
  border-right-width: 0px;
}
.gantt_task .gantt_task_scale .gantt_scale_cell.gantt_last_cell {
  border-right-width: 1px;
}
.gantt_task_bg {
  overflow: hidden;
}
.gantt_scale_cell {
  display: inline-block;
  white-space: nowrap;
  overflow: hidden;
  border-right: 1px solid #CECECE;
  text-align: center;
  height: 100%;
}
.gantt_task_cell {
  display: inline-block;
  height: 100%;
  border-right: 1px solid #ebebeb;
}
.gantt_layout_cell.gantt_ver_scroll {
  width: 0px;
  background-color: transparent;
  height: 1px;
  overflow-x: hidden;
  overflow-y: scroll;
  position: absolute;
  right: 0px;
  z-index: 1;
}
.gantt_ver_scroll > div {
  width: 1px;
  height: 1px;
}
.gantt_hor_scroll {
  height: 0px;
  background-color: transparent;
  width: 100%;
  clear: both;
  overflow-x: scroll;
  overflow-y: hidden;
}
.gantt_layout_cell .gantt_hor_scroll {
  position: absolute;
}
.gantt_hor_scroll > div {
  width: 5000px;
  height: 1px;
}
.gantt_tree_indent,
.gantt_tree_icon {
  flex-grow: 0;
  flex-shrink: 0;
}
.gantt_tree_indent {
  width: 15px;
  height: 100%;
}
.gantt_tree_content,
.gantt_tree_icon {
  vertical-align: top;
}
.gantt_tree_icon {
  width: 28px;
  height: 100%;
  background-repeat: no-repeat;
  background-position: center center;
}
.gantt_tree_content {
  height: 100%;
  white-space: nowrap;
  min-width: 0;
}
.gantt_tree_icon.gantt_open {
  background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAYAAABWzo5XAAAArklEQVQ4T2NkoBJgpJI5DEPAoFOnTv0/c+YMQR+bmJgwmJmZwX2E4bVp06b9j4yMZODg4MBp2I8fPxiWL1/OkJWVNUAGcXJyMnz//h3uQrJdRLFBIAPQAchlJLsIFuCMjIwM////B5sJMoRkg2CuIdtrQcHBDOxsbHBfCQgIMHz48AHO//nrF8O6tWsJR7+7uzsDIxMTznT0/98/hp07d+I3iGopm2DewKFg8OV+AJWkfRMrTobLAAAAAElFTkSuQmCC);
  width: 18px;
  cursor: pointer;
}
.gantt_tree_icon.gantt_close {
  background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAYAAABWzo5XAAAAkUlEQVQ4T2NkoBJgpJI5DEPAoFOnTv0/c+YMQR+bmJgwmJmZwX2E4bVp06b9j4yMZODg4MBp2I8fPxiWL1/OkJWVNeIN4uTkxAin79+/M5AcRtgCHGQIyQbhijaiDQoKDmZgZ2PDGf0/f/1iWLd2LeHod3d3Z2BkYsJp0P9//xh27tyJ3yCqpWyCeQOHgsGX+wEZpW4T5LCxKwAAAABJRU5ErkJggg==);
  width: 18px;
  cursor: pointer;
}
.gantt_tree_icon.gantt_blank {
  width: 18px;
}
.gantt_tree_icon.gantt_folder_open {
  background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAYAAABWzo5XAAAAs0lEQVQ4T62T0Q2EIBBEpQlzuaaMsQoqooqLsSljbMLLmMxmUXBR4U+Qt7Mzi2sqLVeJ00SgEMKWAnvvzYLyAyHfT5sU2fXDJSwCAXK8MI0/UTkva7IIFJsg3NSwnKdFoKtAWOQ1CN7CEqeTotE5L7QyJhmBcklZM4ZgTiAr3iOU3kD93ppO5SkMjB1EeXdBWoSkRql3YeIRe+cGvktS056JR9wsmeBUkujCfNXWCPC8GugPqn5ii/hV+FoAAAAASUVORK5CYII=);
}
.gantt_tree_icon.gantt_folder_closed {
  background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAYAAABWzo5XAAAAfElEQVQ4T2NkoBJgpJI5DCgGTZ8+/T82gzMzMwlaCFcAM0RKQgyrI/0Dg/EahmIQyBB0DRvXr4W78tmLV1gtAbmYoEEgnciG4QpTogzCFyEwSyg2CBS2oCAZNQh3cA+hMAJ5AlcKxuVBlOgnNgVjMwyUrQjmamKLGaoZBAAOTFyLnFFW4wAAAABJRU5ErkJggg==);
}
.gantt_tree_icon.gantt_file {
  background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAYAAABWzo5XAAAAeElEQVQ4T2NkoBJgRDZn+vTp/wmZm5mZiaIHph7DICkJMUJmMfgHBmMYhtUgbAo3rl+L4lp0NUQbBPI2umuRDaPIIFAYwAyjv0HoMQALM5JdhG4QLMxGDcKdyIdoGIE89OzFK4KZF5Rl8EY/QROQFGA1iBQD0NUCAJVjcxO0naAQAAAAAElFTkSuQmCC);
}
.gantt_grid_head_cell .gantt_sort {
  position: absolute;
  right: 5px;
  top: 8px;
  width: 7px;
  height: 13px;
  background-repeat: no-repeat;
  background-position: center center;
}
.gantt_grid_head_cell .gantt_sort.gantt_asc {
  background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAcAAAANCAYAAABlyXS1AAAARUlEQVR4nGNgQAKGxib/GbABkIS7b8B/DAUwCRiGK0CXwFBAb1DfP/U/LszwHwi2X7qFgUEArBtdAVwCBmAKMCSQFSDzAWXXaOHsXeqkAAAAAElFTkSuQmCC);
}
.gantt_grid_head_cell .gantt_sort.gantt_desc {
  background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAcAAAANCAYAAABlyXS1AAAARUlEQVR42mNgQAL1/VP/M2ADIIntF2/9x1AAlrh0C47hCmA60DFYwX88gIFGwNDY5D8uDFbg7hvwHx2jmIBTAlkB0e4BAEjlaNtBWJPnAAAAAElFTkSuQmCC);
}
.gantt_inserted,
.gantt_updated {
  font-weight: bold;
}
.gantt_deleted {
  text-decoration: line-through;
}
.gantt_invalid {
  background-color: #FFE0E0;
}
.gantt_error {
  color: red;
}
.gantt_status {
  right: 1px;
  padding: 5px 10px;
  background: rgba(155, 155, 155, 0.1);
  position: absolute;
  top: 1px;
  -webkit-transition: opacity 0.2s;
  transition: opacity 0.2s;
  opacity: 0;
}
.gantt_status.gantt_status_visible {
  opacity: 1;
}
#gantt_ajax_dots span {
  -webkit-transition: opacity 0.2s;
  transition: opacity 0.2s;
  background-repeat: no-repeat;
  opacity: 0;
}
#gantt_ajax_dots span.gantt_dot_visible {
  opacity: 1;
}
.gantt_column_drag_marker {
  border: 1px solid #CECECE;
  opacity: 0.8;
  pointer-events: none;
}
.gantt_grid_head_cell_dragged {
  border: 1px solid #CECECE;
  opacity: 0.3;
}
.gantt_grid_target_marker {
  position: absolute;
  top: 0;
  width: 2px;
  height: 100%;
  background-color: #FFA011;
  transform: translateX(-1px);
}
.gantt_grid_target_marker::before,
.gantt_grid_target_marker::after {
  display: block;
  content: "";
  position: absolute;
  left: -5px;
  width: 0px;
  height: 0px;
  border: 6px solid rgba(0, 0, 0, 0);
}
.gantt_grid_target_marker::before {
  border-top-color: #FFA011;
}
.gantt_grid_target_marker::after {
  bottom: 0;
  border-bottom-color: #FFA011;
}
.gantt_message_area {
  position: fixed;
  right: 5px;
  width: 250px;
  z-index: 1000;
}
.gantt-info {
  min-width: 120px;
  padding: 4px 4px 4px 20px;
  font-family: "Arial";
  z-index: 10000;
  margin: 5px;
  margin-bottom: 10px;
  -webkit-transition: all .5s ease;
  -moz-transition: all .5s ease;
  -o-transition: all .5s ease;
  transition: all .5s ease;
}
.gantt-info.hidden {
  height: 0px;
  padding: 0px;
  border-width: 0px;
  margin: 0px;
  overflow: hidden;
}
.gantt_modal_box {
  overflow: hidden;
  display: inline-block;
  min-width: 250px;
  width: 250px;
  text-align: center;
  position: fixed;
  z-index: 20000;
  box-shadow: 3px 3px 3px rgba(0, 0, 0, 0.07);
  font-family: "Arial";
  border-radius: 6px;
  border: 1px solid #CECECE;
  background: #fff;
}
.gantt_popup_title {
  border-top-left-radius: 6px;
  border-top-right-radius: 6px;
  border-width: 0px;
}
.gantt_button,
.gantt_popup_button {
  border: 1px solid #CECECE;
  height: 30px;
  line-height: 30px;
  display: inline-block;
  margin: 0 5px;
  border-radius: 4px;
  background: #fff;
}
.gantt-info,
.gantt_popup_button,
.gantt_button {
  user-select: none;
  -webkit-user-select: none;
  -moz-user-select: -moz-none;
  cursor: pointer;
}
.gantt_popup_text {
  overflow: hidden;
}
.gantt_popup_controls {
  border-radius: 6px;
  padding: 10px;
}
.gantt_popup_button {
  min-width: 100px;
}
div.dhx_modal_cover {
  background-color: #000;
  cursor: default;
  filter: progid:DXImageTransform.Microsoft.Alpha(opacity=20);
  opacity: 0.2;
  position: fixed;
  z-index: 19999;
  left: 0px;
  top: 0px;
  width: 100%;
  height: 100%;
  border: none;
  zoom: 1;
}
.gantt-info img,
.gantt_modal_box img {
  float: left;
  margin-right: 20px;
}
.gantt-alert-error,
.gantt-confirm-error {
  border: 1px solid #ff0000;
}
/*Skin section*/
.gantt_button input,
.gantt_popup_button div {
  border-radius: 4px;
  font-size: 14px;
  -moz-box-sizing: content-box;
  box-sizing: content-box;
  padding: 0px;
  margin: 0px;
  vertical-align: top;
}
.gantt_popup_title {
  border-bottom: 1px solid #CECECE;
  height: 40px;
  line-height: 40px;
  font-size: 20px;
}
.gantt_popup_text {
  margin: 15px 15px 5px 15px;
  font-size: 14px;
  color: #000;
  min-height: 30px;
  border-radius: 6px;
}
.gantt-info,
.gantt-error {
  font-size: 14px;
  color: #000;
  box-shadow: 3px 3px 3px rgba(0, 0, 0, 0.07);
  padding: 0px;
  background-color: #FFFFFF;
  border-radius: 3px;
  border: 1px solid #FFFFFF;
}
.gantt-info div {
  padding: 5px 10px 5px 10px;
  background-color: #FFFFFF;
  border-radius: 3px;
  border: 1px solid #CECECE;
}
.gantt-error {
  background-color: #d81b1b;
  border: 1px solid #ff3c3c;
}
.gantt-error div {
  background-color: #d81b1b;
  border: 1px solid #940000;
  color: #FFFFFF;
}
.gantt-warning {
  background-color: #FF9000;
  border: 1px solid #ffa633;
}
.gantt-warning div {
  background-color: #FF9000;
  border: 1px solid #b36500;
  color: #FFFFFF;
}
.gantt_grid div,
.gantt_data_area div {
  -ms-touch-action: none;
  -webkit-tap-highlight-color: rgba(0, 0, 0, 0);
}
.gantt_data_area {
  position: relative;
  overflow-x: hidden;
  overflow-y: hidden;
  -moz-user-select: -moz-none;
  -webkit-user-select: none;
  user-select: none;
}
.gantt_links_area {
  position: absolute;
  left: 0px;
  top: 0px;
}
.gantt_task_content,
.gantt_task_progress,
.gantt_side_content {
  line-height: inherit;
  overflow: hidden;
  height: 100%;
}
.gantt_task_content {
  font-size: 12px;
  color: #fff;
  width: 100%;
  top: 0;
  cursor: pointer;
  position: absolute;
  white-space: nowrap;
  text-align: center;
}
.gantt_task_progress {
  text-align: center;
  z-index: 0;
  background: #299cb4;
}
.gantt_task_progress_wrapper {
  border-radius: inherit;
  position: relative;
  width: 100%;
  height: 100%;
  overflow: hidden;
}
.gantt_task_line {
  -webkit-border-radius: 2px;
  -moz-border-radius: 2px;
  border-radius: 2px;
  position: absolute;
  -moz-box-sizing: border-box;
  box-sizing: border-box;
  background-color: #3db9d3;
  border: 1px solid #2898b0;
  -webkit-user-select: none;
  -moz-user-select: none;
  -moz-user-select: -moz-none;
}
.gantt_task_line.gantt_drag_move div {
  cursor: move;
}
.gantt_touch_move,
.gantt_touch_progress .gantt_touch_resize {
  -moz-transform: scale(1.02, 1.1);
  -o-transform: scale(1.02, 1.1);
  -webkit-transform: scale(1.02, 1.1);
  transform: scale(1.02, 1.1);
  -moz-transform-origin: 50%;
  -o-transform-origin: 50%;
  -webkit-transform-origin: 50%;
  transform-origin: 50%;
}
.gantt_touch_progress .gantt_task_progress_drag,
.gantt_touch_resize .gantt_task_drag {
  -moz-transform: scaleY(1.3);
  -o-transform: scaleY(1.3);
  -webkit-transform: scaleY(1.3);
  transform: scaleY(1.3);
  -moz-transform-origin: 50%;
  -o-transform-origin: 50%;
  -webkit-transform-origin: 50%;
  transform-origin: 50%;
}
.gantt_side_content {
  position: absolute;
  white-space: nowrap;
  color: #6e6e6e;
  top: 0;
  font-size: 11px;
}
.gantt_side_content.gantt_left {
  right: 100%;
  padding-right: 20px;
}
.gantt_side_content.gantt_right {
  left: 100%;
  padding-left: 20px;
}
.gantt_side_content.gantt_link_crossing {
  bottom: 8.75px;
  top: auto;
}
.gantt_task_link .gantt_line_wrapper,
.gantt_link_arrow {
  position: absolute;
  cursor: pointer;
}
.gantt_line_wrapper div {
  background-color: #FFA011;
}
.gantt_task_link:hover .gantt_line_wrapper div {
  box-shadow: 0 0 5px 0px #FFA011;
}
.gantt_task_link div.gantt_link_arrow {
  background-color: transparent;
  border-style: solid;
  width: 0px;
  height: 0px;
}
.gantt_link_control {
  position: absolute;
  width: 20px;
  top: 0px;
}
.gantt_link_control div {
  display: none;
  cursor: pointer;
  box-sizing: border-box;
  position: relative;
  top: 50%;
  margin-top: -7.5px;
  vertical-align: middle;
  border: 1px solid #929292;
  -webkit-border-radius: 6.5px;
  -moz-border-radius: 6.5px;
  border-radius: 6.5px;
  height: 13px;
  width: 13px;
  background-color: #f0f0f0;
}
.gantt_link_control.task_right div.gantt_link_point {
  margin-left: 7px;
}
.gantt_link_control div:hover {
  background-color: #FFF;
}
.gantt_link_control.task_left {
  left: -20px;
}
.gantt_link_control.task_right {
  right: -20px;
}
.gantt_task_line.gantt_selected .gantt_link_control div,
.gantt_task_line:hover .gantt_link_control div,
.gantt_task_line.gantt_drag_progress .gantt_link_control div,
.gantt_task_line.gantt_drag_move .gantt_link_control div,
.gantt_task_line.gantt_drag_resize .gantt_link_control div,
.gantt_task_line.gantt_selected .gantt_task_progress_drag,
.gantt_task_line:hover .gantt_task_progress_drag,
.gantt_task_line.gantt_drag_progress .gantt_task_progress_drag,
.gantt_task_line.gantt_drag_move .gantt_task_progress_drag,
.gantt_task_line.gantt_drag_resize .gantt_task_progress_drag,
.gantt_task_line.gantt_selected .gantt_task_drag,
.gantt_task_line:hover .gantt_task_drag,
.gantt_task_line.gantt_drag_progress .gantt_task_drag,
.gantt_task_line.gantt_drag_move .gantt_task_drag,
.gantt_task_line.gantt_drag_resize .gantt_task_drag {
  display: block;
}
.gantt_link_target .gantt_link_control div {
  display: block;
}
.gantt_link_source,
.gantt_link_target {
  box-shadow: 0px 0px 3px #3db9d3;
}
.gantt_link_target.link_start_allow,
.gantt_link_target.link_finish_allow {
  box-shadow: 0px 0px 3px #ffbf5e;
}
.gantt_link_target.link_start_deny,
.gantt_link_target.link_finish_deny {
  box-shadow: 0px 0px 3px #e87e7b;
}
.link_start_allow .gantt_link_control.task_start_date div,
.link_finish_allow .gantt_link_control.task_end_date div {
  background-color: #ffbf5e;
  border-color: #ffa011;
}
.link_start_deny .gantt_link_control.task_start_date div,
.link_finish_deny .gantt_link_control.task_end_date div {
  background-color: #e87e7b;
  border-color: #dd3e3a;
}
.gantt_link_arrow_right {
  border-width: 4px 0 4px 6px;
  border-top-color: transparent !important;
  border-right-color: transparent !important;
  border-bottom-color: transparent !important;
  border-left-color: #FFA011;
  /*margin-top: -1px;*/
}
.gantt_link_arrow_left {
  border-width: 4px 6px 4px 0;
  margin-top: -1px;
  border-top-color: transparent !important;
  border-right-color: #FFA011;
  border-bottom-color: transparent !important;
  border-left-color: transparent !important;
}
.gantt_link_arrow_up {
  border-width: 0 4px 6px 4px;
  border-color: transparent transparent #FFA011 transparent;
  border-top-color: transparent !important;
  border-right-color: transparent !important;
  border-bottom-color: #FFA011;
  border-left-color: transparent !important;
}
.gantt_link_arrow_down {
  border-width: 4px 6px 0 4px;
  border-top-color: #FFA011;
  border-right-color: transparent !important;
  border-bottom-color: transparent !important;
  border-left-color: transparent !important;
}
.gantt_task_drag,
.gantt_task_progress_drag {
  cursor: ew-resize;
  display: none;
  position: absolute;
}
.gantt_task_drag.task_right {
  cursor: e-resize;
}
.gantt_task_drag.task_left {
  cursor: w-resize;
}
.gantt_task_drag {
  height: 100%;
  width: 8px;
  z-index: 1;
  top: -1px;
}
.gantt_task_drag.task_left {
  left: -7px;
}
.gantt_task_drag.task_right {
  right: -7px;
}
.gantt_task_progress_drag {
  height: 8px;
  width: 8px;
  bottom: -4px;
  margin-left: -4px;
  background-position: bottom;
  background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAALCAYAAAB24g05AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoV2luZG93cykiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6MkY3Rjk0RUVDMkYzMTFFMkI1OThEQTA3ODU0OTkzMEEiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6MkY3Rjk0RUZDMkYzMTFFMkI1OThEQTA3ODU0OTkzMEEiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDoyRjdGOTRFQ0MyRjMxMUUyQjU5OERBMDc4NTQ5OTMwQSIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDoyRjdGOTRFREMyRjMxMUUyQjU5OERBMDc4NTQ5OTMwQSIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PobPBzIAAADkSURBVHjaYpk2bRoDDsAExL1QdjEQ/8OmiAWHZk4gXqymqhQM4ty6fU8OSMUA8XdiDBAB4k0a6iqWRga6EKcwMQXduHlnL5DpB8Rv0J2JDFSA+JiOtgZcMwiA2CAxkBxUDVYDLEAKgIpV9XQ0MZwFEgPJAZnHoWpRDAgC4n2W5saiQKfjClQGkBxQDciL+6B6wAbkA/EqJwdrTkUFOQZCAKQGpBbIXA3SCzJggo+XK7OEuBgDsQCkFqgHrBfsBT5eHgZSAUwP2IBfv36TbABMDygdtK1Zv6UESLORaAbIhG6AAAMAKN8wE24DXWcAAAAASUVORK5CYII=);
  background-repeat: no-repeat;
  z-index: 1;
}
.gantt_task_progress_drag:hover {
  background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAALCAYAAAB24g05AAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAs0lEQVQoz6WMPW7CQBgFJxZaiZ60qcgdwjVMmzu8gpwhDULabXyBdHAGuzRHivQiQZovigS2+Jtu95t5T03TMITtCtjEc5VSOgx5k5F4CnxJWgKUUl5sv6eUvk/daiCeAe1fDCCpBtq4jQ/YngO9pMWpGH99OOcDtt8ifmWEuO3D/R+wXQOdpGcuIGkGdNFQ2RawlTTlSsLd2RY55+O95JyPFQ/y8MAE+CylfADpxvYHWP8CXj+JR4wdKHYAAAAASUVORK5CYII=);
}
.gantt_link_tooltip {
  box-shadow: 3px 3px 3px #888888;
  background-color: #fff;
  border-left: 1px dotted #cecece;
  border-top: 1px dotted #cecece;
  font-family: Tahoma;
  font-size: 8pt;
  color: #444;
  padding: 6px;
  line-height: 20px;
}
.gantt_link_direction {
  height: 0px;
  border: 0px none #FFA011;
  border-bottom-style: dashed;
  border-bottom-width: 2px;
  transform-origin: 0% 0%;
  -ms-transform-origin: 0% 0%;
  -webkit-transform-origin: 0% 0%;
  z-index: 2;
  margin-left: 1px;
  position: absolute;
}
.gantt_grid_data .gantt_row.gantt_selected,
.gantt_grid_data .gantt_row.odd.gantt_selected {
  background-color: #FFF3A1;
}
.gantt_task_row.gantt_selected {
  background-color: #FFF3A1;
}
.gantt_task_row.gantt_selected .gantt_task_cell {
  border-right-color: #ffec6e;
}
.gantt_task_line.gantt_selected {
  box-shadow: 0 0 5px #299cb4;
}
.gantt_task_line.gantt_project.gantt_selected {
  box-shadow: 0 0 5px #46ad51;
}
.gantt_task_line.gantt_milestone {
  visibility: hidden;
  background-color: #D33DAF;
  border: 0px solid #61164f;
  box-sizing: content-box;
  -moz-box-sizing: content-box;
}
.gantt_task_line.gantt_milestone div {
  visibility: visible;
}
.gantt_task_line.gantt_milestone .gantt_task_content {
  background: inherit;
  border: inherit;
  border-width: 1px;
  border-radius: inherit;
  box-sizing: border-box;
  -moz-box-sizing: border-box;
  -webkit-transform: rotate(45deg);
  -moz-transform: rotate(45deg);
  -ms-transform: rotate(45deg);
  -o-transform: rotate(45deg);
  transform: rotate(45deg);
}
.gantt_task_line.gantt_task_inline_color {
  border-color: #999999;
}
.gantt_task_line.gantt_task_inline_color .gantt_task_progress {
  background-color: #363636;
  opacity: 0.2;
}
.gantt_task_line.gantt_task_inline_color.gantt_selected {
  box-shadow: 0 0 5px #999999;
}
.gantt_task_line.gantt_task_inline_color.gantt_project.gantt_selected {
  box-shadow: 0 0 5px #999999;
}
.gantt_task_link.gantt_link_inline_color:hover .gantt_line_wrapper div {
  box-shadow: 0 0 5px 0px #999999;
}
.gantt_critical_task {
  background-color: #e63030;
  border-color: #9d3a3a;
}
.gantt_critical_task .gantt_task_progress {
  background-color: rgba(0, 0, 0, 0.4);
}
.gantt_critical_link .gantt_line_wrapper > div {
  background-color: #e63030;
}
.gantt_critical_link .gantt_link_arrow {
  border-color: #e63030;
}
.gantt_row:focus,
.gantt_cell:focus,
.gantt_btn_set:focus,
.gantt_qi_big_icon:focus,
.gantt_popup_button:focus,
.gantt_grid_head_cell:focus {
  -moz-box-shadow: inset 0px 0px 1px 1px #4d90fe;
  -webkit-box-shadow: inset 0px 0px 1px 1px #4d90fe;
  box-shadow: inset 0px 0px 1px 1px #4d90fe;
}
.gantt_split_parent,
.gantt_split_subproject {
  opacity: 0.1;
  pointer-events: none;
}
.gantt_rollup_child .gantt_link_control,
.gantt_rollup_child:hover .gantt_link_control {
  display: none;
}
.gantt_unselectable,
.gantt_unselectable div {
  -webkit-user-select: none;
  -moz-user-select: none;
  -moz-user-select: -moz-none;
}
.gantt_cal_light {
  -webkit-tap-highlight-color: transparent;
  background: #fff;
  border-radius: 6px;
  font-family: "Arial";
  font-size: 13px;
  border: 1px solid #CECECE;
  color: #6b6b6b;
  font-size: 12px;
  position: absolute;
  z-index: 10001;
  width: 550px;
  height: 250px;
  box-shadow: 3px 3px 3px rgba(0, 0, 0, 0.07);
}
.gantt_cal_light_wide {
  width: 650px;
}
.gantt_cal_light select {
  font-family: "Arial";
  border: 1px solid #CECECE;
  font-size: 13px;
  padding: 2px;
  margin: 0px;
}
.gantt_cal_ltitle {
  padding: 7px 10px;
  overflow: hidden;
  white-space: nowrap;
  -webkit-border-top-left-radius: 6px;
  -webkit-border-bottom-left-radius: 0;
  -webkit-border-top-right-radius: 6px;
  -webkit-border-bottom-right-radius: 0;
  -moz-border-radius-topleft: 6px;
  -moz-border-radius-bottomleft: 0;
  -moz-border-radius-topright: 6px;
  -moz-border-radius-bottomright: 0;
  border-top-left-radius: 6px;
  border-bottom-left-radius: 0;
  border-top-right-radius: 6px;
  border-bottom-right-radius: 0;
}
.gantt_cal_ltitle span {
  white-space: nowrap;
}
.gantt_cal_lsection {
  color: #727272;
  font-weight: bold;
  padding: 12px 0px 5px 10px;
}
.gantt_cal_lsection .gantt_fullday {
  float: right;
  margin-right: 5px;
  font-size: 12px;
  font-weight: normal;
  line-height: 20px;
  vertical-align: top;
  cursor: pointer;
}
.gantt_cal_lsection {
  font-size: 13px;
}
.gantt_cal_ltext {
  padding: 2px    10px;
  overflow: hidden;
}
.gantt_cal_ltext textarea {
  overflow-y: auto;
  overflow-x: hidden;
  font-family: "Arial";
  font-size: 13px;
  -moz-box-sizing: border-box;
  -webkit-box-sizing: border-box;
  box-sizing: border-box;
  border: 1px solid #CECECE;
  height: 100%;
  width: 100%;
  outline: none !important;
  resize: none;
}
.gantt_section_constraint [data-constraint-time-select] {
  margin-left: 20px;
}
.gantt_time {
  font-weight: bold;
}
.gantt_cal_light .gantt_title {
  padding-left: 10px;
}
.gantt_cal_larea {
  border: 1px solid #CECECE;
  border-left: none;
  border-right: none;
  background-color: #fff;
  overflow: hidden;
  height: 1px;
}
.gantt_btn_set {
  margin: 10px 7px 5px 10px;
  padding: 5px 15px 5px 10px;
  float: left;
  -webkit-border-radius: 4px;
  -moz-border-radius: 4px;
  border-radius: 4px;
  border-width: 0;
  border-color: #CECECE;
  border-style: solid;
  height: 32px;
  font-weight: bold;
  background: #fff;
  -moz-box-sizing: border-box;
  -webkit-box-sizing: border-box;
  box-sizing: border-box;
  cursor: pointer;
}
.gantt_hidden {
  display: none;
}
.gantt_btn_set div {
  float: left;
  font-size: 13px;
  height: 22px;
  line-height: 22px;
  background-repeat: no-repeat;
  vertical-align: middle;
}
.gantt_save_btn {
  background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoV2luZG93cykiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6MTk1OUU5RDFDMzA0MTFFMkExMUZBQTdDNDAzOUE5RjMiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6MTk1OUU5RDJDMzA0MTFFMkExMUZBQTdDNDAzOUE5RjMiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDoxOTU5RTlDRkMzMDQxMUUyQTExRkFBN0M0MDM5QTlGMyIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDoxOTU5RTlEMEMzMDQxMUUyQTExRkFBN0M0MDM5QTlGMyIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PjDroXYAAAEXSURBVHjaYvz//z8DJYCRUgPIAUxAbAnEHiAHMIBcQCwGaRYXF3e6evXqoffv39/dv38/CymaGSUkJBzv3LlzCsj///fv3wdAihkkIQnEvkAshU8zLy+v7a1bt06ANP/79+87kDIAy505cybq06dPr3p7ezuwGQLTfOPGjWP/ESAZLg8kPKBO+g01RBJNszWyZqC6uSgWgIg/f/4shxnS2dnZBjMEqNkSFGBImi8CKTYMA4BYCGjIczRDHC5dunQQSfN7IKWI4UUkjjdMMdCwnw8ePLjwHxV4Yw1gZA5Q47z/2EELzhhCE+ABGvIQWSeQvwcU38QaAML2wHj+C/X3MyAlijeB4ZBoBOIPQGxJKIVSnBsBAgwABddBclWfcZUAAAAASUVORK5CYII=);
  margin-top: 2px;
  width: 21px;
}
.gantt_cancel_btn {
  margin-top: 2px;
  background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoV2luZG93cykiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6MDkzMDA3MzlDMzA0MTFFMjg2QTVFMzFEQzgwRkJERDYiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6MDkzMDA3M0FDMzA0MTFFMjg2QTVFMzFEQzgwRkJERDYiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDowOTMwMDczN0MzMDQxMUUyODZBNUUzMURDODBGQkRENiIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDowOTMwMDczOEMzMDQxMUUyODZBNUUzMURDODBGQkRENiIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PmYuYOUAAAEdSURBVHjaYvz//z8DJYAFXWDlypU8QKoIiD2A2AwqfAqIdwBxX3h4+Bdk9YzILgBqtgdS84FYEYeF94E4EWjIQZgAE5LmQCB1AKoZZKMPEAtAMYh9GSp3AKjWD8UFQAEhIPshEIOc3wHENUBb/qJ57SyQMoJyPwKxElDNO1gYFEE17wMKVmIJlzNQzeegrjaA6qmBecEbSvfh0GwMxGeBhoPoemQ9MAO0kEIbl2YTqPAFKK2IbMB3AjabYIkRZmQD7kNpMyI0G0PpO8gGbIUFJj7NQDk2INWIrIcJKfBAKcwJqvkcDs0TgFgXGo19KCkRmpDWQdWDEk0NUoCBoq0FqhkE/IEWbKJKUmZEz43QzFSKIzN1481M5ACAAAMAlfl/lCwRpagAAAAASUVORK5CYII=);
  width: 20px;
}
.gantt_delete_btn {
  background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoV2luZG93cykiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6MjFENzI3NUNDMzA0MTFFMjhBNjJGQTc3MUIyQzYzNEYiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6MjFENzI3NURDMzA0MTFFMjhBNjJGQTc3MUIyQzYzNEYiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDoyMUQ3Mjc1QUMzMDQxMUUyOEE2MkZBNzcxQjJDNjM0RiIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDoyMUQ3Mjc1QkMzMDQxMUUyOEE2MkZBNzcxQjJDNjM0RiIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PmUD0gAAAABvSURBVHjaYvz//z8DIyMjAxYQicReji4J0ofKQNP8HwmgGQbXB8IsWGwDSSwDuioKjY9uBthVjFAXYHUGAQA2kYmBUoAUBpGk0LAwgBvwH+YX4mkwptgLowYMRgOITUyYKRFIN/wnDjQgJySAAAMApryKzL8wjfUAAAAASUVORK5CYII=);
  margin-top: 2px;
  width: 20px;
}
.gantt_cal_cover {
  width: 100%;
  height: 100%;
  position: fixed;
  z-index: 10000;
  top: 0px;
  left: 0px;
  background-color: black;
  opacity: 0.1;
  filter: progid:DXImageTransform.Microsoft.Alpha(opacity=10);
}
.gantt_custom_button {
  padding: 0px 3px 0px 3px;
  font-family: "Arial";
  font-size: 13px;
  font-weight: normal;
  margin-right: 10px;
  margin-top: -5px;
  cursor: pointer;
  float: right;
  height: 21px;
  width: 90px;
  border: 1px solid #CECECE;
  text-align: center;
  -webkit-border-radius: 4px;
  -moz-border-radius: 4px;
  -ms-border-radius: 4px;
  -o-border-radius: 4px;
  border-radius: 4px;
}
.gantt_custom_button div {
  cursor: pointer;
  float: none;
  height: 21px;
  line-height: 21px;
  vertical-align: middle;
}
.gantt_custom_button div:first-child {
  display: none;
}
.gantt_cal_light_wide {
  width: 580px;
  padding: 2px 4px;
}
.gantt_cal_light_wide .gantt_cal_larea {
  -moz-box-sizing: border-box;
  -webkit-box-sizing: border-box;
  box-sizing: border-box;
  border: 1px solid #CECECE;
}
.gantt_cal_light_wide .gantt_cal_lsection {
  border: 0px;
  float: left;
  text-align: right;
  width: 80px;
  height: 20px;
  padding: 5px 10px 0px 0px;
}
.gantt_cal_light_wide .gantt_wrap_section {
  position: relative;
  padding: 10px 0;
  overflow: hidden;
  border-bottom: 1px solid #ebebeb;
}
.gantt_cal_light_wide .gantt_section_time {
  overflow: hidden;
  padding-top: 2px !important;
  padding-right: 0px;
  height: 20px !important;
}
.gantt_cal_light_wide .gantt_cal_ltext {
  padding-right: 0px;
}
.gantt_cal_light_wide .gantt_cal_larea {
  padding: 0 10px;
  width: 100%;
}
.gantt_cal_light_wide .gantt_section_time {
  background: transparent;
}
.gantt_cal_light_wide .gantt_cal_checkbox label {
  padding-left: 0px;
}
.gantt_cal_light_wide .gantt_cal_lsection .gantt_fullday {
  float: none;
  margin-right: 0px;
  font-weight: bold;
  cursor: pointer;
}
.gantt_cal_light_wide .gantt_custom_button {
  position: absolute;
  top: 0;
  right: 0;
  margin-top: 2px;
}
.gantt_cal_light_wide .gantt_repeat_right {
  margin-right: 55px;
}
.gantt_cal_light_wide.gantt_cal_light_full {
  width: 738px;
}
.gantt_cal_wide_checkbox input {
  margin-top: 8px;
  margin-left: 14px;
}
.gantt_cal_light input {
  font-size: 13px;
}
.gantt_section_time {
  background-color: white;
  white-space: nowrap;
  padding: 2px 10px 5px;
  padding-top: 2px !important;
}
.gantt_section_time .gantt_time_selects {
  float: left;
  height: 25px;
}
.gantt_section_time .gantt_time_selects select {
  height: 23px;
  padding: 2px;
  border: 1px solid #CECECE;
}
.gantt_duration {
  width: 100px;
  height: 23px;
  float: left;
  white-space: nowrap;
  margin-left: 20px;
  line-height: 23px;
}
.gantt_duration .gantt_duration_value,
.gantt_duration .gantt_duration_dec,
.gantt_duration .gantt_duration_inc {
  -moz-box-sizing: border-box;
  -webkit-box-sizing: border-box;
  box-sizing: border-box;
  text-align: center;
  vertical-align: top;
  height: 100%;
  border: 1px solid #CECECE;
}
.gantt_duration .gantt_duration_value {
  width: 40px;
  padding: 3px 4px;
  border-left-width: 0;
  border-right-width: 0;
}
.gantt_duration .gantt_duration_value.gantt_duration_value_formatted {
  width: 70px;
}
.gantt_duration .gantt_duration_dec,
.gantt_duration .gantt_duration_inc {
  width: 20px;
  padding: 1px;
  padding-bottom: 1px;
  background: #fff;
}
.gantt_duration .gantt_duration_dec {
  -moz-border-top-left-radius: 4px;
  -moz-border-bottom-left-radius: 4px;
  -webkit-border-top-left-radius: 4px;
  -webkit-border-bottom-left-radius: 4px;
  border-top-left-radius: 4px;
  border-bottom-left-radius: 4px;
}
.gantt_duration .gantt_duration_inc {
  margin-right: 4px;
  -moz-border-top-right-radius: 4px;
  -moz-border-bottom-right-radius: 4px;
  -webkit-border-top-right-radius: 4px;
  -webkit-border-bottom-right-radius: 4px;
  border-top-right-radius: 4px;
  border-bottom-right-radius: 4px;
}
.gantt_resources {
  max-height: 150px;
  height: auto;
  overflow-y: auto;
}
.gantt_resource_row {
  display: block;
  padding: 10px 0;
  border-bottom: 1px solid #ebebeb;
  cursor: pointer;
}
.gantt_resource_row input[type=checkbox]:not(:checked),
.gantt_resource_row input[type=checkbox]:not(:checked) ~ div {
  opacity: 0.5;
}
.gantt_resource_toggle {
  vertical-align: middle;
}
.gantt_resources_filter .gantt_resources_filter_input {
  padding: 1px 2px 1px 2px;
  box-sizing: border-box;
}
.gantt_resources_filter .switch_unsetted {
  vertical-align: middle;
}
.gantt_resource_cell {
  display: inline-block;
}
.gantt_resource_cell.gantt_resource_cell_checkbox {
  width: 24px;
  max-width: 24px;
  min-width: 24px;
  vertical-align: middle;
}
.gantt_resource_cell.gantt_resource_cell_label {
  width: 40%;
  max-width: 40%;
  vertical-align: middle;
}
.gantt_resource_cell.gantt_resource_cell_value {
  width: 30%;
  max-width: 30%;
  vertical-align: middle;
}
.gantt_resource_cell.gantt_resource_cell_value input,
.gantt_resource_cell.gantt_resource_cell_value select {
  width: 80%;
  vertical-align: middle;
  padding: 1px 2px 1px 2px;
  box-sizing: border-box;
}
.gantt_resource_cell.gantt_resource_cell_unit {
  width: 10%;
  max-width: 10%;
  vertical-align: middle;
}
.gantt_resource_early_value {
  opacity: 0.8;
  font-size: 0.9em;
}
/* Quick info */
.gantt_cal_quick_info {
  border: 1px solid #CECECE;
  border-radius: 6px;
  position: absolute;
  z-index: 300;
  box-shadow: 3px 3px 3px rgba(0, 0, 0, 0.07);
  background-color: #fff;
  width: 300px;
  transition: left 0.5s ease, right 0.5s;
  -moz-transition: left 0.5s ease, right 0.5s;
  -webkit-transition: left 0.5s ease, right 0.5s;
  -o-transition: left 0.5s ease, right 0.5s;
}
.gantt_no_animate {
  transition: none;
  -moz-transition: none;
  -webkit-transition: none;
  -o-transition: none;
}
.gantt_cal_quick_info.gantt_qi_left .gantt_qi_big_icon {
  float: right;
}
.gantt_cal_qi_title {
  -webkit-border-top-left-radius: 6px;
  -webkit-border-bottom-left-radius: 0;
  -webkit-border-top-right-radius: 6px;
  -webkit-border-bottom-right-radius: 0;
  -moz-border-radius-topleft: 6px;
  -moz-border-radius-bottomleft: 0;
  -moz-border-radius-topright: 6px;
  -moz-border-radius-bottomright: 0;
  border-top-left-radius: 6px;
  border-bottom-left-radius: 0;
  border-top-right-radius: 6px;
  border-bottom-right-radius: 0;
  padding: 5px 0px 8px 12px;
  color: #454545;
  background-color: #fff;
  border-bottom: 1px solid #CECECE;
}
.gantt_cal_qi_tdate {
  font-size: 14px;
  font-weight: bold;
}
.gantt_cal_qi_tcontent {
  font-size: 13px;
}
.gantt_cal_qi_content {
  padding: 16px 8px;
  font-size: 13px;
  color: #454545;
  overflow: hidden;
}
.gantt_cal_qi_controls {
  -webkit-border-top-left-radius: 0;
  -webkit-border-bottom-left-radius: 6px;
  -webkit-border-top-right-radius: 0;
  -webkit-border-bottom-right-radius: 6px;
  -moz-border-radius-topleft: 0;
  -moz-border-radius-bottomleft: 6px;
  -moz-border-radius-topright: 0;
  -moz-border-radius-bottomright: 6px;
  border-top-left-radius: 0;
  border-bottom-left-radius: 6px;
  border-top-right-radius: 0;
  border-bottom-right-radius: 6px;
  padding-left: 7px;
}
.gantt_cal_qi_controls .gantt_menu_icon {
  margin-top: 6px;
  background-repeat: no-repeat;
}
.gantt_cal_qi_controls .gantt_menu_icon.icon_edit {
  width: 20px;
  background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAAB3RJTUUH3QYFCjI5ZQj5bAAAAFNJREFUOMvt0zEOACAIA0DkwTymH8bJTRTKZGJXyaWEKPKTCQAH4Ls37cItcDUzsxHNDLZNhCq7Gt1wh9ErV7EjyGAhyGLphlnsClWuS32rn0czAV+vNGrM/LBtAAAAAElFTkSuQmCC);
}
.gantt_cal_qi_controls .gantt_menu_icon.icon_delete {
  width: 20px;
  background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoV2luZG93cykiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6MjFENzI3NUNDMzA0MTFFMjhBNjJGQTc3MUIyQzYzNEYiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6MjFENzI3NURDMzA0MTFFMjhBNjJGQTc3MUIyQzYzNEYiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDoyMUQ3Mjc1QUMzMDQxMUUyOEE2MkZBNzcxQjJDNjM0RiIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDoyMUQ3Mjc1QkMzMDQxMUUyOEE2MkZBNzcxQjJDNjM0RiIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PmUD0gAAAABvSURBVHjaYvz//z8DIyMjAxYQicReji4J0ofKQNP8HwmgGQbXB8IsWGwDSSwDuioKjY9uBthVjFAXYHUGAQA2kYmBUoAUBpGk0LAwgBvwH+YX4mkwptgLowYMRgOITUyYKRFIN/wnDjQgJySAAAMApryKzL8wjfUAAAAASUVORK5CYII=);
}
.gantt_qi_big_icon {
  font-size: 13px;
  border-radius: 4px;
  font-weight: bold;
  background: #fff;
  margin: 5px 9px 8px 0px;
  min-width: 60px;
  line-height: 32px;
  vertical-align: middle;
  padding: 0px 10px 0px 5px;
  cursor: pointer;
  border: 1px solid #CECECE;
}
.gantt_cal_qi_controls div {
  float: left;
  height: 32px;
  text-align: center;
  line-height: 32px;
}
.gantt_cal_quick_info.gantt_qi_hidden {
  display: none;
}
.gantt_tooltip {
  padding: 10px;
  position: absolute;
  z-index: 50;
  white-space: nowrap;
}
.gantt_resource_marker {
  position: absolute;
  text-align: center;
  font-size: 14px;
  color: #FFF;
}
.gantt_resource_marker_ok {
  background: rgba(78, 208, 134, 0.75);
}
.gantt_resource_marker_overtime {
  background: rgba(255, 134, 134, 0.69);
}
.gantt_histogram_label {
  width: 100%;
  height: 100%;
  position: absolute;
  z-index: 1;
  font-weight: bold;
  font-size: 13px;
}
.gantt_histogram_fill {
  background-color: rgba(41, 157, 180, 0.2);
  width: 100%;
  position: absolute;
  bottom: 0;
}
.gantt_histogram_hor_bar {
  height: 1px;
  position: absolute;
  background: #299DB4;
  margin-top: -1px;
  margin-left: -1px;
}
.gantt_histogram_vert_bar {
  width: 1px;
  position: absolute;
  background: #299DB4;
  margin-left: -1px;
}
.gantt_histogram_cell {
  position: absolute;
  text-align: center;
  font-size: 13px;
  color: #000000;
}
.gantt_marker {
  height: 100%;
  width: 2px;
  top: 0;
  position: absolute;
  text-align: center;
  background-color: rgba(255, 0, 0, 0.4);
  -moz-box-sizing: border-box;
  -webkit-box-sizing: border-box;
  box-sizing: border-box;
}
.gantt_marker .gantt_marker_content {
  padding: 5px;
  background: inherit;
  color: white;
  position: absolute;
  font-size: 12px;
  line-height: 12px;
  opacity: 0.8;
}
.gantt_marker_area {
  position: absolute;
  top: 0;
  left: 0;
}
.gantt_grid_editor_placeholder {
  position: absolute;
}
.gantt_grid_editor_placeholder > div,
.gantt_grid_editor_placeholder input,
.gantt_grid_editor_placeholder select {
  width: 100%;
  height: 100%;
  box-sizing: border-box;
}
.gantt_row_placeholder div {
  opacity: 0.5;
}
.gantt_row_placeholder .gantt_file,
.gantt_row_placeholder .gantt_add {
  display: none;
}
.gantt_drag_marker.gantt_grid_dnd_marker {
  background-color: transparent;
  transition: all 0.1s ease ;
}
.gantt_grid_dnd_marker_line {
  height: 4px;
  width: 100%;
  background-color: #3498db;
}
.gantt_grid_dnd_marker_line::before {
  background: #fff;
  width: 12px;
  height: 12px;
  box-sizing: border-box;
  border: 3px solid #3498db;
  border-radius: 6px;
  content: "";
  line-height: 1px;
  display: block;
  position: absolute;
  margin-left: -11px;
  margin-top: -4px;
  pointer-events: none;
}
.gantt_grid_dnd_marker_folder {
  height: 100%;
  width: 100%;
  position: absolute;
  pointer-events: none;
  box-sizing: border-box;
  box-shadow: 0 0 0px 2px #3f98db inset;
  background: transparent;
}
.gantt_overlay_area {
  position: absolute;
  height: inherit;
  width: inherit;
  top: 0;
  left: 0;
  display: none;
}
.gantt_overlay {
  position: absolute;
  left: 0;
  top: 0;
  height: inherit;
  width: inherit;
}
.gantt_click_drag_rect {
  position: absolute;
  left: 0;
  top: 0;
  outline: 1px solid #3f98db;
  background-color: rgba(52, 152, 219, 0.3);
}
.gantt_timeline_move_available,
.gantt_timeline_move_available * {
  cursor: move;
}
.gantt_rtl .gantt_grid {
  text-align: right;
}
.gantt_rtl .gantt_row,
.gantt_rtl .gantt_cell {
  flex-direction: row-reverse;
}
.gantt_layout_content {
  width: 100%;
  overflow: auto;
  box-sizing: border-box;
}
.gantt_layout_cell {
  position: relative;
  box-sizing: border-box;
}
.gantt_layout_cell > .gantt_layout_header {
  background: #33aae8;
  color: white;
  font-size: 17px;
  padding: 5px 10px;
  box-sizing: border-box;
}
.gantt_layout_header.collapsed_x {
  background: #a9a9a9;
}
.gantt_layout_header.collapsed_x .gantt_header_arrow:before {
  content: "\21E7";
}
.gantt_layout_header.collapsed_y {
  background: #a9a9a9;
}
.gantt_layout_header.collapsed_y .gantt_header_arrow:before {
  content: "\21E9";
}
.gantt_layout_header {
  cursor: pointer;
}
.gantt_layout_header .gantt_header_arrow {
  float: right;
  text-align: right;
}
.gantt_layout_header .gantt_header_arrow:before {
  content: "\21E6";
}
.gantt_layout_header.vertical .gantt_header_arrow:before {
  content: "\21E7";
}
.gantt_layout_outer_scroll_vertical .gantt_layout_content {
  overflow-y: hidden;
}
.gantt_layout_outer_scroll_horizontal .gantt_layout_content {
  overflow-x: hidden;
}
.gantt_layout_x > .gantt_layout_cell {
  display: inline-block;
  vertical-align: top;
}
.gantt_layout_x {
  white-space: nowrap;
}
.gantt_resizing {
  opacity: 0.7;
  background: #f2f2f2;
}
.gantt_layout_cell_border_right.gantt_resizer {
  overflow: visible;
  border-right: 0;
}
.gantt_resizer {
  cursor: e-resize;
  position: relative;
}
.gantt_resizer_y {
  cursor: n-resize;
}
.gantt_resizer_stick {
  background: #33aae8;
  z-index: 9999;
  position: absolute;
  top: 0;
  width: 100%;
}
.gantt_resizer_x .gantt_resizer_x {
  position: absolute;
  width: 20px;
  height: 100%;
  margin-left: -10px;
  top: 0;
  left: 0;
  z-index: 1;
}
.gantt_resizer_y .gantt_resizer_y {
  position: absolute;
  height: 20px;
  width: 100%;
  top: -10px;
  left: 0;
  z-index: 1;
}
.gantt_resizer_error {
  background: indianred!important;
}
.gantt_noselect {
  -webkit-user-select: none;
  user-select: none;
}
.gantt_layout_cell_border_left {
  border-left: 1px solid #CECECE;
}
.gantt_layout_cell_border_right {
  border-right: 1px solid #CECECE;
}
.gantt_layout_cell_border_top {
  border-top: 1px solid #CECECE;
}
.gantt_layout_cell_border_bottom {
  border-bottom: 1px solid #CECECE;
}
.gantt_layout_cell_border_transparent {
  border-color: transparent;
}
.gantt_window {
  position: absolute;
  top: 50%;
  left: 50%;
  z-index: 999999999;
  background: white;
}
.gantt_window_content {
  position: relative;
}
.gantt_window_content_header {
  background: #39c;
  color: #ffffff;
  height: 33px;
  padding: 10px 10px 0 10px;
  border-bottom: solid 2px #ffffff;
  position: relative;
}
.gantt_window_content_header_text {
  padding-left: 10%;
}
.gantt_window_content_header_buttons {
  position: absolute;
  top: 10px;
  right: 10px;
}
.gantt_window_content_header_buttons:hover {
  color: #000000;
  cursor: pointer;
}
.gantt_window_content_resizer {
  position: absolute;
  width: 15px;
  height: 15px;
  bottom: 0;
  line-height: 15px;
  right: -1px;
  text-align: center;
  background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA8AAAAPCAMAAAAMCGV4AAAABlBMVEUAAAAAAAClZ7nPAAAAAXRSTlMAQObYZgAAABZJREFUeAFjIAUwUshlpJDLSIhLGAAACQ4AFk79JaMAAAAASUVORK5CYII=);
  cursor: nw-resize;
  z-index: 999;
}
.gantt_window_content_frame {
  position: absolute;
  top: 0;
  left: 0;
  width: 100%;
  height: 100%;
  background: rgba(0, 0, 0, 0.1);
  z-index: 9999;
}
.gantt_window_drag {
  cursor: pointer!important;
}
.gantt_window_resizing {
  overflow: visible;
}
.gantt_window_resizing_body {
  overflow: hidden!important;
}
.gantt_window_modal {
  background: rgba(0, 0, 0, 0.1);
  z-index: 9999;
  top: 0;
  left: 0;
  width: 100%;
  height: 100%;
  position: fixed;
}
.gantt_container,
.gantt_cal_light,
.gantt_message_area,
.gantt_modal_box,
.gantt_cal_quick_info,
.gantt_tooltip {
  text-rendering: optimizeLegibility;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
}
.gantt_noselect {
  -moz-user-select: -moz-none;
  -webkit-user-select: none;
  -ms-user-select: none;
  user-select: none;
}
.gantt_noselect .gantt_grid_data .gantt_row:hover,
.gantt_noselect .gantt_grid_data .gantt_row.odd:hover {
  background-color: unset;
}
.gantt_drag_marker {
  position: absolute;
  top: -1000px;
  left: -1000px;
  font-family: "Arial";
  font-size: 13px;
  z-index: 1;
  white-space: nowrap;
}
.gantt_drag_marker .gantt_tree_indent,
.gantt_drag_marker .gantt_tree_icon.gantt_blank,
.gantt_drag_marker .gantt_tree_icon.gantt_open,
.gantt_drag_marker .gantt_tree_icon.gantt_close {
  display: none;
}
.gantt_empty_state_wrapper {
  position: relative;
}
.gantt_empty_state {
  height: 100%;
  max-width: 500px;
  box-sizing: border-box;
  white-space: pre-line;
  overflow-wrap: break-word;
  display: flex;
  flex-direction: column;
  justify-content: flex-start;
  margin: 0 auto;
}
.gantt_empty_state_image {
  background-image: url('data:image/png;base64,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');
  background-repeat: no-repeat;
  width: 100%;
  max-width: 500px;
  max-height: 500px;
  margin-left: auto;
  margin-right: auto;
  display: block;
  min-height: 0;
  height: 200px;
  background-size: contain;
  background-position-x: center;
  background-position-y: bottom;
  margin-top: 40px;
}
.gantt_empty_state_text {
  text-align: center;
}
.gantt_empty_state_text_link {
  color: #03A9F4;
  background-position: top right;
  background: none;
  opacity: 1;
  height: unset;
  cursor: pointer;
}
.gantt_drag_marker,
.gantt_drag_marker .gantt_row.odd {
  background-color: #FFFFFF;
}
.gantt_drag_marker .gantt_row {
  border-left: 1px solid #d2d2d2;
  border-top: 1px solid #d2d2d2;
}
.gantt_drag_marker .gantt_cell {
  border-color: #d2d2d2;
}
.gantt_row.gantt_over,
.gantt_task_row.gantt_over {
  background-color: #0070fe;
}
.gantt_row.gantt_transparent .gantt_cell {
  opacity: 0.7;
}
.gantt_task_row.gantt_transparent {
  background-color: #f8fdfd;
}
.gantt_popup_button.gantt_delete_button {
  background: #3db9d3;
  text-shadow: 0 -1px 0 #248a9f;
  color: #fff;
  font-weight: bold;
  border-width: 0;
}
.gantt_container_resize_watcher {
  background: transparent;
  width: 100%;
  height: 100%;
  position: absolute;
  top: 0px;
  left: 0px;
  z-index: -1;
  pointer-events: none;
  border: 0;
  box-sizing: border-box;
  opacity: 0;
}
src/components/dhtmlxGantt/codebase/sources/dhtmlxgantt.js
¶Ô±ÈÐÂÎļþ
ÎļþÌ«´ó
src/components/dhtmlxGantt/codebase/sources/skins/dhtmlxgantt_broadway.css
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,2136 @@
/*
@license
dhtmlxGantt v.8.0.6 Standard
This version of dhtmlxGantt is distributed under GPL 2.0 license and can be legally used in GPL projects.
To use dhtmlxGantt in non-GPL projects (and get Pro version of the product), please obtain Individual, Commercial, Enterprise or Ultimate license on our site https://dhtmlx.com/docs/products/dhtmlxGantt/#licensing or contact us at info@dhtmlx.com
(c) XB Software
*/
.buttonBg {
  background: #fff;
}
/*lighten(@alterColor,7%)*/
/* colors for items with inline styles assigned (task.color, link.color)*/
.gantt_grid {
  background-color: #d6d6d6;
}
.gantt_grid_scale {
  background-color: #4f4f4f;
  background-size: 5px 5px;
  background-size: 4px 4px;
  background-position: 0px 0px, 2px 2px;
  background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.05) 25%, transparent 25%, transparent 75%, rgba(255, 255, 255, 0.05) 75%, rgba(255, 255, 255, 0.05)), linear-gradient(45deg, rgba(255, 255, 255, 0.05) 25%, transparent 25%, transparent 75%, rgba(255, 255, 255, 0.05) 75%, rgba(255, 255, 255, 0.05));
  background-image: -moz-linear-gradient(45deg, rgba(255, 255, 255, 0.05) 25%, transparent 25%, transparent 75%, rgba(255, 255, 255, 0.05) 75%, rgba(255, 255, 255, 0.05)), linear-gradient(45deg, rgba(255, 255, 255, 0.05) 25%, transparent 25%, transparent 75%, rgba(255, 255, 255, 0.05) 75%, rgba(255, 255, 255, 0.05));
  background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.05) 25%, transparent 25%, transparent 75%, rgba(255, 255, 255, 0.05) 75%, rgba(255, 255, 255, 0.05)), linear-gradient(45deg, rgba(255, 255, 255, 0.05) 25%, transparent 25%, transparent 75%, rgba(255, 255, 255, 0.05) 75%, rgba(255, 255, 255, 0.05));
  color: #e1e1e1;
  font-size: 14px;
}
.gantt_grid_scale .gantt_grid_head_cell {
  border-top: none !important;
  border-right: 1px solid #4f4f4f !important;
  border-left: 1px solid #5b5b5b !important;
}
.gantt_popup_title {
  background-color: #4f4f4f;
  background-size: 5px 5px;
  background-size: 4px 4px;
  background-position: 0px 0px, 2px 2px;
  background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.05) 25%, transparent 25%, transparent 75%, rgba(255, 255, 255, 0.05) 75%, rgba(255, 255, 255, 0.05)), linear-gradient(45deg, rgba(255, 255, 255, 0.05) 25%, transparent 25%, transparent 75%, rgba(255, 255, 255, 0.05) 75%, rgba(255, 255, 255, 0.05));
  background-image: -moz-linear-gradient(45deg, rgba(255, 255, 255, 0.05) 25%, transparent 25%, transparent 75%, rgba(255, 255, 255, 0.05) 75%, rgba(255, 255, 255, 0.05)), linear-gradient(45deg, rgba(255, 255, 255, 0.05) 25%, transparent 25%, transparent 75%, rgba(255, 255, 255, 0.05) 75%, rgba(255, 255, 255, 0.05));
  background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.05) 25%, transparent 25%, transparent 75%, rgba(255, 255, 255, 0.05) 75%, rgba(255, 255, 255, 0.05)), linear-gradient(45deg, rgba(255, 255, 255, 0.05) 25%, transparent 25%, transparent 75%, rgba(255, 255, 255, 0.05) 75%, rgba(255, 255, 255, 0.05));
  color: #e1e1e1;
  font-size: 14px;
}
.gantt_grid_data .gantt_row,
.gantt_grid_data .gantt_row.odd {
  background-color: #dbdbdb;
  border-top: 1px solid #f6f6f6;
  border-bottom: 1px solid #bababa;
}
.gantt_grid_data .gantt_row .gantt_cell,
.gantt_grid_data .gantt_row.odd .gantt_cell {
  border-right: none;
}
.gridHoverStyle {
  border-top: 1px solid #ededed;
  background-color: #ededed;
}
.gridSelection {
  background-color: #FFF3A1;
  border-top-color: #fff087;
}
.timelineSelection {
  background-color: #FFF3A1;
}
/*Tree icons*/
.gantt_cell .gantt_tree_icon.gantt_folder_open {
  background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABEAAAAPCAYAAAACsSQRAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoV2luZG93cykiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6ODhBMDIwQzhDRUI3MTFFMjg4RUJDNUMzQkZEREM2RDIiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6ODhBMDIwQzlDRUI3MTFFMjg4RUJDNUMzQkZEREM2RDIiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo4OEEwMjBDNkNFQjcxMUUyODhFQkM1QzNCRkREQzZEMiIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDo4OEEwMjBDN0NFQjcxMUUyODhFQkM1QzNCRkREQzZEMiIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PntuzoIAAACySURBVHjaYmTAAjo6Ov4z4AAVFRWM6GJM6ALt7e0OUCYjFowsDwfIEjDbDRgZGSf8//8fUzEj4wGgeAGQeQFJ+CIj0IALQEl9BjIB0NADTJQYAHWdAxMDFQBVDGEB+ukgxYYAcQNSzCCnh4NY0o89VkOAAbMfV5gBNR0AytuDXAs01AEUxbhcwoAj1c4HaUTi9wMNwWnb/0ERO0xA/z6k0IyP4NgBGpRApgEfgHgBQIABAAcyQOF3e6FiAAAAAElFTkSuQmCC);
}
.gantt_cell .gantt_tree_icon.gantt_folder_closed {
  background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABEAAAAPCAYAAAACsSQRAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoV2luZG93cykiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6ODhBMDIwQzhDRUI3MTFFMjg4RUJDNUMzQkZEREM2RDIiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6ODhBMDIwQzlDRUI3MTFFMjg4RUJDNUMzQkZEREM2RDIiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo4OEEwMjBDNkNFQjcxMUUyODhFQkM1QzNCRkREQzZEMiIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDo4OEEwMjBDN0NFQjcxMUUyODhFQkM1QzNCRkREQzZEMiIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PntuzoIAAACySURBVHjaYmTAAjo6Ov4z4AAVFRWM6GJM6ALt7e0OUCYjFowsDwfIEjDbDRgZGSf8//8fUzEj4wGgeAGQeQFJ+CIj0IALQEl9BjIB0NADTJQYAHWdAxMDFQBVDGEB+ukgxYYAcQNSzCCnh4NY0o89VkOAAbMfV5gBNR0AytuDXAs01AEUxbhcwoAj1c4HaUTi9wMNwWnb/0ERO0xA/z6k0IyP4NgBGpRApgEfgHgBQIABAAcyQOF3e6FiAAAAAElFTkSuQmCC);
}
.gantt_cell .gantt_tree_icon.gantt_file {
  background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoV2luZG93cykiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6RkQ2NjJFM0ZDRUI3MTFFMkFGNzc4M0YxNUM2NzkwMTIiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6RkQ2NjJFNDBDRUI3MTFFMkFGNzc4M0YxNUM2NzkwMTIiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDpGRDY2MkUzRENFQjcxMUUyQUY3NzgzRjE1QzY3OTAxMiIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDpGRDY2MkUzRUNFQjcxMUUyQUY3NzgzRjE1QzY3OTAxMiIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PhnnqLUAAAExSURBVHjanFPtUcMwDI28AB0BJkg6AWEEJqAbxPxLJkh+phuUDdiAbtAwAYxAJ0jf60k51ecWDt3pZFtPn5akSKjv+3uIBlyLSMW3eZ4niD1423Xdt8dLYjzCqCluEJyNcPJq9+CMJzMGaAtet20rZJ7Bb+eIIhHYw0UGLvIRwBoRplx04CrgWModgwAXhTXj8Usjr73xMAwzJbNInBwU/8ASoqV9LbInYqwc2tJBrZdd8XcaVT4GpFOa52topL1Ks9CGVuGXL/vU40fqZPlGA7E5GX1NvQ7U4sSw1AWdMNIm07CfxIn1K6rcB2sI5yCXhXPyjPO7fuOLNfNikAAi+OnWILEUYFfLICWjXGptO12cyRk20G+sduiq/y7TOXJ2G906R13n0n0nmz2m63wSYAB0aMIyVTQbywAAAABJRU5ErkJggg==);
}
/*
    Gantt part
*/
.chartHeaderBg {
  background-color: #dbdbdb;
}
.gantt_task .gantt_task_scale .gantt_scale_cell {
  border-left: 1px solid #f6f6f6;
  border-right: 1px solid #bababa;
  color: #494949;
  font-size: 14px;
}
/*
    Tasks
*/
.taskProgressStyle {
  border-right: 1px solid #1cb3fb;
  box-shadow: -1px 0px 0 1px #04a1eb inset;
}
.gantt_task_line {
  background-size: 4px 4px;
  background-image: -webkit-linear-gradient(-45deg, rgba(255, 255, 255, 0.2) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.2) 50%, rgba(255, 255, 255, 0.2) 75%, transparent 75%, transparent);
  background-image: linear-gradient(135deg, rgba(255, 255, 255, 0.2) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.2) 50%, rgba(255, 255, 255, 0.2) 75%, transparent 75%, transparent);
  background-image: -moz-linear-gradient(0deg, transparent, transparent);
}
.gantt_task_line .gantt_task_content {
  text-align: left;
  font-weight: bold;
  padding: 0 8px;
  box-sizing: border-box;
}
.gantt_task_link .gantt_link_arrow_right {
  border-width: 5px 5px 5px 5px;
  margin-top: -1px;
}
.gantt_task_link .gantt_link_arrow_left {
  border-width: 5px 5px 5px 5px;
  margin-left: -3px;
  margin-top: -2px;
}
.gantt_task_link .gantt_link_arrow_up {
  border-width: 5px 5px 5px 5px;
}
.gantt_task_link .gantt_link_arrow_down {
  border-width: 5px 5px 5px 5px;
}
.gantt_task_line .gantt_task_progress_drag {
  bottom: -4px;
  height: 10px;
  margin-left: -8px;
  width: 16px;
}
/*
    project highlight
*/
.gantt_row.gantt_project,
.gantt_row.odd.gantt_project {
  background-color: #edffef;
}
.gantt_task_row.gantt_project,
.gantt_task_row.odd.gantt_project {
  background-color: #f5fff6;
}
.gantt_task_line.gantt_project {
  background-color: #65c16f;
  border: 1px solid #3c9445;
}
.gantt_task_line.gantt_project .gantt_task_progress {
  background-color: #46ad51;
  border-right: 1px solid #5abc65;
  box-shadow: -1px 0px 0 1px #45a94f inset;
}
/*
    milestone
*/
/*
    lightbox
*/
.gantt_cal_light {
  background-color: #fff;
  border: none !important;
}
.gantt_cal_light .gantt_cal_lsection {
  color: #959595;
}
.gantt_cal_light .gantt_cal_larea {
  border-bottom: none;
}
.gantt_cal_light .gantt_cal_ltitle {
  background-color: #4f4f4f;
  background-size: 5px 5px;
  background-size: 4px 4px;
  background-position: 0px 0px, 2px 2px;
  background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.05) 25%, transparent 25%, transparent 75%, rgba(255, 255, 255, 0.05) 75%, rgba(255, 255, 255, 0.05)), linear-gradient(45deg, rgba(255, 255, 255, 0.05) 25%, transparent 25%, transparent 75%, rgba(255, 255, 255, 0.05) 75%, rgba(255, 255, 255, 0.05));
  background-image: -moz-linear-gradient(45deg, rgba(255, 255, 255, 0.05) 25%, transparent 25%, transparent 75%, rgba(255, 255, 255, 0.05) 75%, rgba(255, 255, 255, 0.05)), linear-gradient(45deg, rgba(255, 255, 255, 0.05) 25%, transparent 25%, transparent 75%, rgba(255, 255, 255, 0.05) 75%, rgba(255, 255, 255, 0.05));
  background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.05) 25%, transparent 25%, transparent 75%, rgba(255, 255, 255, 0.05) 75%, rgba(255, 255, 255, 0.05)), linear-gradient(45deg, rgba(255, 255, 255, 0.05) 25%, transparent 25%, transparent 75%, rgba(255, 255, 255, 0.05) 75%, rgba(255, 255, 255, 0.05));
  font-size: 14px;
  color: #e1e1e1;
  position: relative;
  padding-top: 12px;
  padding-bottom: 12px;
  font-weight: normal;
}
.gantt_cal_light .gantt_cal_ltitle .gantt_title {
  font-size: 13px;
}
.gantt_cal_light .gantt_btn_set {
  margin: 5px 10px;
}
.buttonBg {
  background: #fff;
}
.gantt_btn_set.gantt_save_btn_set {
  background: #46ad51;
  text-shadow: 0 -1px 0 #307738;
  color: #fff;
}
.gantt_btn_set.gantt_delete_btn_set {
  margin-left: 0;
  text-shadow: 0 -1px 0 #6F6F6F;
  background: #ec8e00;
  text-shadow: 0 -1px 0 #aa6600;
  color: #fff;
}
.gantt_delete_btn {
  margin-top: 2px;
  width: 20px;
}
.gantt_cal_light_wide {
  padding-left: 0 !important;
  padding-right: 0 !important;
}
.gantt_cal_light_wide .gantt_cal_larea {
  border-left: none !important;
  border-right: none !important;
}
.gantt_cal_ltitle .gantt_cancel_btn {
  background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAMCAYAAABbayygAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH3QYLEgAjh/DRnAAAAMdJREFUGNN1kcsNwjAQRF9iCkgJdJCUkBJQpDkDFUALdBAqAM6WQglQAlxzSglQgAUH1tIKgS9ezzztz0Vd18QYW0lXfpzsFeM49sAGOEpaf0FHYAnsS6evYoy9g3qDAB6Flb4BtYk568Huu6RmBhBCaFNKV4MPrso9hNAClABd1z2ABfB00BNYmEf5NeTrT/wBh2GogDNQOa8CzuZ9QOuvccPkgZqU0gXA7xFgL2nr1pP1ne/xlCEAi0/5nfc4lzT9+cK5pOkNX8hRT8hMyVwAAAAASUVORK5CYII=);
  width: 30px;
  top: 0px;
  right: 0;
  background-position: 6px 12px;
  background-repeat: no-repeat;
  position: absolute;
  height: 100%;
}
/*
    Message
*/
.gantt_popup_button.gantt_ok_button {
  background: #46ad51;
  text-shadow: 0 -1px 0 #307738;
  color: #fff;
  font-weight: bold;
}
.gantt_popup_button.gantt_cancel_button {
  font-weight: bold;
}
.gantt_popup_shadow {
  box-shadow: 3px 3px 3px rgba(0, 0, 0, 0.07);
}
/*
    Quick info
*/
.gantt_qi_big_icon.icon_edit {
  color: #454544;
}
.gantt_qi_big_icon.icon_delete {
  text-shadow: 0 -1px 0 #6F6F6F;
  background: #ec8e00;
  text-shadow: 0 -1px 0 #aa6600;
  color: #fff;
  font-weight: bold;
}
/*
    links dnd
*/
.gantt_tooltip {
  box-shadow: 3px 3px 3px rgba(0, 0, 0, 0.07);
  background-color: white;
  border-left: 1px solid rgba(0, 0, 0, 0.07);
  border-top: 1px solid rgba(0, 0, 0, 0.07);
  font-family: "Arial";
  font-size: 8pt;
  color: #494949;
}
.gantt_container {
  background-color: #fff;
  font-family: "Arial";
  font-size: 13px;
  border: 1px solid #bababa;
  position: relative;
  white-space: nowrap;
  overflow-x: hidden;
  overflow-y: hidden;
}
.gantt_touch_active {
  overscroll-behavior: none;
}
.gantt_task_scroll {
  overflow-x: scroll;
}
.gantt_task,
.gantt_grid {
  position: relative;
  overflow-x: hidden;
  overflow-y: hidden;
  display: inline-block;
  vertical-align: top;
}
.gantt_grid_scale,
.gantt_task_scale {
  color: #494949;
  font-size: 12px;
  border-bottom: 1px solid #bababa;
  -moz-box-sizing: border-box;
  box-sizing: border-box;
}
.gantt_grid_scale {
  background-color: #4f4f4f;
  background-size: 5px 5px;
  background-size: 4px 4px;
  background-position: 0px 0px, 2px 2px;
  background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.05) 25%, transparent 25%, transparent 75%, rgba(255, 255, 255, 0.05) 75%, rgba(255, 255, 255, 0.05)), linear-gradient(45deg, rgba(255, 255, 255, 0.05) 25%, transparent 25%, transparent 75%, rgba(255, 255, 255, 0.05) 75%, rgba(255, 255, 255, 0.05));
  background-image: -moz-linear-gradient(45deg, rgba(255, 255, 255, 0.05) 25%, transparent 25%, transparent 75%, rgba(255, 255, 255, 0.05) 75%, rgba(255, 255, 255, 0.05)), linear-gradient(45deg, rgba(255, 255, 255, 0.05) 25%, transparent 25%, transparent 75%, rgba(255, 255, 255, 0.05) 75%, rgba(255, 255, 255, 0.05));
  background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.05) 25%, transparent 25%, transparent 75%, rgba(255, 255, 255, 0.05) 75%, rgba(255, 255, 255, 0.05)), linear-gradient(45deg, rgba(255, 255, 255, 0.05) 25%, transparent 25%, transparent 75%, rgba(255, 255, 255, 0.05) 75%, rgba(255, 255, 255, 0.05));
  color: #e1e1e1;
  font-size: 14px;
}
.gantt_task_scale {
  background-color: #dbdbdb;
}
.gantt_task_vscroll {
  background-color: #dbdbdb;
}
.gantt_scale_line {
  box-sizing: border-box;
  -moz-box-sizing: border-box;
  border-top: 1px solid #bababa;
}
.gantt_scale_line:first-child {
  border-top: none;
}
.gantt_grid_head_cell {
  display: inline-block;
  vertical-align: top;
  border-right: 1px solid #bababa;
  text-align: center;
  position: relative;
  cursor: default;
  height: 100%;
  box-sizing: border-box;
  -moz-box-sizing: border-box;
  line-height: 33px;
  -moz-user-select: -moz-none;
  -webkit-user-select: none;
  user-select: none;
  overflow: hidden;
}
.gantt_scale_line {
  clear: both;
}
.gantt_grid_data {
  width: 100%;
  overflow: hidden;
  position: relative;
}
.gantt_row {
  position: relative;
  -webkit-user-select: none;
  -moz-user-select: none;
  -moz-user-select: -moz-none;
}
.gantt_add,
.gantt_grid_head_add {
  width: 100%;
  height: 100%;
  background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH3QYHCygkHejN0gAAAD1JREFUOMtjtN15mYESwIJLwvHo6v/I/P3WoYzY1DExUAiGgQGMtjsvYwQYsWC/dSjjcAmD0YREo0AkFgAASgkTQxnJ6ggAAAAASUVORK5CYII=);
  background-position: center center;
  background-repeat: no-repeat;
  cursor: pointer;
  position: relative;
  -moz-opacity: 0.3;
  opacity: 0.3;
}
.gantt_grid_head_cell.gantt_grid_head_add {
  -moz-opacity: 0.6;
  opacity: 0.6;
  top: 0;
}
.gantt_grid_head_cell.gantt_grid_head_add:hover {
  -moz-opacity: 1;
  opacity: 1;
}
.gantt_grid_data .gantt_row:hover,
.gantt_grid_data .gantt_row.odd:hover {
  border-top: 1px solid #ededed;
  background-color: #ededed;
}
.gantt_grid_data .gantt_row:hover .gantt_add,
.gantt_grid_data .gantt_row.odd:hover .gantt_add {
  -moz-opacity: 1;
  opacity: 1;
}
.gantt_task_row,
.gantt_row {
  border-bottom: 1px solid #ebebeb;
}
.gantt_row,
.gantt_task_row {
  background-color: #fff;
}
.gantt_row.odd,
.gantt_task_row.odd {
  background-color: #fff;
}
.gantt_row,
.gantt_cell,
.gantt_task_row,
.gantt_task_cell,
.gantt_grid_head_cell,
.gantt_scale_cell {
  box-sizing: border-box;
  -moz-box-sizing: border-box;
}
.gantt_grid_head_cell,
.gantt_scale_cell {
  line-height: inherit;
}
.gantt_grid_scale .gantt_grid_column_resize_wrap {
  cursor: col-resize;
  position: absolute;
  width: 13px;
  margin-left: -7px;
}
.gantt_grid_column_resize_wrap .gantt_grid_column_resize {
  background-color: #bababa;
  height: 100%;
  width: 1px;
  margin: 0 auto;
}
.gantt_task_grid_row_resize_wrap {
  cursor: row-resize;
  position: absolute;
  height: 13px;
  margin-top: -7px;
  left: 0px;
  width: 100%;
}
.gantt_task_grid_row_resize_wrap .gantt_task_grid_row_resize {
  background-color: #ebebeb;
  top: 6px;
  height: 1px;
  width: 100%;
  margin: 0 auto;
  position: relative;
}
.gantt_drag_marker {
  pointer-events: none;
}
.gantt_drag_marker.gantt_grid_resize_area,
.gantt_drag_marker.gantt_row_grid_resize_area {
  background-color: rgba(231, 231, 231, 0.5);
  height: 100%;
  width: 100%;
  -moz-box-sizing: border-box;
  -webkit-box-sizing: border-box;
  box-sizing: border-box;
}
.gantt_drag_marker.gantt_grid_resize_area {
  border-left: 1px solid #bababa;
  border-right: 1px solid #bababa;
}
.gantt_drag_marker.gantt_row_grid_resize_area {
  border-top: 1px solid #bababa;
  border-bottom: 1px solid #bababa;
  pointer-events: none;
}
.gantt_row {
  display: flex;
}
.gantt_row > div {
  flex-shrink: 0;
  flex-grow: 0;
}
.gantt_cell {
  vertical-align: top;
  border-right: 1px solid #ebebeb;
  padding-left: 6px;
  padding-right: 6px;
  height: 100%;
  overflow: hidden;
  white-space: nowrap;
  font-size: 13px;
}
.gantt_cell_tree {
  display: flex;
  flex-wrap: nowrap;
}
.gantt_grid_scale .gantt_last_cell,
.gantt_grid_data .gantt_last_cell,
.gantt_task .gantt_task_scale .gantt_scale_cell.gantt_last_cell,
.gantt_task_bg .gantt_last_cell {
  border-right-width: 0px;
}
.gantt_task .gantt_task_scale .gantt_scale_cell.gantt_last_cell {
  border-right-width: 1px;
}
.gantt_task_bg {
  overflow: hidden;
}
.gantt_scale_cell {
  display: inline-block;
  white-space: nowrap;
  overflow: hidden;
  border-right: 1px solid #bababa;
  text-align: center;
  height: 100%;
}
.gantt_task_cell {
  display: inline-block;
  height: 100%;
  border-right: 1px solid #ebebeb;
}
.gantt_layout_cell.gantt_ver_scroll {
  width: 0px;
  background-color: transparent;
  height: 1px;
  overflow-x: hidden;
  overflow-y: scroll;
  position: absolute;
  right: 0px;
  z-index: 1;
}
.gantt_ver_scroll > div {
  width: 1px;
  height: 1px;
}
.gantt_hor_scroll {
  height: 0px;
  background-color: transparent;
  width: 100%;
  clear: both;
  overflow-x: scroll;
  overflow-y: hidden;
}
.gantt_layout_cell .gantt_hor_scroll {
  position: absolute;
}
.gantt_hor_scroll > div {
  width: 5000px;
  height: 1px;
}
.gantt_tree_indent,
.gantt_tree_icon {
  flex-grow: 0;
  flex-shrink: 0;
}
.gantt_tree_indent {
  width: 15px;
  height: 100%;
}
.gantt_tree_content,
.gantt_tree_icon {
  vertical-align: top;
}
.gantt_tree_icon {
  width: 28px;
  height: 100%;
  background-repeat: no-repeat;
  background-position: center center;
}
.gantt_tree_content {
  height: 100%;
  white-space: nowrap;
  min-width: 0;
}
.gantt_tree_icon.gantt_open {
  background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAYAAABWzo5XAAAAW0lEQVQ4T2NkoBJgpJI5DEPEoGnTpv0n5OWsrCwU32B4DWQIuiJshqKro7tBIK+iWEquiyg2CFugg102YC6CRRjFXsOZnMj1GoaBBA2CBSTFKZuQAbjkB1/uBwBrVFUTxDarVwAAAABJRU5ErkJggg==);
  width: 18px;
  cursor: pointer;
}
.gantt_tree_icon.gantt_close {
  background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAYAAABWzo5XAAAASElEQVQ4T2NkoBJgpJI5DEPEoGnTpv0n5OWsrCwU32B4DWQIuiJshqKrG8EGYQt0cHCMhhFqYiMrHcECkuKUTcgAXPKDL/cDAMbOURO+6QJ7AAAAAElFTkSuQmCC);
  width: 18px;
  cursor: pointer;
}
.gantt_tree_icon.gantt_blank {
  width: 18px;
}
.gantt_tree_icon.gantt_folder_open {
  background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAYAAABWzo5XAAAAs0lEQVQ4T62T0Q2EIBBEpQlzuaaMsQoqooqLsSljbMLLmMxmUXBR4U+Qt7Mzi2sqLVeJ00SgEMKWAnvvzYLyAyHfT5sU2fXDJSwCAXK8MI0/UTkva7IIFJsg3NSwnKdFoKtAWOQ1CN7CEqeTotE5L7QyJhmBcklZM4ZgTiAr3iOU3kD93ppO5SkMjB1EeXdBWoSkRql3YeIRe+cGvktS056JR9wsmeBUkujCfNXWCPC8GugPqn5ii/hV+FoAAAAASUVORK5CYII=);
}
.gantt_tree_icon.gantt_folder_closed {
  background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAYAAABWzo5XAAAAfElEQVQ4T2NkoBJgpJI5DCgGTZ8+/T82gzMzMwlaCFcAM0RKQgyrI/0Dg/EahmIQyBB0DRvXr4W78tmLV1gtAbmYoEEgnciG4QpTogzCFyEwSyg2CBS2oCAZNQh3cA+hMAJ5AlcKxuVBlOgnNgVjMwyUrQjmamKLGaoZBAAOTFyLnFFW4wAAAABJRU5ErkJggg==);
}
.gantt_tree_icon.gantt_file {
  background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAYAAABWzo5XAAAAeElEQVQ4T2NkoBJgRDZn+vTp/wmZm5mZiaIHph7DICkJMUJmMfgHBmMYhtUgbAo3rl+L4lp0NUQbBPI2umuRDaPIIFAYwAyjv0HoMQALM5JdhG4QLMxGDcKdyIdoGIE89OzFK4KZF5Rl8EY/QROQFGA1iBQD0NUCAJVjcxO0naAQAAAAAElFTkSuQmCC);
}
.gantt_grid_head_cell .gantt_sort {
  position: absolute;
  right: 5px;
  top: 8px;
  width: 7px;
  height: 13px;
  background-repeat: no-repeat;
  background-position: center center;
}
.gantt_grid_head_cell .gantt_sort.gantt_asc {
  background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAcAAAANCAYAAABlyXS1AAAARUlEQVR42mNgQAL1/VP/M2ADIIntF2/9x1AAlrh0C47hCmA60DFYwX88gIFGwNDY5D8uDFbg7hvwHx2jmIBTAlkB0e4BAEjlaNtBWJPnAAAAAElFTkSuQmCC);
}
.gantt_grid_head_cell .gantt_sort.gantt_desc {
  background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAcAAAANCAYAAABlyXS1AAAARUlEQVR4nGNgQAKGxib/GbABkIS7b8B/DAUwCRiGK0CXwFBAb1DfP/U/LszwHwi2X7qFgUEArBtdAVwCBmAKMCSQFSDzAWXXaOHsXeqkAAAAAElFTkSuQmCC);
}
.gantt_inserted,
.gantt_updated {
  font-weight: bold;
}
.gantt_deleted {
  text-decoration: line-through;
}
.gantt_invalid {
  background-color: #FFE0E0;
}
.gantt_error {
  color: red;
}
.gantt_status {
  right: 1px;
  padding: 5px 10px;
  background: rgba(155, 155, 155, 0.1);
  position: absolute;
  top: 1px;
  -webkit-transition: opacity 0.2s;
  transition: opacity 0.2s;
  opacity: 0;
}
.gantt_status.gantt_status_visible {
  opacity: 1;
}
#gantt_ajax_dots span {
  -webkit-transition: opacity 0.2s;
  transition: opacity 0.2s;
  background-repeat: no-repeat;
  opacity: 0;
}
#gantt_ajax_dots span.gantt_dot_visible {
  opacity: 1;
}
.gantt_column_drag_marker {
  border: 1px solid #CECECE;
  opacity: 0.8;
  pointer-events: none;
}
.gantt_grid_head_cell_dragged {
  border: 1px solid #CECECE;
  opacity: 0.3;
}
.gantt_grid_target_marker {
  position: absolute;
  top: 0;
  width: 2px;
  height: 100%;
  background-color: #FFA011;
  transform: translateX(-1px);
}
.gantt_grid_target_marker::before,
.gantt_grid_target_marker::after {
  display: block;
  content: "";
  position: absolute;
  left: -5px;
  width: 0px;
  height: 0px;
  border: 6px solid rgba(0, 0, 0, 0);
}
.gantt_grid_target_marker::before {
  border-top-color: #FFA011;
}
.gantt_grid_target_marker::after {
  bottom: 0;
  border-bottom-color: #FFA011;
}
.gantt_message_area {
  position: fixed;
  right: 5px;
  width: 250px;
  z-index: 1000;
}
.gantt-info {
  min-width: 120px;
  padding: 4px 4px 4px 20px;
  font-family: "Arial";
  z-index: 10000;
  margin: 5px;
  margin-bottom: 10px;
  -webkit-transition: all .5s ease;
  -moz-transition: all .5s ease;
  -o-transition: all .5s ease;
  transition: all .5s ease;
}
.gantt-info.hidden {
  height: 0px;
  padding: 0px;
  border-width: 0px;
  margin: 0px;
  overflow: hidden;
}
.gantt_modal_box {
  overflow: hidden;
  display: inline-block;
  min-width: 250px;
  width: 250px;
  text-align: center;
  position: fixed;
  z-index: 20000;
  box-shadow: 3px 3px 3px rgba(0, 0, 0, 0.07);
  font-family: "Arial";
  border-radius: 6px;
  border: 1px solid #bababa;
  background: #fff;
}
.gantt_popup_title {
  border-top-left-radius: 6px;
  border-top-right-radius: 6px;
  border-width: 0px;
}
.gantt_button,
.gantt_popup_button {
  border: 1px solid #bababa;
  height: 30px;
  line-height: 30px;
  display: inline-block;
  margin: 0 5px;
  border-radius: 4px;
  background: #fff;
}
.gantt-info,
.gantt_popup_button,
.gantt_button {
  user-select: none;
  -webkit-user-select: none;
  -moz-user-select: -moz-none;
  cursor: pointer;
}
.gantt_popup_text {
  overflow: hidden;
}
.gantt_popup_controls {
  border-radius: 6px;
  padding: 10px;
}
.gantt_popup_button {
  min-width: 100px;
}
div.dhx_modal_cover {
  background-color: #000;
  cursor: default;
  filter: progid:DXImageTransform.Microsoft.Alpha(opacity=20);
  opacity: 0.2;
  position: fixed;
  z-index: 19999;
  left: 0px;
  top: 0px;
  width: 100%;
  height: 100%;
  border: none;
  zoom: 1;
}
.gantt-info img,
.gantt_modal_box img {
  float: left;
  margin-right: 20px;
}
.gantt-alert-error,
.gantt-confirm-error {
  border: 1px solid #ff0000;
}
/*Skin section*/
.gantt_button input,
.gantt_popup_button div {
  border-radius: 4px;
  font-size: 14px;
  -moz-box-sizing: content-box;
  box-sizing: content-box;
  padding: 0px;
  margin: 0px;
  vertical-align: top;
}
.gantt_popup_title {
  border-bottom: 1px solid #bababa;
  height: 40px;
  line-height: 40px;
  font-size: 20px;
}
.gantt_popup_text {
  margin: 15px 15px 5px 15px;
  font-size: 14px;
  color: #000;
  min-height: 30px;
  border-radius: 6px;
}
.gantt-info,
.gantt-error {
  font-size: 14px;
  color: #000;
  box-shadow: 3px 3px 3px rgba(0, 0, 0, 0.07);
  padding: 0px;
  background-color: #FFFFFF;
  border-radius: 3px;
  border: 1px solid #FFFFFF;
}
.gantt-info div {
  padding: 5px 10px 5px 10px;
  background-color: #FFFFFF;
  border-radius: 3px;
  border: 1px solid #bababa;
}
.gantt-error {
  background-color: #d81b1b;
  border: 1px solid #ff3c3c;
}
.gantt-error div {
  background-color: #d81b1b;
  border: 1px solid #940000;
  color: #FFFFFF;
}
.gantt-warning {
  background-color: #F57C00;
  border: 1px solid #ffa242;
}
.gantt-warning div {
  background-color: #F57C00;
  border: 1px solid #845030;
  color: #FFFFFF;
}
.gantt_grid div,
.gantt_data_area div {
  -ms-touch-action: none;
  -webkit-tap-highlight-color: rgba(0, 0, 0, 0);
}
.gantt_data_area {
  position: relative;
  overflow-x: hidden;
  overflow-y: hidden;
  -moz-user-select: -moz-none;
  -webkit-user-select: none;
  user-select: none;
}
.gantt_links_area {
  position: absolute;
  left: 0px;
  top: 0px;
}
.gantt_task_content,
.gantt_task_progress,
.gantt_side_content {
  line-height: inherit;
  overflow: hidden;
  height: 100%;
}
.gantt_task_content {
  font-size: 13px;
  color: #fff;
  width: 100%;
  top: 0;
  cursor: pointer;
  position: absolute;
  white-space: nowrap;
  text-align: center;
}
.gantt_task_progress {
  text-align: center;
  z-index: 0;
  background: #04a4f0;
  border-right: 1px solid #1cb3fb;
  box-shadow: -1px 0px 0 1px #04a1eb inset;
}
.gantt_task_progress_wrapper {
  border-radius: inherit;
  position: relative;
  width: 100%;
  height: 100%;
  overflow: hidden;
}
.gantt_task_line {
  -webkit-border-radius: 2px;
  -moz-border-radius: 2px;
  border-radius: 2px;
  position: absolute;
  -moz-box-sizing: border-box;
  box-sizing: border-box;
  background-color: #17b2fb;
  border: 1px solid #049ae1;
  -webkit-user-select: none;
  -moz-user-select: none;
  -moz-user-select: -moz-none;
}
.gantt_task_line.gantt_drag_move div {
  cursor: move;
}
.gantt_touch_move,
.gantt_touch_progress .gantt_touch_resize {
  -moz-transform: scale(1.02, 1.1);
  -o-transform: scale(1.02, 1.1);
  -webkit-transform: scale(1.02, 1.1);
  transform: scale(1.02, 1.1);
  -moz-transform-origin: 50%;
  -o-transform-origin: 50%;
  -webkit-transform-origin: 50%;
  transform-origin: 50%;
}
.gantt_touch_progress .gantt_task_progress_drag,
.gantt_touch_resize .gantt_task_drag {
  -moz-transform: scaleY(1.3);
  -o-transform: scaleY(1.3);
  -webkit-transform: scaleY(1.3);
  transform: scaleY(1.3);
  -moz-transform-origin: 50%;
  -o-transform-origin: 50%;
  -webkit-transform-origin: 50%;
  transform-origin: 50%;
}
.gantt_side_content {
  position: absolute;
  white-space: nowrap;
  color: #6e6e6e;
  top: 0;
  font-size: 11px;
  font-size: 12px;
}
.gantt_side_content.gantt_left {
  right: 100%;
  padding-right: 20px;
}
.gantt_side_content.gantt_right {
  left: 100%;
  padding-left: 20px;
}
.gantt_side_content.gantt_link_crossing {
  bottom: 8.75px;
  top: auto;
}
.gantt_task_link .gantt_line_wrapper,
.gantt_link_arrow {
  position: absolute;
  cursor: pointer;
}
.gantt_line_wrapper div {
  background-color: #FFA011;
}
.gantt_task_link:hover .gantt_line_wrapper div {
  box-shadow: 0 0 5px 0px #FFA011;
}
.gantt_task_link div.gantt_link_arrow {
  background-color: transparent;
  border-style: solid;
  width: 0px;
  height: 0px;
}
.gantt_link_control {
  position: absolute;
  width: 20px;
  top: 0px;
}
.gantt_link_control div {
  display: none;
  cursor: pointer;
  box-sizing: border-box;
  position: relative;
  top: 50%;
  margin-top: -7.5px;
  vertical-align: middle;
  border: 1px solid #929292;
  -webkit-border-radius: 6.5px;
  -moz-border-radius: 6.5px;
  border-radius: 6.5px;
  height: 13px;
  width: 13px;
  background-color: #f0f0f0;
}
.gantt_link_control.task_right div.gantt_link_point {
  margin-left: 7px;
}
.gantt_link_control div:hover {
  background-color: #FFF;
}
.gantt_link_control.task_left {
  left: -20px;
}
.gantt_link_control.task_right {
  right: -20px;
}
.gantt_task_line.gantt_selected .gantt_link_control div,
.gantt_task_line:hover .gantt_link_control div,
.gantt_task_line.gantt_drag_progress .gantt_link_control div,
.gantt_task_line.gantt_drag_move .gantt_link_control div,
.gantt_task_line.gantt_drag_resize .gantt_link_control div,
.gantt_task_line.gantt_selected .gantt_task_progress_drag,
.gantt_task_line:hover .gantt_task_progress_drag,
.gantt_task_line.gantt_drag_progress .gantt_task_progress_drag,
.gantt_task_line.gantt_drag_move .gantt_task_progress_drag,
.gantt_task_line.gantt_drag_resize .gantt_task_progress_drag,
.gantt_task_line.gantt_selected .gantt_task_drag,
.gantt_task_line:hover .gantt_task_drag,
.gantt_task_line.gantt_drag_progress .gantt_task_drag,
.gantt_task_line.gantt_drag_move .gantt_task_drag,
.gantt_task_line.gantt_drag_resize .gantt_task_drag {
  display: block;
}
.gantt_link_target .gantt_link_control div {
  display: block;
}
.gantt_link_source,
.gantt_link_target {
  box-shadow: 0px 0px 3px #04a4f0;
}
.gantt_link_target.link_start_allow,
.gantt_link_target.link_finish_allow {
  box-shadow: 0px 0px 3px #ffbf5e;
}
.gantt_link_target.link_start_deny,
.gantt_link_target.link_finish_deny {
  box-shadow: 0px 0px 3px #e87e7b;
}
.link_start_allow .gantt_link_control.task_start_date div,
.link_finish_allow .gantt_link_control.task_end_date div {
  background-color: #ffbf5e;
  border-color: #ffa011;
}
.link_start_deny .gantt_link_control.task_start_date div,
.link_finish_deny .gantt_link_control.task_end_date div {
  background-color: #e87e7b;
  border-color: #dd3e3a;
}
.gantt_link_arrow_right {
  border-width: 2.5px 0 2.5px 5px;
  border-top-color: transparent !important;
  border-right-color: transparent !important;
  border-bottom-color: transparent !important;
  border-left-color: #FFA011;
  /*margin-top: -1px;*/
}
.gantt_link_arrow_left {
  border-width: 2.5px 5px 2.5px 0;
  margin-top: -1px;
  border-top-color: transparent !important;
  border-right-color: #FFA011;
  border-bottom-color: transparent !important;
  border-left-color: transparent !important;
}
.gantt_link_arrow_up {
  border-width: 0 2.5px 5px 2.5px;
  border-color: transparent transparent #FFA011 transparent;
  border-top-color: transparent !important;
  border-right-color: transparent !important;
  border-bottom-color: #FFA011;
  border-left-color: transparent !important;
}
.gantt_link_arrow_down {
  border-width: 2.5px 5px 0 2.5px;
  border-top-color: #FFA011;
  border-right-color: transparent !important;
  border-bottom-color: transparent !important;
  border-left-color: transparent !important;
}
.gantt_task_drag,
.gantt_task_progress_drag {
  cursor: ew-resize;
  display: none;
  position: absolute;
}
.gantt_task_drag.task_right {
  cursor: e-resize;
}
.gantt_task_drag.task_left {
  cursor: w-resize;
}
.gantt_task_drag {
  height: 100%;
  width: 8px;
  z-index: 1;
  top: -1px;
}
.gantt_task_drag.task_left {
  left: -7px;
}
.gantt_task_drag.task_right {
  right: -7px;
}
.gantt_task_progress_drag {
  height: 8px;
  width: 8px;
  bottom: -4px;
  margin-left: -4px;
  background-position: bottom;
  background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAALCAYAAAB24g05AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoV2luZG93cykiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6MkY3Rjk0RUVDMkYzMTFFMkI1OThEQTA3ODU0OTkzMEEiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6MkY3Rjk0RUZDMkYzMTFFMkI1OThEQTA3ODU0OTkzMEEiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDoyRjdGOTRFQ0MyRjMxMUUyQjU5OERBMDc4NTQ5OTMwQSIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDoyRjdGOTRFREMyRjMxMUUyQjU5OERBMDc4NTQ5OTMwQSIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PobPBzIAAADkSURBVHjaYpk2bRoDDsAExL1QdjEQ/8OmiAWHZk4gXqymqhQM4ty6fU8OSMUA8XdiDBAB4k0a6iqWRga6EKcwMQXduHlnL5DpB8Rv0J2JDFSA+JiOtgZcMwiA2CAxkBxUDVYDLEAKgIpV9XQ0MZwFEgPJAZnHoWpRDAgC4n2W5saiQKfjClQGkBxQDciL+6B6wAbkA/EqJwdrTkUFOQZCAKQGpBbIXA3SCzJggo+XK7OEuBgDsQCkFqgHrBfsBT5eHgZSAUwP2IBfv36TbABMDygdtK1Zv6UESLORaAbIhG6AAAMAKN8wE24DXWcAAAAASUVORK5CYII=);
  background-repeat: no-repeat;
  z-index: 1;
}
.gantt_task_progress_drag:hover {
  background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAALCAYAAAB24g05AAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAq0lEQVQoz6WMsQnCABBFXyII9rqB7qDNZQdtsoWirmAltpnh0BkUfhOHEqLNiaAJIeZ19+//lxRFQR3ungKnOHd5nld1vbRhPALOkjaSNsAlsnaBu4+Bq6TVO5O0BK7xaxa4+xQoJS2+i5GV0fkVuPs8xjMaiN89uh+Buy+Bm6QJLUgaA7fYkJjZGjhJGtCBLMsqYIuZPf/FzJ4pPektSMzsAOyBYcftAzi+ANj8gShpeTzJAAAAAElFTkSuQmCC);
}
.gantt_link_tooltip {
  box-shadow: 3px 3px 3px #888888;
  background-color: #fff;
  border-left: 1px dotted #cecece;
  border-top: 1px dotted #cecece;
  font-family: Tahoma;
  font-size: 8pt;
  color: #444;
  padding: 6px;
  line-height: 20px;
}
.gantt_link_direction {
  height: 0px;
  border: 0px none #FFA011;
  border-bottom-style: dashed;
  border-bottom-width: 2px;
  transform-origin: 0% 0%;
  -ms-transform-origin: 0% 0%;
  -webkit-transform-origin: 0% 0%;
  z-index: 2;
  margin-left: 1px;
  position: absolute;
}
.gantt_grid_data .gantt_row.gantt_selected,
.gantt_grid_data .gantt_row.odd.gantt_selected {
  background-color: #FFF3A1;
  border-top-color: #fff087;
}
.gantt_task_row.gantt_selected {
  background-color: #FFF3A1;
}
.gantt_task_row.gantt_selected .gantt_task_cell {
  border-right-color: #ffec6e;
}
.gantt_task_line.gantt_selected {
  box-shadow: 0 0 5px #04a4f0;
}
.gantt_task_line.gantt_project.gantt_selected {
  box-shadow: 0 0 5px #46ad51;
}
.gantt_task_line.gantt_milestone {
  visibility: hidden;
  background-color: #DB7DC5;
  border: 0px solid #cd49ae;
  box-sizing: content-box;
  -moz-box-sizing: content-box;
}
.gantt_task_line.gantt_milestone div {
  visibility: visible;
}
.gantt_task_line.gantt_milestone .gantt_task_content {
  background: inherit;
  border: inherit;
  border-width: 1px;
  border-radius: inherit;
  box-sizing: border-box;
  -moz-box-sizing: border-box;
  -webkit-transform: rotate(45deg);
  -moz-transform: rotate(45deg);
  -ms-transform: rotate(45deg);
  -o-transform: rotate(45deg);
  transform: rotate(45deg);
}
.gantt_task_line.gantt_task_inline_color {
  border-color: #999999;
}
.gantt_task_line.gantt_task_inline_color .gantt_task_progress {
  background-color: #363636;
  opacity: 0.2;
}
.gantt_task_line.gantt_task_inline_color.gantt_selected {
  box-shadow: 0 0 5px #999999;
}
.gantt_task_line.gantt_task_inline_color.gantt_project.gantt_selected {
  box-shadow: 0 0 5px #999999;
}
.gantt_task_link.gantt_link_inline_color:hover .gantt_line_wrapper div {
  box-shadow: 0 0 5px 0px #999999;
}
.gantt_critical_task {
  background-color: #e63030;
  border-color: #9d3a3a;
}
.gantt_critical_task .gantt_task_progress {
  background-color: rgba(0, 0, 0, 0.4);
}
.gantt_critical_link .gantt_line_wrapper > div {
  background-color: #e63030;
}
.gantt_critical_link .gantt_link_arrow {
  border-color: #e63030;
}
.gantt_row:focus,
.gantt_cell:focus,
.gantt_btn_set:focus,
.gantt_qi_big_icon:focus,
.gantt_popup_button:focus,
.gantt_grid_head_cell:focus {
  -moz-box-shadow: inset 0px 0px 1px 1px #4d90fe;
  -webkit-box-shadow: inset 0px 0px 1px 1px #4d90fe;
  box-shadow: inset 0px 0px 1px 1px #4d90fe;
}
.gantt_split_parent,
.gantt_split_subproject {
  opacity: 0.1;
  pointer-events: none;
}
.gantt_rollup_child .gantt_link_control,
.gantt_rollup_child:hover .gantt_link_control {
  display: none;
}
.gantt_unselectable,
.gantt_unselectable div {
  -webkit-user-select: none;
  -moz-user-select: none;
  -moz-user-select: -moz-none;
}
.gantt_cal_light {
  -webkit-tap-highlight-color: transparent;
  border-radius: 6px;
  font-family: "Arial";
  font-size: 13px;
  border: 1px solid #bababa;
  color: #494949;
  font-size: 12px;
  position: absolute;
  z-index: 10001;
  width: 550px;
  height: 250px;
  box-shadow: 3px 3px 3px rgba(0, 0, 0, 0.07);
}
.gantt_cal_light_wide {
  width: 650px;
}
.gantt_cal_light select {
  font-family: "Arial";
  border: 1px solid #bababa;
  font-size: 13px;
  padding: 2px;
  margin: 0px;
}
.gantt_cal_ltitle {
  padding: 7px 10px;
  overflow: hidden;
  white-space: nowrap;
  -webkit-border-top-left-radius: 6px;
  -webkit-border-bottom-left-radius: 0;
  -webkit-border-top-right-radius: 6px;
  -webkit-border-bottom-right-radius: 0;
  -moz-border-radius-topleft: 6px;
  -moz-border-radius-bottomleft: 0;
  -moz-border-radius-topright: 6px;
  -moz-border-radius-bottomright: 0;
  border-top-left-radius: 6px;
  border-bottom-left-radius: 0;
  border-top-right-radius: 6px;
  border-bottom-right-radius: 0;
}
.gantt_cal_ltitle span {
  white-space: nowrap;
}
.gantt_cal_lsection {
  color: #727272;
  font-weight: bold;
  padding: 12px 0px 5px 10px;
}
.gantt_cal_lsection .gantt_fullday {
  float: right;
  margin-right: 5px;
  font-size: 12px;
  font-weight: normal;
  line-height: 20px;
  vertical-align: top;
  cursor: pointer;
}
.gantt_cal_lsection {
  font-size: 13px;
}
.gantt_cal_ltext {
  padding: 2px    10px;
  overflow: hidden;
}
.gantt_cal_ltext textarea {
  overflow-y: auto;
  overflow-x: hidden;
  font-family: "Arial";
  font-size: 13px;
  -moz-box-sizing: border-box;
  -webkit-box-sizing: border-box;
  box-sizing: border-box;
  border: 1px solid #bababa;
  height: 100%;
  width: 100%;
  outline: none !important;
  resize: none;
}
.gantt_section_constraint [data-constraint-time-select] {
  margin-left: 20px;
}
.gantt_time {
  font-weight: bold;
}
.gantt_cal_light .gantt_title {
  padding-left: 10px;
}
.gantt_cal_larea {
  border: 1px solid #bababa;
  border-left: none;
  border-right: none;
  background-color: #fff;
  overflow: hidden;
  height: 1px;
}
.gantt_btn_set {
  margin: 10px 7px 5px 10px;
  padding: 5px 15px 5px 10px;
  float: left;
  -webkit-border-radius: 4px;
  -moz-border-radius: 4px;
  border-radius: 4px;
  border-width: 0;
  border-color: #bababa;
  border-style: solid;
  height: 32px;
  font-weight: bold;
  background: #fff;
  -moz-box-sizing: border-box;
  -webkit-box-sizing: border-box;
  box-sizing: border-box;
  cursor: pointer;
}
.gantt_hidden {
  display: none;
}
.gantt_btn_set div {
  float: left;
  font-size: 13px;
  height: 22px;
  line-height: 22px;
  background-repeat: no-repeat;
  vertical-align: middle;
}
.gantt_save_btn {
  background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABEAAAAPCAYAAAACsSQRAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoV2luZG93cykiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6QTBBQUI0RDhDRUJEMTFFMjhFM0ZENTlERUM1OEQzRTYiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6QTBBQUI0RDlDRUJEMTFFMjhFM0ZENTlERUM1OEQzRTYiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDpBMEFBQjRENkNFQkQxMUUyOEUzRkQ1OURFQzU4RDNFNiIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDpBMEFBQjREN0NFQkQxMUUyOEUzRkQ1OURFQzU4RDNFNiIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PjdPZV0AAACtSURBVHjanJPbDYUgEESvtwJKoQRLoRNL0RK0ArUCS9AOpAMclDVkw0s2mQ9XcpwJY2OM+VWMgDQ9/CsAEtoh9W6skw+S0Akd5hl1J6kADJBwADs9j9MmIszQ5GJo793qf2nwLUYc0E7xONbaBmloZKAsgCCLW0p2qCsBEEQ6F33gcBbg304I1JYA+BWHQFlAqCcclAXEykaguQSQaiyBVEmbm8RfLFgzo3MJMACZSGxiH8QaMAAAAABJRU5ErkJggg==);
  margin-top: 2px;
  width: 21px;
}
.gantt_cancel_btn {
  margin-top: 2px;
  background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoV2luZG93cykiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6MDkzMDA3MzlDMzA0MTFFMjg2QTVFMzFEQzgwRkJERDYiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6MDkzMDA3M0FDMzA0MTFFMjg2QTVFMzFEQzgwRkJERDYiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDowOTMwMDczN0MzMDQxMUUyODZBNUUzMURDODBGQkRENiIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDowOTMwMDczOEMzMDQxMUUyODZBNUUzMURDODBGQkRENiIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PmYuYOUAAAEdSURBVHjaYvz//z8DJYAFXWDlypU8QKoIiD2A2AwqfAqIdwBxX3h4+Bdk9YzILgBqtgdS84FYEYeF94E4EWjIQZgAE5LmQCB1AKoZZKMPEAtAMYh9GSp3AKjWD8UFQAEhIPshEIOc3wHENUBb/qJ57SyQMoJyPwKxElDNO1gYFEE17wMKVmIJlzNQzeegrjaA6qmBecEbSvfh0GwMxGeBhoPoemQ9MAO0kEIbl2YTqPAFKK2IbMB3AjabYIkRZmQD7kNpMyI0G0PpO8gGbIUFJj7NQDk2INWIrIcJKfBAKcwJqvkcDs0TgFgXGo19KCkRmpDWQdWDEk0NUoCBoq0FqhkE/IEWbKJKUmZEz43QzFSKIzN1481M5ACAAAMAlfl/lCwRpagAAAAASUVORK5CYII=);
  width: 20px;
}
.gantt_delete_btn {
  background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA4AAAAQCAYAAAAmlE46AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoV2luZG93cykiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6QzQzRjMxM0NDRUJEMTFFMjlCNDZDQzhFQUM0ODRCMEIiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6QzQzRjMxM0RDRUJEMTFFMjlCNDZDQzhFQUM0ODRCMEIiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDpDNDNGMzEzQUNFQkQxMUUyOUI0NkNDOEVBQzQ4NEIwQiIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDpDNDNGMzEzQkNFQkQxMUUyOUI0NkNDOEVBQzQ4NEIwQiIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PoU+5FoAAACMSURBVHja7JPdDYAgDIQLE+gmjuAIbOIKjMRIbAAb1BZLUozgz7OXfIbWKxeCAiKCwmNfXnsNP5S4mIkMrSYiEaY2LOFloO6QVF1JamPGc2IvpaeSbqXY4LkOLwU6OTyvgzBasxwnBnivYOGj/sEXg27gbd/JpWZiOf0pV7Anlq9UGqs07hTFC7sAAwCbSNs8SyqFMAAAAABJRU5ErkJggg==);
  margin-top: 2px;
  width: 20px;
}
.gantt_cal_cover {
  width: 100%;
  height: 100%;
  position: fixed;
  z-index: 10000;
  top: 0px;
  left: 0px;
  background-color: black;
  opacity: 0.1;
  filter: progid:DXImageTransform.Microsoft.Alpha(opacity=10);
}
.gantt_custom_button {
  padding: 0px 3px 0px 3px;
  font-family: "Arial";
  font-size: 13px;
  font-weight: normal;
  margin-right: 10px;
  margin-top: -5px;
  cursor: pointer;
  float: right;
  height: 21px;
  width: 90px;
  border: 1px solid #CECECE;
  text-align: center;
  -webkit-border-radius: 4px;
  -moz-border-radius: 4px;
  -ms-border-radius: 4px;
  -o-border-radius: 4px;
  border-radius: 4px;
}
.gantt_custom_button div {
  cursor: pointer;
  float: none;
  height: 21px;
  line-height: 21px;
  vertical-align: middle;
}
.gantt_custom_button div:first-child {
  display: none;
}
.gantt_cal_light_wide {
  width: 580px;
  padding: 2px 4px;
}
.gantt_cal_light_wide .gantt_cal_larea {
  -moz-box-sizing: border-box;
  -webkit-box-sizing: border-box;
  box-sizing: border-box;
  border: 1px solid #bababa;
}
.gantt_cal_light_wide .gantt_cal_lsection {
  border: 0px;
  float: left;
  text-align: right;
  width: 80px;
  height: 20px;
  padding: 5px 10px 0px 0px;
}
.gantt_cal_light_wide .gantt_wrap_section {
  position: relative;
  padding: 10px 0;
  overflow: hidden;
  border-bottom: 1px solid #ebebeb;
}
.gantt_cal_light_wide .gantt_section_time {
  overflow: hidden;
  padding-top: 2px !important;
  padding-right: 0px;
  height: 20px !important;
}
.gantt_cal_light_wide .gantt_cal_ltext {
  padding-right: 0px;
}
.gantt_cal_light_wide .gantt_cal_larea {
  padding: 0 10px;
  width: 100%;
}
.gantt_cal_light_wide .gantt_section_time {
  background: transparent;
}
.gantt_cal_light_wide .gantt_cal_checkbox label {
  padding-left: 0px;
}
.gantt_cal_light_wide .gantt_cal_lsection .gantt_fullday {
  float: none;
  margin-right: 0px;
  font-weight: bold;
  cursor: pointer;
}
.gantt_cal_light_wide .gantt_custom_button {
  position: absolute;
  top: 0;
  right: 0;
  margin-top: 2px;
}
.gantt_cal_light_wide .gantt_repeat_right {
  margin-right: 55px;
}
.gantt_cal_light_wide.gantt_cal_light_full {
  width: 738px;
}
.gantt_cal_wide_checkbox input {
  margin-top: 8px;
  margin-left: 14px;
}
.gantt_cal_light input {
  font-size: 13px;
}
.gantt_section_time {
  background-color: white;
  white-space: nowrap;
  padding: 2px 10px 5px;
  padding-top: 2px !important;
}
.gantt_section_time .gantt_time_selects {
  float: left;
  height: 25px;
}
.gantt_section_time .gantt_time_selects select {
  height: 23px;
  padding: 2px;
  border: 1px solid #bababa;
}
.gantt_duration {
  width: 100px;
  height: 23px;
  float: left;
  white-space: nowrap;
  margin-left: 20px;
  line-height: 23px;
}
.gantt_duration .gantt_duration_value,
.gantt_duration .gantt_duration_dec,
.gantt_duration .gantt_duration_inc {
  -moz-box-sizing: border-box;
  -webkit-box-sizing: border-box;
  box-sizing: border-box;
  text-align: center;
  vertical-align: top;
  height: 100%;
  border: 1px solid #bababa;
}
.gantt_duration .gantt_duration_value {
  width: 40px;
  padding: 3px 4px;
  border-left-width: 0;
  border-right-width: 0;
}
.gantt_duration .gantt_duration_value.gantt_duration_value_formatted {
  width: 70px;
}
.gantt_duration .gantt_duration_dec,
.gantt_duration .gantt_duration_inc {
  width: 20px;
  padding: 1px;
  padding-bottom: 1px;
  background: #fff;
}
.gantt_duration .gantt_duration_dec {
  -moz-border-top-left-radius: 4px;
  -moz-border-bottom-left-radius: 4px;
  -webkit-border-top-left-radius: 4px;
  -webkit-border-bottom-left-radius: 4px;
  border-top-left-radius: 4px;
  border-bottom-left-radius: 4px;
}
.gantt_duration .gantt_duration_inc {
  margin-right: 4px;
  -moz-border-top-right-radius: 4px;
  -moz-border-bottom-right-radius: 4px;
  -webkit-border-top-right-radius: 4px;
  -webkit-border-bottom-right-radius: 4px;
  border-top-right-radius: 4px;
  border-bottom-right-radius: 4px;
}
.gantt_resources {
  max-height: 150px;
  height: auto;
  overflow-y: auto;
}
.gantt_resource_row {
  display: block;
  padding: 10px 0;
  border-bottom: 1px solid #ebebeb;
  cursor: pointer;
}
.gantt_resource_row input[type=checkbox]:not(:checked),
.gantt_resource_row input[type=checkbox]:not(:checked) ~ div {
  opacity: 0.5;
}
.gantt_resource_toggle {
  vertical-align: middle;
}
.gantt_resources_filter .gantt_resources_filter_input {
  padding: 1px 2px 1px 2px;
  box-sizing: border-box;
}
.gantt_resources_filter .switch_unsetted {
  vertical-align: middle;
}
.gantt_resource_cell {
  display: inline-block;
}
.gantt_resource_cell.gantt_resource_cell_checkbox {
  width: 24px;
  max-width: 24px;
  min-width: 24px;
  vertical-align: middle;
}
.gantt_resource_cell.gantt_resource_cell_label {
  width: 40%;
  max-width: 40%;
  vertical-align: middle;
}
.gantt_resource_cell.gantt_resource_cell_value {
  width: 30%;
  max-width: 30%;
  vertical-align: middle;
}
.gantt_resource_cell.gantt_resource_cell_value input,
.gantt_resource_cell.gantt_resource_cell_value select {
  width: 80%;
  vertical-align: middle;
  padding: 1px 2px 1px 2px;
  box-sizing: border-box;
}
.gantt_resource_cell.gantt_resource_cell_unit {
  width: 10%;
  max-width: 10%;
  vertical-align: middle;
}
.gantt_resource_early_value {
  opacity: 0.8;
  font-size: 0.9em;
}
/* Quick info */
.gantt_cal_quick_info {
  border: 1px solid #bababa;
  border-radius: 6px;
  position: absolute;
  z-index: 300;
  box-shadow: 3px 3px 3px rgba(0, 0, 0, 0.07);
  background-color: #fff;
  width: 300px;
  transition: left 0.5s ease, right 0.5s;
  -moz-transition: left 0.5s ease, right 0.5s;
  -webkit-transition: left 0.5s ease, right 0.5s;
  -o-transition: left 0.5s ease, right 0.5s;
}
.gantt_no_animate {
  transition: none;
  -moz-transition: none;
  -webkit-transition: none;
  -o-transition: none;
}
.gantt_cal_quick_info.gantt_qi_left .gantt_qi_big_icon {
  float: right;
}
.gantt_cal_qi_title {
  -webkit-border-top-left-radius: 6px;
  -webkit-border-bottom-left-radius: 0;
  -webkit-border-top-right-radius: 6px;
  -webkit-border-bottom-right-radius: 0;
  -moz-border-radius-topleft: 6px;
  -moz-border-radius-bottomleft: 0;
  -moz-border-radius-topright: 6px;
  -moz-border-radius-bottomright: 0;
  border-top-left-radius: 6px;
  border-bottom-left-radius: 0;
  border-top-right-radius: 6px;
  border-bottom-right-radius: 0;
  padding: 5px 0px 8px 12px;
  color: #494949;
  background-color: #dbdbdb;
  border-bottom: 1px solid #bababa;
}
.gantt_cal_qi_tdate {
  font-size: 14px;
  font-weight: bold;
}
.gantt_cal_qi_tcontent {
  font-size: 13px;
}
.gantt_cal_qi_content {
  padding: 16px 8px;
  font-size: 13px;
  color: #494949;
  overflow: hidden;
}
.gantt_cal_qi_controls {
  -webkit-border-top-left-radius: 0;
  -webkit-border-bottom-left-radius: 6px;
  -webkit-border-top-right-radius: 0;
  -webkit-border-bottom-right-radius: 6px;
  -moz-border-radius-topleft: 0;
  -moz-border-radius-bottomleft: 6px;
  -moz-border-radius-topright: 0;
  -moz-border-radius-bottomright: 6px;
  border-top-left-radius: 0;
  border-bottom-left-radius: 6px;
  border-top-right-radius: 0;
  border-bottom-right-radius: 6px;
  padding-left: 7px;
}
.gantt_cal_qi_controls .gantt_menu_icon {
  margin-top: 6px;
  background-repeat: no-repeat;
}
.gantt_cal_qi_controls .gantt_menu_icon.icon_edit {
  width: 20px;
  background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAAB3RJTUUH3QYFCjI5ZQj5bAAAAFNJREFUOMvt0zEOACAIA0DkwTymH8bJTRTKZGJXyaWEKPKTCQAH4Ls37cItcDUzsxHNDLZNhCq7Gt1wh9ErV7EjyGAhyGLphlnsClWuS32rn0czAV+vNGrM/LBtAAAAAElFTkSuQmCC);
}
.gantt_cal_qi_controls .gantt_menu_icon.icon_delete {
  width: 20px;
  background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA4AAAAQCAYAAAAmlE46AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoV2luZG93cykiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6QzQzRjMxM0NDRUJEMTFFMjlCNDZDQzhFQUM0ODRCMEIiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6QzQzRjMxM0RDRUJEMTFFMjlCNDZDQzhFQUM0ODRCMEIiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDpDNDNGMzEzQUNFQkQxMUUyOUI0NkNDOEVBQzQ4NEIwQiIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDpDNDNGMzEzQkNFQkQxMUUyOUI0NkNDOEVBQzQ4NEIwQiIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PoU+5FoAAACMSURBVHja7JPdDYAgDIQLE+gmjuAIbOIKjMRIbAAb1BZLUozgz7OXfIbWKxeCAiKCwmNfXnsNP5S4mIkMrSYiEaY2LOFloO6QVF1JamPGc2IvpaeSbqXY4LkOLwU6OTyvgzBasxwnBnivYOGj/sEXg27gbd/JpWZiOf0pV7Anlq9UGqs07hTFC7sAAwCbSNs8SyqFMAAAAABJRU5ErkJggg==);
}
.gantt_qi_big_icon {
  font-size: 13px;
  border-radius: 4px;
  font-weight: bold;
  background: #fff;
  margin: 5px 9px 8px 0px;
  min-width: 60px;
  line-height: 32px;
  vertical-align: middle;
  padding: 0px 10px 0px 5px;
  cursor: pointer;
  border: 1px solid #bababa;
}
.gantt_cal_qi_controls div {
  float: left;
  height: 32px;
  text-align: center;
  line-height: 32px;
}
.gantt_cal_quick_info.gantt_qi_hidden {
  display: none;
}
.gantt_tooltip {
  padding: 10px;
  position: absolute;
  z-index: 50;
  white-space: nowrap;
}
.gantt_resource_marker {
  position: absolute;
  text-align: center;
  font-size: 14px;
  color: #FFF;
}
.gantt_resource_marker_ok {
  background: rgba(78, 208, 134, 0.75);
}
.gantt_resource_marker_overtime {
  background: rgba(255, 134, 134, 0.69);
}
.gantt_histogram_label {
  width: 100%;
  height: 100%;
  position: absolute;
  z-index: 1;
  font-weight: bold;
  font-size: 13px;
}
.gantt_histogram_fill {
  background-color: rgba(41, 157, 180, 0.2);
  width: 100%;
  position: absolute;
  bottom: 0;
}
.gantt_histogram_hor_bar {
  height: 1px;
  position: absolute;
  background: #299DB4;
  margin-top: -1px;
  margin-left: -1px;
}
.gantt_histogram_vert_bar {
  width: 1px;
  position: absolute;
  background: #299DB4;
  margin-left: -1px;
}
.gantt_histogram_cell {
  position: absolute;
  text-align: center;
  font-size: 13px;
  color: #000000;
}
.gantt_marker {
  height: 100%;
  width: 2px;
  top: 0;
  position: absolute;
  text-align: center;
  background-color: rgba(255, 0, 0, 0.4);
  -moz-box-sizing: border-box;
  -webkit-box-sizing: border-box;
  box-sizing: border-box;
}
.gantt_marker .gantt_marker_content {
  padding: 5px;
  background: inherit;
  color: white;
  position: absolute;
  font-size: 12px;
  line-height: 12px;
  opacity: 0.8;
}
.gantt_marker_area {
  position: absolute;
  top: 0;
  left: 0;
}
.gantt_grid_editor_placeholder {
  position: absolute;
}
.gantt_grid_editor_placeholder > div,
.gantt_grid_editor_placeholder input,
.gantt_grid_editor_placeholder select {
  width: 100%;
  height: 100%;
  box-sizing: border-box;
}
.gantt_row_placeholder div {
  opacity: 0.5;
}
.gantt_row_placeholder .gantt_file,
.gantt_row_placeholder .gantt_add {
  display: none;
}
.gantt_drag_marker.gantt_grid_dnd_marker {
  background-color: transparent;
  transition: all 0.1s ease ;
}
.gantt_grid_dnd_marker_line {
  height: 4px;
  width: 100%;
  background-color: #3498db;
}
.gantt_grid_dnd_marker_line::before {
  background: #fff;
  width: 12px;
  height: 12px;
  box-sizing: border-box;
  border: 3px solid #3498db;
  border-radius: 6px;
  content: "";
  line-height: 1px;
  display: block;
  position: absolute;
  margin-left: -11px;
  margin-top: -4px;
  pointer-events: none;
}
.gantt_grid_dnd_marker_folder {
  height: 100%;
  width: 100%;
  position: absolute;
  pointer-events: none;
  box-sizing: border-box;
  box-shadow: 0 0 0px 2px #3f98db inset;
  background: transparent;
}
.gantt_overlay_area {
  position: absolute;
  height: inherit;
  width: inherit;
  top: 0;
  left: 0;
  display: none;
}
.gantt_overlay {
  position: absolute;
  left: 0;
  top: 0;
  height: inherit;
  width: inherit;
}
.gantt_click_drag_rect {
  position: absolute;
  left: 0;
  top: 0;
  outline: 1px solid #3f98db;
  background-color: rgba(52, 152, 219, 0.3);
}
.gantt_timeline_move_available,
.gantt_timeline_move_available * {
  cursor: move;
}
.gantt_rtl .gantt_grid {
  text-align: right;
}
.gantt_rtl .gantt_row,
.gantt_rtl .gantt_cell {
  flex-direction: row-reverse;
}
.gantt_layout_content {
  width: 100%;
  overflow: auto;
  box-sizing: border-box;
}
.gantt_layout_cell {
  position: relative;
  box-sizing: border-box;
}
.gantt_layout_cell > .gantt_layout_header {
  background: #33aae8;
  color: white;
  font-size: 17px;
  padding: 5px 10px;
  box-sizing: border-box;
}
.gantt_layout_header.collapsed_x {
  background: #a9a9a9;
}
.gantt_layout_header.collapsed_x .gantt_header_arrow:before {
  content: "\21E7";
}
.gantt_layout_header.collapsed_y {
  background: #a9a9a9;
}
.gantt_layout_header.collapsed_y .gantt_header_arrow:before {
  content: "\21E9";
}
.gantt_layout_header {
  cursor: pointer;
}
.gantt_layout_header .gantt_header_arrow {
  float: right;
  text-align: right;
}
.gantt_layout_header .gantt_header_arrow:before {
  content: "\21E6";
}
.gantt_layout_header.vertical .gantt_header_arrow:before {
  content: "\21E7";
}
.gantt_layout_outer_scroll_vertical .gantt_layout_content {
  overflow-y: hidden;
}
.gantt_layout_outer_scroll_horizontal .gantt_layout_content {
  overflow-x: hidden;
}
.gantt_layout_x > .gantt_layout_cell {
  display: inline-block;
  vertical-align: top;
}
.gantt_layout_x {
  white-space: nowrap;
}
.gantt_resizing {
  opacity: 0.7;
  background: #f2f2f2;
}
.gantt_layout_cell_border_right.gantt_resizer {
  overflow: visible;
  border-right: 0;
}
.gantt_resizer {
  cursor: e-resize;
  position: relative;
}
.gantt_resizer_y {
  cursor: n-resize;
}
.gantt_resizer_stick {
  background: #33aae8;
  z-index: 9999;
  position: absolute;
  top: 0;
  width: 100%;
}
.gantt_resizer_x .gantt_resizer_x {
  position: absolute;
  width: 20px;
  height: 100%;
  margin-left: -10px;
  top: 0;
  left: 0;
  z-index: 1;
}
.gantt_resizer_y .gantt_resizer_y {
  position: absolute;
  height: 20px;
  width: 100%;
  top: -10px;
  left: 0;
  z-index: 1;
}
.gantt_resizer_error {
  background: indianred!important;
}
.gantt_noselect {
  -webkit-user-select: none;
  user-select: none;
}
.gantt_layout_cell_border_left {
  border-left: 1px solid #bababa;
}
.gantt_layout_cell_border_right {
  border-right: 1px solid #bababa;
}
.gantt_layout_cell_border_top {
  border-top: 1px solid #bababa;
}
.gantt_layout_cell_border_bottom {
  border-bottom: 1px solid #bababa;
}
.gantt_layout_cell_border_transparent {
  border-color: transparent;
}
.gantt_window {
  position: absolute;
  top: 50%;
  left: 50%;
  z-index: 999999999;
  background: white;
}
.gantt_window_content {
  position: relative;
}
.gantt_window_content_header {
  background: #39c;
  color: #ffffff;
  height: 33px;
  padding: 10px 10px 0 10px;
  border-bottom: solid 2px #ffffff;
  position: relative;
}
.gantt_window_content_header_text {
  padding-left: 10%;
}
.gantt_window_content_header_buttons {
  position: absolute;
  top: 10px;
  right: 10px;
}
.gantt_window_content_header_buttons:hover {
  color: #000000;
  cursor: pointer;
}
.gantt_window_content_resizer {
  position: absolute;
  width: 15px;
  height: 15px;
  bottom: 0;
  line-height: 15px;
  right: -1px;
  text-align: center;
  background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA8AAAAPCAMAAAAMCGV4AAAABlBMVEUAAAAAAAClZ7nPAAAAAXRSTlMAQObYZgAAABZJREFUeAFjIAUwUshlpJDLSIhLGAAACQ4AFk79JaMAAAAASUVORK5CYII=);
  cursor: nw-resize;
  z-index: 999;
}
.gantt_window_content_frame {
  position: absolute;
  top: 0;
  left: 0;
  width: 100%;
  height: 100%;
  background: rgba(0, 0, 0, 0.1);
  z-index: 9999;
}
.gantt_window_drag {
  cursor: pointer!important;
}
.gantt_window_resizing {
  overflow: visible;
}
.gantt_window_resizing_body {
  overflow: hidden!important;
}
.gantt_window_modal {
  background: rgba(0, 0, 0, 0.1);
  z-index: 9999;
  top: 0;
  left: 0;
  width: 100%;
  height: 100%;
  position: fixed;
}
.gantt_container,
.gantt_cal_light,
.gantt_message_area,
.gantt_modal_box,
.gantt_cal_quick_info,
.gantt_tooltip {
  text-rendering: optimizeLegibility;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
}
.gantt_noselect {
  -moz-user-select: -moz-none;
  -webkit-user-select: none;
  -ms-user-select: none;
  user-select: none;
}
.gantt_noselect .gantt_grid_data .gantt_row:hover,
.gantt_noselect .gantt_grid_data .gantt_row.odd:hover {
  background-color: unset;
}
.gantt_drag_marker {
  position: absolute;
  top: -1000px;
  left: -1000px;
  font-family: "Arial";
  font-size: 13px;
  z-index: 1;
  white-space: nowrap;
}
.gantt_drag_marker .gantt_tree_indent,
.gantt_drag_marker .gantt_tree_icon.gantt_blank,
.gantt_drag_marker .gantt_tree_icon.gantt_open,
.gantt_drag_marker .gantt_tree_icon.gantt_close {
  display: none;
}
.gantt_empty_state_wrapper {
  position: relative;
}
.gantt_empty_state {
  height: 100%;
  max-width: 500px;
  box-sizing: border-box;
  white-space: pre-line;
  overflow-wrap: break-word;
  display: flex;
  flex-direction: column;
  justify-content: flex-start;
  margin: 0 auto;
}
.gantt_empty_state_image {
  background-image: url('data:image/png;base64,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');
  background-repeat: no-repeat;
  width: 100%;
  max-width: 500px;
  max-height: 500px;
  margin-left: auto;
  margin-right: auto;
  display: block;
  min-height: 0;
  height: 200px;
  background-size: contain;
  background-position-x: center;
  background-position-y: bottom;
  margin-top: 40px;
}
.gantt_empty_state_text {
  text-align: center;
}
.gantt_empty_state_text_link {
  color: #03A9F4;
  background-position: top right;
  background: none;
  opacity: 1;
  height: unset;
  cursor: pointer;
}
.gantt_drag_marker,
.gantt_drag_marker .gantt_row.odd {
  background-color: #fff;
}
.gantt_drag_marker .gantt_row {
  border-left: 1px solid #d2d2d2;
  border-top: 1px solid #d2d2d2;
}
.gantt_drag_marker .gantt_cell {
  border-color: #d2d2d2;
}
.gantt_row.gantt_over,
.gantt_task_row.gantt_over {
  background-color: #0070fe;
}
.gantt_row.gantt_transparent .gantt_cell {
  opacity: 0.7;
}
.gantt_task_row.gantt_transparent {
  background-color: #dbf3fe;
}
.gantt_popup_button.gantt_delete_button {
  background: #46ad51;
  text-shadow: 0 -1px 0 #307738;
  color: #fff;
  font-weight: bold;
}
.gantt_container_resize_watcher {
  background: transparent;
  width: 100%;
  height: 100%;
  position: absolute;
  top: 0px;
  left: 0px;
  z-index: -1;
  pointer-events: none;
  border: 0;
  box-sizing: border-box;
  opacity: 0;
}
src/components/dhtmlxGantt/codebase/sources/skins/dhtmlxgantt_contrast_black.css
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,2094 @@
/*
@license
dhtmlxGantt v.8.0.6 Standard
This version of dhtmlxGantt is distributed under GPL 2.0 license and can be legally used in GPL projects.
To use dhtmlxGantt in non-GPL projects (and get Pro version of the product), please obtain Individual, Commercial, Enterprise or Ultimate license on our site https://dhtmlx.com/docs/products/dhtmlxGantt/#licensing or contact us at info@dhtmlx.com
(c) XB Software
*/
.buttonBg {
  background: #000;
}
/* colors for items with inline styles assigned (task.color, link.color)*/
.gridHoverStyle {
  background-color: #42425e;
}
.gridSelection {
  background-color: #42425e;
}
.timelineSelection {
  background-color: #42425e;
}
.header_text_style {
  text-transform: uppercase;
  font-weight: bold;
}
.gantt_grid_scale .gantt_grid_head_cell {
  color: #c1c1c1;
  text-transform: uppercase;
  font-weight: bold;
  border-top: none !important;
  border-right: none !important;
}
.gantt_grid_data .gantt_cell {
  border-right: none;
  color: #fff;
}
.gantt_grid_placeholder_text_explanation {
  color: #c1c1c1;
}
/*
    Tasks
*/
.gantt_task_link .gantt_link_arrow_right {
  border-width: 6px 6px 6px 6px;
  margin-top: -3px;
}
.gantt_task_link .gantt_link_arrow_left {
  border-width: 6px 6px 6px 6px;
  margin-left: -6px;
  margin-top: -3px;
}
.gantt_task_link .gantt_link_arrow_up {
  border-width: 6px 6px 6px 6px;
}
.gantt_task_link .gantt_link_arrow_down {
  border-width: 6px 6px 6px 6px;
}
.gantt_task_line .gantt_task_progress_drag {
  bottom: -4px;
  height: 10px;
  margin-left: -8px;
  width: 16px;
}
.chartHeaderBg {
  background-color: #000;
}
.gantt_task .gantt_task_scale .gantt_scale_cell {
  color: #c1c1c1;
  text-transform: uppercase;
  font-weight: bold;
  border-right: 1px solid #7e7e7e;
}
/*
    project highlight
*/
.gantt_row.gantt_project,
.gantt_row.odd.gantt_project {
  background-color: #edffee;
}
.gantt_task_row.gantt_project,
.gantt_task_row.odd.gantt_project {
  background-color: #f5fff5;
}
.gantt_task_line.gantt_project {
  background-color: #006803;
  border: 1px solid #006803;
}
.gantt_task_line.gantt_project .gantt_task_progress {
  background-color: #003b01;
}
/*
    milestone
*/
/*
    lightbox
*/
.modalBorder {
  border-color: #fff;
  -webkit-box-shadow: inset 0px 0px 0px 4px #0505ff;
  -moz-box-shadow: inset 0px 0px 0px 4px #0505ff;
  box-shadow: inset 0px 0px 0px 4px #0505ff;
  padding: 4px;
}
.gantt_popup_shadow {
  border-color: #fff;
  -webkit-box-shadow: inset 0px 0px 0px 4px #0505ff;
  -moz-box-shadow: inset 0px 0px 0px 4px #0505ff;
  box-shadow: inset 0px 0px 0px 4px #0505ff;
  padding: 4px;
}
.buttonBg {
  background: #000;
}
.gantt_cal_larea input,
.gantt_cal_larea select,
.gantt_cal_larea textarea {
  background: #000;
  color: #fff;
}
.gantt_cal_larea .gantt_section_time {
  background: #000;
}
.gantt_cal_larea .gantt_cal_lsection {
  color: #c1c1c1;
  font-size: 14px;
}
.gantt_cal_light .gantt_btn_set {
  margin: 5px 10px;
}
.gantt_btn_set.gantt_cancel_btn_set {
  border-style: solid;
  border-width: 2px;
  border-color: #fff;
  background: #000;
  color: #fff;
}
.gantt_btn_set.gantt_save_btn_set {
  border-style: solid;
  border-width: 2px;
  border-color: #76ff03;
  background: #000;
  color: #76ff03;
}
.gantt_btn_set.gantt_delete_btn_set {
  border-style: solid;
  border-width: 2px;
  border-color: #ffc400;
  background: #000;
  color: #ffc400;
}
.gantt_delete_btn {
  margin-top: 2px;
  width: 20px;
}
.gantt_cal_light_wide {
  padding-left: 0 !important;
  padding-right: 0 !important;
}
.gantt_cal_light_wide .gantt_cal_larea {
  border-left: none !important;
  border-right: none !important;
}
/*
    Message
*/
.gantt_popup_button.gantt_ok_button {
  font-weight: bold;
  border-style: solid;
  border-width: 2px;
  border-color: #76ff03;
  background: #000;
  color: #76ff03;
}
.gantt_popup_button.gantt_cancel_button {
  font-weight: bold;
  color: #454544;
  border-style: solid;
  border-width: 2px;
  border-color: #fff;
  background: #000;
  color: #fff;
}
.gantt_popup_title {
  color: #fff;
}
/*
    Quick info
*/
.gantt_qi_big_icon {
  border-style: solid;
  border-width: 2px;
  border-color: #fff;
  background: #000;
  color: #fff;
}
.gantt_qi_big_icon.icon_edit {
  border-style: solid;
  border-width: 2px;
  border-color: #fff;
  background: #000;
  color: #fff;
}
.gantt_qi_big_icon.icon_delete {
  border-style: solid;
  border-width: 2px;
  border-color: #ffc400;
  background: #000;
  color: #ffc400;
}
/*links dnd*/
.gantt_tooltip {
  font-size: 14px;
  color: #fff;
  background: #000;
  border: 1px solid #FFFF00;
}
.gantt_container {
  background-color: #000;
  font-family: "arial";
  font-size: 14px;
  border: 1px solid #FFFF00;
  position: relative;
  white-space: nowrap;
  overflow-x: hidden;
  overflow-y: hidden;
}
.gantt_touch_active {
  overscroll-behavior: none;
}
.gantt_task_scroll {
  overflow-x: scroll;
}
.gantt_task,
.gantt_grid {
  position: relative;
  overflow-x: hidden;
  overflow-y: hidden;
  display: inline-block;
  vertical-align: top;
}
.gantt_grid_scale,
.gantt_task_scale {
  color: #ffffff;
  font-size: 14px;
  border-bottom: 1px solid #FFFF00;
  -moz-box-sizing: border-box;
  box-sizing: border-box;
}
.gantt_grid_scale {
  background-color: #000;
}
.gantt_task_scale {
  background-color: #000;
}
.gantt_task_vscroll {
  background-color: #000;
}
.gantt_scale_line {
  box-sizing: border-box;
  -moz-box-sizing: border-box;
  border-top: 1px solid #FFFF00;
}
.gantt_scale_line:first-child {
  border-top: none;
}
.gantt_grid_head_cell {
  display: inline-block;
  vertical-align: top;
  border-right: 1px solid #FFFF00;
  text-align: center;
  position: relative;
  cursor: default;
  height: 100%;
  box-sizing: border-box;
  -moz-box-sizing: border-box;
  line-height: 33px;
  -moz-user-select: -moz-none;
  -webkit-user-select: none;
  user-select: none;
  overflow: hidden;
}
.gantt_scale_line {
  clear: both;
}
.gantt_grid_data {
  width: 100%;
  overflow: hidden;
  position: relative;
}
.gantt_row {
  position: relative;
  -webkit-user-select: none;
  -moz-user-select: none;
  -moz-user-select: -moz-none;
}
.gantt_add,
.gantt_grid_head_add {
  width: 100%;
  height: 100%;
  background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyhpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTMyIDc5LjE1OTI4NCwgMjAxNi8wNC8xOS0xMzoxMzo0MCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTUuNSAoV2luZG93cykiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6RTk4MTk1QzM2ODc4MTFFNkFCNkFDOUZDNzZFNjgxRkIiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6RTk4MTk1QzQ2ODc4MTFFNkFCNkFDOUZDNzZFNjgxRkIiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDpFOTgxOTVDMTY4NzgxMUU2QUI2QUM5RkM3NkU2ODFGQiIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDpFOTgxOTVDMjY4NzgxMUU2QUI2QUM5RkM3NkU2ODFGQiIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/Psrbi8sAAABYSURBVHjaYiz7z8xACWDCI/cBiP9D8QdyDODHwSbaAIq9QF8DkAMMhtEBuvwHZAP4ybCcn6pe+EiGXrAeFihHAIefkQHjME8HOAOJUCCz4DFAgBgXAAQYACAZFHJhx3hLAAAAAElFTkSuQmCC);
  background-position: center center;
  background-repeat: no-repeat;
  cursor: pointer;
  position: relative;
  -moz-opacity: 0.3;
  opacity: 0.3;
}
.gantt_grid_head_cell.gantt_grid_head_add {
  -moz-opacity: 0.6;
  opacity: 0.6;
  top: 0;
}
.gantt_grid_head_cell.gantt_grid_head_add:hover {
  -moz-opacity: 1;
  opacity: 1;
}
.gantt_grid_data .gantt_row:hover,
.gantt_grid_data .gantt_row.odd:hover {
  background-color: #42425e;
}
.gantt_grid_data .gantt_row:hover .gantt_add,
.gantt_grid_data .gantt_row.odd:hover .gantt_add {
  -moz-opacity: 1;
  opacity: 1;
}
.gantt_task_row,
.gantt_row {
  border-bottom: 1px solid #7e7e7e;
}
.gantt_row,
.gantt_task_row {
  background-color: #000;
}
.gantt_row.odd,
.gantt_task_row.odd {
  background-color: #000;
}
.gantt_row,
.gantt_cell,
.gantt_task_row,
.gantt_task_cell,
.gantt_grid_head_cell,
.gantt_scale_cell {
  box-sizing: border-box;
  -moz-box-sizing: border-box;
}
.gantt_grid_head_cell,
.gantt_scale_cell {
  line-height: inherit;
}
.gantt_grid_scale .gantt_grid_column_resize_wrap {
  cursor: col-resize;
  position: absolute;
  width: 13px;
  margin-left: -7px;
}
.gantt_grid_column_resize_wrap .gantt_grid_column_resize {
  background-color: #FFFF00;
  height: 100%;
  width: 1px;
  margin: 0 auto;
}
.gantt_task_grid_row_resize_wrap {
  cursor: row-resize;
  position: absolute;
  height: 13px;
  margin-top: -7px;
  left: 0px;
  width: 100%;
}
.gantt_task_grid_row_resize_wrap .gantt_task_grid_row_resize {
  background-color: #7e7e7e;
  top: 6px;
  height: 1px;
  width: 100%;
  margin: 0 auto;
  position: relative;
}
.gantt_drag_marker {
  pointer-events: none;
}
.gantt_drag_marker.gantt_grid_resize_area,
.gantt_drag_marker.gantt_row_grid_resize_area {
  background-color: rgba(231, 231, 231, 0.5);
  height: 100%;
  width: 100%;
  -moz-box-sizing: border-box;
  -webkit-box-sizing: border-box;
  box-sizing: border-box;
}
.gantt_drag_marker.gantt_grid_resize_area {
  border-left: 1px solid #FFFF00;
  border-right: 1px solid #FFFF00;
}
.gantt_drag_marker.gantt_row_grid_resize_area {
  border-top: 1px solid #FFFF00;
  border-bottom: 1px solid #FFFF00;
  pointer-events: none;
}
.gantt_row {
  display: flex;
}
.gantt_row > div {
  flex-shrink: 0;
  flex-grow: 0;
}
.gantt_cell {
  vertical-align: top;
  border-right: 1px solid #7e7e7e;
  padding-left: 6px;
  padding-right: 6px;
  height: 100%;
  overflow: hidden;
  white-space: nowrap;
  font-size: 14px;
}
.gantt_cell_tree {
  display: flex;
  flex-wrap: nowrap;
}
.gantt_grid_scale .gantt_last_cell,
.gantt_grid_data .gantt_last_cell,
.gantt_task .gantt_task_scale .gantt_scale_cell.gantt_last_cell,
.gantt_task_bg .gantt_last_cell {
  border-right-width: 0px;
}
.gantt_task .gantt_task_scale .gantt_scale_cell.gantt_last_cell {
  border-right-width: 1px;
}
.gantt_task_bg {
  overflow: hidden;
}
.gantt_scale_cell {
  display: inline-block;
  white-space: nowrap;
  overflow: hidden;
  border-right: 1px solid #FFFF00;
  text-align: center;
  height: 100%;
}
.gantt_task_cell {
  display: inline-block;
  height: 100%;
  border-right: 1px solid #7e7e7e;
}
.gantt_layout_cell.gantt_ver_scroll {
  width: 0px;
  background-color: transparent;
  height: 1px;
  overflow-x: hidden;
  overflow-y: scroll;
  position: absolute;
  right: 0px;
  z-index: 1;
}
.gantt_ver_scroll > div {
  width: 1px;
  height: 1px;
}
.gantt_hor_scroll {
  height: 0px;
  background-color: transparent;
  width: 100%;
  clear: both;
  overflow-x: scroll;
  overflow-y: hidden;
}
.gantt_layout_cell .gantt_hor_scroll {
  position: absolute;
}
.gantt_hor_scroll > div {
  width: 5000px;
  height: 1px;
}
.gantt_tree_indent,
.gantt_tree_icon {
  flex-grow: 0;
  flex-shrink: 0;
}
.gantt_tree_indent {
  width: 15px;
  height: 100%;
}
.gantt_tree_content,
.gantt_tree_icon {
  vertical-align: top;
}
.gantt_tree_icon {
  width: 28px;
  height: 100%;
  background-repeat: no-repeat;
  background-position: center center;
}
.gantt_tree_content {
  height: 100%;
  white-space: nowrap;
  min-width: 0;
}
.gantt_tree_icon.gantt_open {
  background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyhpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTMyIDc5LjE1OTI4NCwgMjAxNi8wNC8xOS0xMzoxMzo0MCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTUuNSAoV2luZG93cykiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6QjRFQzM4RjY2ODc3MTFFNjlGNUVCQUVCQzgyNkQ5RUUiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6QjRFQzM4Rjc2ODc3MTFFNjlGNUVCQUVCQzgyNkQ5RUUiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDpCNEVDMzhGNDY4NzcxMUU2OUY1RUJBRUJDODI2RDlFRSIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDpCNEVDMzhGNTY4NzcxMUU2OUY1RUJBRUJDODI2RDlFRSIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PpdfxE8AAABySURBVHjaYjx48CADucDOzo6BiYFCwILE/k+iXkZ0A+CCRAC4ZXi9sNXO6T8IE+sFkAZcBqHwvQ/tYyDKBaQGIr7A/I8rnGjiAkYsNjMSZQBy4CAHHro4zb2A7CJGUg34T4kLGMnxAuP///8pCgOAAAMAxcMbX5R+AnUAAAAASUVORK5CYII=);
  width: 18px;
  cursor: pointer;
}
.gantt_tree_icon.gantt_close {
  background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyhpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTMyIDc5LjE1OTI4NCwgMjAxNi8wNC8xOS0xMzoxMzo0MCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTUuNSAoV2luZG93cykiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6Qjg3ODU2QTg2ODc3MTFFNkE4MDlDMDMyQkRGNDgyQTAiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6Qjg3ODU2QTk2ODc3MTFFNkE4MDlDMDMyQkRGNDgyQTAiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDpCODc4NTZBNjY4NzcxMUU2QTgwOUMwMzJCREY0ODJBMCIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDpCODc4NTZBNzY4NzcxMUU2QTgwOUMwMzJCREY0ODJBMCIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PqbUJTYAAABdSURBVHjaYjx48CADucDOzo6BiYFCwILE/k+iXkZ0A+CCRAC4ZVT1AsNWOyeiNHkf2sdAGxcQGZgo4UQTFzCSbQBy4BALKPYC1cPgPyUGMJLjAsb///9T5AWAAAMAJ4wO9WM7P60AAAAASUVORK5CYII=);
  width: 18px;
  cursor: pointer;
}
.gantt_tree_icon.gantt_blank {
  width: 18px;
}
.gantt_tree_icon.gantt_folder_open {
  background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAYAAABWzo5XAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyhpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTMyIDc5LjE1OTI4NCwgMjAxNi8wNC8xOS0xMzoxMzo0MCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTUuNSAoV2luZG93cykiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6RkM2MUMyMzQ2ODc3MTFFNjhFMjE5QzYzREY2ODEzREUiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6RkM2MUMyMzU2ODc3MTFFNjhFMjE5QzYzREY2ODEzREUiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDpGQzYxQzIzMjY4NzcxMUU2OEUyMTlDNjNERjY4MTNERSIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDpGQzYxQzIzMzY4NzcxMUU2OEUyMTlDNjNERjY4MTNERSIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PlC39FYAAADWSURBVHjaYty4fi0DNQATA5UAskGeQPwMiP9jwfWkGDQXiCVxqGsgZBiyQTBDGNFwI5Jh2FwL8oUnMWHUgGQYNgBywFxiA7sBi0thGGwYVWOtFYi/IIn9JxI7oBtUBMTcZDiiHt2gE1B2C55wQMZiQPwZ6iIHZINgMZIKxFxEuOQ1EE9GdxXIoANQLA7E2UR6qweIP6K7iAHJVaVAzEuEQe+BeBqyAAuUBrloBxB7APEnMgL+BXI6ygfiR2QY8hSIk1mQBG4BsTy5CZLx////VEnZAAEGAO3yNxaCOyWPAAAAAElFTkSuQmCC);
}
.gantt_tree_icon.gantt_folder_closed {
  background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAYAAABWzo5XAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyhpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTMyIDc5LjE1OTI4NCwgMjAxNi8wNC8xOS0xMzoxMzo0MCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTUuNSAoV2luZG93cykiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6RkZDMUZDMkI2ODc3MTFFNkI5QTdFOTQyM0UxNUEzRjEiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6RkZDMUZDMkM2ODc3MTFFNkI5QTdFOTQyM0UxNUEzRjEiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDpGRkMxRkMyOTY4NzcxMUU2QjlBN0U5NDIzRTE1QTNGMSIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDpGRkMxRkMyQTY4NzcxMUU2QjlBN0U5NDIzRTE1QTNGMSIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PvnU3ycAAAB9SURBVHjaYty4fi0DNQATA5UAskGeQPwMiP9jwfWkGDQXiCVxqGsgZBiyQTBDGNFwI5Jh2FwL8oUnMWHUgGQYNgBywFxiA7sBi0thGGwYTWJt1KChaNBzKP2fRAwCL5ANSgEJkOGYp0CczIIksA1PpiUIGP///0+VMAIIMAC11ShRpw6rxAAAAABJRU5ErkJggg==);
}
.gantt_tree_icon.gantt_file {
  background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAYAAABWzo5XAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyhpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTMyIDc5LjE1OTI4NCwgMjAxNi8wNC8xOS0xMzoxMzo0MCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTUuNSAoV2luZG93cykiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6MDQwMTVBMUU2ODc4MTFFNkFBNDVCQkYzMzdERTM1MzYiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6MDQwMTVBMUY2ODc4MTFFNkFBNDVCQkYzMzdERTM1MzYiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDowNDAxNUExQzY4NzgxMUU2QUE0NUJCRjMzN0RFMzUzNiIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDowNDAxNUExRDY4NzgxMUU2QUE0NUJCRjMzN0RFMzUzNiIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PsHnBgAAAAB8SURBVHjaYvz//z/Dpg3rGCgBfgFBDExoYp5A/AyI/+PB9dgMQzdoLhBLEnBAAzbDWND4MEMYsRjwH80wEGjE5SJSAIrLmBgoAw3UMghnGOEDjHjCjHouGjVoOBj0HCmNEMIg8AKXQSnIkgTAUyBOxpWytxFRjGAFAAEGAOcUI0XiA1ItAAAAAElFTkSuQmCC);
}
.gantt_grid_head_cell .gantt_sort {
  position: absolute;
  right: 5px;
  top: 8px;
  width: 7px;
  height: 13px;
  background-repeat: no-repeat;
  background-position: center center;
}
.gantt_grid_head_cell .gantt_sort.gantt_asc {
  background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAcAAAANCAYAAABlyXS1AAAARUlEQVR4nGNgQAKGxib/GbABkIS7b8B/DAUwCRiGK0CXwFBAb1DfP/U/LszwHwi2X7qFgUEArBtdAVwCBmAKMCSQFSDzAWXXaOHsXeqkAAAAAElFTkSuQmCC);
}
.gantt_grid_head_cell .gantt_sort.gantt_desc {
  background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAcAAAANCAYAAABlyXS1AAAARUlEQVR42mNgQAL1/VP/M2ADIIntF2/9x1AAlrh0C47hCmA60DFYwX88gIFGwNDY5D8uDFbg7hvwHx2jmIBTAlkB0e4BAEjlaNtBWJPnAAAAAElFTkSuQmCC);
}
.gantt_inserted,
.gantt_updated {
  font-weight: bold;
}
.gantt_deleted {
  text-decoration: line-through;
}
.gantt_invalid {
  background-color: #FFE0E0;
}
.gantt_error {
  color: red;
}
.gantt_status {
  right: 1px;
  padding: 5px 10px;
  background: rgba(155, 155, 155, 0.1);
  position: absolute;
  top: 1px;
  -webkit-transition: opacity 0.2s;
  transition: opacity 0.2s;
  opacity: 0;
}
.gantt_status.gantt_status_visible {
  opacity: 1;
}
#gantt_ajax_dots span {
  -webkit-transition: opacity 0.2s;
  transition: opacity 0.2s;
  background-repeat: no-repeat;
  opacity: 0;
}
#gantt_ajax_dots span.gantt_dot_visible {
  opacity: 1;
}
.gantt_column_drag_marker {
  border: 1px solid #CECECE;
  opacity: 0.8;
  pointer-events: none;
}
.gantt_grid_head_cell_dragged {
  border: 1px solid #CECECE;
  opacity: 0.3;
}
.gantt_grid_target_marker {
  position: absolute;
  top: 0;
  width: 2px;
  height: 100%;
  background-color: #18ffff;
  transform: translateX(-1px);
}
.gantt_grid_target_marker::before,
.gantt_grid_target_marker::after {
  display: block;
  content: "";
  position: absolute;
  left: -5px;
  width: 0px;
  height: 0px;
  border: 6px solid rgba(0, 0, 0, 0);
}
.gantt_grid_target_marker::before {
  border-top-color: #18ffff;
}
.gantt_grid_target_marker::after {
  bottom: 0;
  border-bottom-color: #18ffff;
}
.gantt_message_area {
  position: fixed;
  right: 5px;
  width: 250px;
  z-index: 1000;
}
.gantt-info {
  min-width: 120px;
  padding: 4px 4px 4px 20px;
  font-family: "arial";
  z-index: 10000;
  margin: 5px;
  margin-bottom: 10px;
  -webkit-transition: all .5s ease;
  -moz-transition: all .5s ease;
  -o-transition: all .5s ease;
  transition: all .5s ease;
}
.gantt-info.hidden {
  height: 0px;
  padding: 0px;
  border-width: 0px;
  margin: 0px;
  overflow: hidden;
}
.gantt_modal_box {
  overflow: hidden;
  display: inline-block;
  min-width: 250px;
  width: 250px;
  text-align: center;
  position: fixed;
  z-index: 20000;
  border-color: #fff;
  -webkit-box-shadow: inset 0px 0px 0px 4px #0505ff;
  -moz-box-shadow: inset 0px 0px 0px 4px #0505ff;
  box-shadow: inset 0px 0px 0px 4px #0505ff;
  padding: 4px;
  font-family: "arial";
  border-radius: 6px;
  border: 1px solid #FFFF00;
  background: #000;
}
.gantt_popup_title {
  border-top-left-radius: 6px;
  border-top-right-radius: 6px;
  border-width: 0px;
}
.gantt_button,
.gantt_popup_button {
  border: 1px solid #FFFF00;
  height: 30px;
  line-height: 30px;
  display: inline-block;
  margin: 0 5px;
  border-radius: 4px;
  background: #000;
}
.gantt-info,
.gantt_popup_button,
.gantt_button {
  user-select: none;
  -webkit-user-select: none;
  -moz-user-select: -moz-none;
  cursor: pointer;
}
.gantt_popup_text {
  overflow: hidden;
}
.gantt_popup_controls {
  border-radius: 6px;
  padding: 10px;
}
.gantt_popup_button {
  min-width: 100px;
}
div.dhx_modal_cover {
  background-color: #000;
  cursor: default;
  filter: progid:DXImageTransform.Microsoft.Alpha(opacity=20);
  opacity: 0.2;
  position: fixed;
  z-index: 19999;
  left: 0px;
  top: 0px;
  width: 100%;
  height: 100%;
  border: none;
  zoom: 1;
}
.gantt-info img,
.gantt_modal_box img {
  float: left;
  margin-right: 20px;
}
.gantt-alert-error,
.gantt-confirm-error {
  border: 1px solid #ff0000;
}
/*Skin section*/
.gantt_button input,
.gantt_popup_button div {
  border-radius: 4px;
  font-size: 16px;
  -moz-box-sizing: content-box;
  box-sizing: content-box;
  padding: 0px;
  margin: 0px;
  vertical-align: top;
}
.gantt_popup_title {
  border-bottom: 1px solid #c1c1c1;
  height: 40px;
  line-height: 40px;
  font-size: 20px;
}
.gantt_popup_text {
  margin: 15px 15px 5px 15px;
  font-size: 16px;
  color: #fff;
  min-height: 30px;
  border-radius: 6px;
}
.gantt-info,
.gantt-error {
  font-size: 16px;
  color: #000;
  box-shadow: 3px 3px 3px rgba(0, 0, 0, 0.07);
  padding: 0px;
  background-color: #FFFFFF;
  border-radius: 3px;
  border: 1px solid #FFFFFF;
}
.gantt-info div {
  padding: 5px 10px 5px 10px;
  background-color: #FFFFFF;
  border-radius: 3px;
  border: 1px solid #FFFF00;
}
.gantt-error {
  background-color: #B60000;
  border: 1px solid #FFFF00;
}
.gantt-error div {
  background-color: #B60000;
  border: 1px solid transparent;
  color: #FFFFFF;
}
.gantt-warning {
  background-color: #EF7F00;
  border: 1px solid #FFFF00;
}
.gantt-warning div {
  background-color: #EF7F00;
  border: 1px solid transparent;
  color: #FFFFFF;
}
.gantt_grid div,
.gantt_data_area div {
  -ms-touch-action: none;
  -webkit-tap-highlight-color: rgba(0, 0, 0, 0);
}
.gantt_data_area {
  position: relative;
  overflow-x: hidden;
  overflow-y: hidden;
  -moz-user-select: -moz-none;
  -webkit-user-select: none;
  user-select: none;
}
.gantt_links_area {
  position: absolute;
  left: 0px;
  top: 0px;
}
.gantt_task_content,
.gantt_task_progress,
.gantt_side_content {
  line-height: inherit;
  overflow: hidden;
  height: 100%;
}
.gantt_task_content {
  font-size: 14px;
  color: #fff;
  width: 100%;
  top: 0;
  cursor: pointer;
  position: absolute;
  white-space: nowrap;
  text-align: center;
}
.gantt_task_progress {
  text-align: center;
  z-index: 0;
  background: #0e2d7d;
}
.gantt_task_progress_wrapper {
  border-radius: inherit;
  position: relative;
  width: 100%;
  height: 100%;
  overflow: hidden;
}
.gantt_task_line {
  -webkit-border-radius: 2px;
  -moz-border-radius: 2px;
  border-radius: 2px;
  position: absolute;
  -moz-box-sizing: border-box;
  box-sizing: border-box;
  background-color: #0042e9;
  border: 1px solid #0042e9;
  -webkit-user-select: none;
  -moz-user-select: none;
  -moz-user-select: -moz-none;
}
.gantt_task_line.gantt_drag_move div {
  cursor: move;
}
.gantt_touch_move,
.gantt_touch_progress .gantt_touch_resize {
  -moz-transform: scale(1.02, 1.1);
  -o-transform: scale(1.02, 1.1);
  -webkit-transform: scale(1.02, 1.1);
  transform: scale(1.02, 1.1);
  -moz-transform-origin: 50%;
  -o-transform-origin: 50%;
  -webkit-transform-origin: 50%;
  transform-origin: 50%;
}
.gantt_touch_progress .gantt_task_progress_drag,
.gantt_touch_resize .gantt_task_drag {
  -moz-transform: scaleY(1.3);
  -o-transform: scaleY(1.3);
  -webkit-transform: scaleY(1.3);
  transform: scaleY(1.3);
  -moz-transform-origin: 50%;
  -o-transform-origin: 50%;
  -webkit-transform-origin: 50%;
  transform-origin: 50%;
}
.gantt_side_content {
  position: absolute;
  white-space: nowrap;
  color: #fff;
  top: 0;
  font-size: 11px;
  font-size: 13px;
}
.gantt_side_content.gantt_left {
  right: 100%;
  padding-right: 20px;
}
.gantt_side_content.gantt_right {
  left: 100%;
  padding-left: 20px;
}
.gantt_side_content.gantt_link_crossing {
  bottom: 8.75px;
  top: auto;
}
.gantt_task_link .gantt_line_wrapper,
.gantt_link_arrow {
  position: absolute;
  cursor: pointer;
}
.gantt_line_wrapper div {
  background-color: #18ffff;
}
.gantt_task_link:hover .gantt_line_wrapper div {
  box-shadow: 0 0 5px 0px #18ffff;
}
.gantt_task_link div.gantt_link_arrow {
  background-color: transparent;
  border-style: solid;
  width: 0px;
  height: 0px;
}
.gantt_link_control {
  position: absolute;
  width: 20px;
  top: 0px;
}
.gantt_link_control div {
  display: none;
  cursor: pointer;
  box-sizing: border-box;
  position: relative;
  top: 50%;
  margin-top: -7.5px;
  vertical-align: middle;
  border: 1px solid #929292;
  -webkit-border-radius: 6.5px;
  -moz-border-radius: 6.5px;
  border-radius: 6.5px;
  height: 13px;
  width: 13px;
  background-color: #f0f0f0;
}
.gantt_link_control.task_right div.gantt_link_point {
  margin-left: 7px;
}
.gantt_link_control div:hover {
  background-color: #FFF;
}
.gantt_link_control.task_left {
  left: -20px;
}
.gantt_link_control.task_right {
  right: -20px;
}
.gantt_task_line.gantt_selected .gantt_link_control div,
.gantt_task_line:hover .gantt_link_control div,
.gantt_task_line.gantt_drag_progress .gantt_link_control div,
.gantt_task_line.gantt_drag_move .gantt_link_control div,
.gantt_task_line.gantt_drag_resize .gantt_link_control div,
.gantt_task_line.gantt_selected .gantt_task_progress_drag,
.gantt_task_line:hover .gantt_task_progress_drag,
.gantt_task_line.gantt_drag_progress .gantt_task_progress_drag,
.gantt_task_line.gantt_drag_move .gantt_task_progress_drag,
.gantt_task_line.gantt_drag_resize .gantt_task_progress_drag,
.gantt_task_line.gantt_selected .gantt_task_drag,
.gantt_task_line:hover .gantt_task_drag,
.gantt_task_line.gantt_drag_progress .gantt_task_drag,
.gantt_task_line.gantt_drag_move .gantt_task_drag,
.gantt_task_line.gantt_drag_resize .gantt_task_drag {
  display: block;
}
.gantt_link_target .gantt_link_control div {
  display: block;
}
.gantt_link_source,
.gantt_link_target {
  box-shadow: 0px 0px 3px #0042e9;
}
.gantt_link_target.link_start_allow,
.gantt_link_target.link_finish_allow {
  box-shadow: 0px 0px 3px #65ffff;
}
.gantt_link_target.link_start_deny,
.gantt_link_target.link_finish_deny {
  box-shadow: 0px 0px 3px #e87e7b;
}
.link_start_allow .gantt_link_control.task_start_date div,
.link_finish_allow .gantt_link_control.task_end_date div {
  background-color: #65ffff;
  border-color: #18ffff;
}
.link_start_deny .gantt_link_control.task_start_date div,
.link_finish_deny .gantt_link_control.task_end_date div {
  background-color: #e87e7b;
  border-color: #dd3e3a;
}
.gantt_link_arrow_right {
  border-width: 4px 0 4px 6px;
  border-top-color: transparent !important;
  border-right-color: transparent !important;
  border-bottom-color: transparent !important;
  border-left-color: #18ffff;
  /*margin-top: -1px;*/
}
.gantt_link_arrow_left {
  border-width: 4px 6px 4px 0;
  margin-top: -1px;
  border-top-color: transparent !important;
  border-right-color: #18ffff;
  border-bottom-color: transparent !important;
  border-left-color: transparent !important;
}
.gantt_link_arrow_up {
  border-width: 0 4px 6px 4px;
  border-color: transparent transparent #18ffff transparent;
  border-top-color: transparent !important;
  border-right-color: transparent !important;
  border-bottom-color: #18ffff;
  border-left-color: transparent !important;
}
.gantt_link_arrow_down {
  border-width: 4px 6px 0 4px;
  border-top-color: #18ffff;
  border-right-color: transparent !important;
  border-bottom-color: transparent !important;
  border-left-color: transparent !important;
}
.gantt_task_drag,
.gantt_task_progress_drag {
  cursor: ew-resize;
  display: none;
  position: absolute;
}
.gantt_task_drag.task_right {
  cursor: e-resize;
}
.gantt_task_drag.task_left {
  cursor: w-resize;
}
.gantt_task_drag {
  height: 100%;
  width: 8px;
  z-index: 1;
  top: -1px;
}
.gantt_task_drag.task_left {
  left: -7px;
}
.gantt_task_drag.task_right {
  right: -7px;
}
.gantt_task_progress_drag {
  height: 8px;
  width: 8px;
  bottom: -4px;
  margin-left: -4px;
  background-position: bottom;
  background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAALCAYAAAB24g05AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyhpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTMyIDc5LjE1OTI4NCwgMjAxNi8wNC8xOS0xMzoxMzo0MCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTUuNSAoV2luZG93cykiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6RDQ2MjFDRjU2ODc4MTFFNjk2MEVEQjgxRDU3RThDRjQiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6RDQ2MjFDRjY2ODc4MTFFNjk2MEVEQjgxRDU3RThDRjQiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDpENDYyMUNGMzY4NzgxMUU2OTYwRURCODFENTdFOENGNCIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDpENDYyMUNGNDY4NzgxMUU2OTYwRURCODFENTdFOENGNCIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PkyX4qoAAADrSURBVHjaYiz7z8yADXQx/mUCUr1QbjFQ3T9s6phwaOYEUqvkHBkLQBjIXg0VI2wAUKEIkNqrFc0YHLqDiQGEtWMYg0BiUDncBgAVqACpY5bVjJY+i5kYmNkYwNh7ERMDSAwkB1WDaQBQwoKJheGY+ywmVdsWoDAjkiogGyTmMZtJFajmOEgtigFAgSA2HoZ9wZuZRPVTGRlwAb0URgagGhGQWpAeqNkM+TySDL3BW5mYxQ1xa0YGL8//Z1jr8+/fl2cMRSAd/zMeMjPwyTGQBD49YmCYIf8X4gVSNSPrYWKgEIC9QIkBAAEGAKWdQQSo7CbHAAAAAElFTkSuQmCC);
  background-repeat: no-repeat;
  z-index: 1;
}
.gantt_task_progress_drag:hover {
  background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAALCAYAAAB24g05AAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAAsTAAALEwEAmpwYAAAA+UlEQVQoz6WPP0tCURiHn9+5d7huEd5VKhIEwaEQlOtQS0HjbXBy6ANUkuEo4njAz9Bee5tu2bfoCwTRVsu5p6E7GHoJ8dneP7+H99XQB6zDyhlgmpeDoQ+ydXumIFwCHuOG+nFDfeAp7/0vsHJlYFY50WVnIjoTUTlVCszyWbHAyh0Ci1pX7ea9MCGYEJoDUeuqDSzynVWBlWspYHF0rWq9p5VT6z1xfKOqAl6tXOuPwMqlYcQ8GSnePxdF7J2JZKRyGDG3cimAgNtol2kyVrBzUBxe5vPN8zL22fcHdwL8xYOhFLMRX+/wfJX9vrBpeDlj2BIBfhvBD+rwPMTN8+ghAAAAAElFTkSuQmCC);
}
.gantt_link_tooltip {
  box-shadow: 3px 3px 3px #888888;
  background-color: #fff;
  border-left: 1px dotted #cecece;
  border-top: 1px dotted #cecece;
  font-family: Tahoma;
  font-size: 8pt;
  color: #444;
  padding: 6px;
  line-height: 20px;
}
.gantt_link_direction {
  height: 0px;
  border: 0px none #18ffff;
  border-bottom-style: dashed;
  border-bottom-width: 2px;
  transform-origin: 0% 0%;
  -ms-transform-origin: 0% 0%;
  -webkit-transform-origin: 0% 0%;
  z-index: 2;
  margin-left: 1px;
  position: absolute;
}
.gantt_grid_data .gantt_row.gantt_selected,
.gantt_grid_data .gantt_row.odd.gantt_selected {
  background-color: #42425e;
}
.gantt_task_row.gantt_selected {
  background-color: #42425e;
}
.gantt_task_row.gantt_selected .gantt_task_cell {
  border-right-color: #2d2d40;
}
.gantt_task_line.gantt_selected {
  box-shadow: 0 0 5px #0e2d7d;
}
.gantt_task_line.gantt_project.gantt_selected {
  box-shadow: 0 0 5px #006803;
}
.gantt_task_line.gantt_milestone {
  visibility: hidden;
  background-color: #c06fce;
  border: 0px solid #ef8eff;
  box-sizing: content-box;
  -moz-box-sizing: content-box;
}
.gantt_task_line.gantt_milestone div {
  visibility: visible;
}
.gantt_task_line.gantt_milestone .gantt_task_content {
  background: inherit;
  border: inherit;
  border-width: 1px;
  border-radius: inherit;
  box-sizing: border-box;
  -moz-box-sizing: border-box;
  -webkit-transform: rotate(45deg);
  -moz-transform: rotate(45deg);
  -ms-transform: rotate(45deg);
  -o-transform: rotate(45deg);
  transform: rotate(45deg);
}
.gantt_task_line.gantt_task_inline_color {
  border-color: #999999;
}
.gantt_task_line.gantt_task_inline_color .gantt_task_progress {
  background-color: #363636;
  opacity: 0.2;
}
.gantt_task_line.gantt_task_inline_color.gantt_selected {
  box-shadow: 0 0 5px #999999;
}
.gantt_task_line.gantt_task_inline_color.gantt_project.gantt_selected {
  box-shadow: 0 0 5px #999999;
}
.gantt_task_link.gantt_link_inline_color:hover .gantt_line_wrapper div {
  box-shadow: 0 0 5px 0px #999999;
}
.gantt_critical_task {
  background-color: #e63030;
  border-color: #9d3a3a;
}
.gantt_critical_task .gantt_task_progress {
  background-color: rgba(0, 0, 0, 0.4);
}
.gantt_critical_link .gantt_line_wrapper > div {
  background-color: #e63030;
}
.gantt_critical_link .gantt_link_arrow {
  border-color: #e63030;
}
.gantt_row:focus,
.gantt_cell:focus,
.gantt_btn_set:focus,
.gantt_qi_big_icon:focus,
.gantt_popup_button:focus,
.gantt_grid_head_cell:focus {
  -moz-box-shadow: inset 0px 0px 1px 1px #4d90fe;
  -webkit-box-shadow: inset 0px 0px 1px 1px #4d90fe;
  box-shadow: inset 0px 0px 1px 1px #4d90fe;
}
.gantt_split_parent,
.gantt_split_subproject {
  opacity: 0.1;
  pointer-events: none;
}
.gantt_rollup_child .gantt_link_control,
.gantt_rollup_child:hover .gantt_link_control {
  display: none;
}
.gantt_unselectable,
.gantt_unselectable div {
  -webkit-user-select: none;
  -moz-user-select: none;
  -moz-user-select: -moz-none;
}
.gantt_cal_light {
  -webkit-tap-highlight-color: transparent;
  background: #000;
  border-radius: 6px;
  font-family: "arial";
  border: 1px solid #c1c1c1;
  color: #ffffff;
  font-size: 14px;
  position: absolute;
  z-index: 10001;
  width: 550px;
  height: 250px;
  border-color: #fff;
  -webkit-box-shadow: inset 0px 0px 0px 4px #0505ff;
  -moz-box-shadow: inset 0px 0px 0px 4px #0505ff;
  box-shadow: inset 0px 0px 0px 4px #0505ff;
  padding: 4px;
}
.gantt_cal_light_wide {
  width: 650px;
}
.gantt_cal_light select {
  font-family: "arial";
  border: 1px solid #c1c1c1;
  font-size: 14px;
  padding: 2px;
  margin: 0px;
}
.gantt_cal_ltitle {
  padding: 7px 10px;
  overflow: hidden;
  white-space: nowrap;
  -webkit-border-top-left-radius: 6px;
  -webkit-border-bottom-left-radius: 0;
  -webkit-border-top-right-radius: 6px;
  -webkit-border-bottom-right-radius: 0;
  -moz-border-radius-topleft: 6px;
  -moz-border-radius-bottomleft: 0;
  -moz-border-radius-topright: 6px;
  -moz-border-radius-bottomright: 0;
  border-top-left-radius: 6px;
  border-bottom-left-radius: 0;
  border-top-right-radius: 6px;
  border-bottom-right-radius: 0;
}
.gantt_cal_ltitle span {
  white-space: nowrap;
}
.gantt_cal_lsection {
  color: #727272;
  font-weight: bold;
  padding: 12px 0px 5px 10px;
}
.gantt_cal_lsection .gantt_fullday {
  float: right;
  margin-right: 5px;
  font-size: 12px;
  font-weight: normal;
  line-height: 20px;
  vertical-align: top;
  cursor: pointer;
}
.gantt_cal_lsection {
  font-size: 13px;
}
.gantt_cal_ltext {
  padding: 2px    10px;
  overflow: hidden;
}
.gantt_cal_ltext textarea {
  overflow-y: auto;
  overflow-x: hidden;
  font-family: "arial";
  font-size: 14px;
  -moz-box-sizing: border-box;
  -webkit-box-sizing: border-box;
  box-sizing: border-box;
  border: 1px solid #c1c1c1;
  height: 100%;
  width: 100%;
  outline: none !important;
  resize: none;
}
.gantt_section_constraint [data-constraint-time-select] {
  margin-left: 20px;
}
.gantt_time {
  font-weight: bold;
}
.gantt_cal_light .gantt_title {
  padding-left: 10px;
}
.gantt_cal_larea {
  border: 1px solid #c1c1c1;
  border-left: none;
  border-right: none;
  background-color: #000;
  overflow: hidden;
  height: 1px;
}
.gantt_btn_set {
  margin: 10px 7px 5px 10px;
  padding: 5px 15px 5px 10px;
  float: left;
  -webkit-border-radius: 4px;
  -moz-border-radius: 4px;
  border-radius: 4px;
  border-width: 2px;
  border-color: #c1c1c1;
  border-style: solid;
  height: 32px;
  font-weight: bold;
  background: #000;
  -moz-box-sizing: border-box;
  -webkit-box-sizing: border-box;
  box-sizing: border-box;
  cursor: pointer;
}
.gantt_hidden {
  display: none;
}
.gantt_btn_set div {
  float: left;
  font-size: 13px;
  height: 18px;
  line-height: 18px;
  background-repeat: no-repeat;
  vertical-align: middle;
}
.gantt_save_btn {
  background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyhpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTMyIDc5LjE1OTI4NCwgMjAxNi8wNC8xOS0xMzoxMzo0MCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTUuNSAoV2luZG93cykiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6MEEyMTFDOUM2ODc5MTFFNjlDOTRDREYyNUQ4NENENTEiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6MEEyMTFDOUQ2ODc5MTFFNjlDOTRDREYyNUQ4NENENTEiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDowQTIxMUM5QTY4NzkxMUU2OUM5NENERjI1RDg0Q0Q1MSIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDowQTIxMUM5QjY4NzkxMUU2OUM5NENERjI1RDg0Q0Q1MSIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PhVZXooAAAD2SURBVHjaxNO/a8JAFMBxUx1KQXAQcWj9sdhBCDg52I6FgjgIIi7duunsIl0dxNmxW3EUHaS0tFj1DxJRKiX1/AZeIYTGNMnQg8927727e++0tgqHgqyTUMDlN8E55tAjPoIzeEcWPa8nyEllM3iJupcEeXzgAm+4xdpMoGOB9JHgAmZIYooKtj+P2MWVHO3yl+Ci3DmOEar4tHahIRtSkqRgCb7GK2IYmnfGl72NG5QxRkKSlXCDZ0TxiDsYTnOwQw1PUu0FE5xhgHt8uw2SIVUGEniKPlpQTq9rHyRzYxMr7PHg1lunSez8dTg0pdT//saDAAMAj/Mt6qJaGUkAAAAASUVORK5CYII=);
  margin-top: 2px;
  width: 21px;
}
.gantt_cancel_btn {
  margin-top: 2px;
  background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyhpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTMyIDc5LjE1OTI4NCwgMjAxNi8wNC8xOS0xMzoxMzo0MCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTUuNSAoV2luZG93cykiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6MERGODM2RkI2ODc5MTFFNkFCOTRCOTNEMkMwODJCQkUiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6MERGODM2RkM2ODc5MTFFNkFCOTRCOTNEMkMwODJCQkUiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDowREY4MzZGOTY4NzkxMUU2QUI5NEI5M0QyQzA4MkJCRSIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDowREY4MzZGQTY4NzkxMUU2QUI5NEI5M0QyQzA4MkJCRSIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/Ppyd3J4AAAFPSURBVHjajJO5SkNRFEVfnlEbU9qrjVMwYiMBEbSK4g8IllFQK/EvLCwEEYdS/AOHIiJYWinEqREtbLQKCGpQcW3YgUuI8R1YvOTdvU9uzpCqVCpRXQxAEaag2+8e4AT24CYUp4IEbbAOixBHjePHSVbhLQqEMh/CMnzBBuQhY/J+p7MFOIaO8AabsATPMAOXDX69E86hz9+35FGCQT5cwTeMNjGfgbT30AVpyMUuWAtsJzBfwzjs2FNUgoKFBwnMk/ASaAv6C58uYjtUE5gjaz+kT//RrnrzBLwG561+VmMPiWIkoVmR9fMp9oQpZhOaa1pFSTXIuvoakkfo/cc8BBdu47BuUIZdF0bmuybmHBxZq7aXa5OY8cGYO6Ep24dbG/thznuijp3CtLThMinJmme92TLptivwXr+NtVAB5z1gPb6RalPyJpZD8a8AAwBoDGzHPr0K4wAAAABJRU5ErkJggg==);
  width: 20px;
}
.gantt_delete_btn {
  background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyhpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTMyIDc5LjE1OTI4NCwgMjAxNi8wNC8xOS0xMzoxMzo0MCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTUuNSAoV2luZG93cykiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6MTZBMjlFNkU2ODc5MTFFNjkxOTRGRTZGMDkwMENCMUIiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6MTZBMjlFNkY2ODc5MTFFNjkxOTRGRTZGMDkwMENCMUIiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDoxNkEyOUU2QzY4NzkxMUU2OTE5NEZFNkYwOTAwQ0IxQiIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDoxNkEyOUU2RDY4NzkxMUU2OTE5NEZFNkYwOTAwQ0IxQiIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PpeemjIAAABMSURBVHjaYvx/hAEbqAfiBjQxEL8RXSETkZphBtSjCzJCXfCfgTzAyMRAIWCBmUSpATBArFcY8QUiSWDUgFEDsBlwhAg9R5E5AAEGAFNACzFr4MENAAAAAElFTkSuQmCC);
  margin-top: 2px;
  width: 20px;
}
.gantt_cal_cover {
  width: 100%;
  height: 100%;
  position: fixed;
  z-index: 10000;
  top: 0px;
  left: 0px;
  background-color: black;
  opacity: 0.1;
  filter: progid:DXImageTransform.Microsoft.Alpha(opacity=10);
}
.gantt_custom_button {
  padding: 0px 3px 0px 3px;
  font-family: "arial";
  font-size: 14px;
  font-weight: normal;
  margin-right: 10px;
  margin-top: -5px;
  cursor: pointer;
  float: right;
  height: 21px;
  width: 90px;
  border: 1px solid #CECECE;
  text-align: center;
  -webkit-border-radius: 4px;
  -moz-border-radius: 4px;
  -ms-border-radius: 4px;
  -o-border-radius: 4px;
  border-radius: 4px;
}
.gantt_custom_button div {
  cursor: pointer;
  float: none;
  height: 21px;
  line-height: 21px;
  vertical-align: middle;
}
.gantt_custom_button div:first-child {
  display: none;
}
.gantt_cal_light_wide {
  width: 580px;
  padding: 2px 4px;
}
.gantt_cal_light_wide .gantt_cal_larea {
  -moz-box-sizing: border-box;
  -webkit-box-sizing: border-box;
  box-sizing: border-box;
  border: 1px solid #c1c1c1;
}
.gantt_cal_light_wide .gantt_cal_lsection {
  border: 0px;
  float: left;
  text-align: right;
  width: 80px;
  height: 20px;
  padding: 5px 10px 0px 0px;
}
.gantt_cal_light_wide .gantt_wrap_section {
  position: relative;
  padding: 10px 0;
  overflow: hidden;
  border-bottom: 1px solid #7e7e7e;
}
.gantt_cal_light_wide .gantt_section_time {
  overflow: hidden;
  padding-top: 2px !important;
  padding-right: 0px;
  height: 20px !important;
}
.gantt_cal_light_wide .gantt_cal_ltext {
  padding-right: 0px;
}
.gantt_cal_light_wide .gantt_cal_larea {
  padding: 0 10px;
  width: 100%;
}
.gantt_cal_light_wide .gantt_section_time {
  background: transparent;
}
.gantt_cal_light_wide .gantt_cal_checkbox label {
  padding-left: 0px;
}
.gantt_cal_light_wide .gantt_cal_lsection .gantt_fullday {
  float: none;
  margin-right: 0px;
  font-weight: bold;
  cursor: pointer;
}
.gantt_cal_light_wide .gantt_custom_button {
  position: absolute;
  top: 0;
  right: 0;
  margin-top: 2px;
}
.gantt_cal_light_wide .gantt_repeat_right {
  margin-right: 55px;
}
.gantt_cal_light_wide.gantt_cal_light_full {
  width: 738px;
}
.gantt_cal_wide_checkbox input {
  margin-top: 8px;
  margin-left: 14px;
}
.gantt_cal_light input {
  font-size: 14px;
}
.gantt_section_time {
  background-color: white;
  white-space: nowrap;
  padding: 2px 10px 5px;
  padding-top: 2px !important;
}
.gantt_section_time .gantt_time_selects {
  float: left;
  height: 25px;
}
.gantt_section_time .gantt_time_selects select {
  height: 23px;
  padding: 2px;
  border: 1px solid #c1c1c1;
}
.gantt_duration {
  width: 100px;
  height: 23px;
  float: left;
  white-space: nowrap;
  margin-left: 20px;
  line-height: 23px;
}
.gantt_duration .gantt_duration_value,
.gantt_duration .gantt_duration_dec,
.gantt_duration .gantt_duration_inc {
  -moz-box-sizing: border-box;
  -webkit-box-sizing: border-box;
  box-sizing: border-box;
  text-align: center;
  vertical-align: top;
  height: 100%;
  border: 1px solid #c1c1c1;
}
.gantt_duration .gantt_duration_value {
  width: 40px;
  padding: 3px 4px;
  border-left-width: 0;
  border-right-width: 0;
}
.gantt_duration .gantt_duration_value.gantt_duration_value_formatted {
  width: 70px;
}
.gantt_duration .gantt_duration_dec,
.gantt_duration .gantt_duration_inc {
  width: 20px;
  padding: 1px;
  padding-bottom: 1px;
  background: #000;
}
.gantt_duration .gantt_duration_dec {
  -moz-border-top-left-radius: 4px;
  -moz-border-bottom-left-radius: 4px;
  -webkit-border-top-left-radius: 4px;
  -webkit-border-bottom-left-radius: 4px;
  border-top-left-radius: 4px;
  border-bottom-left-radius: 4px;
}
.gantt_duration .gantt_duration_inc {
  margin-right: 4px;
  -moz-border-top-right-radius: 4px;
  -moz-border-bottom-right-radius: 4px;
  -webkit-border-top-right-radius: 4px;
  -webkit-border-bottom-right-radius: 4px;
  border-top-right-radius: 4px;
  border-bottom-right-radius: 4px;
}
.gantt_resources {
  max-height: 150px;
  height: auto;
  overflow-y: auto;
}
.gantt_resource_row {
  display: block;
  padding: 10px 0;
  border-bottom: 1px solid #7e7e7e;
  cursor: pointer;
}
.gantt_resource_row input[type=checkbox]:not(:checked),
.gantt_resource_row input[type=checkbox]:not(:checked) ~ div {
  opacity: 0.5;
}
.gantt_resource_toggle {
  vertical-align: middle;
}
.gantt_resources_filter .gantt_resources_filter_input {
  padding: 1px 2px 1px 2px;
  box-sizing: border-box;
}
.gantt_resources_filter .switch_unsetted {
  vertical-align: middle;
}
.gantt_resource_cell {
  display: inline-block;
}
.gantt_resource_cell.gantt_resource_cell_checkbox {
  width: 24px;
  max-width: 24px;
  min-width: 24px;
  vertical-align: middle;
}
.gantt_resource_cell.gantt_resource_cell_label {
  width: 40%;
  max-width: 40%;
  vertical-align: middle;
}
.gantt_resource_cell.gantt_resource_cell_value {
  width: 30%;
  max-width: 30%;
  vertical-align: middle;
}
.gantt_resource_cell.gantt_resource_cell_value input,
.gantt_resource_cell.gantt_resource_cell_value select {
  width: 80%;
  vertical-align: middle;
  padding: 1px 2px 1px 2px;
  box-sizing: border-box;
}
.gantt_resource_cell.gantt_resource_cell_unit {
  width: 10%;
  max-width: 10%;
  vertical-align: middle;
}
.gantt_resource_early_value {
  opacity: 0.8;
  font-size: 0.9em;
}
/* Quick info */
.gantt_cal_quick_info {
  border: 1px solid #FFFF00;
  border-radius: 6px;
  position: absolute;
  z-index: 300;
  border-color: #fff;
  -webkit-box-shadow: inset 0px 0px 0px 4px #0505ff;
  -moz-box-shadow: inset 0px 0px 0px 4px #0505ff;
  box-shadow: inset 0px 0px 0px 4px #0505ff;
  padding: 4px;
  background-color: #000;
  width: 300px;
  transition: left 0.5s ease, right 0.5s;
  -moz-transition: left 0.5s ease, right 0.5s;
  -webkit-transition: left 0.5s ease, right 0.5s;
  -o-transition: left 0.5s ease, right 0.5s;
}
.gantt_no_animate {
  transition: none;
  -moz-transition: none;
  -webkit-transition: none;
  -o-transition: none;
}
.gantt_cal_quick_info.gantt_qi_left .gantt_qi_big_icon {
  float: right;
}
.gantt_cal_qi_title {
  -webkit-border-top-left-radius: 6px;
  -webkit-border-bottom-left-radius: 0;
  -webkit-border-top-right-radius: 6px;
  -webkit-border-bottom-right-radius: 0;
  -moz-border-radius-topleft: 6px;
  -moz-border-radius-bottomleft: 0;
  -moz-border-radius-topright: 6px;
  -moz-border-radius-bottomright: 0;
  border-top-left-radius: 6px;
  border-bottom-left-radius: 0;
  border-top-right-radius: 6px;
  border-bottom-right-radius: 0;
  padding: 5px 0px 8px 12px;
  color: #fff;
  background-color: #000;
  border-bottom: 1px solid #FFFF00;
}
.gantt_cal_qi_tdate {
  font-size: 14px;
  font-weight: bold;
}
.gantt_cal_qi_tcontent {
  font-size: 14px;
}
.gantt_cal_qi_content {
  padding: 16px 8px;
  font-size: 14px;
  color: #fff;
  overflow: hidden;
}
.gantt_cal_qi_controls {
  -webkit-border-top-left-radius: 0;
  -webkit-border-bottom-left-radius: 6px;
  -webkit-border-top-right-radius: 0;
  -webkit-border-bottom-right-radius: 6px;
  -moz-border-radius-topleft: 0;
  -moz-border-radius-bottomleft: 6px;
  -moz-border-radius-topright: 0;
  -moz-border-radius-bottomright: 6px;
  border-top-left-radius: 0;
  border-bottom-left-radius: 6px;
  border-top-right-radius: 0;
  border-bottom-right-radius: 6px;
  padding-left: 7px;
}
.gantt_cal_qi_controls .gantt_menu_icon {
  margin-top: 6px;
  background-repeat: no-repeat;
}
.gantt_cal_qi_controls .gantt_menu_icon.icon_edit {
  width: 20px;
  background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAAB3RJTUUH3QYFCjI5ZQj5bAAAAFNJREFUOMvt0zEOACAIA0DkwTymH8bJTRTKZGJXyaWEKPKTCQAH4Ls37cItcDUzsxHNDLZNhCq7Gt1wh9ErV7EjyGAhyGLphlnsClWuS32rn0czAV+vNGrM/LBtAAAAAElFTkSuQmCC);
}
.gantt_cal_qi_controls .gantt_menu_icon.icon_delete {
  width: 20px;
  background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyhpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTMyIDc5LjE1OTI4NCwgMjAxNi8wNC8xOS0xMzoxMzo0MCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTUuNSAoV2luZG93cykiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6MTZBMjlFNkU2ODc5MTFFNjkxOTRGRTZGMDkwMENCMUIiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6MTZBMjlFNkY2ODc5MTFFNjkxOTRGRTZGMDkwMENCMUIiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDoxNkEyOUU2QzY4NzkxMUU2OTE5NEZFNkYwOTAwQ0IxQiIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDoxNkEyOUU2RDY4NzkxMUU2OTE5NEZFNkYwOTAwQ0IxQiIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PpeemjIAAABMSURBVHjaYvx/hAEbqAfiBjQxEL8RXSETkZphBtSjCzJCXfCfgTzAyMRAIWCBmUSpATBArFcY8QUiSWDUgFEDsBlwhAg9R5E5AAEGAFNACzFr4MENAAAAAElFTkSuQmCC);
}
.gantt_qi_big_icon {
  font-size: 13px;
  border-radius: 4px;
  font-weight: bold;
  background: #000;
  margin: 5px 9px 8px 0px;
  min-width: 60px;
  line-height: 32px;
  vertical-align: middle;
  padding: 0px 10px 0px 5px;
  cursor: pointer;
  border: 1px solid #FFFF00;
}
.gantt_cal_qi_controls div {
  float: left;
  height: 32px;
  text-align: center;
  line-height: 32px;
}
.gantt_cal_quick_info.gantt_qi_hidden {
  display: none;
}
.gantt_tooltip {
  padding: 10px;
  position: absolute;
  z-index: 50;
  white-space: nowrap;
}
.gantt_resource_marker {
  position: absolute;
  text-align: center;
  font-size: 14px;
  color: #FFF;
}
.gantt_resource_marker_ok {
  background: rgba(78, 208, 134, 0.75);
}
.gantt_resource_marker_overtime {
  background: rgba(255, 134, 134, 0.69);
}
.gantt_histogram_label {
  width: 100%;
  height: 100%;
  position: absolute;
  z-index: 1;
  font-weight: bold;
  font-size: 14px;
}
.gantt_histogram_fill {
  background-color: rgba(41, 157, 180, 0.2);
  width: 100%;
  position: absolute;
  bottom: 0;
}
.gantt_histogram_hor_bar {
  height: 1px;
  position: absolute;
  background: #299DB4;
  margin-top: -1px;
  margin-left: -1px;
}
.gantt_histogram_vert_bar {
  width: 1px;
  position: absolute;
  background: #299DB4;
  margin-left: -1px;
}
.gantt_histogram_cell {
  position: absolute;
  text-align: center;
  font-size: 14px;
  color: #000000;
}
.gantt_marker {
  height: 100%;
  width: 2px;
  top: 0;
  position: absolute;
  text-align: center;
  background-color: rgba(255, 0, 0, 0.4);
  -moz-box-sizing: border-box;
  -webkit-box-sizing: border-box;
  box-sizing: border-box;
}
.gantt_marker .gantt_marker_content {
  padding: 5px;
  background: inherit;
  color: white;
  position: absolute;
  font-size: 12px;
  line-height: 12px;
  opacity: 0.8;
}
.gantt_marker_area {
  position: absolute;
  top: 0;
  left: 0;
}
.gantt_grid_editor_placeholder {
  position: absolute;
}
.gantt_grid_editor_placeholder > div,
.gantt_grid_editor_placeholder input,
.gantt_grid_editor_placeholder select {
  width: 100%;
  height: 100%;
  box-sizing: border-box;
}
.gantt_row_placeholder div {
  opacity: 0.5;
}
.gantt_row_placeholder .gantt_file,
.gantt_row_placeholder .gantt_add {
  display: none;
}
.gantt_drag_marker.gantt_grid_dnd_marker {
  background-color: transparent;
  transition: all 0.1s ease ;
}
.gantt_grid_dnd_marker_line {
  height: 4px;
  width: 100%;
  background-color: #3498db;
}
.gantt_grid_dnd_marker_line::before {
  background: #fff;
  width: 12px;
  height: 12px;
  box-sizing: border-box;
  border: 3px solid #3498db;
  border-radius: 6px;
  content: "";
  line-height: 1px;
  display: block;
  position: absolute;
  margin-left: -11px;
  margin-top: -4px;
  pointer-events: none;
}
.gantt_grid_dnd_marker_folder {
  height: 100%;
  width: 100%;
  position: absolute;
  pointer-events: none;
  box-sizing: border-box;
  box-shadow: 0 0 0px 2px #3f98db inset;
  background: transparent;
}
.gantt_overlay_area {
  position: absolute;
  height: inherit;
  width: inherit;
  top: 0;
  left: 0;
  display: none;
}
.gantt_overlay {
  position: absolute;
  left: 0;
  top: 0;
  height: inherit;
  width: inherit;
}
.gantt_click_drag_rect {
  position: absolute;
  left: 0;
  top: 0;
  outline: 1px solid #3f98db;
  background-color: rgba(52, 152, 219, 0.3);
}
.gantt_timeline_move_available,
.gantt_timeline_move_available * {
  cursor: move;
}
.gantt_rtl .gantt_grid {
  text-align: right;
}
.gantt_rtl .gantt_row,
.gantt_rtl .gantt_cell {
  flex-direction: row-reverse;
}
.gantt_layout_content {
  width: 100%;
  overflow: auto;
  box-sizing: border-box;
}
.gantt_layout_cell {
  position: relative;
  box-sizing: border-box;
}
.gantt_layout_cell > .gantt_layout_header {
  background: #33aae8;
  color: white;
  font-size: 17px;
  padding: 5px 10px;
  box-sizing: border-box;
}
.gantt_layout_header.collapsed_x {
  background: #a9a9a9;
}
.gantt_layout_header.collapsed_x .gantt_header_arrow:before {
  content: "\21E7";
}
.gantt_layout_header.collapsed_y {
  background: #a9a9a9;
}
.gantt_layout_header.collapsed_y .gantt_header_arrow:before {
  content: "\21E9";
}
.gantt_layout_header {
  cursor: pointer;
}
.gantt_layout_header .gantt_header_arrow {
  float: right;
  text-align: right;
}
.gantt_layout_header .gantt_header_arrow:before {
  content: "\21E6";
}
.gantt_layout_header.vertical .gantt_header_arrow:before {
  content: "\21E7";
}
.gantt_layout_outer_scroll_vertical .gantt_layout_content {
  overflow-y: hidden;
}
.gantt_layout_outer_scroll_horizontal .gantt_layout_content {
  overflow-x: hidden;
}
.gantt_layout_x > .gantt_layout_cell {
  display: inline-block;
  vertical-align: top;
}
.gantt_layout_x {
  white-space: nowrap;
}
.gantt_resizing {
  opacity: 0.7;
  background: #f2f2f2;
}
.gantt_layout_cell_border_right.gantt_resizer {
  overflow: visible;
  border-right: 0;
}
.gantt_resizer {
  cursor: e-resize;
  position: relative;
}
.gantt_resizer_y {
  cursor: n-resize;
}
.gantt_resizer_stick {
  background: #33aae8;
  z-index: 9999;
  position: absolute;
  top: 0;
  width: 100%;
}
.gantt_resizer_x .gantt_resizer_x {
  position: absolute;
  width: 20px;
  height: 100%;
  margin-left: -10px;
  top: 0;
  left: 0;
  z-index: 1;
}
.gantt_resizer_y .gantt_resizer_y {
  position: absolute;
  height: 20px;
  width: 100%;
  top: -10px;
  left: 0;
  z-index: 1;
}
.gantt_resizer_error {
  background: indianred!important;
}
.gantt_noselect {
  -webkit-user-select: none;
  user-select: none;
}
.gantt_layout_cell_border_left {
  border-left: 1px solid #FFFF00;
}
.gantt_layout_cell_border_right {
  border-right: 1px solid #FFFF00;
}
.gantt_layout_cell_border_top {
  border-top: 1px solid #FFFF00;
}
.gantt_layout_cell_border_bottom {
  border-bottom: 1px solid #FFFF00;
}
.gantt_layout_cell_border_transparent {
  border-color: transparent;
}
.gantt_window {
  position: absolute;
  top: 50%;
  left: 50%;
  z-index: 999999999;
  background: white;
}
.gantt_window_content {
  position: relative;
}
.gantt_window_content_header {
  background: #39c;
  color: #ffffff;
  height: 33px;
  padding: 10px 10px 0 10px;
  border-bottom: solid 2px #ffffff;
  position: relative;
}
.gantt_window_content_header_text {
  padding-left: 10%;
}
.gantt_window_content_header_buttons {
  position: absolute;
  top: 10px;
  right: 10px;
}
.gantt_window_content_header_buttons:hover {
  color: #000000;
  cursor: pointer;
}
.gantt_window_content_resizer {
  position: absolute;
  width: 15px;
  height: 15px;
  bottom: 0;
  line-height: 15px;
  right: -1px;
  text-align: center;
  background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA8AAAAPCAMAAAAMCGV4AAAABlBMVEUAAAAAAAClZ7nPAAAAAXRSTlMAQObYZgAAABZJREFUeAFjIAUwUshlpJDLSIhLGAAACQ4AFk79JaMAAAAASUVORK5CYII=);
  cursor: nw-resize;
  z-index: 999;
}
.gantt_window_content_frame {
  position: absolute;
  top: 0;
  left: 0;
  width: 100%;
  height: 100%;
  background: rgba(0, 0, 0, 0.1);
  z-index: 9999;
}
.gantt_window_drag {
  cursor: pointer!important;
}
.gantt_window_resizing {
  overflow: visible;
}
.gantt_window_resizing_body {
  overflow: hidden!important;
}
.gantt_window_modal {
  background: rgba(0, 0, 0, 0.1);
  z-index: 9999;
  top: 0;
  left: 0;
  width: 100%;
  height: 100%;
  position: fixed;
}
.gantt_container,
.gantt_cal_light,
.gantt_message_area,
.gantt_modal_box,
.gantt_cal_quick_info,
.gantt_tooltip {
  text-rendering: optimizeLegibility;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
}
.gantt_noselect {
  -moz-user-select: -moz-none;
  -webkit-user-select: none;
  -ms-user-select: none;
  user-select: none;
}
.gantt_noselect .gantt_grid_data .gantt_row:hover,
.gantt_noselect .gantt_grid_data .gantt_row.odd:hover {
  background-color: unset;
}
.gantt_drag_marker {
  position: absolute;
  top: -1000px;
  left: -1000px;
  font-family: "arial";
  font-size: 14px;
  z-index: 1;
  white-space: nowrap;
}
.gantt_drag_marker .gantt_tree_indent,
.gantt_drag_marker .gantt_tree_icon.gantt_blank,
.gantt_drag_marker .gantt_tree_icon.gantt_open,
.gantt_drag_marker .gantt_tree_icon.gantt_close {
  display: none;
}
.gantt_empty_state_wrapper {
  position: relative;
}
.gantt_empty_state {
  height: 100%;
  max-width: 500px;
  box-sizing: border-box;
  white-space: pre-line;
  overflow-wrap: break-word;
  display: flex;
  flex-direction: column;
  justify-content: flex-start;
  margin: 0 auto;
}
.gantt_empty_state_image {
  background-image: url('data:image/png;base64,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');
  background-repeat: no-repeat;
  width: 100%;
  max-width: 500px;
  max-height: 500px;
  margin-left: auto;
  margin-right: auto;
  display: block;
  min-height: 0;
  height: 200px;
  background-size: contain;
  background-position-x: center;
  background-position-y: bottom;
  margin-top: 40px;
}
.gantt_empty_state_text {
  text-align: center;
}
.gantt_empty_state_text_link {
  color: #03A9F4;
  background-position: top right;
  background: none;
  opacity: 1;
  height: unset;
  cursor: pointer;
}
.gantt_drag_marker,
.gantt_drag_marker .gantt_row.odd {
  background-color: #000;
}
.gantt_drag_marker .gantt_row {
  border-left: 1px solid #656565;
  border-top: 1px solid #656565;
}
.gantt_drag_marker .gantt_cell {
  border-color: #656565;
}
.gantt_row.gantt_over,
.gantt_task_row.gantt_over {
  background-color: #0070fe;
}
.gantt_row.gantt_transparent .gantt_cell {
  opacity: 0.7;
}
.gantt_task_row.gantt_transparent {
  background-color: #d0ddff;
}
.gantt_popup_button.gantt_delete_button {
  font-weight: bold;
  border-style: solid;
  border-width: 2px;
  border-color: #76ff03;
  background: #000;
  color: #76ff03;
}
.gantt_container_resize_watcher {
  background: transparent;
  width: 100%;
  height: 100%;
  position: absolute;
  top: 0px;
  left: 0px;
  z-index: -1;
  pointer-events: none;
  border: 0;
  box-sizing: border-box;
  opacity: 0;
}
src/components/dhtmlxGantt/codebase/sources/skins/dhtmlxgantt_contrast_white.css
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,2104 @@
/*
@license
dhtmlxGantt v.8.0.6 Standard
This version of dhtmlxGantt is distributed under GPL 2.0 license and can be legally used in GPL projects.
To use dhtmlxGantt in non-GPL projects (and get Pro version of the product), please obtain Individual, Commercial, Enterprise or Ultimate license on our site https://dhtmlx.com/docs/products/dhtmlxGantt/#licensing or contact us at info@dhtmlx.com
(c) XB Software
*/
.buttonBg {
  background: #fff;
}
/* colors for items with inline styles assigned (task.color, link.color)*/
.gridHoverStyle {
  background-color: #5868c5;
}
.gridSelection {
  background-color: #5868c5;
}
.timelineSelection {
  background-color: #5868c5;
}
.header_text_style {
  text-transform: uppercase;
  font-weight: bold;
}
.gantt_grid_scale .gantt_grid_head_cell {
  color: #585858;
  text-transform: uppercase;
  font-weight: bold;
  border-top: none !important;
  border-right: none !important;
}
.gantt_grid_data .gantt_cell {
  border-right: none;
  color: #000;
}
.gantt_grid_data .gantt_row.gantt_selected .gantt_cell,
.gantt_grid_data .gantt_row:hover .gantt_cell {
  color: #fff;
}
/*
    Tasks
*/
.gantt_task_link .gantt_link_arrow_right {
  border-width: 6px 6px 6px 6px;
  margin-top: -3px;
}
.gantt_task_link .gantt_link_arrow_left {
  border-width: 6px 6px 6px 6px;
  margin-left: -6px;
  margin-top: -3px;
}
.gantt_task_link .gantt_link_arrow_up {
  border-width: 6px 6px 6px 6px;
}
.gantt_task_link .gantt_link_arrow_down {
  border-width: 6px 6px 6px 6px;
}
.gantt_task_line .gantt_task_progress_drag {
  bottom: -4px;
  height: 10px;
  margin-left: -8px;
  width: 16px;
}
.chartHeaderBg {
  background-color: #fff;
}
.gantt_task .gantt_task_scale .gantt_scale_cell {
  color: #585858;
  text-transform: uppercase;
  font-weight: bold;
  border-right: 1px solid #000;
}
/*
    project highlight
*/
.gantt_row.gantt_project,
.gantt_row.odd.gantt_project {
  background-color: #edfff4;
}
.gantt_task_row.gantt_project,
.gantt_task_row.odd.gantt_project {
  background-color: #f5fff9;
}
.gantt_task_line.gantt_project {
  background-color: #74FFA9;
}
.gantt_task_line.gantt_project .gantt_task_progress {
  background-color: #47BB55;
}
/*
    milestone
*/
/*
    lightbox
*/
.gantt_cal_larea input,
.gantt_cal_larea select,
.gantt_cal_larea textarea {
  color: #000;
  border: #000;
}
.gantt_cal_larea .gantt_cal_lsection {
  color: #000;
  font-size: 14px;
}
.modalBorder {
  border-color: #000;
  -webkit-box-shadow: inset 0px 0px 0px 2px #000;
  -moz-box-shadow: inset 0px 0px 0px 2px #000;
  box-shadow: inset 0px 0px 0px 2px #000;
  padding: 2px;
}
.gantt_popup_shadow {
  border-color: #000;
  -webkit-box-shadow: inset 0px 0px 0px 2px #000;
  -moz-box-shadow: inset 0px 0px 0px 2px #000;
  box-shadow: inset 0px 0px 0px 2px #000;
  padding: 2px;
}
.gantt_cal_larea {
  background: #fff;
}
.lightboxHeaderBackground {
  background: #fff;
}
.gantt_cal_light .gantt_btn_set {
  margin: 5px 10px;
}
.gantt_btn_set.gantt_cancel_btn_set {
  border-style: solid;
  border-width: 2px;
  border-color: #000;
  background: #fff;
  color: #000;
}
.gantt_btn_set.gantt_save_btn_set {
  border-style: solid;
  border-width: 2px;
  border-color: #000;
  background: #006600;
  color: #000;
  border-color: transparent;
  color: #fff;
}
.gantt_btn_set.gantt_delete_btn_set {
  border-style: solid;
  border-width: 2px;
  border-color: #000;
  background: #9f3500;
  color: #000;
  border-color: transparent;
  color: #fff;
}
.gantt_delete_btn {
  margin-top: 2px;
  width: 20px;
}
.gantt_cal_light_wide {
  padding-left: 0 !important;
  padding-right: 0 !important;
}
.gantt_cal_light_wide .gantt_cal_larea {
  border-left: none !important;
  border-right: none !important;
}
/*
    Message
*/
.gantt_popup_button.gantt_ok_button {
  font-weight: bold;
  border-style: solid;
  border-width: 2px;
  border-color: #000;
  background: #006600;
  color: #000;
  border-color: transparent;
  color: #fff;
}
.gantt_popup_button.gantt_cancel_button {
  font-weight: bold;
  color: #454544;
  border-style: solid;
  border-width: 2px;
  border-color: #000;
  background: #fff;
  color: #000;
}
.gantt_popup_title {
  color: #000;
}
/*
    Quick info
*/
.gantt_qi_big_icon {
  border-style: solid;
  border-width: 2px;
  border-color: #000;
  background: #fff;
  color: #000;
}
.gantt_qi_big_icon.icon_edit {
  border-style: solid;
  border-width: 2px;
  border-color: #000;
  background: #fff;
  color: #000;
}
.gantt_qi_big_icon.icon_delete {
  border-style: solid;
  border-width: 2px;
  border-color: #000;
  background: #9f3500;
  color: #000;
  border-color: transparent;
  color: #fff;
}
/*links dnd*/
.gantt_tooltip {
  font-size: 14px;
  color: #000;
  background: #fff;
  border: 1px solid #000;
}
.gantt_container {
  background-color: #fff;
  font-family: "arial";
  font-size: 14px;
  border: 1px solid #000;
  position: relative;
  white-space: nowrap;
  overflow-x: hidden;
  overflow-y: hidden;
}
.gantt_touch_active {
  overscroll-behavior: none;
}
.gantt_task_scroll {
  overflow-x: scroll;
}
.gantt_task,
.gantt_grid {
  position: relative;
  overflow-x: hidden;
  overflow-y: hidden;
  display: inline-block;
  vertical-align: top;
}
.gantt_grid_scale,
.gantt_task_scale {
  color: #262626;
  font-size: 14px;
  border-bottom: 1px solid #000;
  -moz-box-sizing: border-box;
  box-sizing: border-box;
}
.gantt_grid_scale {
  background-color: #fff;
}
.gantt_task_scale {
  background-color: #fff;
}
.gantt_task_vscroll {
  background-color: #fff;
}
.gantt_scale_line {
  box-sizing: border-box;
  -moz-box-sizing: border-box;
  border-top: 1px solid #000;
}
.gantt_scale_line:first-child {
  border-top: none;
}
.gantt_grid_head_cell {
  display: inline-block;
  vertical-align: top;
  border-right: 1px solid #000;
  text-align: center;
  position: relative;
  cursor: default;
  height: 100%;
  box-sizing: border-box;
  -moz-box-sizing: border-box;
  line-height: 33px;
  -moz-user-select: -moz-none;
  -webkit-user-select: none;
  user-select: none;
  overflow: hidden;
}
.gantt_scale_line {
  clear: both;
}
.gantt_grid_data {
  width: 100%;
  overflow: hidden;
  position: relative;
}
.gantt_row {
  position: relative;
  -webkit-user-select: none;
  -moz-user-select: none;
  -moz-user-select: -moz-none;
}
.gantt_add,
.gantt_grid_head_add {
  width: 100%;
  height: 100%;
  background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyhpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTMyIDc5LjE1OTI4NCwgMjAxNi8wNC8xOS0xMzoxMzo0MCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTUuNSAoV2luZG93cykiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6NkM1NEUwREQ2ODc4MTFFNkJCN0REMkNCNDBBRDc4Q0UiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6NkM1NEUwREU2ODc4MTFFNkJCN0REMkNCNDBBRDc4Q0UiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo2QzU0RTBEQjY4NzgxMUU2QkI3REQyQ0I0MEFENzhDRSIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDo2QzU0RTBEQzY4NzgxMUU2QkI3REQyQ0I0MEFENzhDRSIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PopaRyYAAABHSURBVHjaYmCgIfgAxP+h+AMuRYx4DPhPjFomSp05eAxADrD/WPzPgEX+A3LA/CfTAYxU88JHMvR+HE0HhA34iINNXQAQYAAFOhSSoOBmvgAAAABJRU5ErkJggg==);
  background-position: center center;
  background-repeat: no-repeat;
  cursor: pointer;
  position: relative;
  -moz-opacity: 0.3;
  opacity: 0.3;
}
.gantt_grid_head_cell.gantt_grid_head_add {
  -moz-opacity: 0.6;
  opacity: 0.6;
  top: 0;
}
.gantt_grid_head_cell.gantt_grid_head_add:hover {
  -moz-opacity: 1;
  opacity: 1;
}
.gantt_grid_data .gantt_row:hover,
.gantt_grid_data .gantt_row.odd:hover {
  background-color: #5868c5;
}
.gantt_grid_data .gantt_row:hover .gantt_add,
.gantt_grid_data .gantt_row.odd:hover .gantt_add {
  -moz-opacity: 1;
  opacity: 1;
}
.gantt_task_row,
.gantt_row {
  border-bottom: 1px solid #000;
}
.gantt_row,
.gantt_task_row {
  background-color: #fff;
}
.gantt_row.odd,
.gantt_task_row.odd {
  background-color: #fff;
}
.gantt_row,
.gantt_cell,
.gantt_task_row,
.gantt_task_cell,
.gantt_grid_head_cell,
.gantt_scale_cell {
  box-sizing: border-box;
  -moz-box-sizing: border-box;
}
.gantt_grid_head_cell,
.gantt_scale_cell {
  line-height: inherit;
}
.gantt_grid_scale .gantt_grid_column_resize_wrap {
  cursor: col-resize;
  position: absolute;
  width: 13px;
  margin-left: -7px;
}
.gantt_grid_column_resize_wrap .gantt_grid_column_resize {
  background-color: #000;
  height: 100%;
  width: 1px;
  margin: 0 auto;
}
.gantt_task_grid_row_resize_wrap {
  cursor: row-resize;
  position: absolute;
  height: 13px;
  margin-top: -7px;
  left: 0px;
  width: 100%;
}
.gantt_task_grid_row_resize_wrap .gantt_task_grid_row_resize {
  background-color: #000;
  top: 6px;
  height: 1px;
  width: 100%;
  margin: 0 auto;
  position: relative;
}
.gantt_drag_marker {
  pointer-events: none;
}
.gantt_drag_marker.gantt_grid_resize_area,
.gantt_drag_marker.gantt_row_grid_resize_area {
  background-color: rgba(231, 231, 231, 0.5);
  height: 100%;
  width: 100%;
  -moz-box-sizing: border-box;
  -webkit-box-sizing: border-box;
  box-sizing: border-box;
}
.gantt_drag_marker.gantt_grid_resize_area {
  border-left: 1px solid #000;
  border-right: 1px solid #000;
}
.gantt_drag_marker.gantt_row_grid_resize_area {
  border-top: 1px solid #000;
  border-bottom: 1px solid #000;
  pointer-events: none;
}
.gantt_row {
  display: flex;
}
.gantt_row > div {
  flex-shrink: 0;
  flex-grow: 0;
}
.gantt_cell {
  vertical-align: top;
  border-right: 1px solid #000;
  padding-left: 6px;
  padding-right: 6px;
  height: 100%;
  overflow: hidden;
  white-space: nowrap;
  font-size: 15px;
}
.gantt_cell_tree {
  display: flex;
  flex-wrap: nowrap;
}
.gantt_grid_scale .gantt_last_cell,
.gantt_grid_data .gantt_last_cell,
.gantt_task .gantt_task_scale .gantt_scale_cell.gantt_last_cell,
.gantt_task_bg .gantt_last_cell {
  border-right-width: 0px;
}
.gantt_task .gantt_task_scale .gantt_scale_cell.gantt_last_cell {
  border-right-width: 1px;
}
.gantt_task_bg {
  overflow: hidden;
}
.gantt_scale_cell {
  display: inline-block;
  white-space: nowrap;
  overflow: hidden;
  border-right: 1px solid #000;
  text-align: center;
  height: 100%;
}
.gantt_task_cell {
  display: inline-block;
  height: 100%;
  border-right: 1px solid #000;
}
.gantt_layout_cell.gantt_ver_scroll {
  width: 0px;
  background-color: transparent;
  height: 1px;
  overflow-x: hidden;
  overflow-y: scroll;
  position: absolute;
  right: 0px;
  z-index: 1;
}
.gantt_ver_scroll > div {
  width: 1px;
  height: 1px;
}
.gantt_hor_scroll {
  height: 0px;
  background-color: transparent;
  width: 100%;
  clear: both;
  overflow-x: scroll;
  overflow-y: hidden;
}
.gantt_layout_cell .gantt_hor_scroll {
  position: absolute;
}
.gantt_hor_scroll > div {
  width: 5000px;
  height: 1px;
}
.gantt_tree_indent,
.gantt_tree_icon {
  flex-grow: 0;
  flex-shrink: 0;
}
.gantt_tree_indent {
  width: 15px;
  height: 100%;
}
.gantt_tree_content,
.gantt_tree_icon {
  vertical-align: top;
}
.gantt_tree_icon {
  width: 28px;
  height: 100%;
  background-repeat: no-repeat;
  background-position: center center;
}
.gantt_tree_content {
  height: 100%;
  white-space: nowrap;
  min-width: 0;
}
.gantt_tree_icon.gantt_open {
  background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyhpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTMyIDc5LjE1OTI4NCwgMjAxNi8wNC8xOS0xMzoxMzo0MCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTUuNSAoV2luZG93cykiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6QzVDNzJCOEM2ODc3MTFFNkFGNTdEMzMyODI3QzgxN0EiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6QzVDNzJCOEQ2ODc3MTFFNkFGNTdEMzMyODI3QzgxN0EiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDpDNUM3MkI4QTY4NzcxMUU2QUY1N0QzMzI4MjdDODE3QSIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDpDNUM3MkI4QjY4NzcxMUU2QUY1N0QzMzI4MjdDODE3QSIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/Pin6TiQAAABfSURBVHja1JLBDoAwCEOp2Ufyh/CXnSezLDoU9CAnLi3tC1BVyY6ZySbFacPOh1rMBuLuuKPcax/HogqMkpUZvApxBZMzvE8T4OQy/gXxqk5sMH5YJgEyFUCyxKALMAAp9xIuO3IRpAAAAABJRU5ErkJggg==);
  width: 18px;
  cursor: pointer;
}
.gantt_tree_icon.gantt_close {
  background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyhpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTMyIDc5LjE1OTI4NCwgMjAxNi8wNC8xOS0xMzoxMzo0MCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTUuNSAoV2luZG93cykiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6Qzk5M0JBOUI2ODc3MTFFNjg3NkRDN0U4RTlDQjZBRjEiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6Qzk5M0JBOUM2ODc3MTFFNjg3NkRDN0U4RTlDQjZBRjEiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDpDOTkzQkE5OTY4NzcxMUU2ODc2REM3RThFOUNCNkFGMSIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDpDOTkzQkE5QTY4NzcxMUU2ODc2REM3RThFOUNCNkFGMSIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PkhdOa8AAABXSURBVHjatFJBDsAwCJJmj/SH+kt2M91OVi0nYwICEaoqVZiZLGni2WYecvEXiGUCcWw0grh7irQXP+sgWeanpysOUBaofGU7wngH7Aig4gAkWxFeAQYA3h0OMhsl2ScAAAAASUVORK5CYII=);
  width: 18px;
  cursor: pointer;
}
.gantt_tree_icon.gantt_blank {
  width: 18px;
}
.gantt_tree_icon.gantt_folder_open {
  background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAYAAABWzo5XAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyhpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTMyIDc5LjE1OTI4NCwgMjAxNi8wNC8xOS0xMzoxMzo0MCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTUuNSAoV2luZG93cykiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6RkM2MUMyMzQ2ODc3MTFFNjhFMjE5QzYzREY2ODEzREUiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6RkM2MUMyMzU2ODc3MTFFNjhFMjE5QzYzREY2ODEzREUiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDpGQzYxQzIzMjY4NzcxMUU2OEUyMTlDNjNERjY4MTNERSIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDpGQzYxQzIzMzY4NzcxMUU2OEUyMTlDNjNERjY4MTNERSIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PlC39FYAAADWSURBVHjaYty4fi0DNQATA5UAskGeQPwMiP9jwfWkGDQXiCVxqGsgZBiyQTBDGNFwI5Jh2FwL8oUnMWHUgGQYNgBywFxiA7sBi0thGGwYVWOtFYi/IIn9JxI7oBtUBMTcZDiiHt2gE1B2C55wQMZiQPwZ6iIHZINgMZIKxFxEuOQ1EE9GdxXIoANQLA7E2UR6qweIP6K7iAHJVaVAzEuEQe+BeBqyAAuUBrloBxB7APEnMgL+BXI6ygfiR2QY8hSIk1mQBG4BsTy5CZLx////VEnZAAEGAO3yNxaCOyWPAAAAAElFTkSuQmCC);
}
.gantt_tree_icon.gantt_folder_closed {
  background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAYAAABWzo5XAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyhpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTMyIDc5LjE1OTI4NCwgMjAxNi8wNC8xOS0xMzoxMzo0MCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTUuNSAoV2luZG93cykiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6RkZDMUZDMkI2ODc3MTFFNkI5QTdFOTQyM0UxNUEzRjEiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6RkZDMUZDMkM2ODc3MTFFNkI5QTdFOTQyM0UxNUEzRjEiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDpGRkMxRkMyOTY4NzcxMUU2QjlBN0U5NDIzRTE1QTNGMSIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDpGRkMxRkMyQTY4NzcxMUU2QjlBN0U5NDIzRTE1QTNGMSIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PvnU3ycAAAB9SURBVHjaYty4fi0DNQATA5UAskGeQPwMiP9jwfWkGDQXiCVxqGsgZBiyQTBDGNFwI5Jh2FwL8oUnMWHUgGQYNgBywFxiA7sBi0thGGwYTWJt1KChaNBzKP2fRAwCL5ANSgEJkOGYp0CczIIksA1PpiUIGP///0+VMAIIMAC11ShRpw6rxAAAAABJRU5ErkJggg==);
}
.gantt_tree_icon.gantt_file {
  background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAYAAABWzo5XAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyhpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTMyIDc5LjE1OTI4NCwgMjAxNi8wNC8xOS0xMzoxMzo0MCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTUuNSAoV2luZG93cykiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6MDQwMTVBMUU2ODc4MTFFNkFBNDVCQkYzMzdERTM1MzYiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6MDQwMTVBMUY2ODc4MTFFNkFBNDVCQkYzMzdERTM1MzYiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDowNDAxNUExQzY4NzgxMUU2QUE0NUJCRjMzN0RFMzUzNiIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDowNDAxNUExRDY4NzgxMUU2QUE0NUJCRjMzN0RFMzUzNiIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PsHnBgAAAAB8SURBVHjaYvz//z/Dpg3rGCgBfgFBDExoYp5A/AyI/+PB9dgMQzdoLhBLEnBAAzbDWND4MEMYsRjwH80wEGjE5SJSAIrLmBgoAw3UMghnGOEDjHjCjHouGjVoOBj0HCmNEMIg8AKXQSnIkgTAUyBOxpWytxFRjGAFAAEGAOcUI0XiA1ItAAAAAElFTkSuQmCC);
}
.gantt_grid_head_cell .gantt_sort {
  position: absolute;
  right: 5px;
  top: 8px;
  width: 7px;
  height: 13px;
  background-repeat: no-repeat;
  background-position: center center;
}
.gantt_grid_head_cell .gantt_sort.gantt_asc {
  background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAcAAAANCAYAAABlyXS1AAAARUlEQVR4nGNgQAKGxib/GbABkIS7b8B/DAUwCRiGK0CXwFBAb1DfP/U/LszwHwi2X7qFgUEArBtdAVwCBmAKMCSQFSDzAWXXaOHsXeqkAAAAAElFTkSuQmCC);
}
.gantt_grid_head_cell .gantt_sort.gantt_desc {
  background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAcAAAANCAYAAABlyXS1AAAARUlEQVR42mNgQAL1/VP/M2ADIIntF2/9x1AAlrh0C47hCmA60DFYwX88gIFGwNDY5D8uDFbg7hvwHx2jmIBTAlkB0e4BAEjlaNtBWJPnAAAAAElFTkSuQmCC);
}
.gantt_inserted,
.gantt_updated {
  font-weight: bold;
}
.gantt_deleted {
  text-decoration: line-through;
}
.gantt_invalid {
  background-color: #FFE0E0;
}
.gantt_error {
  color: red;
}
.gantt_status {
  right: 1px;
  padding: 5px 10px;
  background: rgba(155, 155, 155, 0.1);
  position: absolute;
  top: 1px;
  -webkit-transition: opacity 0.2s;
  transition: opacity 0.2s;
  opacity: 0;
}
.gantt_status.gantt_status_visible {
  opacity: 1;
}
#gantt_ajax_dots span {
  -webkit-transition: opacity 0.2s;
  transition: opacity 0.2s;
  background-repeat: no-repeat;
  opacity: 0;
}
#gantt_ajax_dots span.gantt_dot_visible {
  opacity: 1;
}
.gantt_column_drag_marker {
  border: 1px solid #CECECE;
  opacity: 0.8;
  pointer-events: none;
}
.gantt_grid_head_cell_dragged {
  border: 1px solid #CECECE;
  opacity: 0.3;
}
.gantt_grid_target_marker {
  position: absolute;
  top: 0;
  width: 2px;
  height: 100%;
  background-color: #000;
  transform: translateX(-1px);
}
.gantt_grid_target_marker::before,
.gantt_grid_target_marker::after {
  display: block;
  content: "";
  position: absolute;
  left: -5px;
  width: 0px;
  height: 0px;
  border: 6px solid rgba(0, 0, 0, 0);
}
.gantt_grid_target_marker::before {
  border-top-color: #000;
}
.gantt_grid_target_marker::after {
  bottom: 0;
  border-bottom-color: #000;
}
.gantt_message_area {
  position: fixed;
  right: 5px;
  width: 250px;
  z-index: 1000;
}
.gantt-info {
  min-width: 120px;
  padding: 4px 4px 4px 20px;
  font-family: "arial";
  z-index: 10000;
  margin: 5px;
  margin-bottom: 10px;
  -webkit-transition: all .5s ease;
  -moz-transition: all .5s ease;
  -o-transition: all .5s ease;
  transition: all .5s ease;
}
.gantt-info.hidden {
  height: 0px;
  padding: 0px;
  border-width: 0px;
  margin: 0px;
  overflow: hidden;
}
.gantt_modal_box {
  overflow: hidden;
  display: inline-block;
  min-width: 250px;
  width: 250px;
  text-align: center;
  position: fixed;
  z-index: 20000;
  border-color: #000;
  -webkit-box-shadow: inset 0px 0px 0px 2px #000;
  -moz-box-shadow: inset 0px 0px 0px 2px #000;
  box-shadow: inset 0px 0px 0px 2px #000;
  padding: 2px;
  font-family: "arial";
  border-radius: 6px;
  border: 1px solid #000;
  background: #fff;
}
.gantt_popup_title {
  border-top-left-radius: 6px;
  border-top-right-radius: 6px;
  border-width: 0px;
}
.gantt_button,
.gantt_popup_button {
  border: 1px solid #000;
  height: 30px;
  line-height: 30px;
  display: inline-block;
  margin: 0 5px;
  border-radius: 4px;
  background: #fff;
}
.gantt-info,
.gantt_popup_button,
.gantt_button {
  user-select: none;
  -webkit-user-select: none;
  -moz-user-select: -moz-none;
  cursor: pointer;
}
.gantt_popup_text {
  overflow: hidden;
}
.gantt_popup_controls {
  border-radius: 6px;
  padding: 10px;
}
.gantt_popup_button {
  min-width: 100px;
}
div.dhx_modal_cover {
  background-color: #000;
  cursor: default;
  filter: progid:DXImageTransform.Microsoft.Alpha(opacity=20);
  opacity: 0.2;
  position: fixed;
  z-index: 19999;
  left: 0px;
  top: 0px;
  width: 100%;
  height: 100%;
  border: none;
  zoom: 1;
}
.gantt-info img,
.gantt_modal_box img {
  float: left;
  margin-right: 20px;
}
.gantt-alert-error,
.gantt-confirm-error {
  border: 1px solid #ff0000;
}
/*Skin section*/
.gantt_button input,
.gantt_popup_button div {
  border-radius: 4px;
  font-size: 16px;
  -moz-box-sizing: content-box;
  box-sizing: content-box;
  padding: 0px;
  margin: 0px;
  vertical-align: top;
}
.gantt_popup_title {
  border-bottom: 1px solid #000;
  height: 40px;
  line-height: 40px;
  font-size: 20px;
}
.gantt_popup_text {
  margin: 15px 15px 5px 15px;
  font-size: 16px;
  color: #000;
  min-height: 30px;
  border-radius: 6px;
}
.gantt-info,
.gantt-error {
  font-size: 16px;
  color: #000;
  box-shadow: 3px 3px 3px rgba(0, 0, 0, 0.07);
  padding: 0px;
  background-color: #FFFFFF;
  border-radius: 3px;
  border: 1px solid #FFFFFF;
}
.gantt-info div {
  padding: 5px 10px 5px 10px;
  background-color: #FFFFFF;
  border-radius: 3px;
  border: 1px solid #000;
}
.gantt-error {
  background-color: #b60000;
  border: 1px solid #000;
}
.gantt-error div {
  background-color: #b60000;
  border: 1px solid #940000;
  color: #FFFFFF;
}
.gantt-warning {
  background-color: #EF7F00;
  border: 1px solid #000;
}
.gantt-warning div {
  background-color: #EF7F00;
  border: 1px solid #C97110;
  color: #FFFFFF;
}
.gantt_grid div,
.gantt_data_area div {
  -ms-touch-action: none;
  -webkit-tap-highlight-color: rgba(0, 0, 0, 0);
}
.gantt_data_area {
  position: relative;
  overflow-x: hidden;
  overflow-y: hidden;
  -moz-user-select: -moz-none;
  -webkit-user-select: none;
  user-select: none;
}
.gantt_links_area {
  position: absolute;
  left: 0px;
  top: 0px;
}
.gantt_task_content,
.gantt_task_progress,
.gantt_side_content {
  line-height: inherit;
  overflow: hidden;
  height: 100%;
}
.gantt_task_content {
  font-size: 15px;
  color: #000;
  width: 100%;
  top: 0;
  cursor: pointer;
  position: absolute;
  white-space: nowrap;
  text-align: center;
}
.gantt_task_progress {
  text-align: center;
  z-index: 0;
  background: #18EEFF;
}
.gantt_task_progress_wrapper {
  border-radius: inherit;
  position: relative;
  width: 100%;
  height: 100%;
  overflow: hidden;
}
.gantt_task_line {
  -webkit-border-radius: 1px;
  -moz-border-radius: 1px;
  border-radius: 1px;
  position: absolute;
  -moz-box-sizing: border-box;
  box-sizing: border-box;
  background-color: #BBF9FF;
  border: 1px solid #000;
  -webkit-user-select: none;
  -moz-user-select: none;
  -moz-user-select: -moz-none;
}
.gantt_task_line.gantt_drag_move div {
  cursor: move;
}
.gantt_touch_move,
.gantt_touch_progress .gantt_touch_resize {
  -moz-transform: scale(1.02, 1.1);
  -o-transform: scale(1.02, 1.1);
  -webkit-transform: scale(1.02, 1.1);
  transform: scale(1.02, 1.1);
  -moz-transform-origin: 50%;
  -o-transform-origin: 50%;
  -webkit-transform-origin: 50%;
  transform-origin: 50%;
}
.gantt_touch_progress .gantt_task_progress_drag,
.gantt_touch_resize .gantt_task_drag {
  -moz-transform: scaleY(1.3);
  -o-transform: scaleY(1.3);
  -webkit-transform: scaleY(1.3);
  transform: scaleY(1.3);
  -moz-transform-origin: 50%;
  -o-transform-origin: 50%;
  -webkit-transform-origin: 50%;
  transform-origin: 50%;
}
.gantt_side_content {
  position: absolute;
  white-space: nowrap;
  color: #6e6e6e;
  top: 0;
  font-size: 11px;
  font-size: 14px;
}
.gantt_side_content.gantt_left {
  right: 100%;
  padding-right: 20px;
}
.gantt_side_content.gantt_right {
  left: 100%;
  padding-left: 20px;
}
.gantt_side_content.gantt_link_crossing {
  bottom: 8.75px;
  top: auto;
}
.gantt_task_link .gantt_line_wrapper,
.gantt_link_arrow {
  position: absolute;
  cursor: pointer;
}
.gantt_line_wrapper div {
  background-color: #000;
}
.gantt_task_link:hover .gantt_line_wrapper div {
  box-shadow: 0 0 5px 0px #000;
}
.gantt_task_link div.gantt_link_arrow {
  background-color: transparent;
  border-style: solid;
  width: 0px;
  height: 0px;
}
.gantt_link_control {
  position: absolute;
  width: 20px;
  top: 0px;
}
.gantt_link_control div {
  display: none;
  cursor: pointer;
  box-sizing: border-box;
  position: relative;
  top: 50%;
  margin-top: -7.5px;
  vertical-align: middle;
  border: 1px solid #929292;
  -webkit-border-radius: 6.5px;
  -moz-border-radius: 6.5px;
  border-radius: 6.5px;
  height: 13px;
  width: 13px;
  background-color: #f0f0f0;
}
.gantt_link_control.task_right div.gantt_link_point {
  margin-left: 7px;
}
.gantt_link_control div:hover {
  background-color: #FFF;
}
.gantt_link_control.task_left {
  left: -20px;
}
.gantt_link_control.task_right {
  right: -20px;
}
.gantt_task_line.gantt_selected .gantt_link_control div,
.gantt_task_line:hover .gantt_link_control div,
.gantt_task_line.gantt_drag_progress .gantt_link_control div,
.gantt_task_line.gantt_drag_move .gantt_link_control div,
.gantt_task_line.gantt_drag_resize .gantt_link_control div,
.gantt_task_line.gantt_selected .gantt_task_progress_drag,
.gantt_task_line:hover .gantt_task_progress_drag,
.gantt_task_line.gantt_drag_progress .gantt_task_progress_drag,
.gantt_task_line.gantt_drag_move .gantt_task_progress_drag,
.gantt_task_line.gantt_drag_resize .gantt_task_progress_drag,
.gantt_task_line.gantt_selected .gantt_task_drag,
.gantt_task_line:hover .gantt_task_drag,
.gantt_task_line.gantt_drag_progress .gantt_task_drag,
.gantt_task_line.gantt_drag_move .gantt_task_drag,
.gantt_task_line.gantt_drag_resize .gantt_task_drag {
  display: block;
}
.gantt_link_target .gantt_link_control div {
  display: block;
}
.gantt_link_source,
.gantt_link_target {
  box-shadow: 0px 0px 3px #BBF9FF;
}
.gantt_link_target.link_start_allow,
.gantt_link_target.link_finish_allow {
  box-shadow: 0px 0px 3px #262626;
}
.gantt_link_target.link_start_deny,
.gantt_link_target.link_finish_deny {
  box-shadow: 0px 0px 3px #e87e7b;
}
.link_start_allow .gantt_link_control.task_start_date div,
.link_finish_allow .gantt_link_control.task_end_date div {
  background-color: #262626;
  border-color: #000000;
}
.link_start_deny .gantt_link_control.task_start_date div,
.link_finish_deny .gantt_link_control.task_end_date div {
  background-color: #e87e7b;
  border-color: #dd3e3a;
}
.gantt_link_arrow_right {
  border-width: 4px 0 4px 6px;
  border-top-color: transparent !important;
  border-right-color: transparent !important;
  border-bottom-color: transparent !important;
  border-left-color: #000;
  /*margin-top: -1px;*/
}
.gantt_link_arrow_left {
  border-width: 4px 6px 4px 0;
  margin-top: -1px;
  border-top-color: transparent !important;
  border-right-color: #000;
  border-bottom-color: transparent !important;
  border-left-color: transparent !important;
}
.gantt_link_arrow_up {
  border-width: 0 4px 6px 4px;
  border-color: transparent transparent #000 transparent;
  border-top-color: transparent !important;
  border-right-color: transparent !important;
  border-bottom-color: #000;
  border-left-color: transparent !important;
}
.gantt_link_arrow_down {
  border-width: 4px 6px 0 4px;
  border-top-color: #000;
  border-right-color: transparent !important;
  border-bottom-color: transparent !important;
  border-left-color: transparent !important;
}
.gantt_task_drag,
.gantt_task_progress_drag {
  cursor: ew-resize;
  display: none;
  position: absolute;
}
.gantt_task_drag.task_right {
  cursor: e-resize;
}
.gantt_task_drag.task_left {
  cursor: w-resize;
}
.gantt_task_drag {
  height: 100%;
  width: 8px;
  z-index: 1;
  top: -1px;
}
.gantt_task_drag.task_left {
  left: -7px;
}
.gantt_task_drag.task_right {
  right: -7px;
}
.gantt_task_progress_drag {
  height: 8px;
  width: 8px;
  bottom: -4px;
  margin-left: -4px;
  background-position: bottom;
  background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAALCAYAAAB24g05AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyhpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTMyIDc5LjE1OTI4NCwgMjAxNi8wNC8xOS0xMzoxMzo0MCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTUuNSAoV2luZG93cykiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6QzM0N0ZFRkM2ODc4MTFFNjhFNUREOTU2N0ZBMkI4ODUiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6QzM0N0ZFRkQ2ODc4MTFFNjhFNUREOTU2N0ZBMkI4ODUiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDpDMzQ3RkVGQTY4NzgxMUU2OEU1REQ5NTY3RkEyQjg4NSIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDpDMzQ3RkVGQjY4NzgxMUU2OEU1REQ5NTY3RkEyQjg4NSIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/Pkl1dsMAAADJSURBVHjapJK9DcIwEIXjKA2SSxqnZghar0Cb7EBBmRlYwF4Bam+QMgPQuYUeKVLwcc+QAmQIKJ/05J9772TpLIgoSyGEyHnZP4879oWkEQ3exSxYB601Qbw/4i7pTYSXrLaqKur7PqquaxRa1L42YFasU9M0FEKgEexxhxo8yQbMuiiKszGGPmGtJfZc4H1pwGyklFfnHE0BD7zIjAPYKqWGruvoV+Aty/KGbByE957+BRlkxWOS6b8wBf+VLM9mEl8wp8FdgAEAX8VEJCVY4FsAAAAASUVORK5CYII=);
  background-repeat: no-repeat;
  z-index: 1;
}
.gantt_task_progress_drag:hover {
  background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAALCAYAAAB24g05AAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAAsTAAALEwEAmpwYAAABJElEQVQoz6WRsWqDUBSG/3uvXFHQoBwcMgtu1U6BQAn4BoUMTi7t5JBH0EHo1pdw6liwa8mQMVM6BzrHJUOgNZJws4XQEkjItx04/wfn/MAZiEhKKVdSyhURSVwDEfU1TfsJw1CFYag0Tfslov5FYdd1B5zzXRzHqq5rVde1iuNYcc53rusO/u6L08FxnHS9Xn8kScKzLIMQAkIIDIdD7Pd7Pp/PnxzH+W7bdvFP0Ov1XjabzetkMmHj8RiMsaOYMYYoikBEbDabPdq2rW+328+jwLKs967rnouiwGg0Onue7/sIggDT6fTBMIz7ruvemGmaC13X78qyhO/7F/1puVwiz3O0bfvFAKiqquB53lVNNU2DNE3BAVwdPs1w3AgDoG4RHADj3FVF5NgPuQAAAABJRU5ErkJggg==);
}
.gantt_link_tooltip {
  box-shadow: 3px 3px 3px #888888;
  background-color: #fff;
  border-left: 1px dotted #cecece;
  border-top: 1px dotted #cecece;
  font-family: Tahoma;
  font-size: 8pt;
  color: #444;
  padding: 6px;
  line-height: 20px;
}
.gantt_link_direction {
  height: 0px;
  border: 0px none #000;
  border-bottom-style: dashed;
  border-bottom-width: 2px;
  transform-origin: 0% 0%;
  -ms-transform-origin: 0% 0%;
  -webkit-transform-origin: 0% 0%;
  z-index: 2;
  margin-left: 1px;
  position: absolute;
}
.gantt_grid_data .gantt_row.gantt_selected,
.gantt_grid_data .gantt_row.odd.gantt_selected {
  background-color: #5868c5;
}
.gantt_task_row.gantt_selected {
  background-color: #5868c5;
}
.gantt_task_row.gantt_selected .gantt_task_cell {
  border-right-color: #3d4dad;
}
.gantt_task_line.gantt_selected {
  box-shadow: 0 0 5px #18EEFF;
}
.gantt_task_line.gantt_project.gantt_selected {
  box-shadow: 0 0 5px #74FFA9;
}
.gantt_task_line.gantt_milestone {
  visibility: hidden;
  background-color: #c06fce;
  border: 0px solid #6e2a7a;
  box-sizing: content-box;
  -moz-box-sizing: content-box;
}
.gantt_task_line.gantt_milestone div {
  visibility: visible;
}
.gantt_task_line.gantt_milestone .gantt_task_content {
  background: inherit;
  border: inherit;
  border-width: 1px;
  border-radius: inherit;
  box-sizing: border-box;
  -moz-box-sizing: border-box;
  -webkit-transform: rotate(45deg);
  -moz-transform: rotate(45deg);
  -ms-transform: rotate(45deg);
  -o-transform: rotate(45deg);
  transform: rotate(45deg);
}
.gantt_task_line.gantt_task_inline_color {
  border-color: #999999;
}
.gantt_task_line.gantt_task_inline_color .gantt_task_progress {
  background-color: #363636;
  opacity: 0.2;
}
.gantt_task_line.gantt_task_inline_color.gantt_selected {
  box-shadow: 0 0 5px #999999;
}
.gantt_task_line.gantt_task_inline_color.gantt_project.gantt_selected {
  box-shadow: 0 0 5px #999999;
}
.gantt_task_link.gantt_link_inline_color:hover .gantt_line_wrapper div {
  box-shadow: 0 0 5px 0px #999999;
}
.gantt_critical_task {
  background-color: #e63030;
  border-color: #9d3a3a;
}
.gantt_critical_task .gantt_task_progress {
  background-color: rgba(0, 0, 0, 0.4);
}
.gantt_critical_link .gantt_line_wrapper > div {
  background-color: #e63030;
}
.gantt_critical_link .gantt_link_arrow {
  border-color: #e63030;
}
.gantt_row:focus,
.gantt_cell:focus,
.gantt_btn_set:focus,
.gantt_qi_big_icon:focus,
.gantt_popup_button:focus,
.gantt_grid_head_cell:focus {
  -moz-box-shadow: inset 0px 0px 1px 1px #4d90fe;
  -webkit-box-shadow: inset 0px 0px 1px 1px #4d90fe;
  box-shadow: inset 0px 0px 1px 1px #4d90fe;
}
.gantt_split_parent,
.gantt_split_subproject {
  opacity: 0.1;
  pointer-events: none;
}
.gantt_rollup_child .gantt_link_control,
.gantt_rollup_child:hover .gantt_link_control {
  display: none;
}
.gantt_unselectable,
.gantt_unselectable div {
  -webkit-user-select: none;
  -moz-user-select: none;
  -moz-user-select: -moz-none;
}
.gantt_cal_light {
  -webkit-tap-highlight-color: transparent;
  background: #fff;
  border-radius: 6px;
  font-family: "arial";
  border: 1px solid #c1c1c1;
  color: #262626;
  font-size: 14px;
  position: absolute;
  z-index: 10001;
  width: 550px;
  height: 250px;
  border-color: #000;
  -webkit-box-shadow: inset 0px 0px 0px 2px #000;
  -moz-box-shadow: inset 0px 0px 0px 2px #000;
  box-shadow: inset 0px 0px 0px 2px #000;
  padding: 2px;
}
.gantt_cal_light_wide {
  width: 650px;
}
.gantt_cal_light select {
  font-family: "arial";
  border: 1px solid #c1c1c1;
  font-size: 14px;
  padding: 2px;
  margin: 0px;
}
.gantt_cal_ltitle {
  padding: 7px 10px;
  overflow: hidden;
  white-space: nowrap;
  -webkit-border-top-left-radius: 6px;
  -webkit-border-bottom-left-radius: 0;
  -webkit-border-top-right-radius: 6px;
  -webkit-border-bottom-right-radius: 0;
  -moz-border-radius-topleft: 6px;
  -moz-border-radius-bottomleft: 0;
  -moz-border-radius-topright: 6px;
  -moz-border-radius-bottomright: 0;
  border-top-left-radius: 6px;
  border-bottom-left-radius: 0;
  border-top-right-radius: 6px;
  border-bottom-right-radius: 0;
}
.gantt_cal_ltitle span {
  white-space: nowrap;
}
.gantt_cal_lsection {
  color: #727272;
  font-weight: bold;
  padding: 12px 0px 5px 10px;
}
.gantt_cal_lsection .gantt_fullday {
  float: right;
  margin-right: 5px;
  font-size: 12px;
  font-weight: normal;
  line-height: 20px;
  vertical-align: top;
  cursor: pointer;
}
.gantt_cal_lsection {
  font-size: 13px;
}
.gantt_cal_ltext {
  padding: 2px    10px;
  overflow: hidden;
}
.gantt_cal_ltext textarea {
  overflow-y: auto;
  overflow-x: hidden;
  font-family: "arial";
  font-size: 14px;
  -moz-box-sizing: border-box;
  -webkit-box-sizing: border-box;
  box-sizing: border-box;
  border: 1px solid #c1c1c1;
  height: 100%;
  width: 100%;
  outline: none !important;
  resize: none;
}
.gantt_section_constraint [data-constraint-time-select] {
  margin-left: 20px;
}
.gantt_time {
  font-weight: bold;
}
.gantt_cal_light .gantt_title {
  padding-left: 10px;
}
.gantt_cal_larea {
  border: 1px solid #c1c1c1;
  border-left: none;
  border-right: none;
  background-color: #fff;
  overflow: hidden;
  height: 1px;
}
.gantt_btn_set {
  margin: 10px 7px 5px 10px;
  padding: 5px 15px 5px 10px;
  float: left;
  -webkit-border-radius: 4px;
  -moz-border-radius: 4px;
  border-radius: 4px;
  border-width: 2px;
  border-color: #c1c1c1;
  border-style: solid;
  height: 32px;
  font-weight: bold;
  background: #fff;
  -moz-box-sizing: border-box;
  -webkit-box-sizing: border-box;
  box-sizing: border-box;
  cursor: pointer;
}
.gantt_hidden {
  display: none;
}
.gantt_btn_set div {
  float: left;
  font-size: 13px;
  height: 18px;
  line-height: 18px;
  background-repeat: no-repeat;
  vertical-align: middle;
}
.gantt_save_btn {
  background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyhpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTMyIDc5LjE1OTI4NCwgMjAxNi8wNC8xOS0xMzoxMzo0MCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTUuNSAoV2luZG93cykiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6NTM5MTFCMzA2ODc4MTFFNjk0MEE5ODRFRjQ3MEY2MkQiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6NTM5MTFCMzE2ODc4MTFFNjk0MEE5ODRFRjQ3MEY2MkQiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo1MzkxMUIyRTY4NzgxMUU2OTQwQTk4NEVGNDcwRjYyRCIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDo1MzkxMUIyRjY4NzgxMUU2OTQwQTk4NEVGNDcwRjYyRCIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/Pnl+P+YAAADRSURBVHjaYvz//z8DJYCJgUJArgEyQHwIiPUYQF4gESsA8b3/ELCDVM1qQPwIqvkwEPORolkbiJ9DNe8BYm5wBAAJPahp8ng0GwLxa6jmrUDMCZMDEVugEg+BWB2LZnMgfg9Vsw6I2ZDlQQQPEO+FKngJtQ2mwBaIP0HllgExC7oFMAYHEG+AKgTZZg3ErkD8FSo2F4iZsXkPmQMyfQlUA0jjdyh7KhAz4gofdAFGqAYY6ManGYRZ0FIYKGNkA/EHIP4HxLWEkiTjkM1McAAQYAAwa97nPE+LsgAAAABJRU5ErkJggg==);
  margin-top: 2px;
  width: 21px;
}
.gantt_cancel_btn {
  margin-top: 2px;
  background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyhpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTMyIDc5LjE1OTI4NCwgMjAxNi8wNC8xOS0xMzoxMzo0MCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTUuNSAoV2luZG93cykiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6NTc0QzgxQ0U2ODc4MTFFNkE5NTJDMTkyNTg2QUExRDAiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6NTc0QzgxQ0Y2ODc4MTFFNkE5NTJDMTkyNTg2QUExRDAiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo1NzRDODFDQzY4NzgxMUU2QTk1MkMxOTI1ODZBQTFEMCIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDo1NzRDODFDRDY4NzgxMUU2QTk1MkMxOTI1ODZBQTFEMCIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/Pk+05wsAAAFbSURBVHjajNM7LwRRGMbxNQYFSpXKNqwVEtFsIhIismQ/wOg3roVoNL6BhhWFy2p9A5dCKCjEJktiCQWJQkOJiEXi/ybPyJiwmTf5ZWbPnOedObNnqjzPi4WqHVkMo0Vjd9hDHlfByU7gvBYruMAs2lAnCY3ZtTU0hBtYeBvT+MQyUmiUlMbs2hh2/SauGixiEA/I4Dy0rBPcYkhP1osFTNkTJDGO8j9hqyYcKnyDdz1J0tELq9baKoXtRpfow7oyWWuQ1sStCOEBPAbmpq1BXD+KEcNWZzrG3djfFQ734ylwvUbHsqNNYtUdMWzVoeO9ox1mNRox7M+12rcGm/jSX3kUIdypuZbJW4MSNrRlW3FdIdyFHc21v73kb+U5HPtvFvPoQb3Y+RJO0YwDfRs/38IzRrCq7T2DAl6koDFXd85o5/76Gq3JpNaY05b9wKveSU5LmMCbH/oWYAA8HFpKXgW38QAAAABJRU5ErkJggg==);
  width: 20px;
}
.gantt_delete_btn {
  background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyhpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTMyIDc5LjE1OTI4NCwgMjAxNi8wNC8xOS0xMzoxMzo0MCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTUuNSAoV2luZG93cykiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6NUFDNTg4MDI2ODc4MTFFNkI5QkY5OTIyMjkyMTFFNTkiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6NUFDNTg4MDM2ODc4MTFFNkI5QkY5OTIyMjkyMTFFNTkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo1QUM1ODgwMDY4NzgxMUU2QjlCRjk5MjIyOTIxMUU1OSIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDo1QUM1ODgwMTY4NzgxMUU2QjlCRjk5MjIyOTIxMUU1OSIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PuQSVckAAABGSURBVHjaYvj//z8DFlz/HxPUY1NLrGachjCCTQGaw0AeYGRioBCwwEyi1AAYINYrcAsp9sKoAaMGYDPgCBF6jiJzAAIMAPUxcjmgixXRAAAAAElFTkSuQmCC);
  margin-top: 2px;
  width: 20px;
}
.gantt_cal_cover {
  width: 100%;
  height: 100%;
  position: fixed;
  z-index: 10000;
  top: 0px;
  left: 0px;
  background-color: black;
  opacity: 0.1;
  filter: progid:DXImageTransform.Microsoft.Alpha(opacity=10);
}
.gantt_custom_button {
  padding: 0px 3px 0px 3px;
  font-family: "arial";
  font-size: 14px;
  font-weight: normal;
  margin-right: 10px;
  margin-top: -5px;
  cursor: pointer;
  float: right;
  height: 21px;
  width: 90px;
  border: 1px solid #CECECE;
  text-align: center;
  -webkit-border-radius: 4px;
  -moz-border-radius: 4px;
  -ms-border-radius: 4px;
  -o-border-radius: 4px;
  border-radius: 4px;
}
.gantt_custom_button div {
  cursor: pointer;
  float: none;
  height: 21px;
  line-height: 21px;
  vertical-align: middle;
}
.gantt_custom_button div:first-child {
  display: none;
}
.gantt_cal_light_wide {
  width: 580px;
  padding: 2px 4px;
}
.gantt_cal_light_wide .gantt_cal_larea {
  -moz-box-sizing: border-box;
  -webkit-box-sizing: border-box;
  box-sizing: border-box;
  border: 1px solid #c1c1c1;
}
.gantt_cal_light_wide .gantt_cal_lsection {
  border: 0px;
  float: left;
  text-align: right;
  width: 80px;
  height: 20px;
  padding: 5px 10px 0px 0px;
}
.gantt_cal_light_wide .gantt_wrap_section {
  position: relative;
  padding: 10px 0;
  overflow: hidden;
  border-bottom: 1px solid #000;
}
.gantt_cal_light_wide .gantt_section_time {
  overflow: hidden;
  padding-top: 2px !important;
  padding-right: 0px;
  height: 20px !important;
}
.gantt_cal_light_wide .gantt_cal_ltext {
  padding-right: 0px;
}
.gantt_cal_light_wide .gantt_cal_larea {
  padding: 0 10px;
  width: 100%;
}
.gantt_cal_light_wide .gantt_section_time {
  background: transparent;
}
.gantt_cal_light_wide .gantt_cal_checkbox label {
  padding-left: 0px;
}
.gantt_cal_light_wide .gantt_cal_lsection .gantt_fullday {
  float: none;
  margin-right: 0px;
  font-weight: bold;
  cursor: pointer;
}
.gantt_cal_light_wide .gantt_custom_button {
  position: absolute;
  top: 0;
  right: 0;
  margin-top: 2px;
}
.gantt_cal_light_wide .gantt_repeat_right {
  margin-right: 55px;
}
.gantt_cal_light_wide.gantt_cal_light_full {
  width: 738px;
}
.gantt_cal_wide_checkbox input {
  margin-top: 8px;
  margin-left: 14px;
}
.gantt_cal_light input {
  font-size: 14px;
}
.gantt_section_time {
  background-color: white;
  white-space: nowrap;
  padding: 2px 10px 5px;
  padding-top: 2px !important;
}
.gantt_section_time .gantt_time_selects {
  float: left;
  height: 25px;
}
.gantt_section_time .gantt_time_selects select {
  height: 23px;
  padding: 2px;
  border: 1px solid #c1c1c1;
}
.gantt_duration {
  width: 100px;
  height: 23px;
  float: left;
  white-space: nowrap;
  margin-left: 20px;
  line-height: 23px;
}
.gantt_duration .gantt_duration_value,
.gantt_duration .gantt_duration_dec,
.gantt_duration .gantt_duration_inc {
  -moz-box-sizing: border-box;
  -webkit-box-sizing: border-box;
  box-sizing: border-box;
  text-align: center;
  vertical-align: top;
  height: 100%;
  border: 1px solid #c1c1c1;
}
.gantt_duration .gantt_duration_value {
  width: 40px;
  padding: 3px 4px;
  border-left-width: 0;
  border-right-width: 0;
}
.gantt_duration .gantt_duration_value.gantt_duration_value_formatted {
  width: 70px;
}
.gantt_duration .gantt_duration_dec,
.gantt_duration .gantt_duration_inc {
  width: 20px;
  padding: 1px;
  padding-bottom: 1px;
  background: #fff;
}
.gantt_duration .gantt_duration_dec {
  -moz-border-top-left-radius: 4px;
  -moz-border-bottom-left-radius: 4px;
  -webkit-border-top-left-radius: 4px;
  -webkit-border-bottom-left-radius: 4px;
  border-top-left-radius: 4px;
  border-bottom-left-radius: 4px;
}
.gantt_duration .gantt_duration_inc {
  margin-right: 4px;
  -moz-border-top-right-radius: 4px;
  -moz-border-bottom-right-radius: 4px;
  -webkit-border-top-right-radius: 4px;
  -webkit-border-bottom-right-radius: 4px;
  border-top-right-radius: 4px;
  border-bottom-right-radius: 4px;
}
.gantt_resources {
  max-height: 150px;
  height: auto;
  overflow-y: auto;
}
.gantt_resource_row {
  display: block;
  padding: 10px 0;
  border-bottom: 1px solid #000;
  cursor: pointer;
}
.gantt_resource_row input[type=checkbox]:not(:checked),
.gantt_resource_row input[type=checkbox]:not(:checked) ~ div {
  opacity: 0.5;
}
.gantt_resource_toggle {
  vertical-align: middle;
}
.gantt_resources_filter .gantt_resources_filter_input {
  padding: 1px 2px 1px 2px;
  box-sizing: border-box;
}
.gantt_resources_filter .switch_unsetted {
  vertical-align: middle;
}
.gantt_resource_cell {
  display: inline-block;
}
.gantt_resource_cell.gantt_resource_cell_checkbox {
  width: 24px;
  max-width: 24px;
  min-width: 24px;
  vertical-align: middle;
}
.gantt_resource_cell.gantt_resource_cell_label {
  width: 40%;
  max-width: 40%;
  vertical-align: middle;
}
.gantt_resource_cell.gantt_resource_cell_value {
  width: 30%;
  max-width: 30%;
  vertical-align: middle;
}
.gantt_resource_cell.gantt_resource_cell_value input,
.gantt_resource_cell.gantt_resource_cell_value select {
  width: 80%;
  vertical-align: middle;
  padding: 1px 2px 1px 2px;
  box-sizing: border-box;
}
.gantt_resource_cell.gantt_resource_cell_unit {
  width: 10%;
  max-width: 10%;
  vertical-align: middle;
}
.gantt_resource_early_value {
  opacity: 0.8;
  font-size: 0.9em;
}
/* Quick info */
.gantt_cal_quick_info {
  border: 1px solid #000;
  border-radius: 6px;
  position: absolute;
  z-index: 300;
  border-color: #000;
  -webkit-box-shadow: inset 0px 0px 0px 2px #000;
  -moz-box-shadow: inset 0px 0px 0px 2px #000;
  box-shadow: inset 0px 0px 0px 2px #000;
  padding: 2px;
  background-color: #fff;
  width: 300px;
  transition: left 0.5s ease, right 0.5s;
  -moz-transition: left 0.5s ease, right 0.5s;
  -webkit-transition: left 0.5s ease, right 0.5s;
  -o-transition: left 0.5s ease, right 0.5s;
}
.gantt_no_animate {
  transition: none;
  -moz-transition: none;
  -webkit-transition: none;
  -o-transition: none;
}
.gantt_cal_quick_info.gantt_qi_left .gantt_qi_big_icon {
  float: right;
}
.gantt_cal_qi_title {
  -webkit-border-top-left-radius: 6px;
  -webkit-border-bottom-left-radius: 0;
  -webkit-border-top-right-radius: 6px;
  -webkit-border-bottom-right-radius: 0;
  -moz-border-radius-topleft: 6px;
  -moz-border-radius-bottomleft: 0;
  -moz-border-radius-topright: 6px;
  -moz-border-radius-bottomright: 0;
  border-top-left-radius: 6px;
  border-bottom-left-radius: 0;
  border-top-right-radius: 6px;
  border-bottom-right-radius: 0;
  padding: 5px 0px 8px 12px;
  color: #000;
  background-color: #fff;
  border-bottom: 1px solid #000;
}
.gantt_cal_qi_tdate {
  font-size: 14px;
  font-weight: bold;
}
.gantt_cal_qi_tcontent {
  font-size: 14px;
}
.gantt_cal_qi_content {
  padding: 16px 8px;
  font-size: 14px;
  color: #000;
  overflow: hidden;
}
.gantt_cal_qi_controls {
  -webkit-border-top-left-radius: 0;
  -webkit-border-bottom-left-radius: 6px;
  -webkit-border-top-right-radius: 0;
  -webkit-border-bottom-right-radius: 6px;
  -moz-border-radius-topleft: 0;
  -moz-border-radius-bottomleft: 6px;
  -moz-border-radius-topright: 0;
  -moz-border-radius-bottomright: 6px;
  border-top-left-radius: 0;
  border-bottom-left-radius: 6px;
  border-top-right-radius: 0;
  border-bottom-right-radius: 6px;
  padding-left: 7px;
}
.gantt_cal_qi_controls .gantt_menu_icon {
  margin-top: 6px;
  background-repeat: no-repeat;
}
.gantt_cal_qi_controls .gantt_menu_icon.icon_edit {
  width: 20px;
  background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAAB3RJTUUH3QYFCjI5ZQj5bAAAAFNJREFUOMvt0zEOACAIA0DkwTymH8bJTRTKZGJXyaWEKPKTCQAH4Ls37cItcDUzsxHNDLZNhCq7Gt1wh9ErV7EjyGAhyGLphlnsClWuS32rn0czAV+vNGrM/LBtAAAAAElFTkSuQmCC);
}
.gantt_cal_qi_controls .gantt_menu_icon.icon_delete {
  width: 20px;
  background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyhpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTMyIDc5LjE1OTI4NCwgMjAxNi8wNC8xOS0xMzoxMzo0MCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTUuNSAoV2luZG93cykiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6NUFDNTg4MDI2ODc4MTFFNkI5QkY5OTIyMjkyMTFFNTkiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6NUFDNTg4MDM2ODc4MTFFNkI5QkY5OTIyMjkyMTFFNTkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo1QUM1ODgwMDY4NzgxMUU2QjlCRjk5MjIyOTIxMUU1OSIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDo1QUM1ODgwMTY4NzgxMUU2QjlCRjk5MjIyOTIxMUU1OSIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PuQSVckAAABGSURBVHjaYvj//z8DFlz/HxPUY1NLrGachjCCTQGaw0AeYGRioBCwwEyi1AAYINYrcAsp9sKoAaMGYDPgCBF6jiJzAAIMAPUxcjmgixXRAAAAAElFTkSuQmCC);
}
.gantt_qi_big_icon {
  font-size: 13px;
  border-radius: 4px;
  font-weight: bold;
  background: #fff;
  margin: 5px 9px 8px 0px;
  min-width: 60px;
  line-height: 32px;
  vertical-align: middle;
  padding: 0px 10px 0px 5px;
  cursor: pointer;
  border: 1px solid #000;
}
.gantt_cal_qi_controls div {
  float: left;
  height: 32px;
  text-align: center;
  line-height: 32px;
}
.gantt_cal_quick_info.gantt_qi_hidden {
  display: none;
}
.gantt_tooltip {
  padding: 10px;
  position: absolute;
  z-index: 50;
  white-space: nowrap;
}
.gantt_resource_marker {
  position: absolute;
  text-align: center;
  font-size: 14px;
  color: #FFF;
}
.gantt_resource_marker_ok {
  background: rgba(78, 208, 134, 0.75);
}
.gantt_resource_marker_overtime {
  background: rgba(255, 134, 134, 0.69);
}
.gantt_histogram_label {
  width: 100%;
  height: 100%;
  position: absolute;
  z-index: 1;
  font-weight: bold;
  font-size: 14px;
}
.gantt_histogram_fill {
  background-color: rgba(41, 157, 180, 0.2);
  width: 100%;
  position: absolute;
  bottom: 0;
}
.gantt_histogram_hor_bar {
  height: 1px;
  position: absolute;
  background: #299DB4;
  margin-top: -1px;
  margin-left: -1px;
}
.gantt_histogram_vert_bar {
  width: 1px;
  position: absolute;
  background: #299DB4;
  margin-left: -1px;
}
.gantt_histogram_cell {
  position: absolute;
  text-align: center;
  font-size: 14px;
  color: #000000;
}
.gantt_marker {
  height: 100%;
  width: 2px;
  top: 0;
  position: absolute;
  text-align: center;
  background-color: rgba(255, 0, 0, 0.4);
  -moz-box-sizing: border-box;
  -webkit-box-sizing: border-box;
  box-sizing: border-box;
}
.gantt_marker .gantt_marker_content {
  padding: 5px;
  background: inherit;
  color: white;
  position: absolute;
  font-size: 12px;
  line-height: 12px;
  opacity: 0.8;
}
.gantt_marker_area {
  position: absolute;
  top: 0;
  left: 0;
}
.gantt_grid_editor_placeholder {
  position: absolute;
}
.gantt_grid_editor_placeholder > div,
.gantt_grid_editor_placeholder input,
.gantt_grid_editor_placeholder select {
  width: 100%;
  height: 100%;
  box-sizing: border-box;
}
.gantt_row_placeholder div {
  opacity: 0.5;
}
.gantt_row_placeholder .gantt_file,
.gantt_row_placeholder .gantt_add {
  display: none;
}
.gantt_drag_marker.gantt_grid_dnd_marker {
  background-color: transparent;
  transition: all 0.1s ease ;
}
.gantt_grid_dnd_marker_line {
  height: 4px;
  width: 100%;
  background-color: #3498db;
}
.gantt_grid_dnd_marker_line::before {
  background: #fff;
  width: 12px;
  height: 12px;
  box-sizing: border-box;
  border: 3px solid #3498db;
  border-radius: 6px;
  content: "";
  line-height: 1px;
  display: block;
  position: absolute;
  margin-left: -11px;
  margin-top: -4px;
  pointer-events: none;
}
.gantt_grid_dnd_marker_folder {
  height: 100%;
  width: 100%;
  position: absolute;
  pointer-events: none;
  box-sizing: border-box;
  box-shadow: 0 0 0px 2px #3f98db inset;
  background: transparent;
}
.gantt_overlay_area {
  position: absolute;
  height: inherit;
  width: inherit;
  top: 0;
  left: 0;
  display: none;
}
.gantt_overlay {
  position: absolute;
  left: 0;
  top: 0;
  height: inherit;
  width: inherit;
}
.gantt_click_drag_rect {
  position: absolute;
  left: 0;
  top: 0;
  outline: 1px solid #3f98db;
  background-color: rgba(52, 152, 219, 0.3);
}
.gantt_timeline_move_available,
.gantt_timeline_move_available * {
  cursor: move;
}
.gantt_rtl .gantt_grid {
  text-align: right;
}
.gantt_rtl .gantt_row,
.gantt_rtl .gantt_cell {
  flex-direction: row-reverse;
}
.gantt_layout_content {
  width: 100%;
  overflow: auto;
  box-sizing: border-box;
}
.gantt_layout_cell {
  position: relative;
  box-sizing: border-box;
}
.gantt_layout_cell > .gantt_layout_header {
  background: #33aae8;
  color: white;
  font-size: 17px;
  padding: 5px 10px;
  box-sizing: border-box;
}
.gantt_layout_header.collapsed_x {
  background: #a9a9a9;
}
.gantt_layout_header.collapsed_x .gantt_header_arrow:before {
  content: "\21E7";
}
.gantt_layout_header.collapsed_y {
  background: #a9a9a9;
}
.gantt_layout_header.collapsed_y .gantt_header_arrow:before {
  content: "\21E9";
}
.gantt_layout_header {
  cursor: pointer;
}
.gantt_layout_header .gantt_header_arrow {
  float: right;
  text-align: right;
}
.gantt_layout_header .gantt_header_arrow:before {
  content: "\21E6";
}
.gantt_layout_header.vertical .gantt_header_arrow:before {
  content: "\21E7";
}
.gantt_layout_outer_scroll_vertical .gantt_layout_content {
  overflow-y: hidden;
}
.gantt_layout_outer_scroll_horizontal .gantt_layout_content {
  overflow-x: hidden;
}
.gantt_layout_x > .gantt_layout_cell {
  display: inline-block;
  vertical-align: top;
}
.gantt_layout_x {
  white-space: nowrap;
}
.gantt_resizing {
  opacity: 0.7;
  background: #f2f2f2;
}
.gantt_layout_cell_border_right.gantt_resizer {
  overflow: visible;
  border-right: 0;
}
.gantt_resizer {
  cursor: e-resize;
  position: relative;
}
.gantt_resizer_y {
  cursor: n-resize;
}
.gantt_resizer_stick {
  background: #33aae8;
  z-index: 9999;
  position: absolute;
  top: 0;
  width: 100%;
}
.gantt_resizer_x .gantt_resizer_x {
  position: absolute;
  width: 20px;
  height: 100%;
  margin-left: -10px;
  top: 0;
  left: 0;
  z-index: 1;
}
.gantt_resizer_y .gantt_resizer_y {
  position: absolute;
  height: 20px;
  width: 100%;
  top: -10px;
  left: 0;
  z-index: 1;
}
.gantt_resizer_error {
  background: indianred!important;
}
.gantt_noselect {
  -webkit-user-select: none;
  user-select: none;
}
.gantt_layout_cell_border_left {
  border-left: 1px solid #000;
}
.gantt_layout_cell_border_right {
  border-right: 1px solid #000;
}
.gantt_layout_cell_border_top {
  border-top: 1px solid #000;
}
.gantt_layout_cell_border_bottom {
  border-bottom: 1px solid #000;
}
.gantt_layout_cell_border_transparent {
  border-color: transparent;
}
.gantt_window {
  position: absolute;
  top: 50%;
  left: 50%;
  z-index: 999999999;
  background: white;
}
.gantt_window_content {
  position: relative;
}
.gantt_window_content_header {
  background: #39c;
  color: #ffffff;
  height: 33px;
  padding: 10px 10px 0 10px;
  border-bottom: solid 2px #ffffff;
  position: relative;
}
.gantt_window_content_header_text {
  padding-left: 10%;
}
.gantt_window_content_header_buttons {
  position: absolute;
  top: 10px;
  right: 10px;
}
.gantt_window_content_header_buttons:hover {
  color: #000000;
  cursor: pointer;
}
.gantt_window_content_resizer {
  position: absolute;
  width: 15px;
  height: 15px;
  bottom: 0;
  line-height: 15px;
  right: -1px;
  text-align: center;
  background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA8AAAAPCAMAAAAMCGV4AAAABlBMVEUAAAAAAAClZ7nPAAAAAXRSTlMAQObYZgAAABZJREFUeAFjIAUwUshlpJDLSIhLGAAACQ4AFk79JaMAAAAASUVORK5CYII=);
  cursor: nw-resize;
  z-index: 999;
}
.gantt_window_content_frame {
  position: absolute;
  top: 0;
  left: 0;
  width: 100%;
  height: 100%;
  background: rgba(0, 0, 0, 0.1);
  z-index: 9999;
}
.gantt_window_drag {
  cursor: pointer!important;
}
.gantt_window_resizing {
  overflow: visible;
}
.gantt_window_resizing_body {
  overflow: hidden!important;
}
.gantt_window_modal {
  background: rgba(0, 0, 0, 0.1);
  z-index: 9999;
  top: 0;
  left: 0;
  width: 100%;
  height: 100%;
  position: fixed;
}
.gantt_container,
.gantt_cal_light,
.gantt_message_area,
.gantt_modal_box,
.gantt_cal_quick_info,
.gantt_tooltip {
  text-rendering: optimizeLegibility;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
}
.gantt_noselect {
  -moz-user-select: -moz-none;
  -webkit-user-select: none;
  -ms-user-select: none;
  user-select: none;
}
.gantt_noselect .gantt_grid_data .gantt_row:hover,
.gantt_noselect .gantt_grid_data .gantt_row.odd:hover {
  background-color: unset;
}
.gantt_drag_marker {
  position: absolute;
  top: -1000px;
  left: -1000px;
  font-family: "arial";
  font-size: 14px;
  z-index: 1;
  white-space: nowrap;
}
.gantt_drag_marker .gantt_tree_indent,
.gantt_drag_marker .gantt_tree_icon.gantt_blank,
.gantt_drag_marker .gantt_tree_icon.gantt_open,
.gantt_drag_marker .gantt_tree_icon.gantt_close {
  display: none;
}
.gantt_empty_state_wrapper {
  position: relative;
}
.gantt_empty_state {
  height: 100%;
  max-width: 500px;
  box-sizing: border-box;
  white-space: pre-line;
  overflow-wrap: break-word;
  display: flex;
  flex-direction: column;
  justify-content: flex-start;
  margin: 0 auto;
}
.gantt_empty_state_image {
  background-image: url('data:image/png;base64,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');
  background-repeat: no-repeat;
  width: 100%;
  max-width: 500px;
  max-height: 500px;
  margin-left: auto;
  margin-right: auto;
  display: block;
  min-height: 0;
  height: 200px;
  background-size: contain;
  background-position-x: center;
  background-position-y: bottom;
  margin-top: 40px;
}
.gantt_empty_state_text {
  text-align: center;
}
.gantt_empty_state_text_link {
  color: #03A9F4;
  background-position: top right;
  background: none;
  opacity: 1;
  height: unset;
  cursor: pointer;
}
.gantt_drag_marker,
.gantt_drag_marker .gantt_row.odd {
  background-color: #fff;
}
.gantt_drag_marker .gantt_row {
  border-left: 1px solid #000000;
  border-top: 1px solid #000000;
}
.gantt_drag_marker .gantt_cell {
  border-color: #000000;
}
.gantt_row.gantt_over,
.gantt_task_row.gantt_over {
  background-color: #0070fe;
}
.gantt_row.gantt_transparent .gantt_cell {
  opacity: 0.7;
}
.gantt_task_row.gantt_transparent {
  background-color: #ffffff;
}
.gantt_popup_button.gantt_delete_button {
  font-weight: bold;
  border-style: solid;
  border-width: 2px;
  border-color: #000;
  background: #006600;
  color: #000;
  border-color: transparent;
  color: #fff;
}
.gantt_container_resize_watcher {
  background: transparent;
  width: 100%;
  height: 100%;
  position: absolute;
  top: 0px;
  left: 0px;
  z-index: -1;
  pointer-events: none;
  border: 0;
  box-sizing: border-box;
  opacity: 0;
}
src/components/dhtmlxGantt/codebase/sources/skins/dhtmlxgantt_material.css
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,2454 @@
/*
@license
dhtmlxGantt v.8.0.6 Standard
This version of dhtmlxGantt is distributed under GPL 2.0 license and can be legally used in GPL projects.
To use dhtmlxGantt in non-GPL projects (and get Pro version of the product), please obtain Individual, Commercial, Enterprise or Ultimate license on our site https://dhtmlx.com/docs/products/dhtmlxGantt/#licensing or contact us at info@dhtmlx.com
(c) XB Software
*/
.buttonBg {
  background: #FFFFFF;
}
.gantt_task_line.gantt_critical_task {
  background-color: #FF5252;
  border: 1px solid #FF5252;
}
.gantt_task_line.gantt_critical_task .gantt_task_progress {
  background-color: rgba(0, 0, 0, 0.15);
}
.gantt_task_line.gantt_critical_task.gantt_milestone,
.gantt_task_line.gantt_critical_task.gantt_project {
  border-color: #FF5252;
}
.gantt_links_area .gantt_task_link:hover .gantt_line_wrapper div {
  box-shadow: 0 1px 3px 0 rgba(0, 0, 0, 0.2);
}
.gantt_links_area .gantt_task_link:hover .gantt_link_arrow_right:before,
.gantt_links_area .gantt_task_link:hover .gantt_link_arrow_left:before {
  content: "";
  position: absolute;
  width: 0px;
  height: 0px;
  border: 3px solid;
  transform-origin: center;
  box-shadow: 0px 2px 3px 0px rgba(0, 0, 0, 0.2);
}
.gantt_links_area .gantt_task_link:hover .gantt_link_arrow_right:before {
  border-color: transparent transparent #87A4BC #87A4BC;
  transform: skewY(-40deg);
  top: -3px;
  left: -7px;
}
.gantt_links_area .gantt_task_link:hover .gantt_link_arrow_left:before {
  border-color: transparent #87A4BC #87A4BC transparent;
  transform: skewY(40deg);
  top: -3px;
  left: 1px;
}
.gantt_task_link.gantt_critical_link:hover .gantt_line_wrapper div {
  box-shadow: 0 2px 4px 0px rgba(255, 82, 82, 0.2);
}
.gantt_task_link.gantt_critical_link:hover .gantt_link_arrow_left:before,
.gantt_task_link.gantt_critical_link:hover .gantt_link_arrow_right:before {
  border-color: transparent;
  box-shadow: 0px 2px 3px 0px rgba(255, 82, 82, 0.4), 0 1px 1px 0 rgba(255, 82, 82, 0.25);
}
.gridHoverStyle {
  background-color: rgba(0, 199, 181, 0.2);
}
.gridSelection {
  background-color: rgba(0, 199, 181, 0.2);
}
.timelineSelection {
  background-color: rgba(0, 199, 181, 0.2);
}
.gantt_layout_cell.grid_cell {
  border-right: none;
}
.gantt_grid .gantt_row {
  border-right: 1px solid #D7D7D7;
}
.gantt_grid .gantt_grid_scale {
  border-right: 1px solid #D7D7D7;
}
.gantt_grid .gantt_grid_scale .gantt_grid_head_cell.gantt_grid_head_text {
  text-align: left;
  padding-left: 15px;
}
.gantt_grid .gantt_grid_scale .gantt_grid_head_cell {
  color: rgba(0, 0, 0, 0.54);
  border: none;
  text-transform: uppercase;
  font-weight: 500;
}
.gantt_grid .gantt_grid_scale .gantt_grid_column_resize_wrap {
  opacity: 0;
}
.gantt_grid .gantt_grid_scale:hover .gantt_grid_column_resize_wrap {
  opacity: 1;
}
/* Shadow under header */
div.gantt_grid_scale::after,
div.gantt_scale_line:last-child::after {
  content: "";
  width: 100%;
  display: block;
  height: 1px;
  background-color: transparent;
  position: absolute;
  box-shadow: 0 1px 2px 0 rgba(0, 0, 0, 0.2), 0 2px 3px 0 rgba(0, 0, 0, 0.1);
  z-index: 1;
}
div.gantt_scale_line:last-child::after {
  bottom: -1px;
}
.gantt_grid_data .gantt_cell {
  border-right: none;
  border-left: none;
  color: rgba(0, 0, 0, 0.8);
  font-weight: 400;
}
.gantt_grid_data .gantt_row:last-child {
  border-bottom: 1px solid #D7D7D7;
}
.gantt_data_area .gantt_task_row:last-child {
  border-bottom: 1px solid #D7D7D7;
}
/*
    Animation
*/
.gantt_task_line:hover .gantt_link_control div,
.gantt_task_line:hover .gantt_task_progress_drag,
.gantt_task_line:hover .gantt_task_drag {
  animation: gantt_fade_in 0.15s;
}
.gantt_task_line.gantt_drag_progress .gantt_link_control div,
.gantt_task_line.gantt_drag_move .gantt_link_control div,
.gantt_task_line.gantt_drag_resize .gantt_link_control div,
.gantt_task_line.gantt_drag_animation .gantt_link_control div,
.gantt_task_line.gantt_drag_progress .gantt_task_progress_drag,
.gantt_task_line.gantt_drag_move .gantt_task_progress_drag,
.gantt_task_line.gantt_drag_resize .gantt_task_progress_drag,
.gantt_task_line.gantt_drag_animation .gantt_task_progress_drag,
.gantt_task_line.gantt_drag_progress .gantt_task_drag,
.gantt_task_line.gantt_drag_move .gantt_task_drag,
.gantt_task_line.gantt_drag_resize .gantt_task_drag,
.gantt_task_line.gantt_drag_animation .gantt_task_drag {
  animation: gantt_fade_in 0;
}
.gantt_task_line.gantt_selected .gantt_link_control div,
.gantt_task_line.gantt_selected:hover .gantt_link_control div,
.gantt_task_line.gantt_selected .gantt_task_progress_drag,
.gantt_task_line.gantt_selected:hover .gantt_task_progress_drag,
.gantt_task_line.gantt_selected .gantt_task_drag,
.gantt_task_line.gantt_selected:hover .gantt_task_drag {
  animation: none;
}
.gantt_grid_data .gantt_row,
.gantt_grid_data .gantt_row.odd {
  transition: background 0.15s;
}
.gantt_grid_column_resize_wrap {
  transition: opacity 0.15s;
}
.gantt_link_line_down,
.gantt_link_line_up,
.gantt_link_line_right,
.gantt_link_line_left {
  transition: box-shadow 0.15s;
}
@keyframes gantt_fade_in {
  0% {
    opacity: 0;
  }
  100% {
    opacity: 1;
  }
}
/*
    Tasks
*/
.gantt_task_link .gantt_link_arrow_right {
  border-width: 6px 7px 6px 7px;
  margin-left: -2px;
  margin-top: -3px;
}
.gantt_task_link .gantt_link_arrow_left {
  border-width: 6px 7px 6px 7px;
  margin-left: -6px;
  margin-top: -3px;
}
.gantt_task_link .gantt_link_arrow_up {
  border-width: 6px 6px 6px 6px;
}
.gantt_task_link .gantt_link_arrow_down {
  border-width: 6px 6px 6px 6px;
}
.gantt_task_line.gantt_milestone {
  margin-top: -1px;
}
.gantt_task_line.gantt_milestone .gantt_link_control.task_left {
  left: -21px;
}
.gantt_task_line.gantt_milestone .gantt_link_control.task_right {
  right: -19px;
}
.gantt_task_line.gantt_milestone .gantt_side_content {
  color: rgba(0, 0, 0, 0.8);
}
.gantt_task_line.gantt_milestone .gantt_side_content.gantt_right {
  margin-left: 3px;
}
.gantt_task_line.gantt_milestone .gantt_side_content.gantt_left {
  margin-right: 3px;
}
.gantt_task_line.gantt_milestone .gantt_task_content {
  padding: 0;
}
.gantt_task_line {
  font-weight: 500;
}
.gantt_task_line .gantt_task_drag {
  background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAQAAAAECAYAAACp8Z5+AAAAHElEQVQYV2NkQAOMIP6vX7/+g2g2NjZG7ALIugAfzQgFD7inoAAAAABJRU5ErkJggg==);
  opacity: 0.95;
}
.gantt_task_line .gantt_task_drag.task_left {
  left: 9px;
}
.gantt_task_line .gantt_task_drag.task_right {
  right: 9px;
}
.gantt_task_line .gantt_link_point {
  border: 2px solid;
  border-color: inherit;
  height: 15px;
  background-color: #FAFAFA;
  width: 15px;
  border-radius: 100%;
  box-shadow: 0 3px 5px 0 rgba(0, 0, 0, 0.1), 0 1px 2px 0 rgba(0, 0, 0, 0.1);
}
.gantt_task_line .gantt_link_control {
  top: -1px;
  border-color: inherit;
}
.gantt_task_line .gantt_link_control.task_left {
  left: -17px;
}
.gantt_task_line .gantt_link_control.task_right {
  right: -15px;
}
.gantt_task_line.gantt_thin_task .gantt_task_drag.task_end_date {
  left: 3px;
}
.gantt_task_line.gantt_thin_task .gantt_task_drag.task_start_date {
  left: -13px;
}
.chartHeaderBg {
  background-color: #fff;
}
.gantt_task .gantt_task_scale .gantt_scale_cell {
  color: rgba(0, 0, 0, 0.54);
  text-transform: uppercase;
  font-weight: 500;
}
/*
    project highlight
*/
.gantt_row.gantt_project {
  background-color: #edfffb;
}
.gantt_task_row.gantt_project {
  background-color: #f5fffc;
}
.gantt_task_line.gantt_project {
  background-color: #1DE9B6;
  border-color: #16e1ae;
}
.gantt_task_line.gantt_project .gantt_task_content {
  color: rgba(0, 0, 0, 0.6);
  font-weight: 500;
}
.gantt_task_content {
  text-overflow: ellipsis;
  -moz-box-sizing: border-box;
  -webkit-box-sizing: border-box;
  box-sizing: border-box;
  padding: 0 17px;
}
/*
    lightbox
*/
div.gantt_cal_light {
  border: 0px;
  box-shadow: 0 2px 3px 0 rgba(0, 0, 0, 0.2), 0 0 3px 1px rgba(0, 0, 0, 0.1);
  width: 560px;
  padding: 25px;
}
div.gantt_cal_light .gantt_cal_ltitle {
  text-overflow: ellipsis;
  font-size: 16px;
  margin: -15px 0px 0px 0px;
  padding: 16px 5px 9px 7px;
  color: rgba(0, 0, 0, 0.8);
}
div.gantt_cal_light .gantt_cal_ltitle .gantt_mark {
  display: none;
}
div.gantt_cal_light .gantt_cal_ltitle .gantt_time {
  font-weight: 500;
}
div.gantt_cal_light .gantt_cal_ltitle .gantt_title {
  font-weight: 400;
}
div.gantt_cal_light .gantt_cal_ltext {
  padding: 7px;
}
div.gantt_cal_light .gantt_cal_ltext textarea {
  padding: 6px 8px;
}
div.gantt_cal_light .gantt_cal_ltext textarea:focus {
  outline-color: rgba(68, 138, 255, 0.9);
  box-shadow: none;
}
div.gantt_cal_light .gantt_cal_ltext:focus {
  outline-color: rgba(68, 138, 255, 0.9);
  box-shadow: none;
}
div.gantt_cal_light .gantt_cal_lsection {
  padding: 12px 0 5px 7px;
  color: rgba(0, 0, 0, 0.8);
  font-size: 14px;
  font-weight: 500;
}
div.gantt_cal_light .gantt_cal_larea {
  border: 0px;
  padding: 2px 0px 0px 0px;
  color: rgba(0, 0, 0, 0.8);
}
div.gantt_cal_light .gantt_section_time {
  padding: 10px 7px;
}
div.gantt_cal_light .gantt_section_time *:focus {
  outline-color: rgba(68, 138, 255, 0.9);
  box-shadow: none;
}
div.gantt_cal_light .gantt_btn_set {
  margin: 10px 7px 10px 7px;
  text-transform: uppercase;
  height: 32px;
  padding: 7px 15px;
}
div.gantt_cal_light select,
div.gantt_cal_light .gantt_section_time select {
  height: 30px;
}
div.gantt_cal_light select:focus {
  outline-color: rgba(68, 138, 255, 0.9);
  box-shadow: none;
}
div.gantt_cal_light_wide {
  width: 650px;
}
.gantt_popup_button {
  float: right;
  text-transform: uppercase;
  font-weight: 500;
}
.gantt_cal_quick_info .gantt_qi_big_icon {
  font-weight: 500;
  height: 32px;
  text-transform: uppercase;
}
.gantt_cal_quick_info .gantt_qi_big_icon div {
  padding-top: 1px;
}
.gantt_cal_light .gantt_btn_set.gantt_cancel_btn_set {
  background: #FFFFFF;
  color: #116aff;
}
.gantt_cal_light .gantt_btn_set.gantt_cancel_btn_set .gantt_cancel_btn {
  display: none;
}
.gantt_popup_button.gantt_cancel_button {
  color: #116aff;
}
.gantt_popup_button.gantt_cancel_button:hover,
.gantt_cal_light .gantt_btn_set.gantt_cancel_btn_set:hover {
  background: rgba(17, 106, 255, 0.25);
  color: #005cf7;
}
.gantt_popup_button.gantt_cancel_button:focus,
.gantt_cal_light .gantt_btn_set.gantt_cancel_btn_set:focus {
  background: rgba(17, 106, 255, 0.35);
  color: #0053dd;
  outline: none;
  box-shadow: none;
}
.gantt_cal_light .gantt_btn_set.gantt_delete_btn_set {
  background: #FFFFFF;
  color: #FF584C;
}
.gantt_cal_light .gantt_btn_set.gantt_delete_btn_set .gantt_delete_btn {
  display: none;
}
.gantt_qi_big_icon.icon_delete {
  background: #FFFFFF;
  color: #FF584C;
}
.gantt_qi_big_icon.icon_delete .gantt_menu_icon {
  display: none;
}
.gantt_cal_light .gantt_btn_set.gantt_delete_btn_set:hover,
.gantt_qi_big_icon.icon_delete:hover {
  background: rgba(255, 88, 76, 0.25);
}
.gantt_cal_light .gantt_btn_set.gantt_delete_btn_set:focus,
.gantt_qi_big_icon.icon_delete:focus {
  background: rgba(255, 88, 76, 0.35);
  color: #ff4032;
  outline: none;
  box-shadow: none;
}
.gantt_qi_big_icon.icon_edit .gantt_menu_icon {
  display: none;
}
.gantt_cal_light .gantt_btn_set.gantt_save_btn_set .gantt_save_btn {
  display: none;
}
.gantt_cal_light .gantt_btn_set.gantt_save_btn_set,
.gantt_qi_big_icon.icon_edit,
.gantt_popup_button.gantt_ok_button {
  background-color: #448AFF;
  color: #FFFFFF;
}
.gantt_qi_big_icon.icon_edit:hover,
.gantt_popup_button.gantt_ok_button:hover,
.gantt_cal_light .gantt_btn_set.gantt_save_btn_set:hover {
  background-color: #005cf6;
}
.gantt_popup_button.gantt_ok_button:focus,
.gantt_qi_big_icon.icon_edit:focus,
.gantt_cal_light .gantt_btn_set.gantt_save_btn_set:focus {
  background-color: #005cf6;
  outline: none;
  box-shadow: none;
}
.gantt_duration {
  color: rgba(0, 0, 0, 0.54);
  font-weight: 500;
}
.gantt_duration .gantt_duration_dec {
  color: transparent;
}
.gantt_duration .gantt_duration_inc {
  color: transparent;
  margin-right: 2px;
}
div.gantt_duration .gantt_duration_dec {
  background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAM0lEQVQ4T2NkoBAwUqifYdQABiqFgcaMDf/JiY0bGQGM4Fig2ABybIfpGU0H1EoHlMQCAIgYCBGYGr9NAAAAAElFTkSuQmCC);
  background-repeat: no-repeat;
  background-position: center;
}
div.gantt_duration .gantt_duration_inc {
  background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAO0lEQVQ4T2NkoBAw4tOvMWPDf5D8jYwAnOpGDWBgoE4YwEKb1BgFxQ7YBRQbgMvm0XSACNyBywvEpAsA12c4ER3FU64AAAAASUVORK5CYII=);
  background-repeat: no-repeat;
  background-position: center;
}
/*
    milestone
*/
.gantt_task_line.gantt_milestone {
  border-radius: 2px;
}
/*
    Message
*/
.gantt-info,
.gantt-info {
  border-radius: 2px;
  border-width: 0px;
  width: 237px;
}
.gantt-info div,
.gantt-info div {
  border: 0px;
  padding: 11px;
}
/*
    Quick info
*/
.gantt_cal_quick_info {
  padding: 15px 25px;
  min-width: 210px;
  max-width: 400px;
  font-size: 16px;
}
.gantt_cal_quick_info .gantt_cal_qi_title {
  padding: 5px 0px 10px 0px;
  border-bottom: 0px;
}
.gantt_cal_quick_info .gantt_cal_qi_title .gantt_cal_qi_tcontent {
  display: none;
}
.gantt_cal_quick_info .gantt_cal_qi_title .gantt_cal_qi_tdate {
  font-size: 16px;
  font-weight: 500;
}
.gantt_cal_quick_info .gantt_cal_qi_content {
  padding: 8px 0px;
  font-size: 14px;
  text-overflow: ellipsis;
}
.gantt_cal_quick_info .gantt_cal_qi_controls {
  padding: 5px 0px 0px 0px;
  float: right;
}
/*links dnd*/
.gantt_tooltip {
  box-shadow: 0 2px 3px 0 rgba(0, 0, 0, 0.2), 0 0 3px 1px rgba(0, 0, 0, 0.1);
  background-color: #FFFFFF;
  border: 0px;
  font-family: "Roboto", arial, sans-serif;
  font-size: 14px;
  color: rgba(0, 0, 0, 0.8);
  line-height: 1.5em;
  max-width: 400px;
  text-overflow: ellipsis;
  overflow: hidden;
}
.gantt_modal_box {
  max-width: 400px;
  padding: 15px 25px;
  text-overflow: ellipsis;
  box-shadow: 0 2px 3px 0 rgba(0, 0, 0, 0.2), 0 0 3px 1px rgba(0, 0, 0, 0.1);
  color: rgba(0, 0, 0, 0.8);
}
.gantt_modal_box .gantt_popup_text {
  font-size: 14px;
  line-height: 1.5;
  text-align: left;
  padding: 1px 0px;
  margin: 0px;
}
.gantt_modal_box .gantt_popup_title {
  background-color: #fff;
  margin: 0px;
  padding: 4px 0px 14px 0px;
  text-align: left;
  font-weight: 500;
}
.gantt_tree_icon.gantt_folder_open {
  display: none;
}
.gantt_tree_icon.gantt_folder_closed {
  display: none;
}
.gantt_tree_icon.gantt_file {
  display: none;
}
.gantt_popup_shadow {
  box-shadow: 0 2px 3px 0 rgba(0, 0, 0, 0.2), 0 0 3px 1px rgba(0, 0, 0, 0.1);
}
.gantt_task_line .gantt_side_content {
  font-size: 14px;
  color: rgba(0, 0, 0, 0.54);
}
div.gantt_drag_marker {
  z-index: 4;
}
div.gantt_drag_marker .gantt_link_tooltip {
  font-size: 14px;
  font-family: Roboto;
  border-width: 0px;
  box-shadow: 0 2px 3px 0 rgba(0, 0, 0, 0.2), 0 0 3px 1px rgba(0, 0, 0, 0.1);
}
.switch_unsetted {
  display: none;
}
.matherial_checkbox_icon {
  background-size: cover;
  height: 1.3em;
  width: 1.3em;
  display: inline-block;
  vertical-align: -0.3em;
}
.matherial_checkbox_checked,
.switch_unsetted:checked + .matherial_checkbox_icon,
label.gantt_resource_row input[type=checkbox]:checked + div.gantt_resource_cell_checkbox .matherial_checkbox_icon {
  background-image: url(data:image/svg+xml;charset=utf-8,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22utf-8%22%3F%3E%3Csvg%20version%3D%221.1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20x%3D%220px%22%20y%3D%220px%22%20width%3D%2224px%22%20height%3D%2224px%22%20viewBox%3D%220%200%2024%2024%22%20enable-background%3D%22new%200%200%2024%2024%22%20xml%3Aspace%3D%22preserve%22%3E%3Cg%20id%3D%22Bounding_Boxes%22%3E%3Cpath%20fill%3D%22none%22%20d%3D%22M0%2C0h24v24H0V0z%22%2F%3E%3C%2Fg%3E%3Cg%20id%3D%22Outline_1_%22%3E%3Cg%3E%3Cpath%20d%3D%22M19%2C3H5C3.9%2C3%2C3%2C3.9%2C3%2C5v14c0%2C1.1%2C0.9%2C2%2C2%2C2h14c1.1%2C0%2C2-0.9%2C2-2V5C21%2C3.9%2C20.1%2C3%2C19%2C3z%20M19%2C19H5V5h14V19z%22%20fill-opacity%3D%220.8%22%2F%3E%3Cpolygon%20points%3D%2217.99%2C9%2016.58%2C7.58%209.99%2C14.17%207.41%2C11.6%205.99%2C13.01%209.99%2C17%22%20fill-opacity%3D%220.8%22%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fsvg%3E%0A);
}
.matherial_checkbox_unchecked,
.switch_unsetted + .matherial_checkbox_icon,
label.gantt_resource_row input[type=checkbox] + div.gantt_resource_cell_checkbox .matherial_checkbox_icon {
  background-image: url(data:image/svg+xml;charset=utf-8,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22utf-8%22%3F%3E%3Csvg%20version%3D%221.1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20x%3D%220px%22%20y%3D%220px%22%20width%3D%2224px%22%20height%3D%2224px%22%20viewBox%3D%220%200%2024%2024%22%20enable-background%3D%22new%200%200%2024%2024%22%20xml%3Aspace%3D%22preserve%22%3E%3Cg%20id%3D%22Bounding_Boxes%22%3E%3Cpath%20fill%3D%22none%22%20d%3D%22M0%2C0h24v24H0V0z%22%2F%3E%3C%2Fg%3E%3Cg%20id%3D%22Outline_1_%22%3E%3Cpath%20d%3D%22M19%2C5v14H5V5H19%20M19%2C3H5C3.9%2C3%2C3%2C3.9%2C3%2C5v14c0%2C1.1%2C0.9%2C2%2C2%2C2h14c1.1%2C0%2C2-0.9%2C2-2V5C21%2C3.9%2C20.1%2C3%2C19%2C3z%22%20fill-opacity%3D%220.8%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E);
}
label.gantt_resource_row input[type=checkbox] {
  display: none;
}
label.gantt_resource_row select {
  height: calc(1.3em + 4px);
  border-width: 0.5px;
}
.gantt_container {
  background-color: #FFFFFF;
  font-family: "Roboto", arial, sans-serif;
  font-size: 14px;
  border: 1px solid #D7D7D7;
  position: relative;
  white-space: nowrap;
  overflow-x: hidden;
  overflow-y: hidden;
}
.gantt_touch_active {
  overscroll-behavior: none;
}
.gantt_task_scroll {
  overflow-x: scroll;
}
.gantt_task,
.gantt_grid {
  position: relative;
  overflow-x: hidden;
  overflow-y: hidden;
  display: inline-block;
  vertical-align: top;
}
.gantt_grid_scale,
.gantt_task_scale {
  color: rgba(31, 31, 31, 0.8);
  font-size: 14px;
  border-bottom: 1px solid #D7D7D7;
  -moz-box-sizing: border-box;
  box-sizing: border-box;
}
.gantt_grid_scale {
  background-color: #fff;
}
.gantt_task_scale {
  background-color: #fff;
}
.gantt_task_vscroll {
  background-color: #fff;
}
.gantt_scale_line {
  box-sizing: border-box;
  -moz-box-sizing: border-box;
  border-top: 1px solid #D7D7D7;
}
.gantt_scale_line:first-child {
  border-top: none;
}
.gantt_grid_head_cell {
  display: inline-block;
  vertical-align: top;
  border-right: 1px solid #D7D7D7;
  text-align: center;
  position: relative;
  cursor: default;
  height: 100%;
  box-sizing: border-box;
  -moz-box-sizing: border-box;
  line-height: 35px;
  -moz-user-select: -moz-none;
  -webkit-user-select: none;
  user-select: none;
  overflow: hidden;
}
.gantt_scale_line {
  clear: both;
}
.gantt_grid_data {
  width: 100%;
  overflow: hidden;
  position: relative;
}
.gantt_row {
  position: relative;
  -webkit-user-select: none;
  -moz-user-select: none;
  -moz-user-select: -moz-none;
}
.gantt_add,
.gantt_grid_head_add {
  width: 100%;
  height: 100%;
  background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAO0lEQVQ4T2NkoBAw4tMvuGHWf5D8+4A0nOpGDWBgoE4YwEKb1BgFxQ7YBRQbgMvm0XSACNyBywvEpAsAxlc4EbYmh6oAAAAASUVORK5CYII=);
  background-position: center center;
  background-repeat: no-repeat;
  cursor: pointer;
  position: relative;
  -moz-opacity: 0.6;
  opacity: 0.6;
}
.gantt_grid_head_cell.gantt_grid_head_add {
  -moz-opacity: 0.6;
  opacity: 0.6;
  top: 0;
}
.gantt_grid_head_cell.gantt_grid_head_add:hover {
  -moz-opacity: 1;
  opacity: 1;
}
.gantt_grid_data .gantt_row:hover,
.gantt_grid_data .gantt_row.odd:hover {
  background-color: rgba(0, 199, 181, 0.2);
}
.gantt_grid_data .gantt_row:hover .gantt_add,
.gantt_grid_data .gantt_row.odd:hover .gantt_add {
  -moz-opacity: 1;
  opacity: 1;
}
.gantt_task_row,
.gantt_row {
  border-bottom: 0px;
}
.gantt_row,
.gantt_task_row {
  background-color: #FFFFFF;
}
.gantt_row.odd,
.gantt_task_row.odd {
  background-color: #FFFFFF;
}
.gantt_row,
.gantt_cell,
.gantt_task_row,
.gantt_task_cell,
.gantt_grid_head_cell,
.gantt_scale_cell {
  box-sizing: border-box;
  -moz-box-sizing: border-box;
}
.gantt_grid_head_cell,
.gantt_scale_cell {
  line-height: inherit;
}
.gantt_grid_scale .gantt_grid_column_resize_wrap {
  cursor: col-resize;
  position: absolute;
  width: 13px;
  margin-left: -7px;
}
.gantt_grid_column_resize_wrap .gantt_grid_column_resize {
  background-color: #D7D7D7;
  height: 100%;
  width: 1px;
  margin: 0 auto;
}
.gantt_task_grid_row_resize_wrap {
  cursor: row-resize;
  position: absolute;
  height: 13px;
  margin-top: -7px;
  left: 0px;
  width: 100%;
}
.gantt_task_grid_row_resize_wrap .gantt_task_grid_row_resize {
  background-color: #D7D7D7;
  top: 6px;
  height: 1px;
  width: 100%;
  margin: 0 auto;
  position: relative;
}
.gantt_drag_marker {
  pointer-events: none;
}
.gantt_drag_marker.gantt_grid_resize_area,
.gantt_drag_marker.gantt_row_grid_resize_area {
  background-color: rgba(231, 231, 231, 0.5);
  height: 100%;
  width: 100%;
  -moz-box-sizing: border-box;
  -webkit-box-sizing: border-box;
  box-sizing: border-box;
}
.gantt_drag_marker.gantt_grid_resize_area {
  border-left: 1px solid #D7D7D7;
  border-right: 1px solid #D7D7D7;
}
.gantt_drag_marker.gantt_row_grid_resize_area {
  border-top: 1px solid #D7D7D7;
  border-bottom: 1px solid #D7D7D7;
  pointer-events: none;
}
.gantt_row {
  display: flex;
}
.gantt_row > div {
  flex-shrink: 0;
  flex-grow: 0;
}
.gantt_cell {
  vertical-align: top;
  border-right: 1px solid #D7D7D7;
  padding-left: 6px;
  padding-right: 6px;
  height: 100%;
  overflow: hidden;
  white-space: nowrap;
  font-size: 14px;
  font-weight: 500;
}
.gantt_cell_tree {
  display: flex;
  flex-wrap: nowrap;
}
.gantt_grid_scale .gantt_last_cell,
.gantt_grid_data .gantt_last_cell,
.gantt_task .gantt_task_scale .gantt_scale_cell.gantt_last_cell,
.gantt_task_bg .gantt_last_cell {
  border-right-width: 0px;
}
.gantt_task .gantt_task_scale .gantt_scale_cell.gantt_last_cell {
  border-right-width: 1px;
}
.gantt_task_bg {
  overflow: hidden;
}
.gantt_scale_cell {
  display: inline-block;
  white-space: nowrap;
  overflow: hidden;
  border-right: 1px solid #D7D7D7;
  text-align: center;
  height: 100%;
}
.gantt_task_cell {
  display: inline-block;
  height: 100%;
  border-right: 1px solid #D7D7D7;
}
.gantt_layout_cell.gantt_ver_scroll {
  width: 0px;
  background-color: transparent;
  height: 1px;
  overflow-x: hidden;
  overflow-y: scroll;
  position: absolute;
  right: 0px;
  z-index: 1;
}
.gantt_ver_scroll > div {
  width: 1px;
  height: 1px;
}
.gantt_hor_scroll {
  height: 0px;
  background-color: transparent;
  width: 100%;
  clear: both;
  overflow-x: scroll;
  overflow-y: hidden;
}
.gantt_layout_cell .gantt_hor_scroll {
  position: absolute;
}
.gantt_hor_scroll > div {
  width: 5000px;
  height: 1px;
}
.gantt_tree_indent,
.gantt_tree_icon {
  flex-grow: 0;
  flex-shrink: 0;
}
.gantt_tree_indent {
  width: 15px;
  height: 100%;
}
.gantt_tree_content,
.gantt_tree_icon {
  vertical-align: top;
}
.gantt_tree_icon {
  width: 28px;
  height: 100%;
  background-repeat: no-repeat;
  background-position: center center;
}
.gantt_tree_content {
  height: 100%;
  white-space: nowrap;
  min-width: 0;
}
.gantt_tree_icon.gantt_open {
  background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAsAAAALCAYAAACprHcmAAAACXBIWXMAAAuUAAALlAF37bb0AAAAIGNIUk0AAHolAACAgwAA+f8AAIDoAABSCAABFVgAADqXAAAXb9daH5AAAAH/SURBVHgBAO8BEP4B////AAAAAAB1dXWV2NjYa+7u7gAJCQkA////AAAAAAAAAAAAvb29AAAAAAACAAAAAAAAAAAGBgZqKysrvREREQD7+/sACAgIAAgICAAICAgAAAAAAAAAAAACAAAAAAAAAAD6+vr1BAQEQisrK8YQEBAA9vb2AP39/QD9/f0AAAAAAAAAAAACAAAAAAAAAAABAQEA+fn5AAUFBTkqKirWCAgIBPLy8gD5+fkAAAAAAAAAAAACAAAAAAAAAAAAAAAAAQEBAPn5+QADAwMpMjIy3xkZGRsEBAQAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAEBAQD4+PgABQUFHCQkJKoVFRUwAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAP///wAICAgA+/v76N3d3Vvx8fHgAAAAAAAAAAAEAAAAAAAAAAAAAAAA////AAcHBwD9/f3b0dHRLfDw8PkGBgYAAAAAAAAAAAAEAAAAAAAAAAD///8ABwcHAPv7+8vY2Ng29/f3AA4ODgAAAAAAAAAAAAAAAAACAAAAAAAAAAAGBgYL+/v7w9LS0jbu7u4ACAgIAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAD4+Pia2traPvj4+AAMDAwA////AAAAAAAAAAAAAAAAAAAAAAABAAD//z9HdQMRW/QpAAAAAElFTkSuQmCC);
  width: 18px;
  cursor: pointer;
}
.gantt_tree_icon.gantt_close {
  background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAsAAAALCAYAAACprHcmAAAACXBIWXMAAAuUAAALlAF37bb0AAAAIGNIUk0AAHolAACAgwAA+f8AAIDoAABSCAABFVgAADqXAAAXb9daH5AAAAH/SURBVHgBAO8BEP4B////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABcnJymQgICGb6+vr1AQEBAAAAAAAAAAAAAAAAAAAAAAD///8ABgYGC/r6+pYDFxcXtBEREUMGBgYk/Pz8BgEBAQYAAAAGAAAABv///wYHBwcG/f39vtfX11cC8PDwANLS0j77+/vLBwcHAP///wAAAAAA////AAcHBwD7+/vH1NTUQ+7u7gACCAgIAPT09ADY2Ng2/f392wcHBwD+/v4ABwcHAP39/dfY2Ng68/PzAAkJCQAC////AAwMDADy8vIA0dHRLf///+gMDAwA////5NDQ0C7y8vIADAwMAP///wACAAAAAP///wAHBwcA8PDw+dnZ2Tn39/fG2NjYOPHx8fwHBwcAAAAAAAAAAAADJCQkAAAAAAAAAAAA////APv7+/D8/PzO7+/v2wICAgAEBAQAAgICAPz8/AAB////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAD//4RfjvnDJoM6AAAAAElFTkSuQmCC);
  width: 18px;
  cursor: pointer;
}
.gantt_tree_icon.gantt_blank {
  width: 18px;
}
.gantt_tree_icon.gantt_folder_open {
  background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAC0lEQVQYV2NgAAIAAAUAAarVyFEAAAAASUVORK5CYII=);
}
.gantt_tree_icon.gantt_folder_closed {
  background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAC0lEQVQYV2NgAAIAAAUAAarVyFEAAAAASUVORK5CYII=);
}
.gantt_tree_icon.gantt_file {
  background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAC0lEQVQYV2NgAAIAAAUAAarVyFEAAAAASUVORK5CYII=);
}
.gantt_grid_head_cell .gantt_sort {
  position: absolute;
  right: 5px;
  top: 8px;
  width: 7px;
  height: 13px;
  background-repeat: no-repeat;
  background-position: center center;
}
.gantt_grid_head_cell .gantt_sort.gantt_asc {
  background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAcAAAANCAYAAABlyXS1AAAARUlEQVR4nGNgQAKGxib/GbABkIS7b8B/DAUwCRiGK0CXwFBAb1DfP/U/LszwHwi2X7qFgUEArBtdAVwCBmAKMCSQFSDzAWXXaOHsXeqkAAAAAElFTkSuQmCC);
}
.gantt_grid_head_cell .gantt_sort.gantt_desc {
  background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAcAAAANCAYAAABlyXS1AAAARUlEQVR42mNgQAL1/VP/M2ADIIntF2/9x1AAlrh0C47hCmA60DFYwX88gIFGwNDY5D8uDFbg7hvwHx2jmIBTAlkB0e4BAEjlaNtBWJPnAAAAAElFTkSuQmCC);
}
.gantt_inserted,
.gantt_updated {
  font-weight: bold;
}
.gantt_deleted {
  text-decoration: line-through;
}
.gantt_invalid {
  background-color: #FFE0E0;
}
.gantt_error {
  color: red;
}
.gantt_status {
  right: 1px;
  padding: 5px 10px;
  background: rgba(155, 155, 155, 0.1);
  position: absolute;
  top: 1px;
  -webkit-transition: opacity 0.2s;
  transition: opacity 0.2s;
  opacity: 0;
}
.gantt_status.gantt_status_visible {
  opacity: 1;
}
#gantt_ajax_dots span {
  -webkit-transition: opacity 0.2s;
  transition: opacity 0.2s;
  background-repeat: no-repeat;
  opacity: 0;
}
#gantt_ajax_dots span.gantt_dot_visible {
  opacity: 1;
}
.gantt_column_drag_marker {
  border: 1px solid #CECECE;
  opacity: 0.8;
  pointer-events: none;
}
.gantt_grid_head_cell_dragged {
  border: 1px solid #CECECE;
  opacity: 0.3;
}
.gantt_grid_target_marker {
  position: absolute;
  top: 0;
  width: 2px;
  height: 100%;
  background-color: #87A4BC;
  transform: translateX(-1px);
}
.gantt_grid_target_marker::before,
.gantt_grid_target_marker::after {
  display: block;
  content: "";
  position: absolute;
  left: -5px;
  width: 0px;
  height: 0px;
  border: 6px solid rgba(0, 0, 0, 0);
}
.gantt_grid_target_marker::before {
  border-top-color: #87A4BC;
}
.gantt_grid_target_marker::after {
  bottom: 0;
  border-bottom-color: #87A4BC;
}
.gantt_message_area {
  position: fixed;
  right: 5px;
  width: 250px;
  z-index: 1000;
}
.gantt-info {
  min-width: 120px;
  padding: 4px 4px 4px 20px;
  font-family: "Roboto", arial, sans-serif;
  z-index: 10000;
  margin: 5px;
  margin-bottom: 10px;
  -webkit-transition: all .5s ease;
  -moz-transition: all .5s ease;
  -o-transition: all .5s ease;
  transition: all .5s ease;
}
.gantt-info.hidden {
  height: 0px;
  padding: 0px;
  border-width: 0px;
  margin: 0px;
  overflow: hidden;
}
.gantt_modal_box {
  overflow: hidden;
  display: inline-block;
  min-width: 210px;
  width: 210px;
  text-align: center;
  position: fixed;
  z-index: 20000;
  box-shadow: 0 2px 3px 0 rgba(0, 0, 0, 0.2), 0 0 3px 1px rgba(0, 0, 0, 0.1);
  font-family: "Roboto", arial, sans-serif;
  border-radius: 2px;
  border: 0px;
  background: #FFFFFF;
}
.gantt_popup_title {
  border-top-left-radius: 2px;
  border-top-right-radius: 2px;
  border-width: 0px;
}
.gantt_button,
.gantt_popup_button {
  border: 0px;
  height: 32px;
  line-height: 32px;
  display: inline-block;
  margin: 4px 0px 4px 14px;
  border-radius: 2px;
  background: #FFFFFF;
}
.gantt-info,
.gantt_popup_button,
.gantt_button {
  user-select: none;
  -webkit-user-select: none;
  -moz-user-select: -moz-none;
  cursor: pointer;
}
.gantt_popup_text {
  overflow: hidden;
}
.gantt_popup_controls {
  border-radius: 6px;
  padding: 4px 0px 0px 0px;
}
.gantt_popup_button {
  min-width: 80px;
}
div.dhx_modal_cover {
  background-color: #000;
  cursor: default;
  filter: progid:DXImageTransform.Microsoft.Alpha(opacity=20);
  opacity: 0.2;
  position: fixed;
  z-index: 19999;
  left: 0px;
  top: 0px;
  width: 100%;
  height: 100%;
  border: none;
  zoom: 1;
}
.gantt-info img,
.gantt_modal_box img {
  float: left;
  margin-right: 20px;
}
.gantt-alert-error,
.gantt-confirm-error {
  border: 1px solid #ff0000;
}
/*Skin section*/
.gantt_button input,
.gantt_popup_button div {
  border-radius: 2px;
  font-size: 14px;
  -moz-box-sizing: content-box;
  box-sizing: content-box;
  padding: 1px;
  margin: 0px;
  vertical-align: top;
}
.gantt_popup_title {
  border-bottom: 0px;
  height: auto;
  line-height: 16px;
  font-size: 16px;
}
.gantt_popup_text {
  margin: 15px 15px 5px 15px;
  font-size: 14px;
  color: rgba(0, 0, 0, 0.8);
  min-height: 30px;
  border-radius: 2px;
}
.gantt-info,
.gantt-error {
  font-size: 14px;
  color: #000;
  box-shadow: 0 10px 20px 0 rgba(0, 0, 0, 0.2), 0 1px 6px 0 rgba(0, 0, 0, 0.2);
  padding: 0px;
  background-color: #FFFFFF;
  border-radius: 3px;
  border: 1px solid #FFFFFF;
}
.gantt-info div {
  padding: 5px 10px 5px 10px;
  background-color: #FFFFFF;
  border-radius: 3px;
  border: 1px solid #D7D7D7;
}
.gantt-error {
  background-color: #FF5252;
  border: 1px solid #FF5252;
}
.gantt-error div {
  background-color: #FF5252;
  border: 1px solid #FF5252;
  color: #FFFFFF;
}
.gantt-warning {
  background-color: #FFAB00;
  border: 1px solid #FFAB00;
}
.gantt-warning div {
  background-color: #FFAB00;
  border: 1px solid #FFAB00;
  color: #FFFFFF;
}
.gantt_grid div,
.gantt_data_area div {
  -ms-touch-action: none;
  -webkit-tap-highlight-color: rgba(0, 0, 0, 0);
}
.gantt_data_area {
  position: relative;
  overflow-x: hidden;
  overflow-y: hidden;
  -moz-user-select: -moz-none;
  -webkit-user-select: none;
  user-select: none;
}
.gantt_links_area {
  position: absolute;
  left: 0px;
  top: 0px;
}
.gantt_task_content,
.gantt_task_progress,
.gantt_side_content {
  line-height: inherit;
  overflow: hidden;
  height: 100%;
}
.gantt_task_content {
  font-size: 14px;
  color: #fff;
  width: 100%;
  top: 0;
  cursor: pointer;
  position: absolute;
  white-space: nowrap;
  text-align: center;
}
.gantt_task_progress {
  text-align: center;
  z-index: 0;
  background: rgba(0, 0, 0, 0.15);
}
.gantt_task_progress_wrapper {
  border-radius: inherit;
  position: relative;
  width: 100%;
  height: 100%;
  overflow: hidden;
}
.gantt_task_line {
  -webkit-border-radius: 50px;
  -moz-border-radius: 50px;
  border-radius: 50px;
  position: absolute;
  -moz-box-sizing: border-box;
  box-sizing: border-box;
  background-color: #448AFF;
  border: 1px solid #448AFF;
  -webkit-user-select: none;
  -moz-user-select: none;
  -moz-user-select: -moz-none;
}
.gantt_task_line.gantt_drag_move div {
  cursor: move;
}
.gantt_touch_move,
.gantt_touch_progress .gantt_touch_resize {
  -moz-transform: scale(1.02, 1.1);
  -o-transform: scale(1.02, 1.1);
  -webkit-transform: scale(1.02, 1.1);
  transform: scale(1.02, 1.1);
  -moz-transform-origin: 50%;
  -o-transform-origin: 50%;
  -webkit-transform-origin: 50%;
  transform-origin: 50%;
}
.gantt_touch_progress .gantt_task_progress_drag,
.gantt_touch_resize .gantt_task_drag {
  -moz-transform: scaleY(1.3);
  -o-transform: scaleY(1.3);
  -webkit-transform: scaleY(1.3);
  transform: scaleY(1.3);
  -moz-transform-origin: 50%;
  -o-transform-origin: 50%;
  -webkit-transform-origin: 50%;
  transform-origin: 50%;
}
.gantt_side_content {
  position: absolute;
  white-space: nowrap;
  color: #6e6e6e;
  top: 0;
  font-size: 11px;
  font-size: 13px;
}
.gantt_side_content.gantt_left {
  right: 100%;
  padding-right: 20px;
}
.gantt_side_content.gantt_right {
  left: 100%;
  padding-left: 20px;
}
.gantt_side_content.gantt_link_crossing {
  bottom: 8px;
  top: auto;
}
.gantt_task_link .gantt_line_wrapper,
.gantt_link_arrow {
  position: absolute;
  cursor: pointer;
}
.gantt_line_wrapper div {
  background-color: #87A4BC;
}
.gantt_task_link:hover .gantt_line_wrapper div {
  box-shadow: 0 0 5px 0px #87A4BC;
}
.gantt_task_link div.gantt_link_arrow {
  background-color: transparent;
  border-style: solid;
  width: 0px;
  height: 0px;
}
.gantt_link_control {
  position: absolute;
  width: 20px;
  top: 0px;
}
.gantt_link_control div {
  display: none;
  cursor: pointer;
  box-sizing: border-box;
  position: relative;
  top: 50%;
  margin-top: -7.5px;
  vertical-align: middle;
  border: 1px solid #929292;
  -webkit-border-radius: 6.5px;
  -moz-border-radius: 6.5px;
  border-radius: 6.5px;
  height: 13px;
  width: 13px;
  background-color: #f0f0f0;
}
.gantt_link_control.task_right div.gantt_link_point {
  margin-left: 7px;
}
.gantt_link_control div:hover {
  background-color: #FFF;
}
.gantt_link_control.task_left {
  left: -20px;
}
.gantt_link_control.task_right {
  right: -20px;
}
.gantt_task_line.gantt_selected .gantt_link_control div,
.gantt_task_line:hover .gantt_link_control div,
.gantt_task_line.gantt_drag_progress .gantt_link_control div,
.gantt_task_line.gantt_drag_move .gantt_link_control div,
.gantt_task_line.gantt_drag_resize .gantt_link_control div,
.gantt_task_line.gantt_selected .gantt_task_progress_drag,
.gantt_task_line:hover .gantt_task_progress_drag,
.gantt_task_line.gantt_drag_progress .gantt_task_progress_drag,
.gantt_task_line.gantt_drag_move .gantt_task_progress_drag,
.gantt_task_line.gantt_drag_resize .gantt_task_progress_drag,
.gantt_task_line.gantt_selected .gantt_task_drag,
.gantt_task_line:hover .gantt_task_drag,
.gantt_task_line.gantt_drag_progress .gantt_task_drag,
.gantt_task_line.gantt_drag_move .gantt_task_drag,
.gantt_task_line.gantt_drag_resize .gantt_task_drag {
  display: block;
}
.gantt_link_target .gantt_link_control div {
  display: block;
}
.gantt_link_source,
.gantt_link_target {
  box-shadow: 0px 0px 3px #448AFF;
}
.gantt_link_target.link_start_allow,
.gantt_link_target.link_finish_allow {
  box-shadow: 0px 0px 3px #b8c9d7;
}
.gantt_link_target.link_start_deny,
.gantt_link_target.link_finish_deny {
  box-shadow: 0px 0px 3px #FF5252;
}
.link_start_allow .gantt_link_control.task_start_date div,
.link_finish_allow .gantt_link_control.task_end_date div {
  background-color: #b8c9d7;
  border-color: #87a4bc;
}
.link_start_deny .gantt_link_control.task_start_date div,
.link_finish_deny .gantt_link_control.task_end_date div {
  background-color: #FF5252;
  border-color: #ff0505;
}
.gantt_link_arrow_right {
  border-width: 6px 0 6px 6px;
  border-top-color: transparent !important;
  border-right-color: transparent !important;
  border-bottom-color: transparent !important;
  border-left-color: #87A4BC;
  /*margin-top: -1px;*/
}
.gantt_link_arrow_left {
  border-width: 6px 6px 6px 0;
  margin-top: -1px;
  border-top-color: transparent !important;
  border-right-color: #87A4BC;
  border-bottom-color: transparent !important;
  border-left-color: transparent !important;
}
.gantt_link_arrow_up {
  border-width: 0 6px 6px 6px;
  border-color: transparent transparent #87A4BC transparent;
  border-top-color: transparent !important;
  border-right-color: transparent !important;
  border-bottom-color: #87A4BC;
  border-left-color: transparent !important;
}
.gantt_link_arrow_down {
  border-width: 6px 6px 0 6px;
  border-top-color: #87A4BC;
  border-right-color: transparent !important;
  border-bottom-color: transparent !important;
  border-left-color: transparent !important;
}
.gantt_task_drag,
.gantt_task_progress_drag {
  cursor: ew-resize;
  display: none;
  position: absolute;
}
.gantt_task_drag.task_right {
  cursor: e-resize;
}
.gantt_task_drag.task_left {
  cursor: w-resize;
}
.gantt_task_drag {
  height: 80%;
  width: 8px;
  z-index: 1;
  top: 10%;
}
.gantt_task_drag.task_left {
  left: -7px;
}
.gantt_task_drag.task_right {
  right: -7px;
}
.gantt_task_progress_drag {
  height: 19px;
  width: 25px;
  bottom: -10px;
  margin-left: -14px;
  background-position: bottom;
  background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABkAAAATCAYAAABlcqYFAAAABGdBTUEAALGPC/xhBQAAAeNJREFUOBGlU0tOAkEQdQAHiIpDjPGz87fxCu400Wt4C1gRbsAhPARbbsCKxISFsjDqUiMfgRl8r+WRYmCExEoeVV1d9V51N+NtrG/ektLJktxCalmjLVq1b2sTBf8isXuKrY+mCpbcxrMBUrNoPrBkjFmXBjaBfL1evxyPx412u32CtWoRzsVcJxqb4sRZ5LaAvVqtdjUajV4msDAMn1ut1jnyHICDqBdhsqnITp5D+Q5wUK1WrweDwSsFZBRqNpsX2F9LKEmgAIKjcrl82+/330Ru/bpCfwkcl0qlu16v926J4/EqIQnQ63F5RTzBWgISNG+08D4S4UYG8IFt4JBXtOoEEpBPEpKITpGHwH6lUrlJegMRJvkoip46nc4peBy3BOQpxJMUG43Gve/7Z/g3+ZguDUKPwJ4zz/MmQiqVijKZTJjNZodBEHSLxWI3l8s9FgqFBxS7JgnQU4TfRADsArw2ijLP66SxTl82v/rQ4BvxF/ABfAJDYMI3sMZmNnWnng0kp4iGQeiMtURciMSDaR5uvpFkOg1JOYBycQFsOZOQhosLMu+Ifsvnr0ATWnLGcXMkSKre+lmtJWFSaxHG/azRBFaIaa4FV5ZEorwrwk98rTy9RJRbWNtmG6vhv94J/gATDnWOR2FfEQAAAABJRU5ErkJggg==);
  background-repeat: no-repeat;
  z-index: 1;
}
.gantt_task_progress_drag:hover {
  background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABkAAAATCAYAAABlcqYFAAAABGdBTUEAALGPC/xhBQAAAeNJREFUOBGlU0tOAkEQdQAHiIpDjPGz87fxCu400Wt4C1gRbsAhPARbbsCKxISFsjDqUiMfgRl8r+WRYmCExEoeVV1d9V51N+NtrG/ektLJktxCalmjLVq1b2sTBf8isXuKrY+mCpbcxrMBUrNoPrBkjFmXBjaBfL1evxyPx412u32CtWoRzsVcJxqb4sRZ5LaAvVqtdjUajV4msDAMn1ut1jnyHICDqBdhsqnITp5D+Q5wUK1WrweDwSsFZBRqNpsX2F9LKEmgAIKjcrl82+/330Ru/bpCfwkcl0qlu16v926J4/EqIQnQ63F5RTzBWgISNG+08D4S4UYG8IFt4JBXtOoEEpBPEpKITpGHwH6lUrlJegMRJvkoip46nc4peBy3BOQpxJMUG43Gve/7Z/g3+ZguDUKPwJ4zz/MmQiqVijKZTJjNZodBEHSLxWI3l8s9FgqFBxS7JgnQU4TfRADsArw2ijLP66SxTl82v/rQ4BvxF/ABfAJDYMI3sMZmNnWnng0kp4iGQeiMtURciMSDaR5uvpFkOg1JOYBycQFsOZOQhosLMu+Ifsvnr0ATWnLGcXMkSKre+lmtJWFSaxHG/azRBFaIaa4FV5ZEorwrwk98rTy9RJRbWNtmG6vhv94J/gATDnWOR2FfEQAAAABJRU5ErkJggg==);
}
.gantt_link_tooltip {
  box-shadow: 3px 3px 3px #888888;
  background-color: #FFFFFF;
  border-left: 1px solid #cecece;
  border-top: 1px solid #cecece;
  font-family: Tahoma;
  font-size: 14px;
  color: rgba(0, 0, 0, 0.8);
  padding: 11px;
  line-height: 20px;
}
.gantt_link_direction {
  height: 0px;
  border: 0px none #87A4BC;
  border-bottom-style: dashed;
  border-bottom-width: 2px;
  transform-origin: 0% 0%;
  -ms-transform-origin: 0% 0%;
  -webkit-transform-origin: 0% 0%;
  z-index: 2;
  margin-left: 1px;
  position: absolute;
}
.gantt_grid_data .gantt_row.gantt_selected,
.gantt_grid_data .gantt_row.odd.gantt_selected {
  background-color: rgba(0, 199, 181, 0.2);
}
.gantt_task_row.gantt_selected {
  background-color: rgba(0, 199, 181, 0.2);
}
.gantt_task_row.gantt_selected .gantt_task_cell {
  border-right-color: rgba(145, 210, 210, 0.7);
}
.gantt_task_line.gantt_selected {
  box-shadow: none;
}
.gantt_task_line.gantt_project.gantt_selected {
  box-shadow: none;
}
.gantt_task_line.gantt_milestone {
  visibility: hidden;
  background-color: #FFC107;
  border: 0px solid #FFC107;
  box-sizing: content-box;
  -moz-box-sizing: content-box;
}
.gantt_task_line.gantt_milestone div {
  visibility: visible;
}
.gantt_task_line.gantt_milestone .gantt_task_content {
  background: inherit;
  border: inherit;
  border-width: 1px;
  border-radius: inherit;
  box-sizing: border-box;
  -moz-box-sizing: border-box;
  -webkit-transform: rotate(45deg);
  -moz-transform: rotate(45deg);
  -ms-transform: rotate(45deg);
  -o-transform: rotate(45deg);
  transform: rotate(45deg);
}
.gantt_task_line.gantt_task_inline_color {
  border-color: #999999;
}
.gantt_task_line.gantt_task_inline_color .gantt_task_progress {
  background-color: #363636;
  opacity: 0.2;
}
.gantt_task_line.gantt_task_inline_color.gantt_selected {
  box-shadow: 0 0 5px #999999;
}
.gantt_task_line.gantt_task_inline_color.gantt_project.gantt_selected {
  box-shadow: 0 0 5px #999999;
}
.gantt_task_link.gantt_link_inline_color:hover .gantt_line_wrapper div {
  box-shadow: 0 0 5px 0px #999999;
}
.gantt_critical_task {
  background-color: #FF5252;
  border-color: #9d3a3a;
}
.gantt_critical_task .gantt_task_progress {
  background-color: rgba(0, 0, 0, 0.4);
}
.gantt_critical_link .gantt_line_wrapper > div {
  background-color: #FF5252;
}
.gantt_critical_link .gantt_link_arrow {
  border-color: #FF5252;
}
.gantt_row:focus,
.gantt_cell:focus,
.gantt_btn_set:focus,
.gantt_qi_big_icon:focus,
.gantt_popup_button:focus,
.gantt_grid_head_cell:focus {
  -moz-box-shadow: inset 0px 0px 1px 1px #4d90fe;
  -webkit-box-shadow: inset 0px 0px 1px 1px #4d90fe;
  box-shadow: inset 0px 0px 1px 1px #4d90fe;
}
.gantt_split_parent,
.gantt_split_subproject {
  opacity: 0.1;
  pointer-events: none;
}
.gantt_rollup_child .gantt_link_control,
.gantt_rollup_child:hover .gantt_link_control {
  display: none;
}
.gantt_unselectable,
.gantt_unselectable div {
  -webkit-user-select: none;
  -moz-user-select: none;
  -moz-user-select: -moz-none;
}
.gantt_cal_light {
  -webkit-tap-highlight-color: transparent;
  background: #FFFFFF;
  border-radius: 2px;
  font-family: "Roboto", arial, sans-serif;
  border: 1px solid #D7D7D7;
  color: rgba(31, 31, 31, 0.8);
  font-size: 14px;
  position: absolute;
  z-index: 10001;
  width: 550px;
  height: 250px;
  box-shadow: 0 2px 3px 0 rgba(0, 0, 0, 0.2), 0 0 3px 1px rgba(0, 0, 0, 0.1);
}
.gantt_cal_light_wide {
  width: 650px;
}
.gantt_cal_light select {
  font-family: "Roboto", arial, sans-serif;
  border: 1px solid #D7D7D7;
  font-size: 14px;
  padding: 2px;
  margin: 0px;
}
.gantt_cal_ltitle {
  padding: 7px 10px;
  overflow: hidden;
  white-space: nowrap;
  -webkit-border-top-left-radius: 2px;
  -webkit-border-bottom-left-radius: 0;
  -webkit-border-top-right-radius: 2px;
  -webkit-border-bottom-right-radius: 0;
  -moz-border-radius-topleft: 2px;
  -moz-border-radius-bottomleft: 0;
  -moz-border-radius-topright: 2px;
  -moz-border-radius-bottomright: 0;
  border-top-left-radius: 2px;
  border-bottom-left-radius: 0;
  border-top-right-radius: 2px;
  border-bottom-right-radius: 0;
}
.gantt_cal_ltitle span {
  white-space: nowrap;
}
.gantt_cal_lsection {
  color: #727272;
  font-weight: bold;
  padding: 12px 0px 5px 10px;
}
.gantt_cal_lsection .gantt_fullday {
  float: right;
  margin-right: 5px;
  font-size: 12px;
  font-weight: normal;
  line-height: 20px;
  vertical-align: top;
  cursor: pointer;
}
.gantt_cal_lsection {
  font-size: 13px;
}
.gantt_cal_ltext {
  padding: 2px    10px;
  overflow: hidden;
}
.gantt_cal_ltext textarea {
  overflow-y: auto;
  overflow-x: hidden;
  font-family: "Roboto", arial, sans-serif;
  font-size: 14px;
  -moz-box-sizing: border-box;
  -webkit-box-sizing: border-box;
  box-sizing: border-box;
  border: 1px solid #D7D7D7;
  height: 100%;
  width: 100%;
  outline: none !important;
  resize: none;
}
.gantt_section_constraint [data-constraint-time-select] {
  margin-left: 20px;
}
.gantt_time {
  font-weight: bold;
}
.gantt_cal_light .gantt_title {
  padding-left: 10px;
}
.gantt_cal_larea {
  border: 1px solid #D7D7D7;
  border-left: none;
  border-right: none;
  background-color: #FFFFFF;
  overflow: hidden;
  height: 1px;
}
.gantt_btn_set {
  margin: 10px 7px 5px 10px;
  padding: 6px 15px 6px 15px;
  float: left;
  -webkit-border-radius: 2px;
  -moz-border-radius: 2px;
  border-radius: 2px;
  border-width: 0px;
  border-color: #D7D7D7;
  border-style: solid;
  height: 32px;
  font-weight: 500;
  background: #FFFFFF;
  -moz-box-sizing: border-box;
  -webkit-box-sizing: border-box;
  box-sizing: border-box;
  cursor: pointer;
}
.gantt_hidden {
  display: none;
}
.gantt_btn_set div {
  float: left;
  font-size: 14px;
  height: 20px;
  line-height: 20px;
  background-repeat: no-repeat;
  vertical-align: middle;
}
.gantt_save_btn {
  background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAC0lEQVQYV2NgAAIAAAUAAarVyFEAAAAASUVORK5CYII=);
  margin-top: 2px;
  width: 21px;
}
.gantt_cancel_btn {
  margin-top: 2px;
  background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAC0lEQVQYV2NgAAIAAAUAAarVyFEAAAAASUVORK5CYII=);
  width: 20px;
}
.gantt_delete_btn {
  background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAC0lEQVQYV2NgAAIAAAUAAarVyFEAAAAASUVORK5CYII=);
  margin-top: 2px;
  width: 20px;
}
.gantt_cal_cover {
  width: 100%;
  height: 100%;
  position: fixed;
  z-index: 10000;
  top: 0px;
  left: 0px;
  background-color: black;
  opacity: 0.1;
  filter: progid:DXImageTransform.Microsoft.Alpha(opacity=10);
}
.gantt_custom_button {
  padding: 0px 3px 0px 3px;
  font-family: "Roboto", arial, sans-serif;
  font-size: 14px;
  font-weight: normal;
  margin-right: 10px;
  margin-top: -5px;
  cursor: pointer;
  float: right;
  height: 21px;
  width: 90px;
  border: 1px solid #CECECE;
  text-align: center;
  -webkit-border-radius: 4px;
  -moz-border-radius: 4px;
  -ms-border-radius: 4px;
  -o-border-radius: 4px;
  border-radius: 4px;
}
.gantt_custom_button div {
  cursor: pointer;
  float: none;
  height: 21px;
  line-height: 21px;
  vertical-align: middle;
}
.gantt_custom_button div:first-child {
  display: none;
}
.gantt_cal_light_wide {
  width: 580px;
  padding: 2px 4px;
}
.gantt_cal_light_wide .gantt_cal_larea {
  -moz-box-sizing: border-box;
  -webkit-box-sizing: border-box;
  box-sizing: border-box;
  border: 1px solid #D7D7D7;
}
.gantt_cal_light_wide .gantt_cal_lsection {
  border: 0px;
  float: left;
  text-align: right;
  width: 80px;
  height: 20px;
  padding: 5px 10px 0px 0px;
}
.gantt_cal_light_wide .gantt_wrap_section {
  position: relative;
  padding: 10px 0;
  overflow: hidden;
  border-bottom: 1px solid #D7D7D7;
}
.gantt_cal_light_wide .gantt_section_time {
  overflow: hidden;
  padding-top: 2px !important;
  padding-right: 0px;
  height: 20px !important;
}
.gantt_cal_light_wide .gantt_cal_ltext {
  padding-right: 0px;
}
.gantt_cal_light_wide .gantt_cal_larea {
  padding: 0 10px;
  width: 100%;
}
.gantt_cal_light_wide .gantt_section_time {
  background: transparent;
}
.gantt_cal_light_wide .gantt_cal_checkbox label {
  padding-left: 0px;
}
.gantt_cal_light_wide .gantt_cal_lsection .gantt_fullday {
  float: none;
  margin-right: 0px;
  font-weight: bold;
  cursor: pointer;
}
.gantt_cal_light_wide .gantt_custom_button {
  position: absolute;
  top: 0;
  right: 0;
  margin-top: 2px;
}
.gantt_cal_light_wide .gantt_repeat_right {
  margin-right: 55px;
}
.gantt_cal_light_wide.gantt_cal_light_full {
  width: 738px;
}
.gantt_cal_wide_checkbox input {
  margin-top: 8px;
  margin-left: 14px;
}
.gantt_cal_light input {
  font-size: 14px;
}
.gantt_section_time {
  background-color: white;
  white-space: nowrap;
  padding: 2px 10px 5px;
  padding-top: 2px !important;
}
.gantt_section_time .gantt_time_selects {
  float: left;
  height: 25px;
}
.gantt_section_time .gantt_time_selects select {
  height: 23px;
  padding: 2px;
  border: 1px solid #D7D7D7;
}
.gantt_duration {
  width: 100px;
  height: 30px;
  float: left;
  white-space: nowrap;
  margin-left: 20px;
  line-height: 32px;
}
.gantt_duration .gantt_duration_value,
.gantt_duration .gantt_duration_dec,
.gantt_duration .gantt_duration_inc {
  -moz-box-sizing: border-box;
  -webkit-box-sizing: border-box;
  box-sizing: border-box;
  text-align: center;
  vertical-align: top;
  height: 100%;
  border: 1px solid #D7D7D7;
}
.gantt_duration .gantt_duration_value {
  width: 36px;
  padding: 3px 4px;
  border-left-width: 0;
  border-right-width: 0;
}
.gantt_duration .gantt_duration_value.gantt_duration_value_formatted {
  width: 66px;
}
.gantt_duration .gantt_duration_dec,
.gantt_duration .gantt_duration_inc {
  width: 30px;
  padding: 1px;
  padding-bottom: 1px;
  background: #FFFFFF;
}
.gantt_duration .gantt_duration_dec {
  -moz-border-top-left-radius: 2px;
  -moz-border-bottom-left-radius: 2px;
  -webkit-border-top-left-radius: 2px;
  -webkit-border-bottom-left-radius: 2px;
  border-top-left-radius: 2px;
  border-bottom-left-radius: 2px;
}
.gantt_duration .gantt_duration_inc {
  margin-right: 4px;
  -moz-border-top-right-radius: 2px;
  -moz-border-bottom-right-radius: 2px;
  -webkit-border-top-right-radius: 2px;
  -webkit-border-bottom-right-radius: 2px;
  border-top-right-radius: 2px;
  border-bottom-right-radius: 2px;
}
.gantt_resources {
  max-height: 150px;
  height: auto;
  overflow-y: auto;
}
.gantt_resource_row {
  display: block;
  padding: 10px 0;
  border-bottom: 1px solid #D7D7D7;
  cursor: pointer;
}
.gantt_resource_row input[type=checkbox]:not(:checked),
.gantt_resource_row input[type=checkbox]:not(:checked) ~ div {
  opacity: 0.5;
}
.gantt_resource_toggle {
  vertical-align: middle;
}
.gantt_resources_filter .gantt_resources_filter_input {
  padding: 1px 2px 1px 2px;
  box-sizing: border-box;
}
.gantt_resources_filter .switch_unsetted {
  vertical-align: middle;
}
.gantt_resource_cell {
  display: inline-block;
}
.gantt_resource_cell.gantt_resource_cell_checkbox {
  width: 24px;
  max-width: 24px;
  min-width: 24px;
  vertical-align: middle;
}
.gantt_resource_cell.gantt_resource_cell_label {
  width: 40%;
  max-width: 40%;
  vertical-align: middle;
}
.gantt_resource_cell.gantt_resource_cell_value {
  width: 30%;
  max-width: 30%;
  vertical-align: middle;
}
.gantt_resource_cell.gantt_resource_cell_value input,
.gantt_resource_cell.gantt_resource_cell_value select {
  width: 80%;
  vertical-align: middle;
  padding: 1px 2px 1px 2px;
  box-sizing: border-box;
}
.gantt_resource_cell.gantt_resource_cell_unit {
  width: 10%;
  max-width: 10%;
  vertical-align: middle;
}
.gantt_resource_early_value {
  opacity: 0.8;
  font-size: 0.9em;
}
/* Quick info */
.gantt_cal_quick_info {
  border: 0px;
  border-radius: 2px;
  position: absolute;
  z-index: 300;
  box-shadow: 0 2px 3px 0 rgba(0, 0, 0, 0.2), 0 0 3px 1px rgba(0, 0, 0, 0.1);
  background-color: #FFFFFF;
  width: auto;
  transition: left 0.5s ease, right 0.5s;
  -moz-transition: left 0.5s ease, right 0.5s;
  -webkit-transition: left 0.5s ease, right 0.5s;
  -o-transition: left 0.5s ease, right 0.5s;
}
.gantt_no_animate {
  transition: none;
  -moz-transition: none;
  -webkit-transition: none;
  -o-transition: none;
}
.gantt_cal_quick_info.gantt_qi_left .gantt_qi_big_icon {
  float: right;
}
.gantt_cal_qi_title {
  -webkit-border-top-left-radius: 2px;
  -webkit-border-bottom-left-radius: 0;
  -webkit-border-top-right-radius: 2px;
  -webkit-border-bottom-right-radius: 0;
  -moz-border-radius-topleft: 2px;
  -moz-border-radius-bottomleft: 0;
  -moz-border-radius-topright: 2px;
  -moz-border-radius-bottomright: 0;
  border-top-left-radius: 2px;
  border-bottom-left-radius: 0;
  border-top-right-radius: 2px;
  border-bottom-right-radius: 0;
  padding: 5px 0px 8px 12px;
  color: rgba(0, 0, 0, 0.8);
  background-color: #fff;
  border-bottom: 1px solid #D7D7D7;
}
.gantt_cal_qi_tdate {
  font-size: 14px;
  font-weight: bold;
}
.gantt_cal_qi_tcontent {
  font-size: 14px;
}
.gantt_cal_qi_content {
  padding: 16px 8px;
  font-size: 14px;
  color: rgba(0, 0, 0, 0.8);
  overflow: hidden;
}
.gantt_cal_qi_controls {
  -webkit-border-top-left-radius: 0;
  -webkit-border-bottom-left-radius: 2px;
  -webkit-border-top-right-radius: 0;
  -webkit-border-bottom-right-radius: 2px;
  -moz-border-radius-topleft: 0;
  -moz-border-radius-bottomleft: 2px;
  -moz-border-radius-topright: 0;
  -moz-border-radius-bottomright: 2px;
  border-top-left-radius: 0;
  border-bottom-left-radius: 2px;
  border-top-right-radius: 0;
  border-bottom-right-radius: 2px;
  padding-left: 7px;
}
.gantt_cal_qi_controls .gantt_menu_icon {
  margin-top: 6px;
  background-repeat: no-repeat;
}
.gantt_cal_qi_controls .gantt_menu_icon.icon_edit {
  width: 20px;
  background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAC0lEQVQYV2NgAAIAAAUAAarVyFEAAAAASUVORK5CYII=);
}
.gantt_cal_qi_controls .gantt_menu_icon.icon_delete {
  width: 20px;
  background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAC0lEQVQYV2NgAAIAAAUAAarVyFEAAAAASUVORK5CYII=);
}
.gantt_qi_big_icon {
  font-size: 14px;
  border-radius: 2px;
  font-weight: 500;
  background: #FFFFFF;
  margin: 4px 0px 4px 14px;
  min-width: auto;
  line-height: 32px;
  vertical-align: middle;
  padding: 0px 16px 0px 16px;
  cursor: pointer;
  border: 0px;
}
.gantt_cal_qi_controls div {
  float: left;
  height: 32px;
  text-align: center;
  line-height: 32px;
}
.gantt_cal_quick_info.gantt_qi_hidden {
  display: none;
}
.gantt_tooltip {
  padding: 10px;
  position: absolute;
  z-index: 50;
  white-space: nowrap;
}
.gantt_resource_marker {
  position: absolute;
  text-align: center;
  font-size: 14px;
  color: #FFF;
}
.gantt_resource_marker_ok {
  background: rgba(78, 208, 134, 0.75);
}
.gantt_resource_marker_overtime {
  background: rgba(255, 134, 134, 0.69);
}
.gantt_histogram_label {
  width: 100%;
  height: 100%;
  position: absolute;
  z-index: 1;
  font-weight: bold;
  font-size: 14px;
}
.gantt_histogram_fill {
  background-color: rgba(41, 157, 180, 0.2);
  width: 100%;
  position: absolute;
  bottom: 0;
}
.gantt_histogram_hor_bar {
  height: 1px;
  position: absolute;
  background: #299DB4;
  margin-top: -1px;
  margin-left: -1px;
}
.gantt_histogram_vert_bar {
  width: 1px;
  position: absolute;
  background: #299DB4;
  margin-left: -1px;
}
.gantt_histogram_cell {
  position: absolute;
  text-align: center;
  font-size: 14px;
  color: #000000;
}
.gantt_marker {
  height: 100%;
  width: 2px;
  top: 0;
  position: absolute;
  text-align: center;
  background-color: rgba(255, 0, 0, 0.4);
  -moz-box-sizing: border-box;
  -webkit-box-sizing: border-box;
  box-sizing: border-box;
}
.gantt_marker .gantt_marker_content {
  padding: 5px;
  background: inherit;
  color: white;
  position: absolute;
  font-size: 12px;
  line-height: 12px;
  opacity: 0.8;
}
.gantt_marker_area {
  position: absolute;
  top: 0;
  left: 0;
}
.gantt_grid_editor_placeholder {
  position: absolute;
}
.gantt_grid_editor_placeholder > div,
.gantt_grid_editor_placeholder input,
.gantt_grid_editor_placeholder select {
  width: 100%;
  height: 100%;
  box-sizing: border-box;
}
.gantt_row_placeholder div {
  opacity: 0.5;
}
.gantt_row_placeholder .gantt_file,
.gantt_row_placeholder .gantt_add {
  display: none;
}
.gantt_drag_marker.gantt_grid_dnd_marker {
  background-color: transparent;
  transition: all 0.1s ease ;
}
.gantt_grid_dnd_marker_line {
  height: 4px;
  width: 100%;
  background-color: #3498db;
}
.gantt_grid_dnd_marker_line::before {
  background: #fff;
  width: 12px;
  height: 12px;
  box-sizing: border-box;
  border: 3px solid #3498db;
  border-radius: 6px;
  content: "";
  line-height: 1px;
  display: block;
  position: absolute;
  margin-left: -11px;
  margin-top: -4px;
  pointer-events: none;
}
.gantt_grid_dnd_marker_folder {
  height: 100%;
  width: 100%;
  position: absolute;
  pointer-events: none;
  box-sizing: border-box;
  box-shadow: 0 0 0px 2px #3f98db inset;
  background: transparent;
}
.gantt_overlay_area {
  position: absolute;
  height: inherit;
  width: inherit;
  top: 0;
  left: 0;
  display: none;
}
.gantt_overlay {
  position: absolute;
  left: 0;
  top: 0;
  height: inherit;
  width: inherit;
}
.gantt_click_drag_rect {
  position: absolute;
  left: 0;
  top: 0;
  outline: 1px solid #3f98db;
  background-color: rgba(52, 152, 219, 0.3);
}
.gantt_timeline_move_available,
.gantt_timeline_move_available * {
  cursor: move;
}
.gantt_rtl .gantt_grid {
  text-align: right;
}
.gantt_rtl .gantt_row,
.gantt_rtl .gantt_cell {
  flex-direction: row-reverse;
}
.gantt_layout_content {
  width: 100%;
  overflow: auto;
  box-sizing: border-box;
}
.gantt_layout_cell {
  position: relative;
  box-sizing: border-box;
}
.gantt_layout_cell > .gantt_layout_header {
  background: #33aae8;
  color: white;
  font-size: 17px;
  padding: 5px 10px;
  box-sizing: border-box;
}
.gantt_layout_header.collapsed_x {
  background: #a9a9a9;
}
.gantt_layout_header.collapsed_x .gantt_header_arrow:before {
  content: "\21E7";
}
.gantt_layout_header.collapsed_y {
  background: #a9a9a9;
}
.gantt_layout_header.collapsed_y .gantt_header_arrow:before {
  content: "\21E9";
}
.gantt_layout_header {
  cursor: pointer;
}
.gantt_layout_header .gantt_header_arrow {
  float: right;
  text-align: right;
}
.gantt_layout_header .gantt_header_arrow:before {
  content: "\21E6";
}
.gantt_layout_header.vertical .gantt_header_arrow:before {
  content: "\21E7";
}
.gantt_layout_outer_scroll_vertical .gantt_layout_content {
  overflow-y: hidden;
}
.gantt_layout_outer_scroll_horizontal .gantt_layout_content {
  overflow-x: hidden;
}
.gantt_layout_x > .gantt_layout_cell {
  display: inline-block;
  vertical-align: top;
}
.gantt_layout_x {
  white-space: nowrap;
}
.gantt_resizing {
  opacity: 0.7;
  background: #f2f2f2;
}
.gantt_layout_cell_border_right.gantt_resizer {
  overflow: visible;
  border-right: 0;
}
.gantt_resizer {
  cursor: e-resize;
  position: relative;
}
.gantt_resizer_y {
  cursor: n-resize;
}
.gantt_resizer_stick {
  background: #33aae8;
  z-index: 9999;
  position: absolute;
  top: 0;
  width: 100%;
}
.gantt_resizer_x .gantt_resizer_x {
  position: absolute;
  width: 20px;
  height: 100%;
  margin-left: -10px;
  top: 0;
  left: 0;
  z-index: 1;
}
.gantt_resizer_y .gantt_resizer_y {
  position: absolute;
  height: 20px;
  width: 100%;
  top: -10px;
  left: 0;
  z-index: 1;
}
.gantt_resizer_error {
  background: indianred!important;
}
.gantt_noselect {
  -webkit-user-select: none;
  user-select: none;
}
.gantt_layout_cell_border_left {
  border-left: 1px solid #D7D7D7;
}
.gantt_layout_cell_border_right {
  border-right: 1px solid #D7D7D7;
}
.gantt_layout_cell_border_top {
  border-top: 1px solid #D7D7D7;
}
.gantt_layout_cell_border_bottom {
  border-bottom: 1px solid #D7D7D7;
}
.gantt_layout_cell_border_transparent {
  border-color: transparent;
}
.gantt_window {
  position: absolute;
  top: 50%;
  left: 50%;
  z-index: 999999999;
  background: white;
}
.gantt_window_content {
  position: relative;
}
.gantt_window_content_header {
  background: #39c;
  color: #ffffff;
  height: 33px;
  padding: 10px 10px 0 10px;
  border-bottom: solid 2px #ffffff;
  position: relative;
}
.gantt_window_content_header_text {
  padding-left: 10%;
}
.gantt_window_content_header_buttons {
  position: absolute;
  top: 10px;
  right: 10px;
}
.gantt_window_content_header_buttons:hover {
  color: #000000;
  cursor: pointer;
}
.gantt_window_content_resizer {
  position: absolute;
  width: 15px;
  height: 15px;
  bottom: 0;
  line-height: 15px;
  right: -1px;
  text-align: center;
  background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA8AAAAPCAMAAAAMCGV4AAAABlBMVEUAAAAAAAClZ7nPAAAAAXRSTlMAQObYZgAAABZJREFUeAFjIAUwUshlpJDLSIhLGAAACQ4AFk79JaMAAAAASUVORK5CYII=);
  cursor: nw-resize;
  z-index: 999;
}
.gantt_window_content_frame {
  position: absolute;
  top: 0;
  left: 0;
  width: 100%;
  height: 100%;
  background: rgba(0, 0, 0, 0.1);
  z-index: 9999;
}
.gantt_window_drag {
  cursor: pointer!important;
}
.gantt_window_resizing {
  overflow: visible;
}
.gantt_window_resizing_body {
  overflow: hidden!important;
}
.gantt_window_modal {
  background: rgba(0, 0, 0, 0.1);
  z-index: 9999;
  top: 0;
  left: 0;
  width: 100%;
  height: 100%;
  position: fixed;
}
.gantt_container,
.gantt_cal_light,
.gantt_message_area,
.gantt_modal_box,
.gantt_cal_quick_info,
.gantt_tooltip {
  text-rendering: optimizeLegibility;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
}
.gantt_noselect {
  -moz-user-select: -moz-none;
  -webkit-user-select: none;
  -ms-user-select: none;
  user-select: none;
}
.gantt_noselect .gantt_grid_data .gantt_row:hover,
.gantt_noselect .gantt_grid_data .gantt_row.odd:hover {
  background-color: unset;
}
.gantt_drag_marker {
  position: absolute;
  top: -1000px;
  left: -1000px;
  font-family: "Roboto", arial, sans-serif;
  font-size: 14px;
  z-index: 1;
  white-space: nowrap;
}
.gantt_drag_marker .gantt_tree_indent,
.gantt_drag_marker .gantt_tree_icon.gantt_blank,
.gantt_drag_marker .gantt_tree_icon.gantt_open,
.gantt_drag_marker .gantt_tree_icon.gantt_close {
  display: none;
}
.gantt_empty_state_wrapper {
  position: relative;
}
.gantt_empty_state {
  height: 100%;
  max-width: 500px;
  box-sizing: border-box;
  white-space: pre-line;
  overflow-wrap: break-word;
  display: flex;
  flex-direction: column;
  justify-content: flex-start;
  margin: 0 auto;
}
.gantt_empty_state_image {
  background-image: url('data:image/png;base64,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');
  background-repeat: no-repeat;
  width: 100%;
  max-width: 500px;
  max-height: 500px;
  margin-left: auto;
  margin-right: auto;
  display: block;
  min-height: 0;
  height: 200px;
  background-size: contain;
  background-position-x: center;
  background-position-y: bottom;
  margin-top: 40px;
}
.gantt_empty_state_text {
  text-align: center;
}
.gantt_empty_state_text_link {
  color: #03A9F4;
  background-position: top right;
  background: none;
  opacity: 1;
  height: unset;
  cursor: pointer;
}
.gantt_drag_marker,
.gantt_drag_marker .gantt_row.odd {
  background-color: #FFFFFF;
}
.gantt_drag_marker .gantt_row {
  border-left: 1px solid #bebebe;
  border-top: 1px solid #bebebe;
}
.gantt_drag_marker .gantt_cell {
  border-color: #bebebe;
}
.gantt_row.gantt_over,
.gantt_task_row.gantt_over {
  background-color: #0070fe;
}
.gantt_row.gantt_transparent .gantt_cell {
  opacity: 0.7;
}
.gantt_task_row.gantt_transparent {
  background-color: #ffffff;
}
.gantt_popup_button.gantt_delete_button {
  background-color: #448AFF;
  color: #FFFFFF;
}
.gantt_container_resize_watcher {
  background: transparent;
  width: 100%;
  height: 100%;
  position: absolute;
  top: 0px;
  left: 0px;
  z-index: -1;
  pointer-events: none;
  border: 0;
  box-sizing: border-box;
  opacity: 0;
}
src/components/dhtmlxGantt/codebase/sources/skins/dhtmlxgantt_meadow.css
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,2036 @@
/*
@license
dhtmlxGantt v.8.0.6 Standard
This version of dhtmlxGantt is distributed under GPL 2.0 license and can be legally used in GPL projects.
To use dhtmlxGantt in non-GPL projects (and get Pro version of the product), please obtain Individual, Commercial, Enterprise or Ultimate license on our site https://dhtmlx.com/docs/products/dhtmlxGantt/#licensing or contact us at info@dhtmlx.com
(c) XB Software
*/
.buttonBg {
  background: #fff;
}
/* colors for items with inline styles assigned (task.color, link.color)*/
/*
    Header
*/
.chartHeaderBg {
  background-color: #f4f2ea;
}
/*
    Grid
*/
.gridHoverStyle {
  background-color: #ffebbc !important;
}
.gantt_grid_scale .gantt_grid_head_cell {
  border-top: none !important;
  border-right: none !important;
}
.gantt_grid_data .gantt_cell {
  border-right: none;
}
.gridSelection {
  background-color: #ffebbc !important;
}
.timelineSelection {
  background-color: #ffebbc !important;
}
/*
     Plot
*/
.gantt_task_link .gantt_link_arrow_right {
  margin-top: -1px;
}
.gantt_task_link .gantt_link_arrow_left {
  margin-top: -1px;
}
/*
    milestone
*/
.gantt_task_line .gantt_task_progress_drag {
  bottom: -4px;
  height: 10px;
  margin-left: -8px;
  width: 16px;
}
.gantt_task .gantt_task_scale .gantt_scale_cell {
  border-right: 1px solid #cac8bd;
}
/*
    project highlight
*/
.gantt_row.gantt_project .gantt_cell,
.gantt_row.odd.gantt_project .gantt_cell {
  background-color: #edf4ff;
}
.gantt_task_row.gantt_project .gantt_task_cell,
.gantt_task_row.odd.gantt_project .gantt_task_cell {
  background-color: #f5f8ff;
}
.gantt_task_line.gantt_project {
  background-color: #c7d8f7;
  border: 1px solid #7ba3ed;
}
.gantt_task_line.gantt_project .gantt_task_progress {
  background-color: #9ab9f1;
}
/*
    lightbox
*/
.gantt_cal_light .gantt_cal_ltitle {
  padding: 7px 10px;
}
.gantt_cal_light .gantt_cal_ltext textarea {
  border: 1px solid #d8d6ce;
}
.gantt_cal_light .gantt_cal_larea {
  border-color: #d8d6ce !important;
  background-color: #fcfaf3;
}
.gantt_cal_light .gantt_cal_larea .gantt_section_time {
  background-color: #fcfaf3;
}
.buttonBg {
  background: #e0ded7;
}
.gantt_cal_light .gantt_btn_set {
  height: 27px;
  margin: 5px 10px;
  padding: 0px 15px 0px 10px;
}
.gantt_cal_light .gantt_btn_set div {
  height: 25px;
  margin-top: 0;
  background-position: center center;
  line-height: 25px;
}
.gantt_btn_set.gantt_save_btn_set {
  border: 1px solid #98d27e;
  background: #a7d991;
}
.gantt_btn_set.gantt_cancel_btn_set {
  background: #fff;
  background: #e0ded7;
  border: 1px solid #cac8bd;
}
.gantt_btn_set.gantt_delete_btn_set {
  border: 1px solid #ffad54;
  background: #ffb96d;
}
.gantt_cal_light_wide {
  padding: 0 !important;
}
.gantt_cal_light_wide .gantt_cal_larea {
  border-left: none !important;
  border-right: none !important;
}
.gantt_cal_light_wide .gantt_cal_larea .gantt_cal_lsection {
  width: 90px;
}
.gantt_cal_light_wide .gantt_btn_set {
  margin: 7px 10px;
}
/*
    Message
*/
.gantt_popup_button.gantt_ok_button {
  border: 1px solid #98d27e;
  background: #a7d991;
}
.gantt_popup_title {
  background-color: #f4f2ea;
}
.gantt_popup_shadow {
  box-shadow: 3px 3px 3px rgba(0, 0, 0, 0.07);
}
/*
    QuickInfo
*/
.gantt_data_area .gantt_cal_quick_info {
  background-color: #f4f2ea;
}
.gantt_data_area .gantt_cal_qi_content {
  background: #fcfaf3;
  border-bottom: 1px solid #cac8bd;
}
.gantt_qi_big_icon.icon_delete {
  border-color: #ffad54;
  background: #ffb96d;
}
/* links dnd */
.gantt_tooltip {
  box-shadow: 3px 3px 3px rgba(0, 0, 0, 0.07);
  background-color: white;
  border-left: 1px solid rgba(0, 0, 0, 0.07);
  border-top: 1px solid rgba(0, 0, 0, 0.07);
  font-family: "Verdana";
  font-size: 8pt;
  color: #3f3f3f;
}
.gantt_container {
  background-color: #FFFFFF;
  font-family: "Verdana";
  font-size: 11px;
  border: 1px solid #cac8bd;
  position: relative;
  white-space: nowrap;
  overflow-x: hidden;
  overflow-y: hidden;
}
.gantt_touch_active {
  overscroll-behavior: none;
}
.gantt_task_scroll {
  overflow-x: scroll;
}
.gantt_task,
.gantt_grid {
  position: relative;
  overflow-x: hidden;
  overflow-y: hidden;
  display: inline-block;
  vertical-align: top;
}
.gantt_grid_scale,
.gantt_task_scale {
  color: #3f3f3f;
  font-size: 8pt;
  border-bottom: 1px solid #cac8bd;
  -moz-box-sizing: border-box;
  box-sizing: border-box;
}
.gantt_grid_scale {
  background-color: #f4f2ea;
}
.gantt_task_scale {
  background-color: #f4f2ea;
}
.gantt_task_vscroll {
  background-color: #f4f2ea;
}
.gantt_scale_line {
  box-sizing: border-box;
  -moz-box-sizing: border-box;
  border-top: 1px solid #cac8bd;
}
.gantt_scale_line:first-child {
  border-top: none;
}
.gantt_grid_head_cell {
  display: inline-block;
  vertical-align: top;
  border-right: 1px solid #cac8bd;
  text-align: center;
  position: relative;
  cursor: default;
  height: 100%;
  box-sizing: border-box;
  -moz-box-sizing: border-box;
  line-height: 28px;
  -moz-user-select: -moz-none;
  -webkit-user-select: none;
  user-select: none;
  overflow: hidden;
}
.gantt_scale_line {
  clear: both;
}
.gantt_grid_data {
  width: 100%;
  overflow: hidden;
  position: relative;
}
.gantt_row {
  position: relative;
  -webkit-user-select: none;
  -moz-user-select: none;
  -moz-user-select: -moz-none;
}
.gantt_add,
.gantt_grid_head_add {
  width: 100%;
  height: 100%;
  background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoV2luZG93cykiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6MDAzOTZDREFDN0FGMTFFMkE1MDhCNkFCRDk3RkY4NTkiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6MDAzOTZDREJDN0FGMTFFMkE1MDhCNkFCRDk3RkY4NTkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDowMDM5NkNEOEM3QUYxMUUyQTUwOEI2QUJEOTdGRjg1OSIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDowMDM5NkNEOUM3QUYxMUUyQTUwOEI2QUJEOTdGRjg1OSIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PnzqpNoAAAEFSURBVHjapJPPDsFAEMbHZqXSi1ZC3Dg7O9bbeA7v4czZE4hLSRwkbiI4cCAN4Uyqs/pPs1vbrTDJHL7Mb77sbr8WeuMu/FOEMQaStplYdgYHFBnKjK1atZqI8+ViZZ2AMmS5x1QxFNHLNVAx1EPMNVAxBBFtvxnfuq4LUKDTTLwXXsFqNprKE1RMM2y+9oe9FV3Bw5++/3svfMRWpS0MV7fFx0Ka2e62kQEhBEbzoTA0DAPqtXqinbMD643IFGkR3KcL1Cib0yA4/DBY4A2u15ug45oFHD05x44sO+kc+FwhI0j4RZBQlUT5kH+0JS4VBpKfqaSVYDDpJ1rz9eNxlxq8BBgAcMHBu6BPeX8AAAAASUVORK5CYII=);
  background-position: center center;
  background-repeat: no-repeat;
  cursor: pointer;
  position: relative;
  -moz-opacity: 0.3;
  opacity: 0.3;
}
.gantt_grid_head_cell.gantt_grid_head_add {
  -moz-opacity: 0.6;
  opacity: 0.6;
  top: 0;
}
.gantt_grid_head_cell.gantt_grid_head_add:hover {
  -moz-opacity: 1;
  opacity: 1;
}
.gantt_grid_data .gantt_row:hover,
.gantt_grid_data .gantt_row.odd:hover {
  background-color: #ffebbc !important;
}
.gantt_grid_data .gantt_row:hover .gantt_add,
.gantt_grid_data .gantt_row.odd:hover .gantt_add {
  -moz-opacity: 1;
  opacity: 1;
}
.gantt_task_row,
.gantt_row {
  border-bottom: 1px solid #eae9e5;
}
.gantt_row,
.gantt_task_row {
  background-color: #FFFFFF;
}
.gantt_row.odd,
.gantt_task_row.odd {
  background-color: #FFFFFF;
}
.gantt_row,
.gantt_cell,
.gantt_task_row,
.gantt_task_cell,
.gantt_grid_head_cell,
.gantt_scale_cell {
  box-sizing: border-box;
  -moz-box-sizing: border-box;
}
.gantt_grid_head_cell,
.gantt_scale_cell {
  line-height: inherit;
}
.gantt_grid_scale .gantt_grid_column_resize_wrap {
  cursor: col-resize;
  position: absolute;
  width: 13px;
  margin-left: -7px;
}
.gantt_grid_column_resize_wrap .gantt_grid_column_resize {
  background-color: #cac8bd;
  height: 100%;
  width: 1px;
  margin: 0 auto;
}
.gantt_task_grid_row_resize_wrap {
  cursor: row-resize;
  position: absolute;
  height: 13px;
  margin-top: -7px;
  left: 0px;
  width: 100%;
}
.gantt_task_grid_row_resize_wrap .gantt_task_grid_row_resize {
  background-color: #eae9e5;
  top: 6px;
  height: 1px;
  width: 100%;
  margin: 0 auto;
  position: relative;
}
.gantt_drag_marker {
  pointer-events: none;
}
.gantt_drag_marker.gantt_grid_resize_area,
.gantt_drag_marker.gantt_row_grid_resize_area {
  background-color: rgba(231, 231, 231, 0.5);
  height: 100%;
  width: 100%;
  -moz-box-sizing: border-box;
  -webkit-box-sizing: border-box;
  box-sizing: border-box;
}
.gantt_drag_marker.gantt_grid_resize_area {
  border-left: 1px solid #cac8bd;
  border-right: 1px solid #cac8bd;
}
.gantt_drag_marker.gantt_row_grid_resize_area {
  border-top: 1px solid #cac8bd;
  border-bottom: 1px solid #cac8bd;
  pointer-events: none;
}
.gantt_row {
  display: flex;
}
.gantt_row > div {
  flex-shrink: 0;
  flex-grow: 0;
}
.gantt_cell {
  vertical-align: top;
  border-right: 1px solid #eae9e5;
  padding-left: 6px;
  padding-right: 6px;
  height: 100%;
  overflow: hidden;
  white-space: nowrap;
  font-size: 8pt;
}
.gantt_cell_tree {
  display: flex;
  flex-wrap: nowrap;
}
.gantt_grid_scale .gantt_last_cell,
.gantt_grid_data .gantt_last_cell,
.gantt_task .gantt_task_scale .gantt_scale_cell.gantt_last_cell,
.gantt_task_bg .gantt_last_cell {
  border-right-width: 0px;
}
.gantt_task .gantt_task_scale .gantt_scale_cell.gantt_last_cell {
  border-right-width: 1px;
}
.gantt_task_bg {
  overflow: hidden;
}
.gantt_scale_cell {
  display: inline-block;
  white-space: nowrap;
  overflow: hidden;
  border-right: 1px solid #cac8bd;
  text-align: center;
  height: 100%;
}
.gantt_task_cell {
  display: inline-block;
  height: 100%;
  border-right: 1px solid #eae9e5;
}
.gantt_layout_cell.gantt_ver_scroll {
  width: 0px;
  background-color: transparent;
  height: 1px;
  overflow-x: hidden;
  overflow-y: scroll;
  position: absolute;
  right: 0px;
  z-index: 1;
}
.gantt_ver_scroll > div {
  width: 1px;
  height: 1px;
}
.gantt_hor_scroll {
  height: 0px;
  background-color: transparent;
  width: 100%;
  clear: both;
  overflow-x: scroll;
  overflow-y: hidden;
}
.gantt_layout_cell .gantt_hor_scroll {
  position: absolute;
}
.gantt_hor_scroll > div {
  width: 5000px;
  height: 1px;
}
.gantt_tree_indent,
.gantt_tree_icon {
  flex-grow: 0;
  flex-shrink: 0;
}
.gantt_tree_indent {
  width: 15px;
  height: 100%;
}
.gantt_tree_content,
.gantt_tree_icon {
  vertical-align: top;
}
.gantt_tree_icon {
  width: 28px;
  height: 100%;
  background-repeat: no-repeat;
  background-position: center center;
}
.gantt_tree_content {
  height: 100%;
  white-space: nowrap;
  min-width: 0;
}
.gantt_tree_icon.gantt_open {
  background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAYAAABWzo5XAAAAWUlEQVQ4T2NkoBJgpJI5DCPVoJaWlv+EwrCmpgYcPHjDCGRQdXU1TrNaW1sZyDKIkZGR4f9/hCMHziCQS9AByGUD5yKYa6gWRujeI8lrVElHhAxBlh/GmRYA5MZIE4VV1O8AAAAASUVORK5CYII=);
  width: 18px;
  cursor: pointer;
}
.gantt_tree_icon.gantt_close {
  background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAYAAABWzo5XAAAATElEQVQ4T2NkoBJgpJI5DCPVoJaWlv+EwrCmpgYcPHjDCGRQdXU1TrNaW1sZhrhBjIyYIfD//3+GYeA1XNFGkteoko4IGYIsP4wzLQBu8jwTv5HhogAAAABJRU5ErkJggg==);
  width: 18px;
  cursor: pointer;
}
.gantt_tree_icon.gantt_blank {
  width: 18px;
}
.gantt_tree_icon.gantt_folder_open {
  background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAYAAABWzo5XAAAB30lEQVQ4T2NkQAKnZyn9R+bjY5um3WNElodz0A0xSbqMas6/nwzf/3AwcLL8YPjxYhvDlR11DMiGoRgkp63OIGY0ieHPt7cMF9ZGwQ0yjj0EZv/4L8TAwfiO4f+3awzn1mbgNsgkdidEM6sU3JA/Hy+jGhq+jOH/n09EGoTsKZihQK+dWWDCYBQ8AyxLnIugBv3/9RbMArmAkUuL4exiOwYD/26w2IWNpbi9Zhy5gYHh3zewxn9/PjMw/3nDwPD7HQODsDdY89nlAQw6Hk1gNt7ABjkb2YD/f78w/P3xloFFLoth8cRsBi2xp8QZZOxdDnYBzACQzb+/f2BgUywAB7iyaRA89DiFDVBchRL9Rs6RYBfADADRf398ZuDUrIUYZB6GiIZ/fxh4pP0YLm5IAIcVikH61m4YhjD++cbArtUI1oDson9/fjDwqqQxXFodgGmQlpEZ2CCQKyAmfgIG/i8GDt1u0gxS19IE6we54v//P2BDQABmkKKhF8JrQBZOF4EMghsC0kKuQZICXxj4xbQhroECRkYWoIvawYEtp20NF2dm42dgk4ljuLk5AjWMQCpgJQDMQJgumEEo/oJyYCUASpkCU4hcpIAMFXfeBHYRehmEbDBWg5AVIBuKzyAAfjsXIj7TBm0AAAAASUVORK5CYII=);
}
.gantt_tree_icon.gantt_folder_closed {
  background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAYAAABWzo5XAAAB90lEQVQ4T2NkQAKnZyn9R+bjY5um3WNElodzQIboWYUwsGnU4tR/Zp4+g6J1NQM/HzvDhe11DMiGoRhkErMHiyHMEDE2IQaQQZwcHAxqXvMZLq6LJMUgiCH//3xlYOSSJccgqAG/3oAN+vv7GwMLtxzDmSWOYBepe85kuLA+npCLmMEuYPj3neHfjxcQF/1+z8AibAU0yAVskIZbN8P5Tbm4DTKO2AI2AOQCxr+fwAb8+/2JgVXEAWzg2RU+EBc5VuEPbIPAhSgGMPwFuuznawZWuQSGxZPSGbTEnoINUrXJYbi0pwe3iww8m8AugBkAcsXv728Y2FXyGC6sDmJgZmZmYGNlZVC1TGRgYOZGMQw1HTlmgl0AM+D/ny9gNrtqMTi6QQaJC3Mw8Mm5gcU5pZzgYYWRIH/9+MzA+P8nMMC/AMPoK8O/P78YuHXrwLHEyMzGICnMCjHo3zcGDuV0sEtBCRPFIE1DB7ABkJiCGPL/3y8GHv0WuEEi/CwMwkru+A3S0DWBGwA2DGgICGAYpGALFsfpInUNTYa//xgYGKEGwAzjNugChxHIayAXicibMfxnZMdtkKTANwYeEV2G/0xsYMNANDjgJRIYHh4qhwQwMPrlVXUYGFl4GL7xeoLFUcIIpIiUYgRsKhDASgCUMgUmSQ5NNYMAK+sKIlqSof0AAAAASUVORK5CYII=);
}
.gantt_tree_icon.gantt_file {
  background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAYAAABWzo5XAAAA/klEQVQ4T63Uyw5FMBAG4CliIcHOE9pIeBrCxou69py/yUgvnLRymogS85lOL4L+1ITu1HUtfdx5no04xFwvgPR9T3EckxDOd8rf913du64jGzOgcRxpWRYDQvB5nrSuK5VleSVsYwY0TRNt20ZRFKlgzuI4DgUVRWGMXMccCEHcgEkp1ZCQaZ7n/hACuUboA8YFDNkCR7+qKmqa5qqVk5E9azrGKDDUKwgCzBgAYHjOsiwcAsb14hqmafoOQhY8k+gnSeIPIYAb9xl7Bekgw1hrQcW+Q9Te+m6jIOjXJn6EhmFQm9anYfbatnUXJIJ9jxH+kX4C3J8XPilZ33wAwx73EyvYLYIAAAAASUVORK5CYII=);
}
.gantt_grid_head_cell .gantt_sort {
  position: absolute;
  right: 5px;
  top: 8px;
  width: 7px;
  height: 13px;
  background-repeat: no-repeat;
  background-position: center center;
}
.gantt_grid_head_cell .gantt_sort.gantt_asc {
  background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAcAAAANCAYAAABlyXS1AAAARUlEQVR42mNgQAL1/VP/M2ADIIntF2/9x1AAlrh0C47hCmA60DFYwX88gIFGwNDY5D8uDFbg7hvwHx2jmIBTAlkB0e4BAEjlaNtBWJPnAAAAAElFTkSuQmCC);
}
.gantt_grid_head_cell .gantt_sort.gantt_desc {
  background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAcAAAANCAYAAABlyXS1AAAARUlEQVR4nGNgQAKGxib/GbABkIS7b8B/DAUwCRiGK0CXwFBAb1DfP/U/LszwHwi2X7qFgUEArBtdAVwCBmAKMCSQFSDzAWXXaOHsXeqkAAAAAElFTkSuQmCC);
}
.gantt_inserted,
.gantt_updated {
  font-weight: bold;
}
.gantt_deleted {
  text-decoration: line-through;
}
.gantt_invalid {
  background-color: #FFE0E0;
}
.gantt_error {
  color: red;
}
.gantt_status {
  right: 1px;
  padding: 5px 10px;
  background: rgba(155, 155, 155, 0.1);
  position: absolute;
  top: 1px;
  -webkit-transition: opacity 0.2s;
  transition: opacity 0.2s;
  opacity: 0;
}
.gantt_status.gantt_status_visible {
  opacity: 1;
}
#gantt_ajax_dots span {
  -webkit-transition: opacity 0.2s;
  transition: opacity 0.2s;
  background-repeat: no-repeat;
  opacity: 0;
}
#gantt_ajax_dots span.gantt_dot_visible {
  opacity: 1;
}
.gantt_column_drag_marker {
  border: 1px solid #CECECE;
  opacity: 0.8;
  pointer-events: none;
}
.gantt_grid_head_cell_dragged {
  border: 1px solid #CECECE;
  opacity: 0.3;
}
.gantt_grid_target_marker {
  position: absolute;
  top: 0;
  width: 2px;
  height: 100%;
  background-color: #ffb96d;
  transform: translateX(-1px);
}
.gantt_grid_target_marker::before,
.gantt_grid_target_marker::after {
  display: block;
  content: "";
  position: absolute;
  left: -5px;
  width: 0px;
  height: 0px;
  border: 6px solid rgba(0, 0, 0, 0);
}
.gantt_grid_target_marker::before {
  border-top-color: #ffb96d;
}
.gantt_grid_target_marker::after {
  bottom: 0;
  border-bottom-color: #ffb96d;
}
.gantt_message_area {
  position: fixed;
  right: 5px;
  width: 250px;
  z-index: 1000;
}
.gantt-info {
  min-width: 120px;
  padding: 4px 4px 4px 20px;
  font-family: "Verdana";
  z-index: 10000;
  margin: 5px;
  margin-bottom: 10px;
  -webkit-transition: all .5s ease;
  -moz-transition: all .5s ease;
  -o-transition: all .5s ease;
  transition: all .5s ease;
}
.gantt-info.hidden {
  height: 0px;
  padding: 0px;
  border-width: 0px;
  margin: 0px;
  overflow: hidden;
}
.gantt_modal_box {
  overflow: hidden;
  display: inline-block;
  min-width: 250px;
  width: 250px;
  text-align: center;
  position: fixed;
  z-index: 20000;
  box-shadow: 3px 3px 3px rgba(0, 0, 0, 0.07);
  font-family: "Verdana";
  border-radius: 6px;
  border: 1px solid #cac8bd;
  background: #fcfaf3;
}
.gantt_popup_title {
  border-top-left-radius: 6px;
  border-top-right-radius: 6px;
  border-width: 0px;
}
.gantt_button,
.gantt_popup_button {
  border: 1px solid #cac8bd;
  height: 25px;
  line-height: 25px;
  display: inline-block;
  margin: 0 5px;
  border-radius: 4px;
  background: #fff;
  background: #e0ded7;
}
.gantt-info,
.gantt_popup_button,
.gantt_button {
  user-select: none;
  -webkit-user-select: none;
  -moz-user-select: -moz-none;
  cursor: pointer;
}
.gantt_popup_text {
  overflow: hidden;
}
.gantt_popup_controls {
  border-radius: 6px;
  padding: 10px;
}
.gantt_popup_button {
  min-width: 100px;
}
div.dhx_modal_cover {
  background-color: #000;
  cursor: default;
  filter: progid:DXImageTransform.Microsoft.Alpha(opacity=20);
  opacity: 0.2;
  position: fixed;
  z-index: 19999;
  left: 0px;
  top: 0px;
  width: 100%;
  height: 100%;
  border: none;
  zoom: 1;
}
.gantt-info img,
.gantt_modal_box img {
  float: left;
  margin-right: 20px;
}
.gantt-alert-error,
.gantt-confirm-error {
  border: 1px solid #ff0000;
}
/*Skin section*/
.gantt_button input,
.gantt_popup_button div {
  border-radius: 4px;
  font-size: 14px;
  -moz-box-sizing: content-box;
  box-sizing: content-box;
  padding: 0px;
  margin: 0px;
  vertical-align: top;
}
.gantt_popup_title {
  border-bottom: 1px solid #cac8bd;
  height: 40px;
  line-height: 40px;
  font-size: 20px;
}
.gantt_popup_text {
  margin: 15px 15px 5px 15px;
  font-size: 14px;
  color: #000;
  min-height: 30px;
  border-radius: 6px;
}
.gantt-info,
.gantt-error {
  font-size: 14px;
  color: #000;
  box-shadow: 3px 3px 3px rgba(0, 0, 0, 0.07);
  padding: 0px;
  background-color: #FFFFFF;
  border-radius: 3px;
  border: 1px solid #FFFFFF;
}
.gantt-info div {
  padding: 5px 10px 5px 10px;
  background-color: #FFFFFF;
  border-radius: 3px;
  border: 1px solid #cac8bd;
}
.gantt-error {
  background-color: #d81b1b;
  border: 1px solid #ff3c3c;
}
.gantt-error div {
  background-color: #d81b1b;
  border: 1px solid #940000;
  color: #FFFFFF;
}
.gantt-warning {
  background-color: #FF9000;
  border: 1px solid #ffa633;
}
.gantt-warning div {
  background-color: #FF9000;
  border: 1px solid #b36500;
  color: #FFFFFF;
}
.gantt_grid div,
.gantt_data_area div {
  -ms-touch-action: none;
  -webkit-tap-highlight-color: rgba(0, 0, 0, 0);
}
.gantt_data_area {
  position: relative;
  overflow-x: hidden;
  overflow-y: hidden;
  -moz-user-select: -moz-none;
  -webkit-user-select: none;
  user-select: none;
}
.gantt_links_area {
  position: absolute;
  left: 0px;
  top: 0px;
}
.gantt_task_content,
.gantt_task_progress,
.gantt_side_content {
  line-height: inherit;
  overflow: hidden;
  height: 100%;
}
.gantt_task_content {
  font-size: 11px;
  color: #3f3f3f;
  width: 100%;
  top: 0;
  cursor: pointer;
  position: absolute;
  white-space: nowrap;
  text-align: center;
}
.gantt_task_progress {
  text-align: center;
  z-index: 0;
  background: #a7d991;
}
.gantt_task_progress_wrapper {
  border-radius: inherit;
  position: relative;
  width: 100%;
  height: 100%;
  overflow: hidden;
}
.gantt_task_line {
  -webkit-border-radius: 2px;
  -moz-border-radius: 2px;
  border-radius: 2px;
  position: absolute;
  -moz-box-sizing: border-box;
  box-sizing: border-box;
  background-color: #e1ffd4;
  border: 1px solid #7fbc64;
  -webkit-user-select: none;
  -moz-user-select: none;
  -moz-user-select: -moz-none;
}
.gantt_task_line.gantt_drag_move div {
  cursor: move;
}
.gantt_touch_move,
.gantt_touch_progress .gantt_touch_resize {
  -moz-transform: scale(1.02, 1.1);
  -o-transform: scale(1.02, 1.1);
  -webkit-transform: scale(1.02, 1.1);
  transform: scale(1.02, 1.1);
  -moz-transform-origin: 50%;
  -o-transform-origin: 50%;
  -webkit-transform-origin: 50%;
  transform-origin: 50%;
}
.gantt_touch_progress .gantt_task_progress_drag,
.gantt_touch_resize .gantt_task_drag {
  -moz-transform: scaleY(1.3);
  -o-transform: scaleY(1.3);
  -webkit-transform: scaleY(1.3);
  transform: scaleY(1.3);
  -moz-transform-origin: 50%;
  -o-transform-origin: 50%;
  -webkit-transform-origin: 50%;
  transform-origin: 50%;
}
.gantt_side_content {
  position: absolute;
  white-space: nowrap;
  color: #6e6e6e;
  top: 0;
  font-size: 11px;
  font-size: 10px;
}
.gantt_side_content.gantt_left {
  right: 100%;
  padding-right: 20px;
}
.gantt_side_content.gantt_right {
  left: 100%;
  padding-left: 20px;
}
.gantt_side_content.gantt_link_crossing {
  bottom: 6.75px;
  top: auto;
}
.gantt_task_link .gantt_line_wrapper,
.gantt_link_arrow {
  position: absolute;
  cursor: pointer;
}
.gantt_line_wrapper div {
  background-color: #ffb96d;
}
.gantt_task_link:hover .gantt_line_wrapper div {
  box-shadow: 0 0 5px 0px #ffb96d;
}
.gantt_task_link div.gantt_link_arrow {
  background-color: transparent;
  border-style: solid;
  width: 0px;
  height: 0px;
}
.gantt_link_control {
  position: absolute;
  width: 20px;
  top: 0px;
}
.gantt_link_control div {
  display: none;
  cursor: pointer;
  box-sizing: border-box;
  position: relative;
  top: 50%;
  margin-top: -7.5px;
  vertical-align: middle;
  border: 1px solid #929292;
  -webkit-border-radius: 6.5px;
  -moz-border-radius: 6.5px;
  border-radius: 6.5px;
  height: 13px;
  width: 13px;
  background-color: #f0f0f0;
}
.gantt_link_control.task_right div.gantt_link_point {
  margin-left: 7px;
}
.gantt_link_control div:hover {
  background-color: #FFF;
}
.gantt_link_control.task_left {
  left: -20px;
}
.gantt_link_control.task_right {
  right: -20px;
}
.gantt_task_line.gantt_selected .gantt_link_control div,
.gantt_task_line:hover .gantt_link_control div,
.gantt_task_line.gantt_drag_progress .gantt_link_control div,
.gantt_task_line.gantt_drag_move .gantt_link_control div,
.gantt_task_line.gantt_drag_resize .gantt_link_control div,
.gantt_task_line.gantt_selected .gantt_task_progress_drag,
.gantt_task_line:hover .gantt_task_progress_drag,
.gantt_task_line.gantt_drag_progress .gantt_task_progress_drag,
.gantt_task_line.gantt_drag_move .gantt_task_progress_drag,
.gantt_task_line.gantt_drag_resize .gantt_task_progress_drag,
.gantt_task_line.gantt_selected .gantt_task_drag,
.gantt_task_line:hover .gantt_task_drag,
.gantt_task_line.gantt_drag_progress .gantt_task_drag,
.gantt_task_line.gantt_drag_move .gantt_task_drag,
.gantt_task_line.gantt_drag_resize .gantt_task_drag {
  display: block;
}
.gantt_link_target .gantt_link_control div {
  display: block;
}
.gantt_link_source,
.gantt_link_target {
  box-shadow: 0px 0px 3px #a7d991;
}
.gantt_link_target.link_start_allow,
.gantt_link_target.link_finish_allow {
  box-shadow: 0px 0px 3px #ffdeba;
}
.gantt_link_target.link_start_deny,
.gantt_link_target.link_finish_deny {
  box-shadow: 0px 0px 3px #e87e7b;
}
.link_start_allow .gantt_link_control.task_start_date div,
.link_finish_allow .gantt_link_control.task_end_date div {
  background-color: #ffdeba;
  border-color: #ffb96d;
}
.link_start_deny .gantt_link_control.task_start_date div,
.link_finish_deny .gantt_link_control.task_end_date div {
  background-color: #e87e7b;
  border-color: #dd3e3a;
}
.gantt_link_arrow_right {
  border-width: 4px 0 4px 6px;
  border-top-color: transparent !important;
  border-right-color: transparent !important;
  border-bottom-color: transparent !important;
  border-left-color: #ffb96d;
  /*margin-top: -1px;*/
}
.gantt_link_arrow_left {
  border-width: 4px 6px 4px 0;
  margin-top: -1px;
  border-top-color: transparent !important;
  border-right-color: #ffb96d;
  border-bottom-color: transparent !important;
  border-left-color: transparent !important;
}
.gantt_link_arrow_up {
  border-width: 0 4px 6px 4px;
  border-color: transparent transparent #ffb96d transparent;
  border-top-color: transparent !important;
  border-right-color: transparent !important;
  border-bottom-color: #ffb96d;
  border-left-color: transparent !important;
}
.gantt_link_arrow_down {
  border-width: 4px 6px 0 4px;
  border-top-color: #ffb96d;
  border-right-color: transparent !important;
  border-bottom-color: transparent !important;
  border-left-color: transparent !important;
}
.gantt_task_drag,
.gantt_task_progress_drag {
  cursor: ew-resize;
  display: none;
  position: absolute;
}
.gantt_task_drag.task_right {
  cursor: e-resize;
}
.gantt_task_drag.task_left {
  cursor: w-resize;
}
.gantt_task_drag {
  height: 100%;
  width: 8px;
  z-index: 1;
  top: -1px;
}
.gantt_task_drag.task_left {
  left: -7px;
}
.gantt_task_drag.task_right {
  right: -7px;
}
.gantt_task_progress_drag {
  height: 8px;
  width: 8px;
  bottom: -4px;
  margin-left: -4px;
  background-position: bottom;
  background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAJCAYAAAAGuM1UAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoV2luZG93cykiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6Q0JCMkQyRDhDOTFDMTFFMjg3RTFCNUEzNUQwRDMxNjEiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6Q0JCMkQyRDlDOTFDMTFFMjg3RTFCNUEzNUQwRDMxNjEiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDpDQkIyRDJENkM5MUMxMUUyODdFMUI1QTM1RDBEMzE2MSIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDpDQkIyRDJEN0M5MUMxMUUyODdFMUI1QTM1RDBEMzE2MSIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/Ppy3ICwAAADsSURBVHjafFBbaoNQEB1vghtIPlJX4Z/iX/cSsoZQGl80JZvIAvxVf1yNX6EFH+ADK8Y6nblQaGzagXNnmHPODHMVRIR5+L7/Sqm2bfv0i2TDT3ied4zjGBlU7+f8XPzCwrZtsSzLb9PTXQMRfhRFWFUVdl0nURQFco+45xsDNdwwDOVUNuR5LlHXNWZZhsyR5sDahRDC1XXdsSwLFCHgo+/hc5okhusVVFUFTdNgHMfHIAhQ0N2OaZowkbtpGhiG4Qa0RX6OYRicvCU9b2maPqzWa/grKtpE93D5zoZtkiRnyhv4Py6E3ZcAAwDb89Sl5rtPtAAAAABJRU5ErkJggg==);
  background-repeat: no-repeat;
  z-index: 1;
}
.gantt_task_progress_drag:hover {
  background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAJCAYAAAAGuM1UAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAjklEQVQY043LwQ0BURjE8aEKPfy3EoWoQQTZCKKI5yUvX0m7W4Jw1sC4cNjF8kvmNDMT2xqqquoo6d627emttN0LcIgIR4SB5bAfjvcR4ZfnafXxAOxKKR4qpRhY9w5AnXP2NzlnAxvbElCnlPxLSsnAVoD/BXgq6do0jSyNpuk6SbpNgLmks6SZxl0kLR44uvaQZ7V7eAAAAABJRU5ErkJggg==);
}
.gantt_link_tooltip {
  box-shadow: 3px 3px 3px #888888;
  background-color: #fff;
  border-left: 1px dotted #cecece;
  border-top: 1px dotted #cecece;
  font-family: Tahoma;
  font-size: 8pt;
  color: #444;
  padding: 6px;
  line-height: 20px;
}
.gantt_link_direction {
  height: 0px;
  border: 0px none #ffb96d;
  border-bottom-style: dashed;
  border-bottom-width: 2px;
  transform-origin: 0% 0%;
  -ms-transform-origin: 0% 0%;
  -webkit-transform-origin: 0% 0%;
  z-index: 2;
  margin-left: 1px;
  position: absolute;
}
.gantt_grid_data .gantt_row.gantt_selected,
.gantt_grid_data .gantt_row.odd.gantt_selected {
  background-color: #ffebbc !important;
}
.gantt_task_row.gantt_selected {
  background-color: #ffebbc !important;
}
.gantt_task_row.gantt_selected .gantt_task_cell {
  border-right-color: #ffdc89;
}
.gantt_task_line.gantt_selected {
  box-shadow: 0 0 5px #a7d991;
}
.gantt_task_line.gantt_project.gantt_selected {
  box-shadow: 0 0 5px #9ab9f1;
}
.gantt_task_line.gantt_milestone {
  visibility: hidden;
  background-color: #DB7DC5;
  border: 0px solid #cd49ae;
  box-sizing: content-box;
  -moz-box-sizing: content-box;
}
.gantt_task_line.gantt_milestone div {
  visibility: visible;
}
.gantt_task_line.gantt_milestone .gantt_task_content {
  background: inherit;
  border: inherit;
  border-width: 1px;
  border-radius: inherit;
  box-sizing: border-box;
  -moz-box-sizing: border-box;
  -webkit-transform: rotate(45deg);
  -moz-transform: rotate(45deg);
  -ms-transform: rotate(45deg);
  -o-transform: rotate(45deg);
  transform: rotate(45deg);
}
.gantt_task_line.gantt_task_inline_color {
  border-color: #999999;
}
.gantt_task_line.gantt_task_inline_color .gantt_task_progress {
  background-color: #363636;
  opacity: 0.2;
}
.gantt_task_line.gantt_task_inline_color.gantt_selected {
  box-shadow: 0 0 5px #999999;
}
.gantt_task_line.gantt_task_inline_color.gantt_project.gantt_selected {
  box-shadow: 0 0 5px #999999;
}
.gantt_task_link.gantt_link_inline_color:hover .gantt_line_wrapper div {
  box-shadow: 0 0 5px 0px #999999;
}
.gantt_critical_task {
  background-color: #e63030;
  border-color: #9d3a3a;
}
.gantt_critical_task .gantt_task_progress {
  background-color: rgba(0, 0, 0, 0.4);
}
.gantt_critical_link .gantt_line_wrapper > div {
  background-color: #e63030;
}
.gantt_critical_link .gantt_link_arrow {
  border-color: #e63030;
}
.gantt_row:focus,
.gantt_cell:focus,
.gantt_btn_set:focus,
.gantt_qi_big_icon:focus,
.gantt_popup_button:focus,
.gantt_grid_head_cell:focus {
  -moz-box-shadow: inset 0px 0px 1px 1px #4d90fe;
  -webkit-box-shadow: inset 0px 0px 1px 1px #4d90fe;
  box-shadow: inset 0px 0px 1px 1px #4d90fe;
}
.gantt_split_parent,
.gantt_split_subproject {
  opacity: 0.1;
  pointer-events: none;
}
.gantt_rollup_child .gantt_link_control,
.gantt_rollup_child:hover .gantt_link_control {
  display: none;
}
.gantt_unselectable,
.gantt_unselectable div {
  -webkit-user-select: none;
  -moz-user-select: none;
  -moz-user-select: -moz-none;
}
.gantt_cal_light {
  -webkit-tap-highlight-color: transparent;
  background: #f4f2ea;
  border-radius: 6px;
  font-family: "Verdana";
  font-size: 11px;
  border: 1px solid #cac8bd;
  color: #3f3f3f;
  font-size: 8pt;
  position: absolute;
  z-index: 10001;
  width: 550px;
  height: 250px;
  box-shadow: 3px 3px 3px rgba(0, 0, 0, 0.07);
}
.gantt_cal_light_wide {
  width: 650px;
}
.gantt_cal_light select {
  font-family: "Verdana";
  border: 1px solid #cac8bd;
  font-size: 11px;
  padding: 2px;
  margin: 0px;
}
.gantt_cal_ltitle {
  padding: 7px 10px;
  overflow: hidden;
  white-space: nowrap;
  -webkit-border-top-left-radius: 6px;
  -webkit-border-bottom-left-radius: 0;
  -webkit-border-top-right-radius: 6px;
  -webkit-border-bottom-right-radius: 0;
  -moz-border-radius-topleft: 6px;
  -moz-border-radius-bottomleft: 0;
  -moz-border-radius-topright: 6px;
  -moz-border-radius-bottomright: 0;
  border-top-left-radius: 6px;
  border-bottom-left-radius: 0;
  border-top-right-radius: 6px;
  border-bottom-right-radius: 0;
}
.gantt_cal_ltitle span {
  white-space: nowrap;
}
.gantt_cal_lsection {
  color: #727272;
  font-weight: bold;
  padding: 12px 0px 5px 10px;
}
.gantt_cal_lsection .gantt_fullday {
  float: right;
  margin-right: 5px;
  font-size: 12px;
  font-weight: normal;
  line-height: 20px;
  vertical-align: top;
  cursor: pointer;
}
.gantt_cal_lsection {
  font-size: 13px;
}
.gantt_cal_ltext {
  padding: 2px    10px;
  overflow: hidden;
}
.gantt_cal_ltext textarea {
  overflow-y: auto;
  overflow-x: hidden;
  font-family: "Verdana";
  font-size: 11px;
  -moz-box-sizing: border-box;
  -webkit-box-sizing: border-box;
  box-sizing: border-box;
  border: 1px solid #cac8bd;
  height: 100%;
  width: 100%;
  outline: none !important;
  resize: none;
}
.gantt_section_constraint [data-constraint-time-select] {
  margin-left: 20px;
}
.gantt_time {
  font-weight: bold;
}
.gantt_cal_light .gantt_title {
  padding-left: 10px;
}
.gantt_cal_larea {
  border: 1px solid #cac8bd;
  border-left: none;
  border-right: none;
  background-color: #fff;
  overflow: hidden;
  height: 1px;
}
.gantt_btn_set {
  margin: 10px 7px 5px 10px;
  padding: 5px 15px 5px 10px;
  float: left;
  -webkit-border-radius: 4px;
  -moz-border-radius: 4px;
  border-radius: 4px;
  border-width: 0;
  border-color: #cac8bd;
  border-style: solid;
  height: 27px;
  color: #4f4f4f;
  background: #fff;
  background: #e0ded7;
  -moz-box-sizing: border-box;
  -webkit-box-sizing: border-box;
  box-sizing: border-box;
  cursor: pointer;
}
.gantt_hidden {
  display: none;
}
.gantt_btn_set div {
  float: left;
  font-size: 13px;
  height: 17px;
  line-height: 17px;
  background-repeat: no-repeat;
  vertical-align: middle;
}
.gantt_save_btn {
  background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAYAAABWzo5XAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoV2luZG93cykiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6QUUzMDA3NzlDOTFEMTFFMkJBQTNFMTU1NTdFNUNFMTMiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6QUUzMDA3N0FDOTFEMTFFMkJBQTNFMTU1NTdFNUNFMTMiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDpBRTMwMDc3N0M5MUQxMUUyQkFBM0UxNTU1N0U1Q0UxMyIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDpBRTMwMDc3OEM5MUQxMUUyQkFBM0UxNTU1N0U1Q0UxMyIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PtHrmoUAAAF4SURBVHjaYvr//z8DNTATA5UA1QxiIUdTQEAAG5CaA8S6QGyyYcOGvyzkGMLIyLgSGC4BHBwcr1RUVBhJdhHQEGagIctAhjAzM/9OSkrqd3Nz+ws3CKjAA0hNA+JcoDO34jIESC0FGhIM4tvb2y8FGjIbyPwPD2wNDQ1RIKUItG09UIM3LkOAOBzEB3rnaF5eXieQ+RYl1jo6Og4oKCicAtrGCjXMA82Q+TBD+Pj4HtfU1NQDmTewRf/jjIyMNmDgfYAatgnJMFDsxIIYrKysX7Ozs9sFBAT240xHQO/t8PT0BGliQHLZdiA3AabGz89vlrm5+RIg8x++BPkzPj5+Msj/UMM4gBTciwYGBttiY2MnAJmfiUnZj4CB2MzFxfUGWVBcXPx6WVlZE0ie6CwiJye3D+il6UCvgZ0PCreCggKQ4adIzWu/w8LCpoO8wsLC8j0yMnKipqbmelh6wQUYQUUADmACxDpADArwl4RSPT6DBqYYAQgwANyusz7jloxAAAAAAElFTkSuQmCC);
  margin-top: 2px;
  width: 21px;
}
.gantt_cancel_btn {
  margin-top: 2px;
  background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAYAAABWzo5XAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoV2luZG93cykiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6QjQxN0VEOUZDOTFEMTFFMkFFMjE4MDI4MUJDNDQ1NDkiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6QjQxN0VEQTBDOTFEMTFFMkFFMjE4MDI4MUJDNDQ1NDkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDpCNDE3RUQ5REM5MUQxMUUyQUUyMTgwMjgxQkM0NDU0OSIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDpCNDE3RUQ5RUM5MUQxMUUyQUUyMTgwMjgxQkM0NDU0OSIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/Pq9E2PUAAAH/SURBVHjaYvz//z8DNQAjTQ0KCAjgAVJFQOwBxGZQ4VNAvAOI+zZs2PCFoEFAQ+wZGRkXAMUVsNrMyPgAKJcANOwgToOAhgQCqXUgtqCg4ANXV9ctzs7Od0D8vXv3quzYsSPw06dP0lDl/kDDNmEYBDRECGjbYyCfS09Pb0dNTc1sNja2M0CpF1C1EjExMfu/fPmiBHXZZ5CrgYa9A/FZYCaysLCU/vnzh0tUVPRGU1NTPVDoNBD/R3ItyKVKAgICj/79+8cIdJksSA9QrBIkz4RkUBCINjU1XQUNWGRDQC4zBhrycMGCBYW2trbLkPWgGPTz50+wk6WlpTegBT6yIaCYXMfJybkRJPf7928ZDIOYmZl/g+jjx4+/xmcISPz27dsfYNowDOLi4gIb8PDhQ1N8hkDVGIBobm7ulxgGAb0EClyGX79+leAzBCjH9vXr13pkPSgGhYeHTwd6DxhUP62ghjzCZggw2icCw0YdGNDfQXrgkQVjGBgYHPHx8Zm9cePGHGhA/gdq/ANkysGUAHELMO3ogji+vr6zQXpwZREFkEErV66M//btmwi2LAIMyzdAlyz09/efDAoufJlW8tWrVx7Tp08PevDggc779+8VYFlGQUHhSmZm5joxMTFQ5n1OTDHCCsT6QAxKJ2JQsVdA/ASIL4J8TrPyCCDAAK8E80CvM3cMAAAAAElFTkSuQmCC);
  width: 20px;
}
.gantt_delete_btn {
  background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAYAAABWzo5XAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoV2luZG93cykiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6QjkzQUQ0MjVDOTFEMTFFMkEwRERFNzQ5NzZCRjlBODgiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6QjkzQUQ0MjZDOTFEMTFFMkEwRERFNzQ5NzZCRjlBODgiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDpCOTNBRDQyM0M5MUQxMUUyQTBEREU3NDk3NkJGOUE4OCIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDpCOTNBRDQyNEM5MUQxMUUyQTBEREU3NDk3NkJGOUE4OCIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/Pmbo+yIAAAB9SURBVHjaYvz//z8DNQALPsmAgAC4LRs2bGDEaxLIRdiwv78/kPqfBsNQPk71jDCvIdtOLEB2JRMDlQAjUmCnkaF/FtYwgoUDsTQypprXRg0a0QYhp2yGpqamzefOnfMhpMnIyGhLXV2dL06DgMAYigmBs1CM0yCyAUCAAQAlK4lJjSOjGQAAAABJRU5ErkJggg==);
  margin-top: 2px;
  width: 20px;
}
.gantt_cal_cover {
  width: 100%;
  height: 100%;
  position: fixed;
  z-index: 10000;
  top: 0px;
  left: 0px;
  background-color: black;
  opacity: 0.1;
  filter: progid:DXImageTransform.Microsoft.Alpha(opacity=10);
}
.gantt_custom_button {
  padding: 0px 3px 0px 3px;
  font-family: "Verdana";
  font-size: 11px;
  font-weight: normal;
  margin-right: 10px;
  margin-top: -5px;
  cursor: pointer;
  float: right;
  height: 21px;
  width: 90px;
  border: 1px solid #CECECE;
  text-align: center;
  -webkit-border-radius: 4px;
  -moz-border-radius: 4px;
  -ms-border-radius: 4px;
  -o-border-radius: 4px;
  border-radius: 4px;
}
.gantt_custom_button div {
  cursor: pointer;
  float: none;
  height: 21px;
  line-height: 21px;
  vertical-align: middle;
}
.gantt_custom_button div:first-child {
  display: none;
}
.gantt_cal_light_wide {
  width: 580px;
  padding: 2px 4px;
}
.gantt_cal_light_wide .gantt_cal_larea {
  -moz-box-sizing: border-box;
  -webkit-box-sizing: border-box;
  box-sizing: border-box;
  border: 1px solid #cac8bd;
}
.gantt_cal_light_wide .gantt_cal_lsection {
  border: 0px;
  float: left;
  text-align: right;
  width: 80px;
  height: 20px;
  padding: 5px 10px 0px 0px;
}
.gantt_cal_light_wide .gantt_wrap_section {
  position: relative;
  padding: 10px 0;
  overflow: hidden;
  border-bottom: 1px solid #eae9e5;
}
.gantt_cal_light_wide .gantt_section_time {
  overflow: hidden;
  padding-top: 2px !important;
  padding-right: 0px;
  height: 20px !important;
}
.gantt_cal_light_wide .gantt_cal_ltext {
  padding-right: 0px;
}
.gantt_cal_light_wide .gantt_cal_larea {
  padding: 0 10px;
  width: 100%;
}
.gantt_cal_light_wide .gantt_section_time {
  background: transparent;
}
.gantt_cal_light_wide .gantt_cal_checkbox label {
  padding-left: 0px;
}
.gantt_cal_light_wide .gantt_cal_lsection .gantt_fullday {
  float: none;
  margin-right: 0px;
  font-weight: bold;
  cursor: pointer;
}
.gantt_cal_light_wide .gantt_custom_button {
  position: absolute;
  top: 0;
  right: 0;
  margin-top: 2px;
}
.gantt_cal_light_wide .gantt_repeat_right {
  margin-right: 55px;
}
.gantt_cal_light_wide.gantt_cal_light_full {
  width: 738px;
}
.gantt_cal_wide_checkbox input {
  margin-top: 8px;
  margin-left: 14px;
}
.gantt_cal_light input {
  font-size: 11px;
}
.gantt_section_time {
  background-color: white;
  white-space: nowrap;
  padding: 2px 10px 5px;
  padding-top: 2px !important;
}
.gantt_section_time .gantt_time_selects {
  float: left;
  height: 25px;
}
.gantt_section_time .gantt_time_selects select {
  height: 23px;
  padding: 2px;
  border: 1px solid #cac8bd;
}
.gantt_duration {
  width: 100px;
  height: 23px;
  float: left;
  white-space: nowrap;
  margin-left: 20px;
  line-height: 23px;
}
.gantt_duration .gantt_duration_value,
.gantt_duration .gantt_duration_dec,
.gantt_duration .gantt_duration_inc {
  -moz-box-sizing: border-box;
  -webkit-box-sizing: border-box;
  box-sizing: border-box;
  text-align: center;
  vertical-align: top;
  height: 100%;
  border: 1px solid #cac8bd;
}
.gantt_duration .gantt_duration_value {
  width: 40px;
  padding: 3px 4px;
  border-left-width: 0;
  border-right-width: 0;
}
.gantt_duration .gantt_duration_value.gantt_duration_value_formatted {
  width: 70px;
}
.gantt_duration .gantt_duration_dec,
.gantt_duration .gantt_duration_inc {
  width: 20px;
  padding: 1px;
  padding-bottom: 1px;
  background: #fff;
  background: #e0ded7;
}
.gantt_duration .gantt_duration_dec {
  -moz-border-top-left-radius: 4px;
  -moz-border-bottom-left-radius: 4px;
  -webkit-border-top-left-radius: 4px;
  -webkit-border-bottom-left-radius: 4px;
  border-top-left-radius: 4px;
  border-bottom-left-radius: 4px;
}
.gantt_duration .gantt_duration_inc {
  margin-right: 4px;
  -moz-border-top-right-radius: 4px;
  -moz-border-bottom-right-radius: 4px;
  -webkit-border-top-right-radius: 4px;
  -webkit-border-bottom-right-radius: 4px;
  border-top-right-radius: 4px;
  border-bottom-right-radius: 4px;
}
.gantt_resources {
  max-height: 150px;
  height: auto;
  overflow-y: auto;
}
.gantt_resource_row {
  display: block;
  padding: 10px 0;
  border-bottom: 1px solid #eae9e5;
  cursor: pointer;
}
.gantt_resource_row input[type=checkbox]:not(:checked),
.gantt_resource_row input[type=checkbox]:not(:checked) ~ div {
  opacity: 0.5;
}
.gantt_resource_toggle {
  vertical-align: middle;
}
.gantt_resources_filter .gantt_resources_filter_input {
  padding: 1px 2px 1px 2px;
  box-sizing: border-box;
}
.gantt_resources_filter .switch_unsetted {
  vertical-align: middle;
}
.gantt_resource_cell {
  display: inline-block;
}
.gantt_resource_cell.gantt_resource_cell_checkbox {
  width: 24px;
  max-width: 24px;
  min-width: 24px;
  vertical-align: middle;
}
.gantt_resource_cell.gantt_resource_cell_label {
  width: 40%;
  max-width: 40%;
  vertical-align: middle;
}
.gantt_resource_cell.gantt_resource_cell_value {
  width: 30%;
  max-width: 30%;
  vertical-align: middle;
}
.gantt_resource_cell.gantt_resource_cell_value input,
.gantt_resource_cell.gantt_resource_cell_value select {
  width: 80%;
  vertical-align: middle;
  padding: 1px 2px 1px 2px;
  box-sizing: border-box;
}
.gantt_resource_cell.gantt_resource_cell_unit {
  width: 10%;
  max-width: 10%;
  vertical-align: middle;
}
.gantt_resource_early_value {
  opacity: 0.8;
  font-size: 0.9em;
}
/* Quick info */
.gantt_cal_quick_info {
  border: 1px solid #cac8bd;
  border-radius: 6px;
  position: absolute;
  z-index: 300;
  box-shadow: 3px 3px 3px rgba(0, 0, 0, 0.07);
  background-color: #fcfaf3;
  width: 300px;
  transition: left 0.5s ease, right 0.5s;
  -moz-transition: left 0.5s ease, right 0.5s;
  -webkit-transition: left 0.5s ease, right 0.5s;
  -o-transition: left 0.5s ease, right 0.5s;
}
.gantt_no_animate {
  transition: none;
  -moz-transition: none;
  -webkit-transition: none;
  -o-transition: none;
}
.gantt_cal_quick_info.gantt_qi_left .gantt_qi_big_icon {
  float: right;
}
.gantt_cal_qi_title {
  -webkit-border-top-left-radius: 6px;
  -webkit-border-bottom-left-radius: 0;
  -webkit-border-top-right-radius: 6px;
  -webkit-border-bottom-right-radius: 0;
  -moz-border-radius-topleft: 6px;
  -moz-border-radius-bottomleft: 0;
  -moz-border-radius-topright: 6px;
  -moz-border-radius-bottomright: 0;
  border-top-left-radius: 6px;
  border-bottom-left-radius: 0;
  border-top-right-radius: 6px;
  border-bottom-right-radius: 0;
  padding: 5px 0px 8px 12px;
  color: #3f3f3f;
  background-color: #f4f2ea;
  border-bottom: 1px solid #cac8bd;
}
.gantt_cal_qi_tdate {
  font-size: 14px;
  font-weight: bold;
}
.gantt_cal_qi_tcontent {
  font-size: 11px;
}
.gantt_cal_qi_content {
  padding: 16px 8px;
  font-size: 13px;
  color: #3f3f3f;
  overflow: hidden;
}
.gantt_cal_qi_controls {
  -webkit-border-top-left-radius: 0;
  -webkit-border-bottom-left-radius: 6px;
  -webkit-border-top-right-radius: 0;
  -webkit-border-bottom-right-radius: 6px;
  -moz-border-radius-topleft: 0;
  -moz-border-radius-bottomleft: 6px;
  -moz-border-radius-topright: 0;
  -moz-border-radius-bottomright: 6px;
  border-top-left-radius: 0;
  border-bottom-left-radius: 6px;
  border-top-right-radius: 0;
  border-bottom-right-radius: 6px;
  padding-left: 7px;
}
.gantt_cal_qi_controls .gantt_menu_icon {
  margin-top: 3.5px;
  background-repeat: no-repeat;
}
.gantt_cal_qi_controls .gantt_menu_icon.icon_edit {
  width: 20px;
  background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAAB3RJTUUH3QYFDgcMloNXJQAAAFNJREFUOMvt0zEOACAIA0Dkg30rL8TJTRTKZGJXyaWEKPKTCQAH4Ls37cItcDUzsxHNDLZNhCq7Gt1wh9ErV7EjyGAhyGLphlnsClWuS32rn0czAT/KLVk9yshBAAAAAElFTkSuQmCC);
}
.gantt_cal_qi_controls .gantt_menu_icon.icon_delete {
  width: 20px;
  background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAYAAABWzo5XAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoV2luZG93cykiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6QjkzQUQ0MjVDOTFEMTFFMkEwRERFNzQ5NzZCRjlBODgiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6QjkzQUQ0MjZDOTFEMTFFMkEwRERFNzQ5NzZCRjlBODgiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDpCOTNBRDQyM0M5MUQxMUUyQTBEREU3NDk3NkJGOUE4OCIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDpCOTNBRDQyNEM5MUQxMUUyQTBEREU3NDk3NkJGOUE4OCIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/Pmbo+yIAAAB9SURBVHjaYvz//z8DNQALPsmAgAC4LRs2bGDEaxLIRdiwv78/kPqfBsNQPk71jDCvIdtOLEB2JRMDlQAjUmCnkaF/FtYwgoUDsTQypprXRg0a0QYhp2yGpqamzefOnfMhpMnIyGhLXV2dL06DgMAYigmBs1CM0yCyAUCAAQAlK4lJjSOjGQAAAABJRU5ErkJggg==);
}
.gantt_qi_big_icon {
  font-size: 13px;
  border-radius: 4px;
  color: #4f4f4f;
  background: #fff;
  background: #e0ded7;
  margin: 5px 9px 8px 0px;
  min-width: 60px;
  line-height: 27px;
  vertical-align: middle;
  padding: 0px 10px 0px 5px;
  cursor: pointer;
  border: 1px solid #cac8bd;
}
.gantt_cal_qi_controls div {
  float: left;
  height: 27px;
  text-align: center;
  line-height: 27px;
}
.gantt_cal_quick_info.gantt_qi_hidden {
  display: none;
}
.gantt_tooltip {
  padding: 10px;
  position: absolute;
  z-index: 50;
  white-space: nowrap;
}
.gantt_resource_marker {
  position: absolute;
  text-align: center;
  font-size: 14px;
  color: #FFF;
}
.gantt_resource_marker_ok {
  background: rgba(78, 208, 134, 0.75);
}
.gantt_resource_marker_overtime {
  background: rgba(255, 134, 134, 0.69);
}
.gantt_histogram_label {
  width: 100%;
  height: 100%;
  position: absolute;
  z-index: 1;
  font-weight: bold;
  font-size: 11px;
}
.gantt_histogram_fill {
  background-color: rgba(41, 157, 180, 0.2);
  width: 100%;
  position: absolute;
  bottom: 0;
}
.gantt_histogram_hor_bar {
  height: 1px;
  position: absolute;
  background: #299DB4;
  margin-top: -1px;
  margin-left: -1px;
}
.gantt_histogram_vert_bar {
  width: 1px;
  position: absolute;
  background: #299DB4;
  margin-left: -1px;
}
.gantt_histogram_cell {
  position: absolute;
  text-align: center;
  font-size: 11px;
  color: #000000;
}
.gantt_marker {
  height: 100%;
  width: 2px;
  top: 0;
  position: absolute;
  text-align: center;
  background-color: rgba(255, 0, 0, 0.4);
  -moz-box-sizing: border-box;
  -webkit-box-sizing: border-box;
  box-sizing: border-box;
}
.gantt_marker .gantt_marker_content {
  padding: 5px;
  background: inherit;
  color: white;
  position: absolute;
  font-size: 12px;
  line-height: 12px;
  opacity: 0.8;
}
.gantt_marker_area {
  position: absolute;
  top: 0;
  left: 0;
}
.gantt_grid_editor_placeholder {
  position: absolute;
}
.gantt_grid_editor_placeholder > div,
.gantt_grid_editor_placeholder input,
.gantt_grid_editor_placeholder select {
  width: 100%;
  height: 100%;
  box-sizing: border-box;
}
.gantt_row_placeholder div {
  opacity: 0.5;
}
.gantt_row_placeholder .gantt_file,
.gantt_row_placeholder .gantt_add {
  display: none;
}
.gantt_drag_marker.gantt_grid_dnd_marker {
  background-color: transparent;
  transition: all 0.1s ease ;
}
.gantt_grid_dnd_marker_line {
  height: 4px;
  width: 100%;
  background-color: #3498db;
}
.gantt_grid_dnd_marker_line::before {
  background: #fff;
  width: 12px;
  height: 12px;
  box-sizing: border-box;
  border: 3px solid #3498db;
  border-radius: 6px;
  content: "";
  line-height: 1px;
  display: block;
  position: absolute;
  margin-left: -11px;
  margin-top: -4px;
  pointer-events: none;
}
.gantt_grid_dnd_marker_folder {
  height: 100%;
  width: 100%;
  position: absolute;
  pointer-events: none;
  box-sizing: border-box;
  box-shadow: 0 0 0px 2px #3f98db inset;
  background: transparent;
}
.gantt_overlay_area {
  position: absolute;
  height: inherit;
  width: inherit;
  top: 0;
  left: 0;
  display: none;
}
.gantt_overlay {
  position: absolute;
  left: 0;
  top: 0;
  height: inherit;
  width: inherit;
}
.gantt_click_drag_rect {
  position: absolute;
  left: 0;
  top: 0;
  outline: 1px solid #3f98db;
  background-color: rgba(52, 152, 219, 0.3);
}
.gantt_timeline_move_available,
.gantt_timeline_move_available * {
  cursor: move;
}
.gantt_rtl .gantt_grid {
  text-align: right;
}
.gantt_rtl .gantt_row,
.gantt_rtl .gantt_cell {
  flex-direction: row-reverse;
}
.gantt_layout_content {
  width: 100%;
  overflow: auto;
  box-sizing: border-box;
}
.gantt_layout_cell {
  position: relative;
  box-sizing: border-box;
}
.gantt_layout_cell > .gantt_layout_header {
  background: #33aae8;
  color: white;
  font-size: 17px;
  padding: 5px 10px;
  box-sizing: border-box;
}
.gantt_layout_header.collapsed_x {
  background: #a9a9a9;
}
.gantt_layout_header.collapsed_x .gantt_header_arrow:before {
  content: "\21E7";
}
.gantt_layout_header.collapsed_y {
  background: #a9a9a9;
}
.gantt_layout_header.collapsed_y .gantt_header_arrow:before {
  content: "\21E9";
}
.gantt_layout_header {
  cursor: pointer;
}
.gantt_layout_header .gantt_header_arrow {
  float: right;
  text-align: right;
}
.gantt_layout_header .gantt_header_arrow:before {
  content: "\21E6";
}
.gantt_layout_header.vertical .gantt_header_arrow:before {
  content: "\21E7";
}
.gantt_layout_outer_scroll_vertical .gantt_layout_content {
  overflow-y: hidden;
}
.gantt_layout_outer_scroll_horizontal .gantt_layout_content {
  overflow-x: hidden;
}
.gantt_layout_x > .gantt_layout_cell {
  display: inline-block;
  vertical-align: top;
}
.gantt_layout_x {
  white-space: nowrap;
}
.gantt_resizing {
  opacity: 0.7;
  background: #f2f2f2;
}
.gantt_layout_cell_border_right.gantt_resizer {
  overflow: visible;
  border-right: 0;
}
.gantt_resizer {
  cursor: e-resize;
  position: relative;
}
.gantt_resizer_y {
  cursor: n-resize;
}
.gantt_resizer_stick {
  background: #33aae8;
  z-index: 9999;
  position: absolute;
  top: 0;
  width: 100%;
}
.gantt_resizer_x .gantt_resizer_x {
  position: absolute;
  width: 20px;
  height: 100%;
  margin-left: -10px;
  top: 0;
  left: 0;
  z-index: 1;
}
.gantt_resizer_y .gantt_resizer_y {
  position: absolute;
  height: 20px;
  width: 100%;
  top: -10px;
  left: 0;
  z-index: 1;
}
.gantt_resizer_error {
  background: indianred!important;
}
.gantt_noselect {
  -webkit-user-select: none;
  user-select: none;
}
.gantt_layout_cell_border_left {
  border-left: 1px solid #cac8bd;
}
.gantt_layout_cell_border_right {
  border-right: 1px solid #cac8bd;
}
.gantt_layout_cell_border_top {
  border-top: 1px solid #cac8bd;
}
.gantt_layout_cell_border_bottom {
  border-bottom: 1px solid #cac8bd;
}
.gantt_layout_cell_border_transparent {
  border-color: transparent;
}
.gantt_window {
  position: absolute;
  top: 50%;
  left: 50%;
  z-index: 999999999;
  background: white;
}
.gantt_window_content {
  position: relative;
}
.gantt_window_content_header {
  background: #39c;
  color: #ffffff;
  height: 33px;
  padding: 10px 10px 0 10px;
  border-bottom: solid 2px #ffffff;
  position: relative;
}
.gantt_window_content_header_text {
  padding-left: 10%;
}
.gantt_window_content_header_buttons {
  position: absolute;
  top: 10px;
  right: 10px;
}
.gantt_window_content_header_buttons:hover {
  color: #000000;
  cursor: pointer;
}
.gantt_window_content_resizer {
  position: absolute;
  width: 15px;
  height: 15px;
  bottom: 0;
  line-height: 15px;
  right: -1px;
  text-align: center;
  background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA8AAAAPCAMAAAAMCGV4AAAABlBMVEUAAAAAAAClZ7nPAAAAAXRSTlMAQObYZgAAABZJREFUeAFjIAUwUshlpJDLSIhLGAAACQ4AFk79JaMAAAAASUVORK5CYII=);
  cursor: nw-resize;
  z-index: 999;
}
.gantt_window_content_frame {
  position: absolute;
  top: 0;
  left: 0;
  width: 100%;
  height: 100%;
  background: rgba(0, 0, 0, 0.1);
  z-index: 9999;
}
.gantt_window_drag {
  cursor: pointer!important;
}
.gantt_window_resizing {
  overflow: visible;
}
.gantt_window_resizing_body {
  overflow: hidden!important;
}
.gantt_window_modal {
  background: rgba(0, 0, 0, 0.1);
  z-index: 9999;
  top: 0;
  left: 0;
  width: 100%;
  height: 100%;
  position: fixed;
}
.gantt_container,
.gantt_cal_light,
.gantt_message_area,
.gantt_modal_box,
.gantt_cal_quick_info,
.gantt_tooltip {
  text-rendering: optimizeLegibility;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
}
.gantt_noselect {
  -moz-user-select: -moz-none;
  -webkit-user-select: none;
  -ms-user-select: none;
  user-select: none;
}
.gantt_noselect .gantt_grid_data .gantt_row:hover,
.gantt_noselect .gantt_grid_data .gantt_row.odd:hover {
  background-color: unset;
}
.gantt_drag_marker {
  position: absolute;
  top: -1000px;
  left: -1000px;
  font-family: "Verdana";
  font-size: 11px;
  z-index: 1;
  white-space: nowrap;
}
.gantt_drag_marker .gantt_tree_indent,
.gantt_drag_marker .gantt_tree_icon.gantt_blank,
.gantt_drag_marker .gantt_tree_icon.gantt_open,
.gantt_drag_marker .gantt_tree_icon.gantt_close {
  display: none;
}
.gantt_empty_state_wrapper {
  position: relative;
}
.gantt_empty_state {
  height: 100%;
  max-width: 500px;
  box-sizing: border-box;
  white-space: pre-line;
  overflow-wrap: break-word;
  display: flex;
  flex-direction: column;
  justify-content: flex-start;
  margin: 0 auto;
}
.gantt_empty_state_image {
  background-image: url('data:image/png;base64,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');
  background-repeat: no-repeat;
  width: 100%;
  max-width: 500px;
  max-height: 500px;
  margin-left: auto;
  margin-right: auto;
  display: block;
  min-height: 0;
  height: 200px;
  background-size: contain;
  background-position-x: center;
  background-position-y: bottom;
  margin-top: 40px;
}
.gantt_empty_state_text {
  text-align: center;
}
.gantt_empty_state_text_link {
  color: #03A9F4;
  background-position: top right;
  background: none;
  opacity: 1;
  height: unset;
  cursor: pointer;
}
.gantt_drag_marker,
.gantt_drag_marker .gantt_row.odd {
  background-color: #FFFFFF;
}
.gantt_drag_marker .gantt_row {
  border-left: 1px solid #d3d1c8;
  border-top: 1px solid #d3d1c8;
}
.gantt_drag_marker .gantt_cell {
  border-color: #d3d1c8;
}
.gantt_row.gantt_over,
.gantt_task_row.gantt_over {
  background-color: #0070fe;
}
.gantt_row.gantt_transparent .gantt_cell {
  opacity: 0.7;
}
.gantt_task_row.gantt_transparent {
  background-color: #ffffff;
}
.gantt_popup_button.gantt_delete_button {
  border: 1px solid #98d27e;
  background: #a7d991;
}
.gantt_container_resize_watcher {
  background: transparent;
  width: 100%;
  height: 100%;
  position: absolute;
  top: 0px;
  left: 0px;
  z-index: -1;
  pointer-events: none;
  border: 0;
  box-sizing: border-box;
  opacity: 0;
}
src/components/dhtmlxGantt/codebase/sources/skins/dhtmlxgantt_skyblue.css
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,2016 @@
/*
@license
dhtmlxGantt v.8.0.6 Standard
This version of dhtmlxGantt is distributed under GPL 2.0 license and can be legally used in GPL projects.
To use dhtmlxGantt in non-GPL projects (and get Pro version of the product), please obtain Individual, Commercial, Enterprise or Ultimate license on our site https://dhtmlx.com/docs/products/dhtmlxGantt/#licensing or contact us at info@dhtmlx.com
(c) XB Software
*/
.buttonBg {
  background: #fff;
}
/* colors for items with inline styles assigned (task.color, link.color)*/
.gridHoverStyle {
  background-color: #ffe6b1 !important;
  background-color: #ffebc1;
  background-image: -webkit-linear-gradient(top, #ffe09d 0%, #ffeabb 100%);
  background-image: -moz-linear-gradient(top, #ffe09d 0%, #ffeabb 100%);
  background-image: -ms-linear-gradient(top, #ffe09d 0%, #ffeabb 100%);
  background-image: linear-gradient(to top, #ffe09d 0%, #ffeabb 100%);
  border-top-color: #ffc341;
  border-bottom-color: #ffc341;
}
.gridSelection {
  background-color: #ffe6b1 !important;
  border-bottom-color: #ffc341;
}
.timelineSelection {
  background-color: #ffe6b1 !important;
  background-color: #ffebc1;
  background-image: -webkit-linear-gradient(top, #ffe09d 0%, #ffeabb 100%);
  background-image: -moz-linear-gradient(top, #ffe09d 0%, #ffeabb 100%);
  background-image: -ms-linear-gradient(top, #ffe09d 0%, #ffeabb 100%);
  background-image: linear-gradient(to top, #ffe09d 0%, #ffeabb 100%);
  border-top-color: #ffc341;
  border-bottom-color: #ffc341;
}
.timelineSelection .gantt_task_cell {
  border-right-color: #ffce65;
}
/*
    milestone
*/
/*
    links dnd
*/
/*
    task resizers
*/
/*lightbox*/
/*
    Message
*/
.gantt_popup_shadow {
  box-shadow: 3px 3px 3px rgba(0, 0, 0, 0.07);
}
.gantt_cal_quick_info .gantt_cal_qi_title {
  background: #FFFFFF;
}
.gantt_cal_qi_controls .gantt_qi_big_icon .gantt_menu_icon.icon_delete {
  margin-top: 5px;
}
.gantt_popup_title {
  box-shadow: 0px 1px 1px #fff inset;
  background-color: #dfedff;
  background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #e4f0ff), color-stop(50%, #dfedff), color-stop(100%, #d5e8ff));
  /* old webkit */
  background-image: -webkit-linear-gradient(top, #e4f0ff 0%, #dfedff 50%, #d5e8ff 100%);
  background-image: -moz-linear-gradient(top, #e4f0ff 0%, #dfedff 60%, #d5e8ff 100%);
  background-image: -ms-linear-gradient(top, #e4f0ff 0%, #dfedff 60%, #d5e8ff 100%);
  background-image: -o-linear-gradient(top, #e4f0ff 0%, #dfedff 60%, #d5e8ff 100%);
  background-position: 0px 1px;
  background-repeat: repeat-x;
}
.gantt_tooltip {
  box-shadow: 3px 3px 3px rgba(0, 0, 0, 0.07);
  background-color: white;
  border-left: 1px solid rgba(0, 0, 0, 0.07);
  border-top: 1px solid rgba(0, 0, 0, 0.07);
  font-family: "Tahoma";
  font-size: 8pt;
  color: #1e2022;
}
.gantt_container {
  background-color: #FFFFFF;
  font-family: "Tahoma";
  font-size: 11px;
  border: 1px solid #a4bed4;
  position: relative;
  white-space: nowrap;
  overflow-x: hidden;
  overflow-y: hidden;
}
.gantt_touch_active {
  overscroll-behavior: none;
}
.gantt_task_scroll {
  overflow-x: scroll;
}
.gantt_task,
.gantt_grid {
  position: relative;
  overflow-x: hidden;
  overflow-y: hidden;
  display: inline-block;
  vertical-align: top;
}
.gantt_grid_scale,
.gantt_task_scale {
  color: #42464b;
  border-bottom: 1px solid #a4bed4;
  -moz-box-sizing: border-box;
  box-sizing: border-box;
}
.gantt_grid_scale {
  box-shadow: 0px 1px 1px #fff inset;
  background-color: #dfedff;
  background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #e4f0ff), color-stop(50%, #dfedff), color-stop(100%, #d5e8ff));
  /* old webkit */
  background-image: -webkit-linear-gradient(top, #e4f0ff 0%, #dfedff 50%, #d5e8ff 100%);
  background-image: -moz-linear-gradient(top, #e4f0ff 0%, #dfedff 60%, #d5e8ff 100%);
  background-image: -ms-linear-gradient(top, #e4f0ff 0%, #dfedff 60%, #d5e8ff 100%);
  background-image: -o-linear-gradient(top, #e4f0ff 0%, #dfedff 60%, #d5e8ff 100%);
  background-position: 0px 1px;
  background-repeat: repeat-x;
}
.gantt_task_scale {
  box-shadow: 0px 1px 1px #fff inset;
  background-color: #dfedff;
  background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #e4f0ff), color-stop(50%, #dfedff), color-stop(100%, #d5e8ff));
  /* old webkit */
  background-image: -webkit-linear-gradient(top, #e4f0ff 0%, #dfedff 50%, #d5e8ff 100%);
  background-image: -moz-linear-gradient(top, #e4f0ff 0%, #dfedff 60%, #d5e8ff 100%);
  background-image: -ms-linear-gradient(top, #e4f0ff 0%, #dfedff 60%, #d5e8ff 100%);
  background-image: -o-linear-gradient(top, #e4f0ff 0%, #dfedff 60%, #d5e8ff 100%);
  background-position: 0px 1px;
  background-repeat: repeat-x;
}
.gantt_task_vscroll {
  box-shadow: 0px 1px 1px #fff inset;
  background-color: #dfedff;
  background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #e4f0ff), color-stop(50%, #dfedff), color-stop(100%, #d5e8ff));
  /* old webkit */
  background-image: -webkit-linear-gradient(top, #e4f0ff 0%, #dfedff 50%, #d5e8ff 100%);
  background-image: -moz-linear-gradient(top, #e4f0ff 0%, #dfedff 60%, #d5e8ff 100%);
  background-image: -ms-linear-gradient(top, #e4f0ff 0%, #dfedff 60%, #d5e8ff 100%);
  background-image: -o-linear-gradient(top, #e4f0ff 0%, #dfedff 60%, #d5e8ff 100%);
  background-position: 0px 1px;
  background-repeat: repeat-x;
}
.gantt_scale_line {
  box-sizing: border-box;
  -moz-box-sizing: border-box;
  border-top: 1px solid #a4bed4;
}
.gantt_scale_line:first-child {
  border-top: none;
}
.gantt_grid_head_cell {
  display: inline-block;
  vertical-align: top;
  border-right: 1px solid #a4bed4;
  text-align: center;
  position: relative;
  cursor: default;
  height: 100%;
  box-sizing: border-box;
  -moz-box-sizing: border-box;
  line-height: 25px;
  -moz-user-select: -moz-none;
  -webkit-user-select: none;
  user-select: none;
  overflow: hidden;
}
.gantt_scale_line {
  clear: both;
}
.gantt_grid_data {
  width: 100%;
  overflow: hidden;
  position: relative;
}
.gantt_row {
  position: relative;
  -webkit-user-select: none;
  -moz-user-select: none;
  -moz-user-select: -moz-none;
}
.gantt_add,
.gantt_grid_head_add {
  width: 100%;
  height: 100%;
  background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoV2luZG93cykiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6NzZCMThBRUFCRTQ0MTFFMkFFMEFGMEFBMzJEN0RBRTIiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6NzZCMThBRUJCRTQ0MTFFMkFFMEFGMEFBMzJEN0RBRTIiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo3NkIxOEFFOEJFNDQxMUUyQUUwQUYwQUEzMkQ3REFFMiIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDo3NkIxOEFFOUJFNDQxMUUyQUUwQUYwQUEzMkQ3REFFMiIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PkVHygEAAAEpSURBVHjaYgzeGcyABfxnwA4Y0QVY/v79i1VlsUMxCr/3QC9WdTgN+P//P8Ohr4fAbDtuOwZc6lj+/PmDVeLfv39wTSA2LnU4DQC5AGYAiI1LHRNQ4j861pfSZ3j36x1YEwiD2CAxbGoZbRbZ/K/3qUcx9cPvDwzXv11n+PL3C5jPw8zDoMmlySDAKoCirnFLI8QLID/ufLOTARf48OcDw/Gfx1HE3EXcwa5j+f37N95AwgVAekB64QaATISB97/fM1z5dIXh85/PYD4vCy+DDp8OgyCrIIYBjFoTtDBSnYWyBYO9rj3DsbfHwHwrYSuGg5cPMpy4ewIzFoCmMKLjwzcOMwiwCMBjAcQGiWFTizchweRompDwuiBANoCgCxjFasQoys4AAQYARt4I/K036xQAAAAASUVORK5CYII=);
  background-position: center center;
  background-repeat: no-repeat;
  cursor: pointer;
  position: relative;
  -moz-opacity: 0.3;
  opacity: 0.3;
}
.gantt_grid_head_cell.gantt_grid_head_add {
  -moz-opacity: 0.6;
  opacity: 0.6;
  top: 0;
}
.gantt_grid_head_cell.gantt_grid_head_add:hover {
  -moz-opacity: 1;
  opacity: 1;
}
.gantt_grid_data .gantt_row:hover,
.gantt_grid_data .gantt_row.odd:hover {
  background-color: #ffe6b1 !important;
  background-color: #ffebc1;
  background-image: -webkit-linear-gradient(top, #ffe09d 0%, #ffeabb 100%);
  background-image: -moz-linear-gradient(top, #ffe09d 0%, #ffeabb 100%);
  background-image: -ms-linear-gradient(top, #ffe09d 0%, #ffeabb 100%);
  background-image: linear-gradient(to top, #ffe09d 0%, #ffeabb 100%);
  border-top-color: #ffc341;
  border-bottom-color: #ffc341;
}
.gantt_grid_data .gantt_row:hover .gantt_add,
.gantt_grid_data .gantt_row.odd:hover .gantt_add {
  -moz-opacity: 1;
  opacity: 1;
}
.gantt_task_row,
.gantt_row {
  border-bottom: 1px solid #ebebeb;
}
.gantt_row,
.gantt_task_row {
  background-color: #FFFFFF;
}
.gantt_row.odd,
.gantt_task_row.odd {
  background-color: #FFFFFF;
}
.gantt_row,
.gantt_cell,
.gantt_task_row,
.gantt_task_cell,
.gantt_grid_head_cell,
.gantt_scale_cell {
  box-sizing: border-box;
  -moz-box-sizing: border-box;
}
.gantt_grid_head_cell,
.gantt_scale_cell {
  line-height: inherit;
}
.gantt_grid_scale .gantt_grid_column_resize_wrap {
  cursor: col-resize;
  position: absolute;
  width: 13px;
  margin-left: -7px;
}
.gantt_grid_column_resize_wrap .gantt_grid_column_resize {
  background-color: #a4bed4;
  height: 100%;
  width: 1px;
  margin: 0 auto;
}
.gantt_task_grid_row_resize_wrap {
  cursor: row-resize;
  position: absolute;
  height: 13px;
  margin-top: -7px;
  left: 0px;
  width: 100%;
}
.gantt_task_grid_row_resize_wrap .gantt_task_grid_row_resize {
  background-color: #ebebeb;
  top: 6px;
  height: 1px;
  width: 100%;
  margin: 0 auto;
  position: relative;
}
.gantt_drag_marker {
  pointer-events: none;
}
.gantt_drag_marker.gantt_grid_resize_area,
.gantt_drag_marker.gantt_row_grid_resize_area {
  background-color: rgba(231, 231, 231, 0.5);
  height: 100%;
  width: 100%;
  -moz-box-sizing: border-box;
  -webkit-box-sizing: border-box;
  box-sizing: border-box;
}
.gantt_drag_marker.gantt_grid_resize_area {
  border-left: 1px solid #a4bed4;
  border-right: 1px solid #a4bed4;
}
.gantt_drag_marker.gantt_row_grid_resize_area {
  border-top: 1px solid #a4bed4;
  border-bottom: 1px solid #a4bed4;
  pointer-events: none;
}
.gantt_row {
  display: flex;
}
.gantt_row > div {
  flex-shrink: 0;
  flex-grow: 0;
}
.gantt_cell {
  vertical-align: top;
  border-right: 1px solid #ebebeb;
  padding-left: 6px;
  padding-right: 6px;
  height: 100%;
  overflow: hidden;
  white-space: nowrap;
}
.gantt_cell_tree {
  display: flex;
  flex-wrap: nowrap;
}
.gantt_grid_scale .gantt_last_cell,
.gantt_grid_data .gantt_last_cell,
.gantt_task .gantt_task_scale .gantt_scale_cell.gantt_last_cell,
.gantt_task_bg .gantt_last_cell {
  border-right-width: 0px;
}
.gantt_task .gantt_task_scale .gantt_scale_cell.gantt_last_cell {
  border-right-width: 1px;
}
.gantt_task_bg {
  overflow: hidden;
}
.gantt_scale_cell {
  display: inline-block;
  white-space: nowrap;
  overflow: hidden;
  border-right: 1px solid #a4bed4;
  text-align: center;
  height: 100%;
}
.gantt_task_cell {
  display: inline-block;
  height: 100%;
  border-right: 1px solid #ebebeb;
}
.gantt_layout_cell.gantt_ver_scroll {
  width: 0px;
  background-color: transparent;
  height: 1px;
  overflow-x: hidden;
  overflow-y: scroll;
  position: absolute;
  right: 0px;
  z-index: 1;
}
.gantt_ver_scroll > div {
  width: 1px;
  height: 1px;
}
.gantt_hor_scroll {
  height: 0px;
  background-color: transparent;
  width: 100%;
  clear: both;
  overflow-x: scroll;
  overflow-y: hidden;
}
.gantt_layout_cell .gantt_hor_scroll {
  position: absolute;
}
.gantt_hor_scroll > div {
  width: 5000px;
  height: 1px;
}
.gantt_tree_indent,
.gantt_tree_icon {
  flex-grow: 0;
  flex-shrink: 0;
}
.gantt_tree_indent {
  width: 15px;
  height: 100%;
}
.gantt_tree_content,
.gantt_tree_icon {
  vertical-align: top;
}
.gantt_tree_icon {
  width: 28px;
  height: 100%;
  background-repeat: no-repeat;
  background-position: center center;
}
.gantt_tree_content {
  height: 100%;
  white-space: nowrap;
  min-width: 0;
}
.gantt_tree_icon.gantt_open {
  background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAYAAABWzo5XAAAAWUlEQVQ4T2NkoBJgpJI5DCPVoJaWlv+EwrCmpgYcPHjDCGRQdXU1TrNaW1sZyDKIkZGR4f9/hCMHziCQS9AByGUD5yKYa6gWRujeI8lrVElHhAxBlh/GmRYA5MZIE4VV1O8AAAAASUVORK5CYII=);
  width: 18px;
  cursor: pointer;
}
.gantt_tree_icon.gantt_close {
  background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAYAAABWzo5XAAAATElEQVQ4T2NkoBJgpJI5DCPVoJaWlv+EwrCmpgYcPHjDCGRQdXU1TrNaW1sZhrhBjIyYIfD//3+GYeA1XNFGkteoko4IGYIsP4wzLQBu8jwTv5HhogAAAABJRU5ErkJggg==);
  width: 18px;
  cursor: pointer;
}
.gantt_tree_icon.gantt_blank {
  width: 18px;
}
.gantt_tree_icon.gantt_folder_open {
  background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAYAAABWzo5XAAAB30lEQVQ4T2NkQAKnZyn9R+bjY5um3WNElodz0A0xSbqMas6/nwzf/3AwcLL8YPjxYhvDlR11DMiGoRgkp63OIGY0ieHPt7cMF9ZGwQ0yjj0EZv/4L8TAwfiO4f+3awzn1mbgNsgkdidEM6sU3JA/Hy+jGhq+jOH/n09EGoTsKZihQK+dWWDCYBQ8AyxLnIugBv3/9RbMArmAkUuL4exiOwYD/26w2IWNpbi9Zhy5gYHh3zewxn9/PjMw/3nDwPD7HQODsDdY89nlAQw6Hk1gNt7ABjkb2YD/f78w/P3xloFFLoth8cRsBi2xp8QZZOxdDnYBzACQzb+/f2BgUywAB7iyaRA89DiFDVBchRL9Rs6RYBfADADRf398ZuDUrIUYZB6GiIZ/fxh4pP0YLm5IAIcVikH61m4YhjD++cbArtUI1oDson9/fjDwqqQxXFodgGmQlpEZ2CCQKyAmfgIG/i8GDt1u0gxS19IE6we54v//P2BDQABmkKKhF8JrQBZOF4EMghsC0kKuQZICXxj4xbQhroECRkYWoIvawYEtp20NF2dm42dgk4ljuLk5AjWMQCpgJQDMQJgumEEo/oJyYCUASpkCU4hcpIAMFXfeBHYRehmEbDBWg5AVIBuKzyAAfjsXIj7TBm0AAAAASUVORK5CYII=);
}
.gantt_tree_icon.gantt_folder_closed {
  background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAYAAABWzo5XAAAB90lEQVQ4T2NkQAKnZyn9R+bjY5um3WNElodzQIboWYUwsGnU4tR/Zp4+g6J1NQM/HzvDhe11DMiGoRhkErMHiyHMEDE2IQaQQZwcHAxqXvMZLq6LJMUgiCH//3xlYOSSJccgqAG/3oAN+vv7GwMLtxzDmSWOYBepe85kuLA+npCLmMEuYPj3neHfjxcQF/1+z8AibAU0yAVskIZbN8P5Tbm4DTKO2AI2AOQCxr+fwAb8+/2JgVXEAWzg2RU+EBc5VuEPbIPAhSgGMPwFuuznawZWuQSGxZPSGbTEnoINUrXJYbi0pwe3iww8m8AugBkAcsXv728Y2FXyGC6sDmJgZmZmYGNlZVC1TGRgYOZGMQw1HTlmgl0AM+D/ny9gNrtqMTi6QQaJC3Mw8Mm5gcU5pZzgYYWRIH/9+MzA+P8nMMC/AMPoK8O/P78YuHXrwLHEyMzGICnMCjHo3zcGDuV0sEtBCRPFIE1DB7ABkJiCGPL/3y8GHv0WuEEi/CwMwkru+A3S0DWBGwA2DGgICGAYpGALFsfpInUNTYa//xgYGKEGwAzjNugChxHIayAXicibMfxnZMdtkKTANwYeEV2G/0xsYMNANDjgJRIYHh4qhwQwMPrlVXUYGFl4GL7xeoLFUcIIpIiUYgRsKhDASgCUMgUmSQ5NNYMAK+sKIlqSof0AAAAASUVORK5CYII=);
}
.gantt_tree_icon.gantt_file {
  background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAYAAABWzo5XAAAA/klEQVQ4T63Uyw5FMBAG4CliIcHOE9pIeBrCxou69py/yUgvnLRymogS85lOL4L+1ITu1HUtfdx5no04xFwvgPR9T3EckxDOd8rf913du64jGzOgcRxpWRYDQvB5nrSuK5VleSVsYwY0TRNt20ZRFKlgzuI4DgUVRWGMXMccCEHcgEkp1ZCQaZ7n/hACuUboA8YFDNkCR7+qKmqa5qqVk5E9azrGKDDUKwgCzBgAYHjOsiwcAsb14hqmafoOQhY8k+gnSeIPIYAb9xl7Bekgw1hrQcW+Q9Te+m6jIOjXJn6EhmFQm9anYfbatnUXJIJ9jxH+kX4C3J8XPilZ33wAwx73EyvYLYIAAAAASUVORK5CYII=);
}
.gantt_grid_head_cell .gantt_sort {
  position: absolute;
  right: 5px;
  top: 8px;
  width: 7px;
  height: 13px;
  background-repeat: no-repeat;
  background-position: center center;
}
.gantt_grid_head_cell .gantt_sort.gantt_asc {
  background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAcAAAANCAYAAABlyXS1AAAARUlEQVR4nGNgQAKGxib/GbABkIS7b8B/DAUwCRiGK0CXwFBAb1DfP/U/LszwHwi2X7qFgUEArBtdAVwCBmAKMCSQFSDzAWXXaOHsXeqkAAAAAElFTkSuQmCC);
}
.gantt_grid_head_cell .gantt_sort.gantt_desc {
  background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAcAAAANCAYAAABlyXS1AAAARUlEQVR42mNgQAL1/VP/M2ADIIntF2/9x1AAlrh0C47hCmA60DFYwX88gIFGwNDY5D8uDFbg7hvwHx2jmIBTAlkB0e4BAEjlaNtBWJPnAAAAAElFTkSuQmCC);
}
.gantt_inserted,
.gantt_updated {
  font-weight: bold;
}
.gantt_deleted {
  text-decoration: line-through;
}
.gantt_invalid {
  background-color: #FFE0E0;
}
.gantt_error {
  color: red;
}
.gantt_status {
  right: 1px;
  padding: 5px 10px;
  background: rgba(155, 155, 155, 0.1);
  position: absolute;
  top: 1px;
  -webkit-transition: opacity 0.2s;
  transition: opacity 0.2s;
  opacity: 0;
}
.gantt_status.gantt_status_visible {
  opacity: 1;
}
#gantt_ajax_dots span {
  -webkit-transition: opacity 0.2s;
  transition: opacity 0.2s;
  background-repeat: no-repeat;
  opacity: 0;
}
#gantt_ajax_dots span.gantt_dot_visible {
  opacity: 1;
}
.gantt_column_drag_marker {
  border: 1px solid #CECECE;
  opacity: 0.8;
  pointer-events: none;
}
.gantt_grid_head_cell_dragged {
  border: 1px solid #CECECE;
  opacity: 0.3;
}
.gantt_grid_target_marker {
  position: absolute;
  top: 0;
  width: 2px;
  height: 100%;
  background-color: #4a8f43;
  transform: translateX(-1px);
}
.gantt_grid_target_marker::before,
.gantt_grid_target_marker::after {
  display: block;
  content: "";
  position: absolute;
  left: -5px;
  width: 0px;
  height: 0px;
  border: 6px solid rgba(0, 0, 0, 0);
}
.gantt_grid_target_marker::before {
  border-top-color: #4a8f43;
}
.gantt_grid_target_marker::after {
  bottom: 0;
  border-bottom-color: #4a8f43;
}
.gantt_message_area {
  position: fixed;
  right: 5px;
  width: 250px;
  z-index: 1000;
}
.gantt-info {
  min-width: 120px;
  padding: 4px 4px 4px 20px;
  font-family: "Tahoma";
  z-index: 10000;
  margin: 5px;
  margin-bottom: 10px;
  -webkit-transition: all .5s ease;
  -moz-transition: all .5s ease;
  -o-transition: all .5s ease;
  transition: all .5s ease;
}
.gantt-info.hidden {
  height: 0px;
  padding: 0px;
  border-width: 0px;
  margin: 0px;
  overflow: hidden;
}
.gantt_modal_box {
  overflow: hidden;
  display: inline-block;
  min-width: 250px;
  width: 250px;
  text-align: center;
  position: fixed;
  z-index: 20000;
  box-shadow: 3px 3px 3px rgba(0, 0, 0, 0.07);
  font-family: "Tahoma";
  border-radius: 0;
  border: 1px solid #a4bed4;
  background: #fff;
}
.gantt_popup_title {
  border-top-left-radius: 0;
  border-top-right-radius: 0;
  border-width: 0px;
}
.gantt_button,
.gantt_popup_button {
  border: 1px solid #a4bed4;
  height: 24px;
  line-height: 24px;
  display: inline-block;
  margin: 0 5px;
  border-radius: 4px;
  background: #fff;
  background-color: #f8f8f8;
  background-image: -webkit-linear-gradient(top, #E6E6E6 0%, #FFFFFF 100%);
  background-image: -moz-linear-gradient(top, #E6E6E6 0%, #FFFFFF 100%);
  background-image: -ms-linear-gradient(top, #E6E6E6 0%, #FFFFFF 100%);
  background-image: linear-gradient(to top, #E6E6E6 0%, #FFFFFF 100%);
}
.gantt-info,
.gantt_popup_button,
.gantt_button {
  user-select: none;
  -webkit-user-select: none;
  -moz-user-select: -moz-none;
  cursor: pointer;
}
.gantt_popup_text {
  overflow: hidden;
}
.gantt_popup_controls {
  border-radius: 6px;
  padding: 10px;
}
.gantt_popup_button {
  min-width: 100px;
}
div.dhx_modal_cover {
  background-color: #000;
  cursor: default;
  filter: progid:DXImageTransform.Microsoft.Alpha(opacity=20);
  opacity: 0.2;
  position: fixed;
  z-index: 19999;
  left: 0px;
  top: 0px;
  width: 100%;
  height: 100%;
  border: none;
  zoom: 1;
}
.gantt-info img,
.gantt_modal_box img {
  float: left;
  margin-right: 20px;
}
.gantt-alert-error,
.gantt-confirm-error {
  border: 1px solid #ff0000;
}
/*Skin section*/
.gantt_button input,
.gantt_popup_button div {
  border-radius: 4px;
  font-size: 15px;
  -moz-box-sizing: content-box;
  box-sizing: content-box;
  padding: 0px;
  margin: 0px;
  vertical-align: top;
}
.gantt_popup_title {
  border-bottom: 1px solid #a4bed4;
  height: 40px;
  line-height: 40px;
  font-size: 20px;
}
.gantt_popup_text {
  margin: 15px 15px 5px 15px;
  font-size: 14px;
  color: #000;
  min-height: 30px;
  border-radius: 0;
}
.gantt-info,
.gantt-error {
  font-size: 14px;
  color: #000;
  box-shadow: 3px 3px 3px rgba(0, 0, 0, 0.07);
  padding: 0px;
  background-color: #FFFFFF;
  border-radius: 3px;
  border: 1px solid #FFFFFF;
}
.gantt-info div {
  padding: 5px 10px 5px 10px;
  background-color: #FFFFFF;
  border-radius: 3px;
  border: 1px solid #a4bed4;
}
.gantt-error {
  background-color: #d81b1b;
  border: 1px solid #ff3c3c;
}
.gantt-error div {
  background-color: #d81b1b;
  border: 1px solid #940000;
  color: #FFFFFF;
}
.gantt-warning {
  background-color: #FFA000;
  border: 1px solid #ffb333;
}
.gantt-warning div {
  background-color: #FFA000;
  border: 1px solid #b37000;
  color: #FFFFFF;
}
.gantt_grid div,
.gantt_data_area div {
  -ms-touch-action: none;
  -webkit-tap-highlight-color: rgba(0, 0, 0, 0);
}
.gantt_data_area {
  position: relative;
  overflow-x: hidden;
  overflow-y: hidden;
  -moz-user-select: -moz-none;
  -webkit-user-select: none;
  user-select: none;
}
.gantt_links_area {
  position: absolute;
  left: 0px;
  top: 0px;
}
.gantt_task_content,
.gantt_task_progress,
.gantt_side_content {
  line-height: inherit;
  overflow: hidden;
  height: 100%;
}
.gantt_task_content {
  font-size: 12px;
  color: #1e2022;
  width: 100%;
  top: 0;
  cursor: pointer;
  position: absolute;
  white-space: nowrap;
  text-align: center;
}
.gantt_task_progress {
  text-align: center;
  z-index: 0;
  background: #5aa0d3;
  background-color: #82b7de;
  background-image: -webkit-linear-gradient(top, #abcee8 0%, #5aa0d3 36%, #bfdaee 100%);
  background-image: -moz-linear-gradient(top, #abcee8 0%, #5aa0d3 36%, #bfdaee 100%);
  background-image: -ms-linear-gradient(top, #abcee8 0%, #5aa0d3 36%, #bfdaee 100%);
  background-image: linear-gradient(to top, #abcee8 0%, #5aa0d3 36%, #bfdaee 100%);
}
.gantt_task_progress_wrapper {
  border-radius: inherit;
  position: relative;
  width: 100%;
  height: 100%;
  overflow: hidden;
}
.gantt_task_line {
  -webkit-border-radius: 0;
  -moz-border-radius: 0;
  border-radius: 0;
  position: absolute;
  -moz-box-sizing: border-box;
  box-sizing: border-box;
  background-color: #eff6fb;
  border: 1px solid #3588c5;
  -webkit-user-select: none;
  -moz-user-select: none;
  -moz-user-select: -moz-none;
}
.gantt_task_line.gantt_drag_move div {
  cursor: move;
}
.gantt_touch_move,
.gantt_touch_progress .gantt_touch_resize {
  -moz-transform: scale(1.02, 1.1);
  -o-transform: scale(1.02, 1.1);
  -webkit-transform: scale(1.02, 1.1);
  transform: scale(1.02, 1.1);
  -moz-transform-origin: 50%;
  -o-transform-origin: 50%;
  -webkit-transform-origin: 50%;
  transform-origin: 50%;
}
.gantt_touch_progress .gantt_task_progress_drag,
.gantt_touch_resize .gantt_task_drag {
  -moz-transform: scaleY(1.3);
  -o-transform: scaleY(1.3);
  -webkit-transform: scaleY(1.3);
  transform: scaleY(1.3);
  -moz-transform-origin: 50%;
  -o-transform-origin: 50%;
  -webkit-transform-origin: 50%;
  transform-origin: 50%;
}
.gantt_side_content {
  position: absolute;
  white-space: nowrap;
  color: #6e6e6e;
  top: 0;
  font-size: 11px;
}
.gantt_side_content.gantt_left {
  right: 100%;
  padding-right: 20px;
}
.gantt_side_content.gantt_right {
  left: 100%;
  padding-left: 20px;
}
.gantt_side_content.gantt_link_crossing {
  bottom: 6.75px;
  top: auto;
}
.gantt_task_link .gantt_line_wrapper,
.gantt_link_arrow {
  position: absolute;
  cursor: pointer;
}
.gantt_line_wrapper div {
  background-color: #4a8f43;
}
.gantt_task_link:hover .gantt_line_wrapper div {
  box-shadow: 0 0 5px 0px #4a8f43;
}
.gantt_task_link div.gantt_link_arrow {
  background-color: transparent;
  border-style: solid;
  width: 0px;
  height: 0px;
}
.gantt_link_control {
  position: absolute;
  width: 20px;
  top: 0px;
}
.gantt_link_control div {
  display: none;
  cursor: pointer;
  box-sizing: border-box;
  position: relative;
  top: 50%;
  margin-top: -7.5px;
  vertical-align: middle;
  border: 1px solid #929292;
  -webkit-border-radius: 6.5px;
  -moz-border-radius: 6.5px;
  border-radius: 6.5px;
  height: 13px;
  width: 13px;
  background-color: #f0f0f0;
}
.gantt_link_control.task_right div.gantt_link_point {
  margin-left: 7px;
}
.gantt_link_control div:hover {
  background-color: #FFF;
}
.gantt_link_control.task_left {
  left: -20px;
}
.gantt_link_control.task_right {
  right: -20px;
}
.gantt_task_line.gantt_selected .gantt_link_control div,
.gantt_task_line:hover .gantt_link_control div,
.gantt_task_line.gantt_drag_progress .gantt_link_control div,
.gantt_task_line.gantt_drag_move .gantt_link_control div,
.gantt_task_line.gantt_drag_resize .gantt_link_control div,
.gantt_task_line.gantt_selected .gantt_task_progress_drag,
.gantt_task_line:hover .gantt_task_progress_drag,
.gantt_task_line.gantt_drag_progress .gantt_task_progress_drag,
.gantt_task_line.gantt_drag_move .gantt_task_progress_drag,
.gantt_task_line.gantt_drag_resize .gantt_task_progress_drag,
.gantt_task_line.gantt_selected .gantt_task_drag,
.gantt_task_line:hover .gantt_task_drag,
.gantt_task_line.gantt_drag_progress .gantt_task_drag,
.gantt_task_line.gantt_drag_move .gantt_task_drag,
.gantt_task_line.gantt_drag_resize .gantt_task_drag {
  display: block;
}
.gantt_link_target .gantt_link_control div {
  display: block;
}
.gantt_link_source,
.gantt_link_target {
  box-shadow: 0px 0px 3px #0070fe;
}
.gantt_link_target.link_start_allow,
.gantt_link_target.link_finish_allow {
  box-shadow: 0px 0px 3px #6eb867;
}
.gantt_link_target.link_start_deny,
.gantt_link_target.link_finish_deny {
  box-shadow: 0px 0px 3px #e87e7b;
}
.link_start_allow .gantt_link_control.task_start_date div,
.link_finish_allow .gantt_link_control.task_end_date div {
  background-color: #6eb867;
  border-color: #4a8f43;
}
.link_start_deny .gantt_link_control.task_start_date div,
.link_finish_deny .gantt_link_control.task_end_date div {
  background-color: #e87e7b;
  border-color: #dd3e3a;
}
.gantt_link_arrow_right {
  border-width: 4px 0 4px 8px;
  border-top-color: transparent !important;
  border-right-color: transparent !important;
  border-bottom-color: transparent !important;
  border-left-color: #4a8f43;
  /*margin-top: -1px;*/
}
.gantt_link_arrow_left {
  border-width: 4px 8px 4px 0;
  margin-top: -1px;
  border-top-color: transparent !important;
  border-right-color: #4a8f43;
  border-bottom-color: transparent !important;
  border-left-color: transparent !important;
}
.gantt_link_arrow_up {
  border-width: 0 4px 8px 4px;
  border-color: transparent transparent #4a8f43 transparent;
  border-top-color: transparent !important;
  border-right-color: transparent !important;
  border-bottom-color: #4a8f43;
  border-left-color: transparent !important;
}
.gantt_link_arrow_down {
  border-width: 4px 8px 0 4px;
  border-top-color: #4a8f43;
  border-right-color: transparent !important;
  border-bottom-color: transparent !important;
  border-left-color: transparent !important;
}
.gantt_task_drag,
.gantt_task_progress_drag {
  cursor: ew-resize;
  display: none;
  position: absolute;
}
.gantt_task_drag.task_right {
  cursor: e-resize;
}
.gantt_task_drag.task_left {
  cursor: w-resize;
}
.gantt_task_drag {
  height: 100%;
  width: 8px;
  z-index: 1;
  top: -1px;
}
.gantt_task_drag.task_left {
  left: -7px;
}
.gantt_task_drag.task_right {
  right: -7px;
}
.gantt_task_progress_drag {
  height: 8px;
  width: 8px;
  bottom: -4px;
  margin-left: -4px;
  background-position: bottom;
  background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAICAYAAADED76LAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoV2luZG93cykiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6NDNGNzQ1MTZCQkRBMTFFMjlBMjRBRkU0RkNCMTUzNkUiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6NDNGNzQ1MTdCQkRBMTFFMjlBMjRBRkU0RkNCMTUzNkUiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo0M0Y3NDUxNEJCREExMUUyOUEyNEFGRTRGQ0IxNTM2RSIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDo0M0Y3NDUxNUJCREExMUUyOUEyNEFGRTRGQ0IxNTM2RSIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PrBLI3EAAACISURBVHjafE07DkMhDAuftQdgYuCWbZ9a0WtwGJC4BgMbYmVGaZLpqWpryZFjOwrACSmlSLzCN1DwrLUik/TtM3yUUnDOiWMMZE3enTNF4gghRO89KKXkABGh9w6ttcPSHp1zsNaCvbcUjDHAHhVemg1rrVxprYWs2ZOMR84ZfoGfXuAP3gIMABorQUvC1invAAAAAElFTkSuQmCC);
  background-repeat: no-repeat;
  z-index: 1;
}
.gantt_task_progress_drag:hover {
  background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAICAYAAADED76LAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAUklEQVQY04XNsQ2AMAxE0W+oGYjZCAIxmuk9gze5VCmIIvLaf9KtfD3ADrwM3JmpzBRw9PGKCDURIaC0eLq7eu4uoBggSaNLzIyFCQM0G2x/gwpRwTYDaW9lwQAAAABJRU5ErkJggg==);
}
.gantt_link_tooltip {
  box-shadow: 3px 3px 3px #888888;
  background-color: #fff;
  border-left: 1px dotted #cecece;
  border-top: 1px dotted #cecece;
  font-family: Tahoma;
  font-size: 8pt;
  color: #444;
  padding: 6px;
  line-height: 20px;
}
.gantt_link_direction {
  height: 0px;
  border: 0px none #4a8f43;
  border-bottom-style: dashed;
  border-bottom-width: 2px;
  transform-origin: 0% 0%;
  -ms-transform-origin: 0% 0%;
  -webkit-transform-origin: 0% 0%;
  z-index: 2;
  margin-left: 1px;
  position: absolute;
}
.gantt_grid_data .gantt_row.gantt_selected,
.gantt_grid_data .gantt_row.odd.gantt_selected {
  background-color: #ffe6b1 !important;
  border-bottom-color: #ffc341;
}
.gantt_task_row.gantt_selected {
  background-color: #ffe6b1 !important;
  background-color: #ffebc1;
  background-image: -webkit-linear-gradient(top, #ffe09d 0%, #ffeabb 100%);
  background-image: -moz-linear-gradient(top, #ffe09d 0%, #ffeabb 100%);
  background-image: -ms-linear-gradient(top, #ffe09d 0%, #ffeabb 100%);
  background-image: linear-gradient(to top, #ffe09d 0%, #ffeabb 100%);
  border-top-color: #ffc341;
  border-bottom-color: #ffc341;
}
.gantt_task_row.gantt_selected .gantt_task_cell {
  border-right-color: #ffb30e;
}
.gantt_task_row.gantt_selected .gantt_task_cell {
  border-right-color: #ffce65;
}
.gantt_task_line.gantt_selected {
  box-shadow: 0 0 5px #5aa0d3;
}
.gantt_task_line.gantt_project.gantt_selected {
  box-shadow: 0 0 5px #9ab9f1;
}
.gantt_task_line.gantt_milestone {
  visibility: hidden;
  background-color: #DB7DC5;
  border: 0px solid #cd49ae;
  box-sizing: content-box;
  -moz-box-sizing: content-box;
}
.gantt_task_line.gantt_milestone div {
  visibility: visible;
}
.gantt_task_line.gantt_milestone .gantt_task_content {
  background: inherit;
  border: inherit;
  border-width: 1px;
  border-radius: inherit;
  box-sizing: border-box;
  -moz-box-sizing: border-box;
  -webkit-transform: rotate(45deg);
  -moz-transform: rotate(45deg);
  -ms-transform: rotate(45deg);
  -o-transform: rotate(45deg);
  transform: rotate(45deg);
}
.gantt_task_line.gantt_task_inline_color {
  border-color: #999999;
}
.gantt_task_line.gantt_task_inline_color .gantt_task_progress {
  background-color: #363636;
  opacity: 0.2;
}
.gantt_task_line.gantt_task_inline_color.gantt_selected {
  box-shadow: 0 0 5px #999999;
}
.gantt_task_line.gantt_task_inline_color.gantt_project.gantt_selected {
  box-shadow: 0 0 5px #999999;
}
.gantt_task_link.gantt_link_inline_color:hover .gantt_line_wrapper div {
  box-shadow: 0 0 5px 0px #999999;
}
.gantt_critical_task {
  background-color: #e63030;
  border-color: #9d3a3a;
}
.gantt_critical_task .gantt_task_progress {
  background-color: rgba(0, 0, 0, 0.4);
}
.gantt_critical_link .gantt_line_wrapper > div {
  background-color: #e63030;
}
.gantt_critical_link .gantt_link_arrow {
  border-color: #e63030;
}
.gantt_row:focus,
.gantt_cell:focus,
.gantt_btn_set:focus,
.gantt_qi_big_icon:focus,
.gantt_popup_button:focus,
.gantt_grid_head_cell:focus {
  -moz-box-shadow: inset 0px 0px 1px 1px #4d90fe;
  -webkit-box-shadow: inset 0px 0px 1px 1px #4d90fe;
  box-shadow: inset 0px 0px 1px 1px #4d90fe;
}
.gantt_split_parent,
.gantt_split_subproject {
  opacity: 0.1;
  pointer-events: none;
}
.gantt_rollup_child .gantt_link_control,
.gantt_rollup_child:hover .gantt_link_control {
  display: none;
}
.gantt_unselectable,
.gantt_unselectable div {
  -webkit-user-select: none;
  -moz-user-select: none;
  -moz-user-select: -moz-none;
}
.gantt_cal_light {
  -webkit-tap-highlight-color: transparent;
  background-color: #eff6fb;
  border-radius: 0;
  font-family: "Tahoma";
  font-size: 11px;
  border: 1px solid #a4bed4;
  color: #42464b;
  position: absolute;
  z-index: 10001;
  width: 550px;
  height: 250px;
  box-shadow: 3px 3px 3px rgba(0, 0, 0, 0.07);
}
.gantt_cal_light_wide {
  width: 650px;
}
.gantt_cal_light select {
  font-family: "Tahoma";
  border: 1px solid #a4bed4;
  font-size: 11px;
  padding: 2px;
  margin: 0px;
}
.gantt_cal_ltitle {
  padding: 7px 10px;
  overflow: hidden;
  white-space: nowrap;
  -webkit-border-top-left-radius: 0;
  -webkit-border-bottom-left-radius: 0;
  -webkit-border-top-right-radius: 0;
  -webkit-border-bottom-right-radius: 0;
  -moz-border-radius-topleft: 0;
  -moz-border-radius-bottomleft: 0;
  -moz-border-radius-topright: 0;
  -moz-border-radius-bottomright: 0;
  border-top-left-radius: 0;
  border-bottom-left-radius: 0;
  border-top-right-radius: 0;
  border-bottom-right-radius: 0;
}
.gantt_cal_ltitle span {
  white-space: nowrap;
}
.gantt_cal_lsection {
  color: #727272;
  font-weight: bold;
  padding: 12px 0px 5px 10px;
}
.gantt_cal_lsection .gantt_fullday {
  float: right;
  margin-right: 5px;
  font-size: 12px;
  font-weight: normal;
  line-height: 20px;
  vertical-align: top;
  cursor: pointer;
}
.gantt_cal_lsection {
  font-size: 13px;
}
.gantt_cal_ltext {
  padding: 2px    10px;
  overflow: hidden;
}
.gantt_cal_ltext textarea {
  overflow-y: auto;
  overflow-x: hidden;
  font-family: "Tahoma";
  font-size: 11px;
  -moz-box-sizing: border-box;
  -webkit-box-sizing: border-box;
  box-sizing: border-box;
  border: 1px solid #a4bed4;
  height: 100%;
  width: 100%;
  outline: none !important;
  resize: none;
}
.gantt_section_constraint [data-constraint-time-select] {
  margin-left: 20px;
}
.gantt_time {
  font-weight: bold;
}
.gantt_cal_light .gantt_title {
  padding-left: 10px;
}
.gantt_cal_larea {
  border: 1px solid #a4bed4;
  border-left: none;
  border-right: none;
  background-color: #fff;
  overflow: hidden;
  height: 1px;
}
.gantt_btn_set {
  margin: 10px 7px 5px 10px;
  padding: 2px 25px 2px 10px;
  float: left;
  -webkit-border-radius: 4px;
  -moz-border-radius: 4px;
  border-radius: 4px;
  border-width: 1px;
  border-color: #a4bed4;
  border-style: solid;
  height: 26px;
  color: #42464b;
  background: #fff;
  background-color: #f8f8f8;
  background-image: -webkit-linear-gradient(top, #E6E6E6 0%, #FFFFFF 100%);
  background-image: -moz-linear-gradient(top, #E6E6E6 0%, #FFFFFF 100%);
  background-image: -ms-linear-gradient(top, #E6E6E6 0%, #FFFFFF 100%);
  background-image: linear-gradient(to top, #E6E6E6 0%, #FFFFFF 100%);
  -moz-box-sizing: border-box;
  -webkit-box-sizing: border-box;
  box-sizing: border-box;
  cursor: pointer;
}
.gantt_hidden {
  display: none;
}
.gantt_btn_set div {
  float: left;
  font-size: 13px;
  height: 20px;
  line-height: 20px;
  background-repeat: no-repeat;
  vertical-align: middle;
}
.gantt_save_btn {
  background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoV2luZG93cykiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6QkE5Nzc4RENDMzAzMTFFMjk4QjNBODhDMUM4QUUwNEQiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6QkE5Nzc4RERDMzAzMTFFMjk4QjNBODhDMUM4QUUwNEQiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDpCQTk3NzhEQUMzMDMxMUUyOThCM0E4OEMxQzhBRTA0RCIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDpCQTk3NzhEQkMzMDMxMUUyOThCM0E4OEMxQzhBRTA0RCIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/Pr5Ot2UAAAFoSURBVHjapFO7SgNRED0rxkjEELbcQksLBUMg4EfkG7YV/AFTpBAUfNQisVDQD7CQlBaWwoZ8gNEiFttmg3GTfbF6JtzFTUJYyIHhDnfOnJm5Dy2OYywDjQJnF5ex/dXDweENNtaAzT/jur46IY1D4McHvv3J+nZ7BGNrG436sSaU3ucHqtUqzP1sVcflMizLEl8EwjBEFEXwomwC5DInEeDGaDSC62cTIJc5iUAQBGJukE1A8YkVNYLv++h232WMRUYOuakRlOLTwzU8z1tYPZ/Po1QqJR0kAgQDWTEjwLaIWq0GwzDmJtm2jVarNSvAeeQQXVe6ME1Tgs1mMyXA2GAwQKFQmH8G/X4fjuOgWCxKkP40yMnlcukO1MNgAivoui5B+tMgh3H1DuQa66fnaLfbGA6HMgY7oNGfNnL+v0RN/cbnl9f46qSBSqUiM9J4ZQSvVgl0Oh1pf2d3D4/3d5q27Hf+FWAAc90EKSR5k78AAAAASUVORK5CYII=);
  margin-top: 2px;
  width: 21px;
}
.gantt_cancel_btn {
  margin-top: 2px;
  background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoV2luZG93cykiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6QzU4NTQ3NUZDMzAzMTFFMkE0MjRGNTQzQjE0MTNDQkIiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6QzU4NTQ3NjBDMzAzMTFFMkE0MjRGNTQzQjE0MTNDQkIiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDpDNTg1NDc1REMzMDMxMUUyQTQyNEY1NDNCMTQxM0NCQiIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDpDNTg1NDc1RUMzMDMxMUUyQTQyNEY1NDNCMTQxM0NCQiIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PkVB3hoAAAEYSURBVHjapJM9CsJAEIUTFStbQRA8gKCNKSIIeohUVraC9oKiGBRsBDvBylbwEkJQCys9gJUgeIOAxDfwEpYNpsmDL7PZ+cn+TMwgCIw0yhgplZPH3bbVuRqYgiYogxe4ABc8wqD69RpbQR6MwQ04TDZoHc6LP/tvC2uw4Fi+Vgcmrct58W9iW4BaYAB80OGSQ8my7xz7jDsAT11Bn3alJYvUa1pp8VGBNu0uIVm2s9fiowJF8OWJ/0sWPRlX1At8eLqlhGRRhXEfvcCJtpeQLOpq8VGBLe04Ibmh+Ld6AY8HWOBVzUCVvio780z/LrxCtQ9EQ+5tBOZElRzeUmmqWCfKlyfAAkfw5vyb7xb9vlrATPs7/wQYAISgQGDaq6hUAAAAAElFTkSuQmCC);
  width: 20px;
}
.gantt_delete_btn {
  background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoV2luZG93cykiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6RTA3M0M1MzJDMzAzMTFFMkE5ODZDRjhENzQ2MUZFNzkiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6RTA3M0M1MzNDMzAzMTFFMkE5ODZDRjhENzQ2MUZFNzkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDpFMDczQzUzMEMzMDMxMUUyQTk4NkNGOEQ3NDYxRkU3OSIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDpFMDczQzUzMUMzMDMxMUUyQTk4NkNGOEQ3NDYxRkU3OSIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/Pplu0sEAAAErSURBVHja3FOxboMwED0nIQNbJoaOZM0YyMhGqwz8BOQ3mm5I/AHwCayoGVlhZUSMHTIhsSCEhOtzawRIlZDY+qTTs893z6fzmVBKYQ12YhEEweB0HAf3tCxLUFUVXWSeiDGIzW/ynRE9HA7coihCBtd1AVn40TCO2X1ewbthGCBJEiiKAtvtFggh0HUdWJYFfd9zez6f3JckiS1EhEDmeZ623+9BlmWejCaAfWqahou0bQumab7MK9DP5zM9nU5c4Hg8ch4nF0XBOc9zuF6vg/pm3pw0TSdNDcPwp8QsG2LiOIY/BZagqqp1AmP8M4Gvuq5B1/XJqNq2zVnTNMBzjBsLEHxnHBrf91/Z/nPBpW+32+0hPuFODAt79wtbfiwQuLD4x6SCNfgWYAAfQYJFsOV+5AAAAABJRU5ErkJggg==);
  margin-top: 2px;
  width: 20px;
}
.gantt_cal_cover {
  width: 100%;
  height: 100%;
  position: fixed;
  z-index: 10000;
  top: 0px;
  left: 0px;
  background-color: black;
  opacity: 0.1;
  filter: progid:DXImageTransform.Microsoft.Alpha(opacity=10);
}
.gantt_custom_button {
  padding: 0px 3px 0px 3px;
  font-family: "Tahoma";
  font-size: 11px;
  font-weight: normal;
  margin-right: 10px;
  margin-top: -5px;
  cursor: pointer;
  float: right;
  height: 21px;
  width: 90px;
  border: 1px solid #CECECE;
  text-align: center;
  -webkit-border-radius: 4px;
  -moz-border-radius: 4px;
  -ms-border-radius: 4px;
  -o-border-radius: 4px;
  border-radius: 4px;
}
.gantt_custom_button div {
  cursor: pointer;
  float: none;
  height: 21px;
  line-height: 21px;
  vertical-align: middle;
}
.gantt_custom_button div:first-child {
  display: none;
}
.gantt_cal_light_wide {
  width: 580px;
  padding: 2px 4px;
}
.gantt_cal_light_wide .gantt_cal_larea {
  -moz-box-sizing: border-box;
  -webkit-box-sizing: border-box;
  box-sizing: border-box;
  border: 1px solid #a4bed4;
}
.gantt_cal_light_wide .gantt_cal_lsection {
  border: 0px;
  float: left;
  text-align: right;
  width: 80px;
  height: 20px;
  padding: 5px 10px 0px 0px;
}
.gantt_cal_light_wide .gantt_wrap_section {
  position: relative;
  padding: 10px 0;
  overflow: hidden;
  border-bottom: 1px solid #ebebeb;
}
.gantt_cal_light_wide .gantt_section_time {
  overflow: hidden;
  padding-top: 2px !important;
  padding-right: 0px;
  height: 20px !important;
}
.gantt_cal_light_wide .gantt_cal_ltext {
  padding-right: 0px;
}
.gantt_cal_light_wide .gantt_cal_larea {
  padding: 0 10px;
  width: 100%;
}
.gantt_cal_light_wide .gantt_section_time {
  background: transparent;
}
.gantt_cal_light_wide .gantt_cal_checkbox label {
  padding-left: 0px;
}
.gantt_cal_light_wide .gantt_cal_lsection .gantt_fullday {
  float: none;
  margin-right: 0px;
  font-weight: bold;
  cursor: pointer;
}
.gantt_cal_light_wide .gantt_custom_button {
  position: absolute;
  top: 0;
  right: 0;
  margin-top: 2px;
}
.gantt_cal_light_wide .gantt_repeat_right {
  margin-right: 55px;
}
.gantt_cal_light_wide.gantt_cal_light_full {
  width: 738px;
}
.gantt_cal_wide_checkbox input {
  margin-top: 8px;
  margin-left: 14px;
}
.gantt_cal_light input {
  font-size: 11px;
}
.gantt_section_time {
  background-color: white;
  white-space: nowrap;
  padding: 2px 10px 5px;
  padding-top: 2px !important;
}
.gantt_section_time .gantt_time_selects {
  float: left;
  height: 25px;
}
.gantt_section_time .gantt_time_selects select {
  height: 23px;
  padding: 2px;
  border: 1px solid #a4bed4;
}
.gantt_duration {
  width: 100px;
  height: 23px;
  float: left;
  white-space: nowrap;
  margin-left: 20px;
  line-height: 23px;
}
.gantt_duration .gantt_duration_value,
.gantt_duration .gantt_duration_dec,
.gantt_duration .gantt_duration_inc {
  -moz-box-sizing: border-box;
  -webkit-box-sizing: border-box;
  box-sizing: border-box;
  text-align: center;
  vertical-align: top;
  height: 100%;
  border: 1px solid #a4bed4;
}
.gantt_duration .gantt_duration_value {
  width: 40px;
  padding: 3px 4px;
  border-left-width: 0;
  border-right-width: 0;
}
.gantt_duration .gantt_duration_value.gantt_duration_value_formatted {
  width: 70px;
}
.gantt_duration .gantt_duration_dec,
.gantt_duration .gantt_duration_inc {
  width: 20px;
  padding: 1px;
  padding-bottom: 1px;
  background: #fff;
  background-color: #f8f8f8;
  background-image: -webkit-linear-gradient(top, #E6E6E6 0%, #FFFFFF 100%);
  background-image: -moz-linear-gradient(top, #E6E6E6 0%, #FFFFFF 100%);
  background-image: -ms-linear-gradient(top, #E6E6E6 0%, #FFFFFF 100%);
  background-image: linear-gradient(to top, #E6E6E6 0%, #FFFFFF 100%);
}
.gantt_duration .gantt_duration_dec {
  -moz-border-top-left-radius: 4px;
  -moz-border-bottom-left-radius: 4px;
  -webkit-border-top-left-radius: 4px;
  -webkit-border-bottom-left-radius: 4px;
  border-top-left-radius: 4px;
  border-bottom-left-radius: 4px;
}
.gantt_duration .gantt_duration_inc {
  margin-right: 4px;
  -moz-border-top-right-radius: 4px;
  -moz-border-bottom-right-radius: 4px;
  -webkit-border-top-right-radius: 4px;
  -webkit-border-bottom-right-radius: 4px;
  border-top-right-radius: 4px;
  border-bottom-right-radius: 4px;
}
.gantt_resources {
  max-height: 150px;
  height: auto;
  overflow-y: auto;
}
.gantt_resource_row {
  display: block;
  padding: 10px 0;
  border-bottom: 1px solid #ebebeb;
  cursor: pointer;
}
.gantt_resource_row input[type=checkbox]:not(:checked),
.gantt_resource_row input[type=checkbox]:not(:checked) ~ div {
  opacity: 0.5;
}
.gantt_resource_toggle {
  vertical-align: middle;
}
.gantt_resources_filter .gantt_resources_filter_input {
  padding: 1px 2px 1px 2px;
  box-sizing: border-box;
}
.gantt_resources_filter .switch_unsetted {
  vertical-align: middle;
}
.gantt_resource_cell {
  display: inline-block;
}
.gantt_resource_cell.gantt_resource_cell_checkbox {
  width: 24px;
  max-width: 24px;
  min-width: 24px;
  vertical-align: middle;
}
.gantt_resource_cell.gantt_resource_cell_label {
  width: 40%;
  max-width: 40%;
  vertical-align: middle;
}
.gantt_resource_cell.gantt_resource_cell_value {
  width: 30%;
  max-width: 30%;
  vertical-align: middle;
}
.gantt_resource_cell.gantt_resource_cell_value input,
.gantt_resource_cell.gantt_resource_cell_value select {
  width: 80%;
  vertical-align: middle;
  padding: 1px 2px 1px 2px;
  box-sizing: border-box;
}
.gantt_resource_cell.gantt_resource_cell_unit {
  width: 10%;
  max-width: 10%;
  vertical-align: middle;
}
.gantt_resource_early_value {
  opacity: 0.8;
  font-size: 0.9em;
}
/* Quick info */
.gantt_cal_quick_info {
  border: 1px solid #a4bed4;
  border-radius: 0;
  position: absolute;
  z-index: 300;
  box-shadow: 3px 3px 3px rgba(0, 0, 0, 0.07);
  background-color: #fff;
  width: 300px;
  transition: left 0.5s ease, right 0.5s;
  -moz-transition: left 0.5s ease, right 0.5s;
  -webkit-transition: left 0.5s ease, right 0.5s;
  -o-transition: left 0.5s ease, right 0.5s;
}
.gantt_no_animate {
  transition: none;
  -moz-transition: none;
  -webkit-transition: none;
  -o-transition: none;
}
.gantt_cal_quick_info.gantt_qi_left .gantt_qi_big_icon {
  float: right;
}
.gantt_cal_qi_title {
  -webkit-border-top-left-radius: 0;
  -webkit-border-bottom-left-radius: 0;
  -webkit-border-top-right-radius: 0;
  -webkit-border-bottom-right-radius: 0;
  -moz-border-radius-topleft: 0;
  -moz-border-radius-bottomleft: 0;
  -moz-border-radius-topright: 0;
  -moz-border-radius-bottomright: 0;
  border-top-left-radius: 0;
  border-bottom-left-radius: 0;
  border-top-right-radius: 0;
  border-bottom-right-radius: 0;
  padding: 5px 0px 8px 12px;
  color: #1e2022;
  box-shadow: 0px 1px 1px #fff inset;
  background-color: #dfedff;
  background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #e4f0ff), color-stop(50%, #dfedff), color-stop(100%, #d5e8ff));
  /* old webkit */
  background-image: -webkit-linear-gradient(top, #e4f0ff 0%, #dfedff 50%, #d5e8ff 100%);
  background-image: -moz-linear-gradient(top, #e4f0ff 0%, #dfedff 60%, #d5e8ff 100%);
  background-image: -ms-linear-gradient(top, #e4f0ff 0%, #dfedff 60%, #d5e8ff 100%);
  background-image: -o-linear-gradient(top, #e4f0ff 0%, #dfedff 60%, #d5e8ff 100%);
  background-position: 0px 1px;
  background-repeat: repeat-x;
  border-bottom: 1px solid #a4bed4;
}
.gantt_cal_qi_tdate {
  font-size: 14px;
  font-weight: bold;
}
.gantt_cal_qi_tcontent {
  font-size: 11px;
}
.gantt_cal_qi_content {
  padding: 16px 8px;
  font-size: 13px;
  color: #1e2022;
  overflow: hidden;
}
.gantt_cal_qi_controls {
  -webkit-border-top-left-radius: 0;
  -webkit-border-bottom-left-radius: 0;
  -webkit-border-top-right-radius: 0;
  -webkit-border-bottom-right-radius: 0;
  -moz-border-radius-topleft: 0;
  -moz-border-radius-bottomleft: 0;
  -moz-border-radius-topright: 0;
  -moz-border-radius-bottomright: 0;
  border-top-left-radius: 0;
  border-bottom-left-radius: 0;
  border-top-right-radius: 0;
  border-bottom-right-radius: 0;
  padding-left: 7px;
}
.gantt_cal_qi_controls .gantt_menu_icon {
  margin-top: 3px;
  background-repeat: no-repeat;
}
.gantt_cal_qi_controls .gantt_menu_icon.icon_edit {
  width: 20px;
  background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAAB3RJTUUH3QYFDhEuX3ujFgAAAFNJREFUOMvt0zEOACAIA0DksTyqn8XJTRTKZGJXyaWEKPKTCQAH4Ls37cItcDUzsxHNDLZNhCq7Gt1wh9ErV7EjyGAhyGLphlnsClWuS32rn0czAV+sNUIROnQoAAAAAElFTkSuQmCC);
}
.gantt_cal_qi_controls .gantt_menu_icon.icon_delete {
  width: 20px;
  background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoV2luZG93cykiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6RTA3M0M1MzJDMzAzMTFFMkE5ODZDRjhENzQ2MUZFNzkiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6RTA3M0M1MzNDMzAzMTFFMkE5ODZDRjhENzQ2MUZFNzkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDpFMDczQzUzMEMzMDMxMUUyQTk4NkNGOEQ3NDYxRkU3OSIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDpFMDczQzUzMUMzMDMxMUUyQTk4NkNGOEQ3NDYxRkU3OSIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/Pplu0sEAAAErSURBVHja3FOxboMwED0nIQNbJoaOZM0YyMhGqwz8BOQ3mm5I/AHwCayoGVlhZUSMHTIhsSCEhOtzawRIlZDY+qTTs893z6fzmVBKYQ12YhEEweB0HAf3tCxLUFUVXWSeiDGIzW/ynRE9HA7coihCBtd1AVn40TCO2X1ewbthGCBJEiiKAtvtFggh0HUdWJYFfd9zez6f3JckiS1EhEDmeZ623+9BlmWejCaAfWqahou0bQumab7MK9DP5zM9nU5c4Hg8ch4nF0XBOc9zuF6vg/pm3pw0TSdNDcPwp8QsG2LiOIY/BZagqqp1AmP8M4Gvuq5B1/XJqNq2zVnTNMBzjBsLEHxnHBrf91/Z/nPBpW+32+0hPuFODAt79wtbfiwQuLD4x6SCNfgWYAAfQYJFsOV+5AAAAABJRU5ErkJggg==);
}
.gantt_qi_big_icon {
  font-size: 13px;
  border-radius: 4px;
  color: #42464b;
  background: #fff;
  background-color: #f8f8f8;
  background-image: -webkit-linear-gradient(top, #E6E6E6 0%, #FFFFFF 100%);
  background-image: -moz-linear-gradient(top, #E6E6E6 0%, #FFFFFF 100%);
  background-image: -ms-linear-gradient(top, #E6E6E6 0%, #FFFFFF 100%);
  background-image: linear-gradient(to top, #E6E6E6 0%, #FFFFFF 100%);
  margin: 5px 9px 8px 0px;
  min-width: 60px;
  line-height: 26px;
  vertical-align: middle;
  padding: 0px 10px 0px 5px;
  cursor: pointer;
  border: 1px solid #a4bed4;
}
.gantt_cal_qi_controls div {
  float: left;
  height: 26px;
  text-align: center;
  line-height: 26px;
}
.gantt_cal_quick_info.gantt_qi_hidden {
  display: none;
}
.gantt_tooltip {
  padding: 10px;
  position: absolute;
  z-index: 50;
  white-space: nowrap;
}
.gantt_resource_marker {
  position: absolute;
  text-align: center;
  font-size: 14px;
  color: #FFF;
}
.gantt_resource_marker_ok {
  background: rgba(78, 208, 134, 0.75);
}
.gantt_resource_marker_overtime {
  background: rgba(255, 134, 134, 0.69);
}
.gantt_histogram_label {
  width: 100%;
  height: 100%;
  position: absolute;
  z-index: 1;
  font-weight: bold;
  font-size: 11px;
}
.gantt_histogram_fill {
  background-color: rgba(41, 157, 180, 0.2);
  width: 100%;
  position: absolute;
  bottom: 0;
}
.gantt_histogram_hor_bar {
  height: 1px;
  position: absolute;
  background: #299DB4;
  margin-top: -1px;
  margin-left: -1px;
}
.gantt_histogram_vert_bar {
  width: 1px;
  position: absolute;
  background: #299DB4;
  margin-left: -1px;
}
.gantt_histogram_cell {
  position: absolute;
  text-align: center;
  font-size: 11px;
  color: #000000;
}
.gantt_marker {
  height: 100%;
  width: 2px;
  top: 0;
  position: absolute;
  text-align: center;
  background-color: rgba(255, 0, 0, 0.4);
  -moz-box-sizing: border-box;
  -webkit-box-sizing: border-box;
  box-sizing: border-box;
}
.gantt_marker .gantt_marker_content {
  padding: 5px;
  background: inherit;
  color: white;
  position: absolute;
  font-size: 12px;
  line-height: 12px;
  opacity: 0.8;
}
.gantt_marker_area {
  position: absolute;
  top: 0;
  left: 0;
}
.gantt_grid_editor_placeholder {
  position: absolute;
}
.gantt_grid_editor_placeholder > div,
.gantt_grid_editor_placeholder input,
.gantt_grid_editor_placeholder select {
  width: 100%;
  height: 100%;
  box-sizing: border-box;
}
.gantt_row_placeholder div {
  opacity: 0.5;
}
.gantt_row_placeholder .gantt_file,
.gantt_row_placeholder .gantt_add {
  display: none;
}
.gantt_drag_marker.gantt_grid_dnd_marker {
  background-color: transparent;
  transition: all 0.1s ease ;
}
.gantt_grid_dnd_marker_line {
  height: 4px;
  width: 100%;
  background-color: #3498db;
}
.gantt_grid_dnd_marker_line::before {
  background: #fff;
  width: 12px;
  height: 12px;
  box-sizing: border-box;
  border: 3px solid #3498db;
  border-radius: 6px;
  content: "";
  line-height: 1px;
  display: block;
  position: absolute;
  margin-left: -11px;
  margin-top: -4px;
  pointer-events: none;
}
.gantt_grid_dnd_marker_folder {
  height: 100%;
  width: 100%;
  position: absolute;
  pointer-events: none;
  box-sizing: border-box;
  box-shadow: 0 0 0px 2px #3f98db inset;
  background: transparent;
}
.gantt_overlay_area {
  position: absolute;
  height: inherit;
  width: inherit;
  top: 0;
  left: 0;
  display: none;
}
.gantt_overlay {
  position: absolute;
  left: 0;
  top: 0;
  height: inherit;
  width: inherit;
}
.gantt_click_drag_rect {
  position: absolute;
  left: 0;
  top: 0;
  outline: 1px solid #3f98db;
  background-color: rgba(52, 152, 219, 0.3);
}
.gantt_timeline_move_available,
.gantt_timeline_move_available * {
  cursor: move;
}
.gantt_rtl .gantt_grid {
  text-align: right;
}
.gantt_rtl .gantt_row,
.gantt_rtl .gantt_cell {
  flex-direction: row-reverse;
}
.gantt_layout_content {
  width: 100%;
  overflow: auto;
  box-sizing: border-box;
}
.gantt_layout_cell {
  position: relative;
  box-sizing: border-box;
}
.gantt_layout_cell > .gantt_layout_header {
  background: #33aae8;
  color: white;
  font-size: 17px;
  padding: 5px 10px;
  box-sizing: border-box;
}
.gantt_layout_header.collapsed_x {
  background: #a9a9a9;
}
.gantt_layout_header.collapsed_x .gantt_header_arrow:before {
  content: "\21E7";
}
.gantt_layout_header.collapsed_y {
  background: #a9a9a9;
}
.gantt_layout_header.collapsed_y .gantt_header_arrow:before {
  content: "\21E9";
}
.gantt_layout_header {
  cursor: pointer;
}
.gantt_layout_header .gantt_header_arrow {
  float: right;
  text-align: right;
}
.gantt_layout_header .gantt_header_arrow:before {
  content: "\21E6";
}
.gantt_layout_header.vertical .gantt_header_arrow:before {
  content: "\21E7";
}
.gantt_layout_outer_scroll_vertical .gantt_layout_content {
  overflow-y: hidden;
}
.gantt_layout_outer_scroll_horizontal .gantt_layout_content {
  overflow-x: hidden;
}
.gantt_layout_x > .gantt_layout_cell {
  display: inline-block;
  vertical-align: top;
}
.gantt_layout_x {
  white-space: nowrap;
}
.gantt_resizing {
  opacity: 0.7;
  background: #f2f2f2;
}
.gantt_layout_cell_border_right.gantt_resizer {
  overflow: visible;
  border-right: 0;
}
.gantt_resizer {
  cursor: e-resize;
  position: relative;
}
.gantt_resizer_y {
  cursor: n-resize;
}
.gantt_resizer_stick {
  background: #33aae8;
  z-index: 9999;
  position: absolute;
  top: 0;
  width: 100%;
}
.gantt_resizer_x .gantt_resizer_x {
  position: absolute;
  width: 20px;
  height: 100%;
  margin-left: -10px;
  top: 0;
  left: 0;
  z-index: 1;
}
.gantt_resizer_y .gantt_resizer_y {
  position: absolute;
  height: 20px;
  width: 100%;
  top: -10px;
  left: 0;
  z-index: 1;
}
.gantt_resizer_error {
  background: indianred!important;
}
.gantt_noselect {
  -webkit-user-select: none;
  user-select: none;
}
.gantt_layout_cell_border_left {
  border-left: 1px solid #a4bed4;
}
.gantt_layout_cell_border_right {
  border-right: 1px solid #a4bed4;
}
.gantt_layout_cell_border_top {
  border-top: 1px solid #a4bed4;
}
.gantt_layout_cell_border_bottom {
  border-bottom: 1px solid #a4bed4;
}
.gantt_layout_cell_border_transparent {
  border-color: transparent;
}
.gantt_window {
  position: absolute;
  top: 50%;
  left: 50%;
  z-index: 999999999;
  background: white;
}
.gantt_window_content {
  position: relative;
}
.gantt_window_content_header {
  background: #39c;
  color: #ffffff;
  height: 33px;
  padding: 10px 10px 0 10px;
  border-bottom: solid 2px #ffffff;
  position: relative;
}
.gantt_window_content_header_text {
  padding-left: 10%;
}
.gantt_window_content_header_buttons {
  position: absolute;
  top: 10px;
  right: 10px;
}
.gantt_window_content_header_buttons:hover {
  color: #000000;
  cursor: pointer;
}
.gantt_window_content_resizer {
  position: absolute;
  width: 15px;
  height: 15px;
  bottom: 0;
  line-height: 15px;
  right: -1px;
  text-align: center;
  background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA8AAAAPCAMAAAAMCGV4AAAABlBMVEUAAAAAAAClZ7nPAAAAAXRSTlMAQObYZgAAABZJREFUeAFjIAUwUshlpJDLSIhLGAAACQ4AFk79JaMAAAAASUVORK5CYII=);
  cursor: nw-resize;
  z-index: 999;
}
.gantt_window_content_frame {
  position: absolute;
  top: 0;
  left: 0;
  width: 100%;
  height: 100%;
  background: rgba(0, 0, 0, 0.1);
  z-index: 9999;
}
.gantt_window_drag {
  cursor: pointer!important;
}
.gantt_window_resizing {
  overflow: visible;
}
.gantt_window_resizing_body {
  overflow: hidden!important;
}
.gantt_window_modal {
  background: rgba(0, 0, 0, 0.1);
  z-index: 9999;
  top: 0;
  left: 0;
  width: 100%;
  height: 100%;
  position: fixed;
}
.gantt_container,
.gantt_cal_light,
.gantt_message_area,
.gantt_modal_box,
.gantt_cal_quick_info,
.gantt_tooltip {
  text-rendering: optimizeLegibility;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
}
.gantt_noselect {
  -moz-user-select: -moz-none;
  -webkit-user-select: none;
  -ms-user-select: none;
  user-select: none;
}
.gantt_noselect .gantt_grid_data .gantt_row:hover,
.gantt_noselect .gantt_grid_data .gantt_row.odd:hover {
  background-color: unset;
}
.gantt_drag_marker {
  position: absolute;
  top: -1000px;
  left: -1000px;
  font-family: "Tahoma";
  font-size: 11px;
  z-index: 1;
  white-space: nowrap;
}
.gantt_drag_marker .gantt_tree_indent,
.gantt_drag_marker .gantt_tree_icon.gantt_blank,
.gantt_drag_marker .gantt_tree_icon.gantt_open,
.gantt_drag_marker .gantt_tree_icon.gantt_close {
  display: none;
}
.gantt_empty_state_wrapper {
  position: relative;
}
.gantt_empty_state {
  height: 100%;
  max-width: 500px;
  box-sizing: border-box;
  white-space: pre-line;
  overflow-wrap: break-word;
  display: flex;
  flex-direction: column;
  justify-content: flex-start;
  margin: 0 auto;
}
.gantt_empty_state_image {
  background-image: url('data:image/png;base64,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');
  background-repeat: no-repeat;
  width: 100%;
  max-width: 500px;
  max-height: 500px;
  margin-left: auto;
  margin-right: auto;
  display: block;
  min-height: 0;
  height: 200px;
  background-size: contain;
  background-position-x: center;
  background-position-y: bottom;
  margin-top: 40px;
}
.gantt_empty_state_text {
  text-align: center;
}
.gantt_empty_state_text_link {
  color: #03A9F4;
  background-position: top right;
  background: none;
  opacity: 1;
  height: unset;
  cursor: pointer;
}
.gantt_drag_marker,
.gantt_drag_marker .gantt_row.odd {
  background-color: #FFFFFF;
}
.gantt_drag_marker .gantt_row {
  border-left: 1px solid #d2d2d2;
  border-top: 1px solid #d2d2d2;
}
.gantt_drag_marker .gantt_cell {
  border-color: #d2d2d2;
}
.gantt_row.gantt_over,
.gantt_task_row.gantt_over {
  background-color: #0070fe;
}
.gantt_row.gantt_transparent .gantt_cell {
  opacity: 0.7;
}
.gantt_task_row.gantt_transparent {
  background-color: #e4f0ff;
}
.gantt_container_resize_watcher {
  background: transparent;
  width: 100%;
  height: 100%;
  position: absolute;
  top: 0px;
  left: 0px;
  z-index: -1;
  pointer-events: none;
  border: 0;
  box-sizing: border-box;
  opacity: 0;
}
src/components/dhtmlxGantt/codebase/sources/skins/dhtmlxgantt_terrace.css
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,2027 @@
/*
@license
dhtmlxGantt v.8.0.6 Standard
This version of dhtmlxGantt is distributed under GPL 2.0 license and can be legally used in GPL projects.
To use dhtmlxGantt in non-GPL projects (and get Pro version of the product), please obtain Individual, Commercial, Enterprise or Ultimate license on our site https://dhtmlx.com/docs/products/dhtmlxGantt/#licensing or contact us at info@dhtmlx.com
(c) XB Software
*/
.buttonBg {
  background: #fff;
}
/* colors for items with inline styles assigned (task.color, link.color)*/
.gridHoverStyle {
  background-color: #FFF3A1;
}
.gridSelection {
  background-color: #FFF3A1;
}
.timelineSelection {
  background-color: #FFF3A1;
}
.gantt_grid_scale .gantt_grid_head_cell {
  color: #a6a6a6;
  border-top: none !important;
  border-right: none !important;
}
.gantt_grid_data .gantt_cell {
  border-right: none;
  color: #454545;
}
/*
    Tasks
*/
.gantt_task_link .gantt_link_arrow_right {
  border-width: 6px 6px 6px 6px;
  margin-top: -3px;
}
.gantt_task_link .gantt_link_arrow_left {
  border-width: 6px 6px 6px 6px;
  margin-left: -6px;
  margin-top: -3px;
}
.gantt_task_link .gantt_link_arrow_up {
  border-width: 6px 6px 6px 6px;
}
.gantt_task_link .gantt_link_arrow_down {
  border-width: 6px 6px 6px 6px;
}
.gantt_task_line .gantt_task_progress_drag {
  bottom: -4px;
  height: 10px;
  margin-left: -8px;
  width: 16px;
}
.chartHeaderBg {
  background-color: #fff;
}
.gantt_task .gantt_task_scale .gantt_scale_cell {
  color: #a6a6a6;
  border-right: 1px solid #ebebeb;
}
/*
    project highlight
*/
.gantt_row.gantt_project,
.gantt_row.odd.gantt_project {
  background-color: #edffef;
}
.gantt_task_row.gantt_project,
.gantt_task_row.odd.gantt_project {
  background-color: #f5fff6;
}
.gantt_task_line.gantt_project {
  background-color: #65c16f;
  border: 1px solid #3c9445;
}
.gantt_task_line.gantt_project .gantt_task_progress {
  background-color: #46ad51;
}
/*
    milestone
*/
/*
    lightbox
*/
.buttonBg {
  background: #fff;
}
.gantt_cal_light .gantt_btn_set {
  margin: 5px 10px;
}
.gantt_btn_set.gantt_cancel_btn_set {
  background: #fff;
  color: #454545;
  border: 1px solid #CECECE;
}
.gantt_btn_set.gantt_save_btn_set {
  background: #3db9d3;
  text-shadow: 0 -1px 0 #248a9f;
  color: #fff;
}
.gantt_btn_set.gantt_delete_btn_set {
  text-shadow: 0 -1px 0 #6F6F6F;
  background: #ec8e00;
  text-shadow: 0 -1px 0 #aa6600;
  color: #fff;
}
.gantt_delete_btn {
  margin-top: 2px;
  width: 20px;
}
.gantt_cal_light_wide {
  padding-left: 0 !important;
  padding-right: 0 !important;
}
.gantt_cal_light_wide .gantt_cal_larea {
  border-left: none !important;
  border-right: none !important;
}
/*
    Message
*/
.gantt_popup_button.gantt_ok_button {
  background: #3db9d3;
  text-shadow: 0 -1px 0 #248a9f;
  color: #fff;
  font-weight: bold;
  border-width: 0;
}
.gantt_popup_button.gantt_cancel_button {
  font-weight: bold;
  color: #454544;
}
.gantt_popup_title {
  background-color: #fff;
}
.gantt_popup_shadow {
  box-shadow: 3px 3px 3px rgba(0, 0, 0, 0.07);
}
/*
    Quick info
*/
.gantt_qi_big_icon.icon_edit {
  color: #454545;
  background: #fff;
}
.gantt_qi_big_icon.icon_delete {
  text-shadow: 0 -1px 0 #aa6600;
  background: #ec8e00;
  color: #fff;
  border-width: 0;
}
/*links dnd*/
.gantt_tooltip {
  box-shadow: 3px 3px 3px rgba(0, 0, 0, 0.07);
  background-color: white;
  border-left: 1px solid rgba(0, 0, 0, 0.07);
  border-top: 1px solid rgba(0, 0, 0, 0.07);
  font-family: "Arial";
  font-size: 8pt;
  color: #454545;
}
.gantt_container {
  background-color: #FFFFFF;
  font-family: "Arial";
  font-size: 13px;
  border: 1px solid #CECECE;
  position: relative;
  white-space: nowrap;
  overflow-x: hidden;
  overflow-y: hidden;
}
.gantt_touch_active {
  overscroll-behavior: none;
}
.gantt_task_scroll {
  overflow-x: scroll;
}
.gantt_task,
.gantt_grid {
  position: relative;
  overflow-x: hidden;
  overflow-y: hidden;
  display: inline-block;
  vertical-align: top;
}
.gantt_grid_scale,
.gantt_task_scale {
  color: #6b6b6b;
  font-size: 12px;
  border-bottom: 1px solid #CECECE;
  -moz-box-sizing: border-box;
  box-sizing: border-box;
}
.gantt_grid_scale {
  background-color: #fff;
}
.gantt_task_scale {
  background-color: #fff;
}
.gantt_task_vscroll {
  background-color: #fff;
}
.gantt_scale_line {
  box-sizing: border-box;
  -moz-box-sizing: border-box;
  border-top: 1px solid #CECECE;
}
.gantt_scale_line:first-child {
  border-top: none;
}
.gantt_grid_head_cell {
  display: inline-block;
  vertical-align: top;
  border-right: 1px solid #CECECE;
  text-align: center;
  position: relative;
  cursor: default;
  height: 100%;
  box-sizing: border-box;
  -moz-box-sizing: border-box;
  line-height: 33px;
  -moz-user-select: -moz-none;
  -webkit-user-select: none;
  user-select: none;
  overflow: hidden;
}
.gantt_scale_line {
  clear: both;
}
.gantt_grid_data {
  width: 100%;
  overflow: hidden;
  position: relative;
}
.gantt_row {
  position: relative;
  -webkit-user-select: none;
  -moz-user-select: none;
  -moz-user-select: -moz-none;
}
.gantt_add,
.gantt_grid_head_add {
  width: 100%;
  height: 100%;
  background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoV2luZG93cykiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6NTQ3MjMyMENDNkI0MTFFMjk4MTI5QTg3MDhFNDVDQTkiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6NTQ3MjMyMERDNkI0MTFFMjk4MTI5QTg3MDhFNDVDQTkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo1NDcyMzIwQUM2QjQxMUUyOTgxMjlBODcwOEU0NUNBOSIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDo1NDcyMzIwQkM2QjQxMUUyOTgxMjlBODcwOEU0NUNBOSIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PshZT8UAAABbSURBVHjaYrTdeZmBEsCER+4wEP+H4sPkGGCDg020ARR7gb4GIAcYDKMDdPnDyAbYkGG5DVW9cIQMvUdBBAuUY4vDz8iAcZinA2zgCHqAYQMseAywJcYFAAEGAM+UFGuohFczAAAAAElFTkSuQmCC);
  background-position: center center;
  background-repeat: no-repeat;
  cursor: pointer;
  position: relative;
  -moz-opacity: 0.3;
  opacity: 0.3;
}
.gantt_grid_head_cell.gantt_grid_head_add {
  -moz-opacity: 0.6;
  opacity: 0.6;
  top: 0;
}
.gantt_grid_head_cell.gantt_grid_head_add:hover {
  -moz-opacity: 1;
  opacity: 1;
}
.gantt_grid_data .gantt_row:hover,
.gantt_grid_data .gantt_row.odd:hover {
  background-color: #FFF3A1;
}
.gantt_grid_data .gantt_row:hover .gantt_add,
.gantt_grid_data .gantt_row.odd:hover .gantt_add {
  -moz-opacity: 1;
  opacity: 1;
}
.gantt_task_row,
.gantt_row {
  border-bottom: 1px solid #ebebeb;
}
.gantt_row,
.gantt_task_row {
  background-color: #FFFFFF;
}
.gantt_row.odd,
.gantt_task_row.odd {
  background-color: #FFFFFF;
}
.gantt_row,
.gantt_cell,
.gantt_task_row,
.gantt_task_cell,
.gantt_grid_head_cell,
.gantt_scale_cell {
  box-sizing: border-box;
  -moz-box-sizing: border-box;
}
.gantt_grid_head_cell,
.gantt_scale_cell {
  line-height: inherit;
}
.gantt_grid_scale .gantt_grid_column_resize_wrap {
  cursor: col-resize;
  position: absolute;
  width: 13px;
  margin-left: -7px;
}
.gantt_grid_column_resize_wrap .gantt_grid_column_resize {
  background-color: #CECECE;
  height: 100%;
  width: 1px;
  margin: 0 auto;
}
.gantt_task_grid_row_resize_wrap {
  cursor: row-resize;
  position: absolute;
  height: 13px;
  margin-top: -7px;
  left: 0px;
  width: 100%;
}
.gantt_task_grid_row_resize_wrap .gantt_task_grid_row_resize {
  background-color: #ebebeb;
  top: 6px;
  height: 1px;
  width: 100%;
  margin: 0 auto;
  position: relative;
}
.gantt_drag_marker {
  pointer-events: none;
}
.gantt_drag_marker.gantt_grid_resize_area,
.gantt_drag_marker.gantt_row_grid_resize_area {
  background-color: rgba(231, 231, 231, 0.5);
  height: 100%;
  width: 100%;
  -moz-box-sizing: border-box;
  -webkit-box-sizing: border-box;
  box-sizing: border-box;
}
.gantt_drag_marker.gantt_grid_resize_area {
  border-left: 1px solid #CECECE;
  border-right: 1px solid #CECECE;
}
.gantt_drag_marker.gantt_row_grid_resize_area {
  border-top: 1px solid #CECECE;
  border-bottom: 1px solid #CECECE;
  pointer-events: none;
}
.gantt_row {
  display: flex;
}
.gantt_row > div {
  flex-shrink: 0;
  flex-grow: 0;
}
.gantt_cell {
  vertical-align: top;
  border-right: 1px solid #ebebeb;
  padding-left: 6px;
  padding-right: 6px;
  height: 100%;
  overflow: hidden;
  white-space: nowrap;
  font-size: 13px;
}
.gantt_cell_tree {
  display: flex;
  flex-wrap: nowrap;
}
.gantt_grid_scale .gantt_last_cell,
.gantt_grid_data .gantt_last_cell,
.gantt_task .gantt_task_scale .gantt_scale_cell.gantt_last_cell,
.gantt_task_bg .gantt_last_cell {
  border-right-width: 0px;
}
.gantt_task .gantt_task_scale .gantt_scale_cell.gantt_last_cell {
  border-right-width: 1px;
}
.gantt_task_bg {
  overflow: hidden;
}
.gantt_scale_cell {
  display: inline-block;
  white-space: nowrap;
  overflow: hidden;
  border-right: 1px solid #CECECE;
  text-align: center;
  height: 100%;
}
.gantt_task_cell {
  display: inline-block;
  height: 100%;
  border-right: 1px solid #ebebeb;
}
.gantt_layout_cell.gantt_ver_scroll {
  width: 0px;
  background-color: transparent;
  height: 1px;
  overflow-x: hidden;
  overflow-y: scroll;
  position: absolute;
  right: 0px;
  z-index: 1;
}
.gantt_ver_scroll > div {
  width: 1px;
  height: 1px;
}
.gantt_hor_scroll {
  height: 0px;
  background-color: transparent;
  width: 100%;
  clear: both;
  overflow-x: scroll;
  overflow-y: hidden;
}
.gantt_layout_cell .gantt_hor_scroll {
  position: absolute;
}
.gantt_hor_scroll > div {
  width: 5000px;
  height: 1px;
}
.gantt_tree_indent,
.gantt_tree_icon {
  flex-grow: 0;
  flex-shrink: 0;
}
.gantt_tree_indent {
  width: 15px;
  height: 100%;
}
.gantt_tree_content,
.gantt_tree_icon {
  vertical-align: top;
}
.gantt_tree_icon {
  width: 28px;
  height: 100%;
  background-repeat: no-repeat;
  background-position: center center;
}
.gantt_tree_content {
  height: 100%;
  white-space: nowrap;
  min-width: 0;
}
.gantt_tree_icon.gantt_open {
  background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAYAAABWzo5XAAAArklEQVQ4T2NkoBJgpJI5DEPAoFOnTv0/c+YMQR+bmJgwmJmZwX2E4bVp06b9j4yMZODg4MBp2I8fPxiWL1/OkJWVNUAGcXJyMnz//h3uQrJdRLFBIAPQAchlJLsIFuCMjIwM////B5sJMoRkg2CuIdtrQcHBDOxsbHBfCQgIMHz48AHO//nrF8O6tWsJR7+7uzsDIxMTznT0/98/hp07d+I3iGopm2DewKFg8OV+AJWkfRMrTobLAAAAAElFTkSuQmCC);
  width: 18px;
  cursor: pointer;
}
.gantt_tree_icon.gantt_close {
  background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAYAAABWzo5XAAAAkUlEQVQ4T2NkoBJgpJI5DEPAoFOnTv0/c+YMQR+bmJgwmJmZwX2E4bVp06b9j4yMZODg4MBp2I8fPxiWL1/OkJWVNeIN4uTkxAin79+/M5AcRtgCHGQIyQbhijaiDQoKDmZgZ2PDGf0/f/1iWLd2LeHod3d3Z2BkYsJp0P9//xh27tyJ3yCqpWyCeQOHgsGX+wEZpW4T5LCxKwAAAABJRU5ErkJggg==);
  width: 18px;
  cursor: pointer;
}
.gantt_tree_icon.gantt_blank {
  width: 18px;
}
.gantt_tree_icon.gantt_folder_open {
  background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAYAAABWzo5XAAAAs0lEQVQ4T62T0Q2EIBBEpQlzuaaMsQoqooqLsSljbMLLmMxmUXBR4U+Qt7Mzi2sqLVeJ00SgEMKWAnvvzYLyAyHfT5sU2fXDJSwCAXK8MI0/UTkva7IIFJsg3NSwnKdFoKtAWOQ1CN7CEqeTotE5L7QyJhmBcklZM4ZgTiAr3iOU3kD93ppO5SkMjB1EeXdBWoSkRql3YeIRe+cGvktS056JR9wsmeBUkujCfNXWCPC8GugPqn5ii/hV+FoAAAAASUVORK5CYII=);
}
.gantt_tree_icon.gantt_folder_closed {
  background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAYAAABWzo5XAAAAfElEQVQ4T2NkoBJgpJI5DCgGTZ8+/T82gzMzMwlaCFcAM0RKQgyrI/0Dg/EahmIQyBB0DRvXr4W78tmLV1gtAbmYoEEgnciG4QpTogzCFyEwSyg2CBS2oCAZNQh3cA+hMAJ5AlcKxuVBlOgnNgVjMwyUrQjmamKLGaoZBAAOTFyLnFFW4wAAAABJRU5ErkJggg==);
}
.gantt_tree_icon.gantt_file {
  background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAYAAABWzo5XAAAAeElEQVQ4T2NkoBJgRDZn+vTp/wmZm5mZiaIHph7DICkJMUJmMfgHBmMYhtUgbAo3rl+L4lp0NUQbBPI2umuRDaPIIFAYwAyjv0HoMQALM5JdhG4QLMxGDcKdyIdoGIE89OzFK4KZF5Rl8EY/QROQFGA1iBQD0NUCAJVjcxO0naAQAAAAAElFTkSuQmCC);
}
.gantt_grid_head_cell .gantt_sort {
  position: absolute;
  right: 5px;
  top: 8px;
  width: 7px;
  height: 13px;
  background-repeat: no-repeat;
  background-position: center center;
}
.gantt_grid_head_cell .gantt_sort.gantt_asc {
  background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAcAAAANCAYAAABlyXS1AAAARUlEQVR4nGNgQAKGxib/GbABkIS7b8B/DAUwCRiGK0CXwFBAb1DfP/U/LszwHwi2X7qFgUEArBtdAVwCBmAKMCSQFSDzAWXXaOHsXeqkAAAAAElFTkSuQmCC);
}
.gantt_grid_head_cell .gantt_sort.gantt_desc {
  background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAcAAAANCAYAAABlyXS1AAAARUlEQVR42mNgQAL1/VP/M2ADIIntF2/9x1AAlrh0C47hCmA60DFYwX88gIFGwNDY5D8uDFbg7hvwHx2jmIBTAlkB0e4BAEjlaNtBWJPnAAAAAElFTkSuQmCC);
}
.gantt_inserted,
.gantt_updated {
  font-weight: bold;
}
.gantt_deleted {
  text-decoration: line-through;
}
.gantt_invalid {
  background-color: #FFE0E0;
}
.gantt_error {
  color: red;
}
.gantt_status {
  right: 1px;
  padding: 5px 10px;
  background: rgba(155, 155, 155, 0.1);
  position: absolute;
  top: 1px;
  -webkit-transition: opacity 0.2s;
  transition: opacity 0.2s;
  opacity: 0;
}
.gantt_status.gantt_status_visible {
  opacity: 1;
}
#gantt_ajax_dots span {
  -webkit-transition: opacity 0.2s;
  transition: opacity 0.2s;
  background-repeat: no-repeat;
  opacity: 0;
}
#gantt_ajax_dots span.gantt_dot_visible {
  opacity: 1;
}
.gantt_column_drag_marker {
  border: 1px solid #CECECE;
  opacity: 0.8;
  pointer-events: none;
}
.gantt_grid_head_cell_dragged {
  border: 1px solid #CECECE;
  opacity: 0.3;
}
.gantt_grid_target_marker {
  position: absolute;
  top: 0;
  width: 2px;
  height: 100%;
  background-color: #FFA011;
  transform: translateX(-1px);
}
.gantt_grid_target_marker::before,
.gantt_grid_target_marker::after {
  display: block;
  content: "";
  position: absolute;
  left: -5px;
  width: 0px;
  height: 0px;
  border: 6px solid rgba(0, 0, 0, 0);
}
.gantt_grid_target_marker::before {
  border-top-color: #FFA011;
}
.gantt_grid_target_marker::after {
  bottom: 0;
  border-bottom-color: #FFA011;
}
.gantt_message_area {
  position: fixed;
  right: 5px;
  width: 250px;
  z-index: 1000;
}
.gantt-info {
  min-width: 120px;
  padding: 4px 4px 4px 20px;
  font-family: "Arial";
  z-index: 10000;
  margin: 5px;
  margin-bottom: 10px;
  -webkit-transition: all .5s ease;
  -moz-transition: all .5s ease;
  -o-transition: all .5s ease;
  transition: all .5s ease;
}
.gantt-info.hidden {
  height: 0px;
  padding: 0px;
  border-width: 0px;
  margin: 0px;
  overflow: hidden;
}
.gantt_modal_box {
  overflow: hidden;
  display: inline-block;
  min-width: 250px;
  width: 250px;
  text-align: center;
  position: fixed;
  z-index: 20000;
  box-shadow: 3px 3px 3px rgba(0, 0, 0, 0.07);
  font-family: "Arial";
  border-radius: 6px;
  border: 1px solid #CECECE;
  background: #fff;
}
.gantt_popup_title {
  border-top-left-radius: 6px;
  border-top-right-radius: 6px;
  border-width: 0px;
}
.gantt_button,
.gantt_popup_button {
  border: 1px solid #CECECE;
  height: 30px;
  line-height: 30px;
  display: inline-block;
  margin: 0 5px;
  border-radius: 4px;
  background: #fff;
}
.gantt-info,
.gantt_popup_button,
.gantt_button {
  user-select: none;
  -webkit-user-select: none;
  -moz-user-select: -moz-none;
  cursor: pointer;
}
.gantt_popup_text {
  overflow: hidden;
}
.gantt_popup_controls {
  border-radius: 6px;
  padding: 10px;
}
.gantt_popup_button {
  min-width: 100px;
}
div.dhx_modal_cover {
  background-color: #000;
  cursor: default;
  filter: progid:DXImageTransform.Microsoft.Alpha(opacity=20);
  opacity: 0.2;
  position: fixed;
  z-index: 19999;
  left: 0px;
  top: 0px;
  width: 100%;
  height: 100%;
  border: none;
  zoom: 1;
}
.gantt-info img,
.gantt_modal_box img {
  float: left;
  margin-right: 20px;
}
.gantt-alert-error,
.gantt-confirm-error {
  border: 1px solid #ff0000;
}
/*Skin section*/
.gantt_button input,
.gantt_popup_button div {
  border-radius: 4px;
  font-size: 14px;
  -moz-box-sizing: content-box;
  box-sizing: content-box;
  padding: 0px;
  margin: 0px;
  vertical-align: top;
}
.gantt_popup_title {
  border-bottom: 1px solid #CECECE;
  height: 40px;
  line-height: 40px;
  font-size: 20px;
}
.gantt_popup_text {
  margin: 15px 15px 5px 15px;
  font-size: 14px;
  color: #000;
  min-height: 30px;
  border-radius: 6px;
}
.gantt-info,
.gantt-error {
  font-size: 14px;
  color: #000;
  box-shadow: 3px 3px 3px rgba(0, 0, 0, 0.07);
  padding: 0px;
  background-color: #FFFFFF;
  border-radius: 3px;
  border: 1px solid #FFFFFF;
}
.gantt-info div {
  padding: 5px 10px 5px 10px;
  background-color: #FFFFFF;
  border-radius: 3px;
  border: 1px solid #CECECE;
}
.gantt-error {
  background-color: #d81b1b;
  border: 1px solid #ff3c3c;
}
.gantt-error div {
  background-color: #d81b1b;
  border: 1px solid #940000;
  color: #FFFFFF;
}
.gantt-warning {
  background-color: #FF9000;
  border: 1px solid #ffa633;
}
.gantt-warning div {
  background-color: #FF9000;
  border: 1px solid #b36500;
  color: #FFFFFF;
}
.gantt_grid div,
.gantt_data_area div {
  -ms-touch-action: none;
  -webkit-tap-highlight-color: rgba(0, 0, 0, 0);
}
.gantt_data_area {
  position: relative;
  overflow-x: hidden;
  overflow-y: hidden;
  -moz-user-select: -moz-none;
  -webkit-user-select: none;
  user-select: none;
}
.gantt_links_area {
  position: absolute;
  left: 0px;
  top: 0px;
}
.gantt_task_content,
.gantt_task_progress,
.gantt_side_content {
  line-height: inherit;
  overflow: hidden;
  height: 100%;
}
.gantt_task_content {
  font-size: 12px;
  color: #fff;
  width: 100%;
  top: 0;
  cursor: pointer;
  position: absolute;
  white-space: nowrap;
  text-align: center;
}
.gantt_task_progress {
  text-align: center;
  z-index: 0;
  background: #299cb4;
}
.gantt_task_progress_wrapper {
  border-radius: inherit;
  position: relative;
  width: 100%;
  height: 100%;
  overflow: hidden;
}
.gantt_task_line {
  -webkit-border-radius: 2px;
  -moz-border-radius: 2px;
  border-radius: 2px;
  position: absolute;
  -moz-box-sizing: border-box;
  box-sizing: border-box;
  background-color: #3db9d3;
  border: 1px solid #2898b0;
  -webkit-user-select: none;
  -moz-user-select: none;
  -moz-user-select: -moz-none;
}
.gantt_task_line.gantt_drag_move div {
  cursor: move;
}
.gantt_touch_move,
.gantt_touch_progress .gantt_touch_resize {
  -moz-transform: scale(1.02, 1.1);
  -o-transform: scale(1.02, 1.1);
  -webkit-transform: scale(1.02, 1.1);
  transform: scale(1.02, 1.1);
  -moz-transform-origin: 50%;
  -o-transform-origin: 50%;
  -webkit-transform-origin: 50%;
  transform-origin: 50%;
}
.gantt_touch_progress .gantt_task_progress_drag,
.gantt_touch_resize .gantt_task_drag {
  -moz-transform: scaleY(1.3);
  -o-transform: scaleY(1.3);
  -webkit-transform: scaleY(1.3);
  transform: scaleY(1.3);
  -moz-transform-origin: 50%;
  -o-transform-origin: 50%;
  -webkit-transform-origin: 50%;
  transform-origin: 50%;
}
.gantt_side_content {
  position: absolute;
  white-space: nowrap;
  color: #6e6e6e;
  top: 0;
  font-size: 11px;
}
.gantt_side_content.gantt_left {
  right: 100%;
  padding-right: 20px;
}
.gantt_side_content.gantt_right {
  left: 100%;
  padding-left: 20px;
}
.gantt_side_content.gantt_link_crossing {
  bottom: 8.75px;
  top: auto;
}
.gantt_task_link .gantt_line_wrapper,
.gantt_link_arrow {
  position: absolute;
  cursor: pointer;
}
.gantt_line_wrapper div {
  background-color: #FFA011;
}
.gantt_task_link:hover .gantt_line_wrapper div {
  box-shadow: 0 0 5px 0px #FFA011;
}
.gantt_task_link div.gantt_link_arrow {
  background-color: transparent;
  border-style: solid;
  width: 0px;
  height: 0px;
}
.gantt_link_control {
  position: absolute;
  width: 20px;
  top: 0px;
}
.gantt_link_control div {
  display: none;
  cursor: pointer;
  box-sizing: border-box;
  position: relative;
  top: 50%;
  margin-top: -7.5px;
  vertical-align: middle;
  border: 1px solid #929292;
  -webkit-border-radius: 6.5px;
  -moz-border-radius: 6.5px;
  border-radius: 6.5px;
  height: 13px;
  width: 13px;
  background-color: #f0f0f0;
}
.gantt_link_control.task_right div.gantt_link_point {
  margin-left: 7px;
}
.gantt_link_control div:hover {
  background-color: #FFF;
}
.gantt_link_control.task_left {
  left: -20px;
}
.gantt_link_control.task_right {
  right: -20px;
}
.gantt_task_line.gantt_selected .gantt_link_control div,
.gantt_task_line:hover .gantt_link_control div,
.gantt_task_line.gantt_drag_progress .gantt_link_control div,
.gantt_task_line.gantt_drag_move .gantt_link_control div,
.gantt_task_line.gantt_drag_resize .gantt_link_control div,
.gantt_task_line.gantt_selected .gantt_task_progress_drag,
.gantt_task_line:hover .gantt_task_progress_drag,
.gantt_task_line.gantt_drag_progress .gantt_task_progress_drag,
.gantt_task_line.gantt_drag_move .gantt_task_progress_drag,
.gantt_task_line.gantt_drag_resize .gantt_task_progress_drag,
.gantt_task_line.gantt_selected .gantt_task_drag,
.gantt_task_line:hover .gantt_task_drag,
.gantt_task_line.gantt_drag_progress .gantt_task_drag,
.gantt_task_line.gantt_drag_move .gantt_task_drag,
.gantt_task_line.gantt_drag_resize .gantt_task_drag {
  display: block;
}
.gantt_link_target .gantt_link_control div {
  display: block;
}
.gantt_link_source,
.gantt_link_target {
  box-shadow: 0px 0px 3px #3db9d3;
}
.gantt_link_target.link_start_allow,
.gantt_link_target.link_finish_allow {
  box-shadow: 0px 0px 3px #ffbf5e;
}
.gantt_link_target.link_start_deny,
.gantt_link_target.link_finish_deny {
  box-shadow: 0px 0px 3px #e87e7b;
}
.link_start_allow .gantt_link_control.task_start_date div,
.link_finish_allow .gantt_link_control.task_end_date div {
  background-color: #ffbf5e;
  border-color: #ffa011;
}
.link_start_deny .gantt_link_control.task_start_date div,
.link_finish_deny .gantt_link_control.task_end_date div {
  background-color: #e87e7b;
  border-color: #dd3e3a;
}
.gantt_link_arrow_right {
  border-width: 4px 0 4px 6px;
  border-top-color: transparent !important;
  border-right-color: transparent !important;
  border-bottom-color: transparent !important;
  border-left-color: #FFA011;
  /*margin-top: -1px;*/
}
.gantt_link_arrow_left {
  border-width: 4px 6px 4px 0;
  margin-top: -1px;
  border-top-color: transparent !important;
  border-right-color: #FFA011;
  border-bottom-color: transparent !important;
  border-left-color: transparent !important;
}
.gantt_link_arrow_up {
  border-width: 0 4px 6px 4px;
  border-color: transparent transparent #FFA011 transparent;
  border-top-color: transparent !important;
  border-right-color: transparent !important;
  border-bottom-color: #FFA011;
  border-left-color: transparent !important;
}
.gantt_link_arrow_down {
  border-width: 4px 6px 0 4px;
  border-top-color: #FFA011;
  border-right-color: transparent !important;
  border-bottom-color: transparent !important;
  border-left-color: transparent !important;
}
.gantt_task_drag,
.gantt_task_progress_drag {
  cursor: ew-resize;
  display: none;
  position: absolute;
}
.gantt_task_drag.task_right {
  cursor: e-resize;
}
.gantt_task_drag.task_left {
  cursor: w-resize;
}
.gantt_task_drag {
  height: 100%;
  width: 8px;
  z-index: 1;
  top: -1px;
}
.gantt_task_drag.task_left {
  left: -7px;
}
.gantt_task_drag.task_right {
  right: -7px;
}
.gantt_task_progress_drag {
  height: 8px;
  width: 8px;
  bottom: -4px;
  margin-left: -4px;
  background-position: bottom;
  background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAALCAYAAAB24g05AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoV2luZG93cykiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6MkY3Rjk0RUVDMkYzMTFFMkI1OThEQTA3ODU0OTkzMEEiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6MkY3Rjk0RUZDMkYzMTFFMkI1OThEQTA3ODU0OTkzMEEiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDoyRjdGOTRFQ0MyRjMxMUUyQjU5OERBMDc4NTQ5OTMwQSIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDoyRjdGOTRFREMyRjMxMUUyQjU5OERBMDc4NTQ5OTMwQSIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PobPBzIAAADkSURBVHjaYpk2bRoDDsAExL1QdjEQ/8OmiAWHZk4gXqymqhQM4ty6fU8OSMUA8XdiDBAB4k0a6iqWRga6EKcwMQXduHlnL5DpB8Rv0J2JDFSA+JiOtgZcMwiA2CAxkBxUDVYDLEAKgIpV9XQ0MZwFEgPJAZnHoWpRDAgC4n2W5saiQKfjClQGkBxQDciL+6B6wAbkA/EqJwdrTkUFOQZCAKQGpBbIXA3SCzJggo+XK7OEuBgDsQCkFqgHrBfsBT5eHgZSAUwP2IBfv36TbABMDygdtK1Zv6UESLORaAbIhG6AAAMAKN8wE24DXWcAAAAASUVORK5CYII=);
  background-repeat: no-repeat;
  z-index: 1;
}
.gantt_task_progress_drag:hover {
  background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAALCAYAAAB24g05AAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAs0lEQVQoz6WMPW7CQBgFJxZaiZ60qcgdwjVMmzu8gpwhDULabXyBdHAGuzRHivQiQZovigS2+Jtu95t5T03TMITtCtjEc5VSOgx5k5F4CnxJWgKUUl5sv6eUvk/daiCeAe1fDCCpBtq4jQ/YngO9pMWpGH99OOcDtt8ifmWEuO3D/R+wXQOdpGcuIGkGdNFQ2RawlTTlSsLd2RY55+O95JyPFQ/y8MAE+CylfADpxvYHWP8CXj+JR4wdKHYAAAAASUVORK5CYII=);
}
.gantt_link_tooltip {
  box-shadow: 3px 3px 3px #888888;
  background-color: #fff;
  border-left: 1px dotted #cecece;
  border-top: 1px dotted #cecece;
  font-family: Tahoma;
  font-size: 8pt;
  color: #444;
  padding: 6px;
  line-height: 20px;
}
.gantt_link_direction {
  height: 0px;
  border: 0px none #FFA011;
  border-bottom-style: dashed;
  border-bottom-width: 2px;
  transform-origin: 0% 0%;
  -ms-transform-origin: 0% 0%;
  -webkit-transform-origin: 0% 0%;
  z-index: 2;
  margin-left: 1px;
  position: absolute;
}
.gantt_grid_data .gantt_row.gantt_selected,
.gantt_grid_data .gantt_row.odd.gantt_selected {
  background-color: #FFF3A1;
}
.gantt_task_row.gantt_selected {
  background-color: #FFF3A1;
}
.gantt_task_row.gantt_selected .gantt_task_cell {
  border-right-color: #ffec6e;
}
.gantt_task_line.gantt_selected {
  box-shadow: 0 0 5px #299cb4;
}
.gantt_task_line.gantt_project.gantt_selected {
  box-shadow: 0 0 5px #46ad51;
}
.gantt_task_line.gantt_milestone {
  visibility: hidden;
  background-color: #D33DAF;
  border: 0px solid #61164f;
  box-sizing: content-box;
  -moz-box-sizing: content-box;
}
.gantt_task_line.gantt_milestone div {
  visibility: visible;
}
.gantt_task_line.gantt_milestone .gantt_task_content {
  background: inherit;
  border: inherit;
  border-width: 1px;
  border-radius: inherit;
  box-sizing: border-box;
  -moz-box-sizing: border-box;
  -webkit-transform: rotate(45deg);
  -moz-transform: rotate(45deg);
  -ms-transform: rotate(45deg);
  -o-transform: rotate(45deg);
  transform: rotate(45deg);
}
.gantt_task_line.gantt_task_inline_color {
  border-color: #999999;
}
.gantt_task_line.gantt_task_inline_color .gantt_task_progress {
  background-color: #363636;
  opacity: 0.2;
}
.gantt_task_line.gantt_task_inline_color.gantt_selected {
  box-shadow: 0 0 5px #999999;
}
.gantt_task_line.gantt_task_inline_color.gantt_project.gantt_selected {
  box-shadow: 0 0 5px #999999;
}
.gantt_task_link.gantt_link_inline_color:hover .gantt_line_wrapper div {
  box-shadow: 0 0 5px 0px #999999;
}
.gantt_critical_task {
  background-color: #e63030;
  border-color: #9d3a3a;
}
.gantt_critical_task .gantt_task_progress {
  background-color: rgba(0, 0, 0, 0.4);
}
.gantt_critical_link .gantt_line_wrapper > div {
  background-color: #e63030;
}
.gantt_critical_link .gantt_link_arrow {
  border-color: #e63030;
}
.gantt_row:focus,
.gantt_cell:focus,
.gantt_btn_set:focus,
.gantt_qi_big_icon:focus,
.gantt_popup_button:focus,
.gantt_grid_head_cell:focus {
  -moz-box-shadow: inset 0px 0px 1px 1px #4d90fe;
  -webkit-box-shadow: inset 0px 0px 1px 1px #4d90fe;
  box-shadow: inset 0px 0px 1px 1px #4d90fe;
}
.gantt_split_parent,
.gantt_split_subproject {
  opacity: 0.1;
  pointer-events: none;
}
.gantt_rollup_child .gantt_link_control,
.gantt_rollup_child:hover .gantt_link_control {
  display: none;
}
.gantt_unselectable,
.gantt_unselectable div {
  -webkit-user-select: none;
  -moz-user-select: none;
  -moz-user-select: -moz-none;
}
.gantt_cal_light {
  -webkit-tap-highlight-color: transparent;
  background: #fff;
  border-radius: 6px;
  font-family: "Arial";
  font-size: 13px;
  border: 1px solid #CECECE;
  color: #6b6b6b;
  font-size: 12px;
  position: absolute;
  z-index: 10001;
  width: 550px;
  height: 250px;
  box-shadow: 3px 3px 3px rgba(0, 0, 0, 0.07);
}
.gantt_cal_light_wide {
  width: 650px;
}
.gantt_cal_light select {
  font-family: "Arial";
  border: 1px solid #CECECE;
  font-size: 13px;
  padding: 2px;
  margin: 0px;
}
.gantt_cal_ltitle {
  padding: 7px 10px;
  overflow: hidden;
  white-space: nowrap;
  -webkit-border-top-left-radius: 6px;
  -webkit-border-bottom-left-radius: 0;
  -webkit-border-top-right-radius: 6px;
  -webkit-border-bottom-right-radius: 0;
  -moz-border-radius-topleft: 6px;
  -moz-border-radius-bottomleft: 0;
  -moz-border-radius-topright: 6px;
  -moz-border-radius-bottomright: 0;
  border-top-left-radius: 6px;
  border-bottom-left-radius: 0;
  border-top-right-radius: 6px;
  border-bottom-right-radius: 0;
}
.gantt_cal_ltitle span {
  white-space: nowrap;
}
.gantt_cal_lsection {
  color: #727272;
  font-weight: bold;
  padding: 12px 0px 5px 10px;
}
.gantt_cal_lsection .gantt_fullday {
  float: right;
  margin-right: 5px;
  font-size: 12px;
  font-weight: normal;
  line-height: 20px;
  vertical-align: top;
  cursor: pointer;
}
.gantt_cal_lsection {
  font-size: 13px;
}
.gantt_cal_ltext {
  padding: 2px    10px;
  overflow: hidden;
}
.gantt_cal_ltext textarea {
  overflow-y: auto;
  overflow-x: hidden;
  font-family: "Arial";
  font-size: 13px;
  -moz-box-sizing: border-box;
  -webkit-box-sizing: border-box;
  box-sizing: border-box;
  border: 1px solid #CECECE;
  height: 100%;
  width: 100%;
  outline: none !important;
  resize: none;
}
.gantt_section_constraint [data-constraint-time-select] {
  margin-left: 20px;
}
.gantt_time {
  font-weight: bold;
}
.gantt_cal_light .gantt_title {
  padding-left: 10px;
}
.gantt_cal_larea {
  border: 1px solid #CECECE;
  border-left: none;
  border-right: none;
  background-color: #fff;
  overflow: hidden;
  height: 1px;
}
.gantt_btn_set {
  margin: 10px 7px 5px 10px;
  padding: 5px 15px 5px 10px;
  float: left;
  -webkit-border-radius: 4px;
  -moz-border-radius: 4px;
  border-radius: 4px;
  border-width: 0;
  border-color: #CECECE;
  border-style: solid;
  height: 32px;
  font-weight: bold;
  background: #fff;
  -moz-box-sizing: border-box;
  -webkit-box-sizing: border-box;
  box-sizing: border-box;
  cursor: pointer;
}
.gantt_hidden {
  display: none;
}
.gantt_btn_set div {
  float: left;
  font-size: 13px;
  height: 22px;
  line-height: 22px;
  background-repeat: no-repeat;
  vertical-align: middle;
}
.gantt_save_btn {
  background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoV2luZG93cykiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6MTk1OUU5RDFDMzA0MTFFMkExMUZBQTdDNDAzOUE5RjMiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6MTk1OUU5RDJDMzA0MTFFMkExMUZBQTdDNDAzOUE5RjMiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDoxOTU5RTlDRkMzMDQxMUUyQTExRkFBN0M0MDM5QTlGMyIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDoxOTU5RTlEMEMzMDQxMUUyQTExRkFBN0M0MDM5QTlGMyIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PjDroXYAAAEXSURBVHjaYvz//z8DJYCRUgPIAUxAbAnEHiAHMIBcQCwGaRYXF3e6evXqoffv39/dv38/CymaGSUkJBzv3LlzCsj///fv3wdAihkkIQnEvkAshU8zLy+v7a1bt06ANP/79+87kDIAy505cybq06dPr3p7ezuwGQLTfOPGjWP/ESAZLg8kPKBO+g01RBJNszWyZqC6uSgWgIg/f/4shxnS2dnZBjMEqNkSFGBImi8CKTYMA4BYCGjIczRDHC5dunQQSfN7IKWI4UUkjjdMMdCwnw8ePLjwHxV4Yw1gZA5Q47z/2EELzhhCE+ABGvIQWSeQvwcU38QaAML2wHj+C/X3MyAlijeB4ZBoBOIPQGxJKIVSnBsBAgwABddBclWfcZUAAAAASUVORK5CYII=);
  margin-top: 2px;
  width: 21px;
}
.gantt_cancel_btn {
  margin-top: 2px;
  background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoV2luZG93cykiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6MDkzMDA3MzlDMzA0MTFFMjg2QTVFMzFEQzgwRkJERDYiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6MDkzMDA3M0FDMzA0MTFFMjg2QTVFMzFEQzgwRkJERDYiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDowOTMwMDczN0MzMDQxMUUyODZBNUUzMURDODBGQkRENiIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDowOTMwMDczOEMzMDQxMUUyODZBNUUzMURDODBGQkRENiIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PmYuYOUAAAEdSURBVHjaYvz//z8DJYAFXWDlypU8QKoIiD2A2AwqfAqIdwBxX3h4+Bdk9YzILgBqtgdS84FYEYeF94E4EWjIQZgAE5LmQCB1AKoZZKMPEAtAMYh9GSp3AKjWD8UFQAEhIPshEIOc3wHENUBb/qJ57SyQMoJyPwKxElDNO1gYFEE17wMKVmIJlzNQzeegrjaA6qmBecEbSvfh0GwMxGeBhoPoemQ9MAO0kEIbl2YTqPAFKK2IbMB3AjabYIkRZmQD7kNpMyI0G0PpO8gGbIUFJj7NQDk2INWIrIcJKfBAKcwJqvkcDs0TgFgXGo19KCkRmpDWQdWDEk0NUoCBoq0FqhkE/IEWbKJKUmZEz43QzFSKIzN1481M5ACAAAMAlfl/lCwRpagAAAAASUVORK5CYII=);
  width: 20px;
}
.gantt_delete_btn {
  background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoV2luZG93cykiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6MjFENzI3NUNDMzA0MTFFMjhBNjJGQTc3MUIyQzYzNEYiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6MjFENzI3NURDMzA0MTFFMjhBNjJGQTc3MUIyQzYzNEYiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDoyMUQ3Mjc1QUMzMDQxMUUyOEE2MkZBNzcxQjJDNjM0RiIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDoyMUQ3Mjc1QkMzMDQxMUUyOEE2MkZBNzcxQjJDNjM0RiIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PmUD0gAAAABvSURBVHjaYvz//z8DIyMjAxYQicReji4J0ofKQNP8HwmgGQbXB8IsWGwDSSwDuioKjY9uBthVjFAXYHUGAQA2kYmBUoAUBpGk0LAwgBvwH+YX4mkwptgLowYMRgOITUyYKRFIN/wnDjQgJySAAAMApryKzL8wjfUAAAAASUVORK5CYII=);
  margin-top: 2px;
  width: 20px;
}
.gantt_cal_cover {
  width: 100%;
  height: 100%;
  position: fixed;
  z-index: 10000;
  top: 0px;
  left: 0px;
  background-color: black;
  opacity: 0.1;
  filter: progid:DXImageTransform.Microsoft.Alpha(opacity=10);
}
.gantt_custom_button {
  padding: 0px 3px 0px 3px;
  font-family: "Arial";
  font-size: 13px;
  font-weight: normal;
  margin-right: 10px;
  margin-top: -5px;
  cursor: pointer;
  float: right;
  height: 21px;
  width: 90px;
  border: 1px solid #CECECE;
  text-align: center;
  -webkit-border-radius: 4px;
  -moz-border-radius: 4px;
  -ms-border-radius: 4px;
  -o-border-radius: 4px;
  border-radius: 4px;
}
.gantt_custom_button div {
  cursor: pointer;
  float: none;
  height: 21px;
  line-height: 21px;
  vertical-align: middle;
}
.gantt_custom_button div:first-child {
  display: none;
}
.gantt_cal_light_wide {
  width: 580px;
  padding: 2px 4px;
}
.gantt_cal_light_wide .gantt_cal_larea {
  -moz-box-sizing: border-box;
  -webkit-box-sizing: border-box;
  box-sizing: border-box;
  border: 1px solid #CECECE;
}
.gantt_cal_light_wide .gantt_cal_lsection {
  border: 0px;
  float: left;
  text-align: right;
  width: 80px;
  height: 20px;
  padding: 5px 10px 0px 0px;
}
.gantt_cal_light_wide .gantt_wrap_section {
  position: relative;
  padding: 10px 0;
  overflow: hidden;
  border-bottom: 1px solid #ebebeb;
}
.gantt_cal_light_wide .gantt_section_time {
  overflow: hidden;
  padding-top: 2px !important;
  padding-right: 0px;
  height: 20px !important;
}
.gantt_cal_light_wide .gantt_cal_ltext {
  padding-right: 0px;
}
.gantt_cal_light_wide .gantt_cal_larea {
  padding: 0 10px;
  width: 100%;
}
.gantt_cal_light_wide .gantt_section_time {
  background: transparent;
}
.gantt_cal_light_wide .gantt_cal_checkbox label {
  padding-left: 0px;
}
.gantt_cal_light_wide .gantt_cal_lsection .gantt_fullday {
  float: none;
  margin-right: 0px;
  font-weight: bold;
  cursor: pointer;
}
.gantt_cal_light_wide .gantt_custom_button {
  position: absolute;
  top: 0;
  right: 0;
  margin-top: 2px;
}
.gantt_cal_light_wide .gantt_repeat_right {
  margin-right: 55px;
}
.gantt_cal_light_wide.gantt_cal_light_full {
  width: 738px;
}
.gantt_cal_wide_checkbox input {
  margin-top: 8px;
  margin-left: 14px;
}
.gantt_cal_light input {
  font-size: 13px;
}
.gantt_section_time {
  background-color: white;
  white-space: nowrap;
  padding: 2px 10px 5px;
  padding-top: 2px !important;
}
.gantt_section_time .gantt_time_selects {
  float: left;
  height: 25px;
}
.gantt_section_time .gantt_time_selects select {
  height: 23px;
  padding: 2px;
  border: 1px solid #CECECE;
}
.gantt_duration {
  width: 100px;
  height: 23px;
  float: left;
  white-space: nowrap;
  margin-left: 20px;
  line-height: 23px;
}
.gantt_duration .gantt_duration_value,
.gantt_duration .gantt_duration_dec,
.gantt_duration .gantt_duration_inc {
  -moz-box-sizing: border-box;
  -webkit-box-sizing: border-box;
  box-sizing: border-box;
  text-align: center;
  vertical-align: top;
  height: 100%;
  border: 1px solid #CECECE;
}
.gantt_duration .gantt_duration_value {
  width: 40px;
  padding: 3px 4px;
  border-left-width: 0;
  border-right-width: 0;
}
.gantt_duration .gantt_duration_value.gantt_duration_value_formatted {
  width: 70px;
}
.gantt_duration .gantt_duration_dec,
.gantt_duration .gantt_duration_inc {
  width: 20px;
  padding: 1px;
  padding-bottom: 1px;
  background: #fff;
}
.gantt_duration .gantt_duration_dec {
  -moz-border-top-left-radius: 4px;
  -moz-border-bottom-left-radius: 4px;
  -webkit-border-top-left-radius: 4px;
  -webkit-border-bottom-left-radius: 4px;
  border-top-left-radius: 4px;
  border-bottom-left-radius: 4px;
}
.gantt_duration .gantt_duration_inc {
  margin-right: 4px;
  -moz-border-top-right-radius: 4px;
  -moz-border-bottom-right-radius: 4px;
  -webkit-border-top-right-radius: 4px;
  -webkit-border-bottom-right-radius: 4px;
  border-top-right-radius: 4px;
  border-bottom-right-radius: 4px;
}
.gantt_resources {
  max-height: 150px;
  height: auto;
  overflow-y: auto;
}
.gantt_resource_row {
  display: block;
  padding: 10px 0;
  border-bottom: 1px solid #ebebeb;
  cursor: pointer;
}
.gantt_resource_row input[type=checkbox]:not(:checked),
.gantt_resource_row input[type=checkbox]:not(:checked) ~ div {
  opacity: 0.5;
}
.gantt_resource_toggle {
  vertical-align: middle;
}
.gantt_resources_filter .gantt_resources_filter_input {
  padding: 1px 2px 1px 2px;
  box-sizing: border-box;
}
.gantt_resources_filter .switch_unsetted {
  vertical-align: middle;
}
.gantt_resource_cell {
  display: inline-block;
}
.gantt_resource_cell.gantt_resource_cell_checkbox {
  width: 24px;
  max-width: 24px;
  min-width: 24px;
  vertical-align: middle;
}
.gantt_resource_cell.gantt_resource_cell_label {
  width: 40%;
  max-width: 40%;
  vertical-align: middle;
}
.gantt_resource_cell.gantt_resource_cell_value {
  width: 30%;
  max-width: 30%;
  vertical-align: middle;
}
.gantt_resource_cell.gantt_resource_cell_value input,
.gantt_resource_cell.gantt_resource_cell_value select {
  width: 80%;
  vertical-align: middle;
  padding: 1px 2px 1px 2px;
  box-sizing: border-box;
}
.gantt_resource_cell.gantt_resource_cell_unit {
  width: 10%;
  max-width: 10%;
  vertical-align: middle;
}
.gantt_resource_early_value {
  opacity: 0.8;
  font-size: 0.9em;
}
/* Quick info */
.gantt_cal_quick_info {
  border: 1px solid #CECECE;
  border-radius: 6px;
  position: absolute;
  z-index: 300;
  box-shadow: 3px 3px 3px rgba(0, 0, 0, 0.07);
  background-color: #fff;
  width: 300px;
  transition: left 0.5s ease, right 0.5s;
  -moz-transition: left 0.5s ease, right 0.5s;
  -webkit-transition: left 0.5s ease, right 0.5s;
  -o-transition: left 0.5s ease, right 0.5s;
}
.gantt_no_animate {
  transition: none;
  -moz-transition: none;
  -webkit-transition: none;
  -o-transition: none;
}
.gantt_cal_quick_info.gantt_qi_left .gantt_qi_big_icon {
  float: right;
}
.gantt_cal_qi_title {
  -webkit-border-top-left-radius: 6px;
  -webkit-border-bottom-left-radius: 0;
  -webkit-border-top-right-radius: 6px;
  -webkit-border-bottom-right-radius: 0;
  -moz-border-radius-topleft: 6px;
  -moz-border-radius-bottomleft: 0;
  -moz-border-radius-topright: 6px;
  -moz-border-radius-bottomright: 0;
  border-top-left-radius: 6px;
  border-bottom-left-radius: 0;
  border-top-right-radius: 6px;
  border-bottom-right-radius: 0;
  padding: 5px 0px 8px 12px;
  color: #454545;
  background-color: #fff;
  border-bottom: 1px solid #CECECE;
}
.gantt_cal_qi_tdate {
  font-size: 14px;
  font-weight: bold;
}
.gantt_cal_qi_tcontent {
  font-size: 13px;
}
.gantt_cal_qi_content {
  padding: 16px 8px;
  font-size: 13px;
  color: #454545;
  overflow: hidden;
}
.gantt_cal_qi_controls {
  -webkit-border-top-left-radius: 0;
  -webkit-border-bottom-left-radius: 6px;
  -webkit-border-top-right-radius: 0;
  -webkit-border-bottom-right-radius: 6px;
  -moz-border-radius-topleft: 0;
  -moz-border-radius-bottomleft: 6px;
  -moz-border-radius-topright: 0;
  -moz-border-radius-bottomright: 6px;
  border-top-left-radius: 0;
  border-bottom-left-radius: 6px;
  border-top-right-radius: 0;
  border-bottom-right-radius: 6px;
  padding-left: 7px;
}
.gantt_cal_qi_controls .gantt_menu_icon {
  margin-top: 6px;
  background-repeat: no-repeat;
}
.gantt_cal_qi_controls .gantt_menu_icon.icon_edit {
  width: 20px;
  background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAAB3RJTUUH3QYFCjI5ZQj5bAAAAFNJREFUOMvt0zEOACAIA0DkwTymH8bJTRTKZGJXyaWEKPKTCQAH4Ls37cItcDUzsxHNDLZNhCq7Gt1wh9ErV7EjyGAhyGLphlnsClWuS32rn0czAV+vNGrM/LBtAAAAAElFTkSuQmCC);
}
.gantt_cal_qi_controls .gantt_menu_icon.icon_delete {
  width: 20px;
  background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoV2luZG93cykiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6MjFENzI3NUNDMzA0MTFFMjhBNjJGQTc3MUIyQzYzNEYiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6MjFENzI3NURDMzA0MTFFMjhBNjJGQTc3MUIyQzYzNEYiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDoyMUQ3Mjc1QUMzMDQxMUUyOEE2MkZBNzcxQjJDNjM0RiIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDoyMUQ3Mjc1QkMzMDQxMUUyOEE2MkZBNzcxQjJDNjM0RiIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PmUD0gAAAABvSURBVHjaYvz//z8DIyMjAxYQicReji4J0ofKQNP8HwmgGQbXB8IsWGwDSSwDuioKjY9uBthVjFAXYHUGAQA2kYmBUoAUBpGk0LAwgBvwH+YX4mkwptgLowYMRgOITUyYKRFIN/wnDjQgJySAAAMApryKzL8wjfUAAAAASUVORK5CYII=);
}
.gantt_qi_big_icon {
  font-size: 13px;
  border-radius: 4px;
  font-weight: bold;
  background: #fff;
  margin: 5px 9px 8px 0px;
  min-width: 60px;
  line-height: 32px;
  vertical-align: middle;
  padding: 0px 10px 0px 5px;
  cursor: pointer;
  border: 1px solid #CECECE;
}
.gantt_cal_qi_controls div {
  float: left;
  height: 32px;
  text-align: center;
  line-height: 32px;
}
.gantt_cal_quick_info.gantt_qi_hidden {
  display: none;
}
.gantt_tooltip {
  padding: 10px;
  position: absolute;
  z-index: 50;
  white-space: nowrap;
}
.gantt_resource_marker {
  position: absolute;
  text-align: center;
  font-size: 14px;
  color: #FFF;
}
.gantt_resource_marker_ok {
  background: rgba(78, 208, 134, 0.75);
}
.gantt_resource_marker_overtime {
  background: rgba(255, 134, 134, 0.69);
}
.gantt_histogram_label {
  width: 100%;
  height: 100%;
  position: absolute;
  z-index: 1;
  font-weight: bold;
  font-size: 13px;
}
.gantt_histogram_fill {
  background-color: rgba(41, 157, 180, 0.2);
  width: 100%;
  position: absolute;
  bottom: 0;
}
.gantt_histogram_hor_bar {
  height: 1px;
  position: absolute;
  background: #299DB4;
  margin-top: -1px;
  margin-left: -1px;
}
.gantt_histogram_vert_bar {
  width: 1px;
  position: absolute;
  background: #299DB4;
  margin-left: -1px;
}
.gantt_histogram_cell {
  position: absolute;
  text-align: center;
  font-size: 13px;
  color: #000000;
}
.gantt_marker {
  height: 100%;
  width: 2px;
  top: 0;
  position: absolute;
  text-align: center;
  background-color: rgba(255, 0, 0, 0.4);
  -moz-box-sizing: border-box;
  -webkit-box-sizing: border-box;
  box-sizing: border-box;
}
.gantt_marker .gantt_marker_content {
  padding: 5px;
  background: inherit;
  color: white;
  position: absolute;
  font-size: 12px;
  line-height: 12px;
  opacity: 0.8;
}
.gantt_marker_area {
  position: absolute;
  top: 0;
  left: 0;
}
.gantt_grid_editor_placeholder {
  position: absolute;
}
.gantt_grid_editor_placeholder > div,
.gantt_grid_editor_placeholder input,
.gantt_grid_editor_placeholder select {
  width: 100%;
  height: 100%;
  box-sizing: border-box;
}
.gantt_row_placeholder div {
  opacity: 0.5;
}
.gantt_row_placeholder .gantt_file,
.gantt_row_placeholder .gantt_add {
  display: none;
}
.gantt_drag_marker.gantt_grid_dnd_marker {
  background-color: transparent;
  transition: all 0.1s ease ;
}
.gantt_grid_dnd_marker_line {
  height: 4px;
  width: 100%;
  background-color: #3498db;
}
.gantt_grid_dnd_marker_line::before {
  background: #fff;
  width: 12px;
  height: 12px;
  box-sizing: border-box;
  border: 3px solid #3498db;
  border-radius: 6px;
  content: "";
  line-height: 1px;
  display: block;
  position: absolute;
  margin-left: -11px;
  margin-top: -4px;
  pointer-events: none;
}
.gantt_grid_dnd_marker_folder {
  height: 100%;
  width: 100%;
  position: absolute;
  pointer-events: none;
  box-sizing: border-box;
  box-shadow: 0 0 0px 2px #3f98db inset;
  background: transparent;
}
.gantt_overlay_area {
  position: absolute;
  height: inherit;
  width: inherit;
  top: 0;
  left: 0;
  display: none;
}
.gantt_overlay {
  position: absolute;
  left: 0;
  top: 0;
  height: inherit;
  width: inherit;
}
.gantt_click_drag_rect {
  position: absolute;
  left: 0;
  top: 0;
  outline: 1px solid #3f98db;
  background-color: rgba(52, 152, 219, 0.3);
}
.gantt_timeline_move_available,
.gantt_timeline_move_available * {
  cursor: move;
}
.gantt_rtl .gantt_grid {
  text-align: right;
}
.gantt_rtl .gantt_row,
.gantt_rtl .gantt_cell {
  flex-direction: row-reverse;
}
.gantt_layout_content {
  width: 100%;
  overflow: auto;
  box-sizing: border-box;
}
.gantt_layout_cell {
  position: relative;
  box-sizing: border-box;
}
.gantt_layout_cell > .gantt_layout_header {
  background: #33aae8;
  color: white;
  font-size: 17px;
  padding: 5px 10px;
  box-sizing: border-box;
}
.gantt_layout_header.collapsed_x {
  background: #a9a9a9;
}
.gantt_layout_header.collapsed_x .gantt_header_arrow:before {
  content: "\21E7";
}
.gantt_layout_header.collapsed_y {
  background: #a9a9a9;
}
.gantt_layout_header.collapsed_y .gantt_header_arrow:before {
  content: "\21E9";
}
.gantt_layout_header {
  cursor: pointer;
}
.gantt_layout_header .gantt_header_arrow {
  float: right;
  text-align: right;
}
.gantt_layout_header .gantt_header_arrow:before {
  content: "\21E6";
}
.gantt_layout_header.vertical .gantt_header_arrow:before {
  content: "\21E7";
}
.gantt_layout_outer_scroll_vertical .gantt_layout_content {
  overflow-y: hidden;
}
.gantt_layout_outer_scroll_horizontal .gantt_layout_content {
  overflow-x: hidden;
}
.gantt_layout_x > .gantt_layout_cell {
  display: inline-block;
  vertical-align: top;
}
.gantt_layout_x {
  white-space: nowrap;
}
.gantt_resizing {
  opacity: 0.7;
  background: #f2f2f2;
}
.gantt_layout_cell_border_right.gantt_resizer {
  overflow: visible;
  border-right: 0;
}
.gantt_resizer {
  cursor: e-resize;
  position: relative;
}
.gantt_resizer_y {
  cursor: n-resize;
}
.gantt_resizer_stick {
  background: #33aae8;
  z-index: 9999;
  position: absolute;
  top: 0;
  width: 100%;
}
.gantt_resizer_x .gantt_resizer_x {
  position: absolute;
  width: 20px;
  height: 100%;
  margin-left: -10px;
  top: 0;
  left: 0;
  z-index: 1;
}
.gantt_resizer_y .gantt_resizer_y {
  position: absolute;
  height: 20px;
  width: 100%;
  top: -10px;
  left: 0;
  z-index: 1;
}
.gantt_resizer_error {
  background: indianred!important;
}
.gantt_noselect {
  -webkit-user-select: none;
  user-select: none;
}
.gantt_layout_cell_border_left {
  border-left: 1px solid #CECECE;
}
.gantt_layout_cell_border_right {
  border-right: 1px solid #CECECE;
}
.gantt_layout_cell_border_top {
  border-top: 1px solid #CECECE;
}
.gantt_layout_cell_border_bottom {
  border-bottom: 1px solid #CECECE;
}
.gantt_layout_cell_border_transparent {
  border-color: transparent;
}
.gantt_window {
  position: absolute;
  top: 50%;
  left: 50%;
  z-index: 999999999;
  background: white;
}
.gantt_window_content {
  position: relative;
}
.gantt_window_content_header {
  background: #39c;
  color: #ffffff;
  height: 33px;
  padding: 10px 10px 0 10px;
  border-bottom: solid 2px #ffffff;
  position: relative;
}
.gantt_window_content_header_text {
  padding-left: 10%;
}
.gantt_window_content_header_buttons {
  position: absolute;
  top: 10px;
  right: 10px;
}
.gantt_window_content_header_buttons:hover {
  color: #000000;
  cursor: pointer;
}
.gantt_window_content_resizer {
  position: absolute;
  width: 15px;
  height: 15px;
  bottom: 0;
  line-height: 15px;
  right: -1px;
  text-align: center;
  background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA8AAAAPCAMAAAAMCGV4AAAABlBMVEUAAAAAAAClZ7nPAAAAAXRSTlMAQObYZgAAABZJREFUeAFjIAUwUshlpJDLSIhLGAAACQ4AFk79JaMAAAAASUVORK5CYII=);
  cursor: nw-resize;
  z-index: 999;
}
.gantt_window_content_frame {
  position: absolute;
  top: 0;
  left: 0;
  width: 100%;
  height: 100%;
  background: rgba(0, 0, 0, 0.1);
  z-index: 9999;
}
.gantt_window_drag {
  cursor: pointer!important;
}
.gantt_window_resizing {
  overflow: visible;
}
.gantt_window_resizing_body {
  overflow: hidden!important;
}
.gantt_window_modal {
  background: rgba(0, 0, 0, 0.1);
  z-index: 9999;
  top: 0;
  left: 0;
  width: 100%;
  height: 100%;
  position: fixed;
}
.gantt_container,
.gantt_cal_light,
.gantt_message_area,
.gantt_modal_box,
.gantt_cal_quick_info,
.gantt_tooltip {
  text-rendering: optimizeLegibility;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
}
.gantt_noselect {
  -moz-user-select: -moz-none;
  -webkit-user-select: none;
  -ms-user-select: none;
  user-select: none;
}
.gantt_noselect .gantt_grid_data .gantt_row:hover,
.gantt_noselect .gantt_grid_data .gantt_row.odd:hover {
  background-color: unset;
}
.gantt_drag_marker {
  position: absolute;
  top: -1000px;
  left: -1000px;
  font-family: "Arial";
  font-size: 13px;
  z-index: 1;
  white-space: nowrap;
}
.gantt_drag_marker .gantt_tree_indent,
.gantt_drag_marker .gantt_tree_icon.gantt_blank,
.gantt_drag_marker .gantt_tree_icon.gantt_open,
.gantt_drag_marker .gantt_tree_icon.gantt_close {
  display: none;
}
.gantt_empty_state_wrapper {
  position: relative;
}
.gantt_empty_state {
  height: 100%;
  max-width: 500px;
  box-sizing: border-box;
  white-space: pre-line;
  overflow-wrap: break-word;
  display: flex;
  flex-direction: column;
  justify-content: flex-start;
  margin: 0 auto;
}
.gantt_empty_state_image {
  background-image: url('data:image/png;base64,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');
  background-repeat: no-repeat;
  width: 100%;
  max-width: 500px;
  max-height: 500px;
  margin-left: auto;
  margin-right: auto;
  display: block;
  min-height: 0;
  height: 200px;
  background-size: contain;
  background-position-x: center;
  background-position-y: bottom;
  margin-top: 40px;
}
.gantt_empty_state_text {
  text-align: center;
}
.gantt_empty_state_text_link {
  color: #03A9F4;
  background-position: top right;
  background: none;
  opacity: 1;
  height: unset;
  cursor: pointer;
}
.gantt_drag_marker,
.gantt_drag_marker .gantt_row.odd {
  background-color: #FFFFFF;
}
.gantt_drag_marker .gantt_row {
  border-left: 1px solid #d2d2d2;
  border-top: 1px solid #d2d2d2;
}
.gantt_drag_marker .gantt_cell {
  border-color: #d2d2d2;
}
.gantt_row.gantt_over,
.gantt_task_row.gantt_over {
  background-color: #0070fe;
}
.gantt_row.gantt_transparent .gantt_cell {
  opacity: 0.7;
}
.gantt_task_row.gantt_transparent {
  background-color: #f8fdfd;
}
.gantt_popup_button.gantt_delete_button {
  background: #3db9d3;
  text-shadow: 0 -1px 0 #248a9f;
  color: #fff;
  font-weight: bold;
  border-width: 0;
}
.gantt_container_resize_watcher {
  background: transparent;
  width: 100%;
  height: 100%;
  position: absolute;
  top: 0px;
  left: 0px;
  z-index: -1;
  pointer-events: none;
  border: 0;
  box-sizing: border-box;
  opacity: 0;
}
src/components/dhtmlxGantt/license.txt
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,339 @@
                    GNU GENERAL PUBLIC LICENSE
                       Version 2, June 1991
 Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
 Everyone is permitted to copy and distribute verbatim copies
 of this license document, but changing it is not allowed.
                            Preamble
  The licenses for most software are designed to take away your
freedom to share and change it.  By contrast, the GNU General Public
License is intended to guarantee your freedom to share and change free
software--to make sure the software is free for all its users.  This
General Public License applies to most of the Free Software
Foundation's software and to any other program whose authors commit to
using it.  (Some other Free Software Foundation software is covered by
the GNU Lesser General Public License instead.)  You can apply it to
your programs, too.
  When we speak of free software, we are referring to freedom, not
price.  Our General Public Licenses are designed to make sure that you
have the freedom to distribute copies of free software (and charge for
this service if you wish), that you receive source code or can get it
if you want it, that you can change the software or use pieces of it
in new free programs; and that you know you can do these things.
  To protect your rights, we need to make restrictions that forbid
anyone to deny you these rights or to ask you to surrender the rights.
These restrictions translate to certain responsibilities for you if you
distribute copies of the software, or if you modify it.
  For example, if you distribute copies of such a program, whether
gratis or for a fee, you must give the recipients all the rights that
you have.  You must make sure that they, too, receive or can get the
source code.  And you must show them these terms so they know their
rights.
  We protect your rights with two steps: (1) copyright the software, and
(2) offer you this license which gives you legal permission to copy,
distribute and/or modify the software.
  Also, for each author's protection and ours, we want to make certain
that everyone understands that there is no warranty for this free
software.  If the software is modified by someone else and passed on, we
want its recipients to know that what they have is not the original, so
that any problems introduced by others will not reflect on the original
authors' reputations.
  Finally, any free program is threatened constantly by software
patents.  We wish to avoid the danger that redistributors of a free
program will individually obtain patent licenses, in effect making the
program proprietary.  To prevent this, we have made it clear that any
patent must be licensed for everyone's free use or not licensed at all.
  The precise terms and conditions for copying, distribution and
modification follow.
                    GNU GENERAL PUBLIC LICENSE
   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
  0. This License applies to any program or other work which contains
a notice placed by the copyright holder saying it may be distributed
under the terms of this General Public License.  The "Program", below,
refers to any such program or work, and a "work based on the Program"
means either the Program or any derivative work under copyright law:
that is to say, a work containing the Program or a portion of it,
either verbatim or with modifications and/or translated into another
language.  (Hereinafter, translation is included without limitation in
the term "modification".)  Each licensee is addressed as "you".
Activities other than copying, distribution and modification are not
covered by this License; they are outside its scope.  The act of
running the Program is not restricted, and the output from the Program
is covered only if its contents constitute a work based on the
Program (independent of having been made by running the Program).
Whether that is true depends on what the Program does.
  1. You may copy and distribute verbatim copies of the Program's
source code as you receive it, in any medium, provided that you
conspicuously and appropriately publish on each copy an appropriate
copyright notice and disclaimer of warranty; keep intact all the
notices that refer to this License and to the absence of any warranty;
and give any other recipients of the Program a copy of this License
along with the Program.
You may charge a fee for the physical act of transferring a copy, and
you may at your option offer warranty protection in exchange for a fee.
  2. You may modify your copy or copies of the Program or any portion
of it, thus forming a work based on the Program, and copy and
distribute such modifications or work under the terms of Section 1
above, provided that you also meet all of these conditions:
    a) You must cause the modified files to carry prominent notices
    stating that you changed the files and the date of any change.
    b) You must cause any work that you distribute or publish, that in
    whole or in part contains or is derived from the Program or any
    part thereof, to be licensed as a whole at no charge to all third
    parties under the terms of this License.
    c) If the modified program normally reads commands interactively
    when run, you must cause it, when started running for such
    interactive use in the most ordinary way, to print or display an
    announcement including an appropriate copyright notice and a
    notice that there is no warranty (or else, saying that you provide
    a warranty) and that users may redistribute the program under
    these conditions, and telling the user how to view a copy of this
    License.  (Exception: if the Program itself is interactive but
    does not normally print such an announcement, your work based on
    the Program is not required to print an announcement.)
These requirements apply to the modified work as a whole.  If
identifiable sections of that work are not derived from the Program,
and can be reasonably considered independent and separate works in
themselves, then this License, and its terms, do not apply to those
sections when you distribute them as separate works.  But when you
distribute the same sections as part of a whole which is a work based
on the Program, the distribution of the whole must be on the terms of
this License, whose permissions for other licensees extend to the
entire whole, and thus to each and every part regardless of who wrote it.
Thus, it is not the intent of this section to claim rights or contest
your rights to work written entirely by you; rather, the intent is to
exercise the right to control the distribution of derivative or
collective works based on the Program.
In addition, mere aggregation of another work not based on the Program
with the Program (or with a work based on the Program) on a volume of
a storage or distribution medium does not bring the other work under
the scope of this License.
  3. You may copy and distribute the Program (or a work based on it,
under Section 2) in object code or executable form under the terms of
Sections 1 and 2 above provided that you also do one of the following:
    a) Accompany it with the complete corresponding machine-readable
    source code, which must be distributed under the terms of Sections
    1 and 2 above on a medium customarily used for software interchange; or,
    b) Accompany it with a written offer, valid for at least three
    years, to give any third party, for a charge no more than your
    cost of physically performing source distribution, a complete
    machine-readable copy of the corresponding source code, to be
    distributed under the terms of Sections 1 and 2 above on a medium
    customarily used for software interchange; or,
    c) Accompany it with the information you received as to the offer
    to distribute corresponding source code.  (This alternative is
    allowed only for noncommercial distribution and only if you
    received the program in object code or executable form with such
    an offer, in accord with Subsection b above.)
The source code for a work means the preferred form of the work for
making modifications to it.  For an executable work, complete source
code means all the source code for all modules it contains, plus any
associated interface definition files, plus the scripts used to
control compilation and installation of the executable.  However, as a
special exception, the source code distributed need not include
anything that is normally distributed (in either source or binary
form) with the major components (compiler, kernel, and so on) of the
operating system on which the executable runs, unless that component
itself accompanies the executable.
If distribution of executable or object code is made by offering
access to copy from a designated place, then offering equivalent
access to copy the source code from the same place counts as
distribution of the source code, even though third parties are not
compelled to copy the source along with the object code.
  4. You may not copy, modify, sublicense, or distribute the Program
except as expressly provided under this License.  Any attempt
otherwise to copy, modify, sublicense or distribute the Program is
void, and will automatically terminate your rights under this License.
However, parties who have received copies, or rights, from you under
this License will not have their licenses terminated so long as such
parties remain in full compliance.
  5. You are not required to accept this License, since you have not
signed it.  However, nothing else grants you permission to modify or
distribute the Program or its derivative works.  These actions are
prohibited by law if you do not accept this License.  Therefore, by
modifying or distributing the Program (or any work based on the
Program), you indicate your acceptance of this License to do so, and
all its terms and conditions for copying, distributing or modifying
the Program or works based on it.
  6. Each time you redistribute the Program (or any work based on the
Program), the recipient automatically receives a license from the
original licensor to copy, distribute or modify the Program subject to
these terms and conditions.  You may not impose any further
restrictions on the recipients' exercise of the rights granted herein.
You are not responsible for enforcing compliance by third parties to
this License.
  7. If, as a consequence of a court judgment or allegation of patent
infringement or for any other reason (not limited to patent issues),
conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
excuse you from the conditions of this License.  If you cannot
distribute so as to satisfy simultaneously your obligations under this
License and any other pertinent obligations, then as a consequence you
may not distribute the Program at all.  For example, if a patent
license would not permit royalty-free redistribution of the Program by
all those who receive copies directly or indirectly through you, then
the only way you could satisfy both it and this License would be to
refrain entirely from distribution of the Program.
If any portion of this section is held invalid or unenforceable under
any particular circumstance, the balance of the section is intended to
apply and the section as a whole is intended to apply in other
circumstances.
It is not the purpose of this section to induce you to infringe any
patents or other property right claims or to contest validity of any
such claims; this section has the sole purpose of protecting the
integrity of the free software distribution system, which is
implemented by public license practices.  Many people have made
generous contributions to the wide range of software distributed
through that system in reliance on consistent application of that
system; it is up to the author/donor to decide if he or she is willing
to distribute software through any other system and a licensee cannot
impose that choice.
This section is intended to make thoroughly clear what is believed to
be a consequence of the rest of this License.
  8. If the distribution and/or use of the Program is restricted in
certain countries either by patents or by copyrighted interfaces, the
original copyright holder who places the Program under this License
may add an explicit geographical distribution limitation excluding
those countries, so that distribution is permitted only in or among
countries not thus excluded.  In such case, this License incorporates
the limitation as if written in the body of this License.
  9. The Free Software Foundation may publish revised and/or new versions
of the General Public License from time to time.  Such new versions will
be similar in spirit to the present version, but may differ in detail to
address new problems or concerns.
Each version is given a distinguishing version number.  If the Program
specifies a version number of this License which applies to it and "any
later version", you have the option of following the terms and conditions
either of that version or of any later version published by the Free
Software Foundation.  If the Program does not specify a version number of
this License, you may choose any version ever published by the Free Software
Foundation.
  10. If you wish to incorporate parts of the Program into other free
programs whose distribution conditions are different, write to the author
to ask for permission.  For software which is copyrighted by the Free
Software Foundation, write to the Free Software Foundation; we sometimes
make exceptions for this.  Our decision will be guided by the two goals
of preserving the free status of all derivatives of our free software and
of promoting the sharing and reuse of software generally.
                            NO WARRANTY
  11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN
OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS
TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE
PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
REPAIR OR CORRECTION.
  12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
POSSIBILITY OF SUCH DAMAGES.
                     END OF TERMS AND CONDITIONS
            How to Apply These Terms to Your New Programs
  If you develop a new program, and you want it to be of the greatest
possible use to the public, the best way to achieve this is to make it
free software which everyone can redistribute and change under these terms.
  To do so, attach the following notices to the program.  It is safest
to attach them to the start of each source file to most effectively
convey the exclusion of warranty; and each file should have at least
the "copyright" line and a pointer to where the full notice is found.
    <one line to give the program's name and a brief idea of what it does.>
    Copyright (C) <year>  <name of author>
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.
    You should have received a copy of the GNU General Public License along
    with this program; if not, write to the Free Software Foundation, Inc.,
    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
Also add information on how to contact you by electronic and paper mail.
If the program is interactive, make it output a short notice like this
when it starts in an interactive mode:
    Gnomovision version 69, Copyright (C) year name of author
    Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
    This is free software, and you are welcome to redistribute it
    under certain conditions; type `show c' for details.
The hypothetical commands `show w' and `show c' should show the appropriate
parts of the General Public License.  Of course, the commands you use may
be called something other than `show w' and `show c'; they could even be
mouse-clicks or menu items--whatever suits your program.
You should also get your employer (if you work as a programmer) or your
school, if any, to sign a "copyright disclaimer" for the program, if
necessary.  Here is a sample; alter the names:
  Yoyodyne, Inc., hereby disclaims all copyright interest in the program
  `Gnomovision' (which makes passes at compilers) written by James Hacker.
  <signature of Ty Coon>, 1 April 1989
  Ty Coon, President of Vice
This General Public License does not permit incorporating your program into
proprietary programs.  If your program is a subroutine library, you may
consider it more useful to permit linking proprietary applications with the
library.  If this is what you want to do, use the GNU Lesser General
Public License instead of this License.
src/components/dhtmlxGantt/package.json
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,58 @@
{
  "_args": [
    [
      "dhtmlx-gantt@8.0.6",
      "E:\\WebstormProjects\\XKD"
    ]
  ],
  "_from": "dhtmlx-gantt@8.0.6",
  "_id": "dhtmlx-gantt@8.0.6",
  "_inBundle": false,
  "_integrity": "sha512-GrEQ40/vgV1wDWkv/IvjJEM27Z4lDv76XvE5nlvMtFQTqUuo5VnL1XNDv/uFSJVMRnaN9StYaPxP1ebGamDLFg==",
  "_location": "/dhtmlx-gantt",
  "_phantomChildren": {},
  "_requested": {
    "type": "version",
    "registry": true,
    "raw": "dhtmlx-gantt@8.0.6",
    "name": "dhtmlx-gantt",
    "escapedName": "dhtmlx-gantt",
    "rawSpec": "8.0.6",
    "saveSpec": null,
    "fetchSpec": "8.0.6"
  },
  "_requiredBy": [
    "/"
  ],
  "_resolved": "https://registry.npmmirror.com/dhtmlx-gantt/-/dhtmlx-gantt-8.0.6.tgz",
  "_spec": "8.0.6",
  "_where": "E:\\WebstormProjects\\XKD",
  "author": {
    "name": "DHTMLX"
  },
  "bugs": {
    "url": "https://github.com/DHTMLX/gantt/issues"
  },
  "description": "An open source JavaScript Gantt chart that helps you illustrate a project schedule in a nice-looking chart.",
  "homepage": "https://github.com/DHTMLX/gantt#readme",
  "keywords": [
    "gantt",
    "chart",
    "gantt chart",
    "calendar",
    "scheduler",
    "dhtmlx",
    "dhtmlxgantt",
    "timeline",
    "browser"
  ],
  "license": "GPL-2.0",
  "main": "codebase/dhtmlxgantt.js",
  "name": "dhtmlx-gantt",
  "repository": {
    "type": "git",
    "url": "git+https://github.com/DHTMLX/gantt.git"
  },
  "types": "codebase/dhtmlxgantt.d.ts",
  "version": "8.0.6"
}
src/components/dhtmlxGantt/whatsnew.md
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,843 @@
### 8.0.6
Enhancements and corrections in the usage of WAI-ARIA attributes for improved accessibility
Fix the issue of decreasing grid's width after repainting when the grid_elastic_columns config is enabled
The default number of undo_steps is increased from 10 to 100
The Export API client is now integrated into the GPL version of Gantt, previously it has been included only in PRO versions
Add support for the https export server endpoints in the Node.js version of Gantt
### 8.0.5
Fix incorrect warnings triggered by enabling extensions via the Gantt.getGanttInstance configuration.
Fix the incorrect work of gantt.exportToExcel when the skip_off_time config is enabled
Improvements for the Sample Explorer
### 8.0.4
Fix issue with DataProcessor not tracking changes of the Resource Datastore
Resolve an error that occurred after dragging a task when the process_resource_assignments config is disabled
Fix the incorrect work of gantt.calculateEndDate when subtracting dates in minute units
Minor performance improvement for layouts with visibility groups
### 8.0.3
Performance improvements for the Resource Panel
Fix incorrect calculation of Free Slack for tasks with a negative Lag
Fix incorrect calculation of Critical Path for tasks with 100% progress
### 8.0.2
Fix Export errors that happen when LinkFormatters are used.
Fix the incorrect work of the Undo extension with Resources and Resource Assignments
Type definitions are updated
Performance improvements for Rollup tasks rendering
Performance improvement for Split Tasks rendering
Other performance improvements
### 8.0.1
Fix an error thrown from "gantt.showCover()" called when the lightbox is not opened
Fix regression in split tasks which caused a script error for the split tasks displayed outside of the time scale
Fix regression in the "gantt.addLinkLayer()" method
Fix the incorrect work of auto scheduling with MSO, FNET, and FNLT constraints when the settings of work time contain a minute part
Fix work of the "onBeforeSplitTaskDisplay" event on scroll
### 8.0.0
Updated Resource Management:
Resources and resource assignments can now be loaded together with the data
Changes of resources and resource Assignments can be captured using the DataProcessor
Reduced amount of boilerplate code required to use the Resource panel
Grouping tasks functionality now can preserve the original Gantt tree structure inside groups
Empty state screen
The ability to extend the background grid of the timeline to the whole container
Improvements for rollup items and split tasks:
The ability to style separate rollup items and split tasks
The ability to hide all rollup items from the project task
The ability to control where rollup items are displayed
The ability to filter split tasks
Performance optimization for display of split tasks
The ability to delete items only after receiving confirmation from the backend
New deleteAfterConfirmation parameter of the dataProcessor configuration object
Updated Auto Scheduling & Constraint calculation
Tasks now can inherit the constraint type from parent projects
Improvements for Critical Path, Slack and Auto Scheduling
Critical path, Slack and Auto scheduling algorithms can now use progress of a task
Total slack can now be calculated for projects
Major performance improvement of critical path calculation
The getTaskBy() method now allows selecting 'project' tasks
The ability to put any HTML content into the cells of the Timeline
The export API is included into gantt.plugins and no longer requires adding additional JS file. Check the Migration article
Fix the duration calculation issue with minute duration_unit and custom working time settings
Fix various issues with slack calculation
Fix the script error on data loading when Slack calculations are enabled
SetWorkTime method now supports setting rules for dates inside customWeeks
Fix the issue with smart rendering that causes blank spaces instead of data in the Gantt
Fix the issue with vertical reordering of rows in the Grid when some rows have custom heights
Fix the incorrect work of Inline editors when the Multiselect extension is enabled
Fix the incorrect display of Quick Info popup when gantt.config.quick_info_detached config is set to false
Correct arguments of is_valid function of Inline Editor interface. The function now receives the column object
Ensure the parent property of task is saved correctly when the task is created with gantt.groupBy active
Fix the issue with unexpected vertical scroll when placeholder tasks and Keyboard navigation are enabled
Fix the issue with DataProcessor causing some changes not to be set to the backend after Auto Scheduling
Fix the incorrect work of vertical reordering, which allowed task rows to being dragged outside the Gantt
Fix the incorrect order of odd CSS classes of rows in the Resource panel
### 7.1.13
Fix the incorrect work of the "gantt.addLinkLayer()" method with the "smart_rendering" property
Fix issues with display of S-Curve Overlay together with different time scales
Fix the issue with resizing of grid columns when the "grid_elastic_columns" property is enabled
Fix the issue that caused Gantt to reset the position of the vertical scroll after deleting a task using Keyboard Navigation
Fix the incorrect work of the "treeDatastore.move()" method
Fix the issue with the "gantt.parse()" method, extra collections from the dataset should be available via the "gantt.serverList()" method
Fix the issue with the "gantt.groupBy()" method, which caused the selection state to reset after grouping
Fix compatibility issues with Vue.js v3.x
Fix the script error thrown from the "gantt.getConstraintLimitations()" method when the specified task didn't have 'constraint_date'
Fix compatibility issues with SalesForce Web Security
Fix the issue which caused focus to be returned to the Gantt after clicking outside the Gantt container when Keyboard Navigation was enabled
German locale is updated
Now it is possible to open the inline editor after one click on a task in the multi-selection mode (the "inline_editors_multiselect_open" property is added)
### 7.1.12
Fix the incorrect work of the gantt.isWorkTime() method with the "week" time unit
Fix the issue that prevented tasks and links from being rendered when they were added via the gantt.silent() method
Fix the issue that caused the "Task not found" error message to be shown after data loading in some cases
Fix the incorrect work of the gantt.changeLightboxType() method that left old lightbox elements in DOM
Fix the incorrect calculation of the end dates of tasks when the tasks overlap after the Summer/Winter clock change
Fix the issue that caused the Resource Grid to disappear when the user edited a resource value using the cell editor
Fix the script error that happened when the Gantt layout contained the "resourceGrid"/"resourceTimeline" views but not included the "grid"/"timeline" views
Fix the incorrect work of the autosize config when the Gantt layout contained Resource Panel
Fix the lightbox for split tasks, the lightbox now should be displayed when you double-click on a split task
### 7.1.11
Fix sourcemaps for compressed Gantt files
Fix the incorrect position of markers when autosize = 'y' was applied
Fix the incorrect position of the tooltip and some other elements of Gantt in cases when the Gantt container had extra margin or vertical offsets
Fix the issue that caused rows of the editable resource diagram to change the order after the first cell of the resource assignment was edited
Fix the issue that caused the incorrect work of the smart rendering after expanding or collapsing of tasks in some cases
Fix the issue with the onBeforeDrag event which didn't block the default actions when the click_drag and drag_timeline extensions were activated
Fix the script error that fired when the changeId() method was called for the resource assignments store
Scrollbars of the default Gantt layout no longer require fixed scrollVer/scrollHor names to work correctly
Split tasks now receive the 'gantt_selected' class on selection, in the same way as regular tasks do
### 7.1.10
Fix the issue which caused Gantt not to render a project task if it didn’t have children and the start_date parameter was specified for the task
Fix the issue with resizing a task row by drag and drop if the task ID was either a non-number value or a numeric string with more than 16 symbols
Fix the incorrect work of visibility groups which prevented the sizes of the grid and time scale from being synchronized in the complex layout
Fix the issues with task dates after dragging several tasks horizontally at once
Fix the issue which caused dataProcessor not to send all updates from different datastores when the auto-update mode is disabled
Fix the issue which caused the milestone with the FF link to be moved to the next day
Fix the incorrect calculation of the end_date of milestones when using backward scheduling and setting project_end to the non-working time
Fix the incorrect work of task reordering if HTML elements were displayed above the gantt
Fix the issue with the unsetWorkTime() method when the date/day configuration was removed from the calendar but the changes were not applied immediately
Fix the issue with the clearAll() method which didn’t clear selected tasks if the multiselect extension was enabled
Fix the error appeared when applying the exportToExcel() method with the visual: true parameter and setting the duration_unit config to â€˜hour’
### 7.1.9
Fix the issue with alignment of subtasks after dragging a project in the "year" scale and switching between scales dynamically
Fix the issue which caused the duration of the project to change after dragging the project with subtasks in the "month" scale
Fix the issue with Auto Scheduling that caused the constraint type to be changed from "ASAP" to "SNET" after changing the duration of the task
Fix the incorrect work of backward scheduling after changing the start and end dates via inline editors when schedule_from_end is enabled
Now it is possible to open the lightbox for read-only tasks in the read-only mode
Now it is impossible to edit read-only tasks via the lightbox
Fix the issue with the lightbox which caused it not to open for editable tasks in the read-only mode (appeared in v6.3.1)
Fix the issue with resizing columns in grid after hiding the timeline via show_chart
Fix the issue with Auto Scheduling which couldn't be canceled after changing values of project_start and project_end
Fix the issue which caused the gantt to assign constraints to the tasks with disabled auto-scheduling
Fix the issue with defining a year range by the lightbox when the range of dates of tasks is more than 10 years and a range for the year selector isn't specified
Fix the script error that was thrown after loading Gantt if a horizontal scrollbar was attached to 3 or more vertical views
Fix the incorrect work of the onBeforeTaskAutoSchedule event after setting the ASAP constraint for the task without links when the strict mode is enabled
Fix the error occurred when running minified versions of Gantt in Next.js projects
Fix the issue which caused the width of Gantt to be changed after initializing the gantt instance inside an empty container
### 7.1.8
Fix the script error that was thrown from the gantt.groupBy method when the Resource Histogram and fit_tasks config were enabled
Fix the incorrect work of the Undo extension that didn't send updates to the server when vertical reordering was reverted
Fix the issue with the Export to MS Project module which in some cases caused an Unknown error result when custom properties were sent to the export
Fix the incorrect work of the gantt.silent method, which did not prevent gantt.changeTaskId from triggering API events and repaints
Fix the incorrect work of the gantt.undo method that did not restore the original vertical position of the reverted item
Fix the incorrect work of the resource assignment form which caused gantt to replace the user-provided id of the resource assignment with an auto-generated value
Fix the incorrect work of gantt.changeTaskId in cases when the affected tasks had nested items, which caused the level of nested items to be calculated incorrectly
### 7.1.7
Fix issues with incorrect calculation of the total slack values
Performance improvement for total slack calculation
Style fixes for the lightbox in the Material skin
Fix the issue with the Zoom plugin that prevented the zoom.init method from working when calling the method after gantt.init
Fix the script error that happened when using the inherit_calendar config together with the gantt.groupBy method
Fix the script error thrown when adding tasks via gantt.bathUpdate if the placeholder task is active
Fix the issue that allowed the placeholder task to be sorted, reordered, or accept subtasks
Fix issues with incorrect size of grid columns
Fix the incorrect work of the column's resizers which conflicted with reordering of the columns
### 7.1.6
Fix the incorrect work of the auto_scheduling_move_projects config when schedule_from_end is enabled
Fix the incorrect work of the onrender callback of the column which caused custom elements to disappear when the grid is scrolled quickly
Fix the regression (appeared in v7.1.5) which caused rows of the grid to disappear after the grid cell is resized in complex layouts
Fix the incorrect work of the size/visibility groups which prevented the sizes of columns from being synchronized in the complex layout
Improved the display of the grid when the gantt is rendered in a small container
### 7.1.5
Fix the incorrect work of vertical reordering of tasks in the "marker" mode when gantt rows have different heights
Fix the issue with the sizes of the timeline and the grid in some layouts when the "show_grid" and "show_chart" configs are disabled
The "data-column-name" and "data-column-index" attributes are added for cells of the grid header
Fix the incorrect display of the grid after re-initialization of the gantt after removing all columns from the config
Fix the issue that caused the resource panel configuration to overwrite the main configuration of the gantt in Vue.js applications
Added the ability to modify the configuration of the resource panel on the fly by modifying the configuration object provided to the resource layout
### 7.1.4
Fix the incorrect work of unsetWorkTime that caused affected dates to have incorrect work hours
Fix the script error thrown in the Resource histogram after scrolling the histogram when resource_render_empty_cell is set to false and smart_rendering is enabled
Fix the incorrect work of the editNextRow and editPrevRow methods of the Inline Editors module
Fix the incorrect work of the Quick Info popup that caused the popup to be displayed after clicking on the "add" button in the grid
Fix the incorrect work of the ASAP constraints that caused tasks not to be moved to the earliest date of the project
Fix the incorrect work of Inline Editors that prevented constraints from being edited via the inline editor
Fix the incorrect behavior of the "scroll into view" logic of Keyboard Navigation which called an unnecessary scroll when selected task bars are visible
Fix the script error thrown when the mouse is moved outside the container when the click_drag extension is enabled
Performance improvements for the auto_types configuration option of Gantt
### 7.1.3
Fix the script error thrown on gantt.moveTask call when some tasks are hidden via the onBeforeTaskDisplay event
Fix the issue with the speed of the scroll in the latest Firefox browser
Performance improvement for calculations of working time
### 7.1.2
Major performance improvement of the resource panel
Fix the script error thrown when gantt.destructor is called while gantt.load is in progress
Fix the incorrect behavior of split tasks on change of the task id
Fix the incorrect work of scroll on mouse wheel in Angular
### 7.1.1
Fix the regression in the click_drag plugin
Fix the Security Violation error thrown from the gantt when setting the gantt.config.csp config to the "auto" mode
Fix code build settings that caused the package code v7.1.0 to contain ES6 syntax, the library is again ES5 compatible
Fix the script error fired when trying to resize a grid column when gantt.config.reorder_grid_columns config is enabled
Update TypeScript type definitions
Add the onDestroy event to DataStore
Performance improvement for gantts with a large number of task calendars
Performance improvement for calculations of resource assignment during batchUpdate and autoScheduling
### 7.1.0
The ability to assign resources to the specific dates of the task
The new gantt.getTaskAssignments() method
The ability to manage the resource assignments via the new gantt.config.process_resource_assignments and gantt.updateTaskAssignments() Gantt API
Rollup tasks and milestones
The ability to hide task bars and milestones in the timeline area
The ability to set different working hours for different time spans
The ability to set the height for a separate row in the grid
The ability to resize a row in the grid by drag-and-drop
The ability to get the height of the DOM element of the task via the gantt.getTaskBarHeight() method
New events: onBeforeRowResize, onRowResize, onBeforeRowResizeEnd, onAfterRowResize
The onrender callback for rendering a grid cell into DOM is added
The onrender callback for rendering a custom element of the task layer into DOM is added
Fix the issue with reordering tasks vertically in the resource view when resources have values assigned
Fix the issue that caused â€œresource_cell_value” not being called and the resource markers not being rendered if a task doesn’t start at the beginning of the timeline cell
Fix the issue that caused Gantt to stop working when deleting the task with the id that already exists in the data store
Fix the script error thrown when specifying the 0 number value as a task id even if the â€œroot_id” parameter is set
Fix the issue that caused the resizer listener not to work in Salesforce environment
Fix the script error appeared when applying Fullscreen Extension several times together with its methods
Fix the issue with Keyboard Navigation Extension that caused navigation in Grid to stop working when adding the plugin several times
Fix the issue with Inline Editors when the editor couldn't be opened in a cell that is located after a column that is hidden via hide:true property
### 7.0.13
Fix the script error happened when the layout configuration is changed dynamically and gantt.addTaskLayer is used
Fix the issue with the initial inner height of the resource histogram when the fetchTasks option is used
Fix the incorrect work of the predecessor editor which caused it to delete existing links when the value is edited
Fix the incorrect work of the gantt when a task with a non-unique ID is added to the gantt via the gantt.addTask and gantt.parse methods
Performance improvement for drag and drop when the auto_types and drag_project configuration options are enabled
Performance improvement for calculation of working time when duration_unit is set to "day"
### 7.0.12
Fix some minor issues with vertical drag and drop in large projects
Fix the issue with the incorrect size of the container when the "autosize" config is used
Keyboard navigation should now work correctly with the horizontal scroll of the grid
HTML views of Layout now support external scrollbars
Fix the issue that caused the incorrect state of the grid after reordering tasks, if the additional grid was added to the layout
Fix the script error that happened after clearing and reloading the resource panel if a resource was selected
Add the ability to disable automatic correction of the end date in the time section of the lightbox, which was applied when the selected start date was greater than the end date
Fix a typo in the default config of Duration Formatter
Fix the script error thrown when the gantt is destroyed while a popup message is shown
Fix the initial position of the horizontal scroll in Grid and Timeline in the RTL mode
Fix the incorrect work of the lightbox which caused the selected type of a task not to be saved if the typeselect control was not added to the lightbox configuration
Fix the issue that caused markers to disappear after calling the "gantt.resetLayout()" method
Fix the performance issue with the "drag_project" config used in large projects
Fix the issue that prevented the QuickInfo popup from being displayed in the read-only mode when custom buttons were added to the config
### 7.0.11
Add the container_resize_timeout config for changing the timeout before redrawing Gantt when resizing the container
Add the wheel_scroll_sensitivity config for changing the speed of scrolling the gantt by the mouse wheel
Fix the bug with Auto Scheduling when using different working calendars
Fix the conflict between placeholder tasks and Auto Scheduling
Fix redundant repaints when api/gantt_sort_config.md is enabled
Fix the issue with Inline Editors and a scrollable grid, when inline editors lose focus right after click
Fix the issue that caused Gantt to close the Quick Info popup when the user clicks on it
### 7.0.10
Fix the incorrect work of vertical resizers (the regression appeared in v7.0.9)
Prevent unexpected page refresh which happened during vertical reordering of tasks on Android Chrome (pull-to-refresh)
Fix the script error which fired during creating a link on mobile Firefox
Fix the incorrect work of task selection when the multiselect config is enabled but the multiselect plugin is not activated
Improve the work of HTML select controls inside Inline Editors
Fix the incorrect work of Auto Scheduling when linked tasks use different work calendars
The gantt.plugins method will not activate plugins which are specified with false value
Fix the conflict between Inline Editors and Keyboard Navigation
Fix the issue that caused Inline Editors to close on double click
### 7.0.9
Fix the script error on the second initialization of Gantt when custom datastores are added
Fix the incorrect work of auto-scheduling when using with FF and SS links and when the source and target tasks use different working calendars
Fix the incorrect calculation of working time when duration_unit is set to "minute" and the start time is set to the middle of a non-working day
Fix touch support for Safari iPad on iPadOS v13.6
Fix the sizes of the Lightbox modal overlay on mobile devices
Fix the incorrect display of lightbox buttons in some browsers
Fix support of Italian and Portuguese locales in the gantt.i18n module
Fix the bug in the Parent control of the Lightbox which caused the incorrect work when tasks were assigned to the root level
Fix the script error which happened when initializing a gantt inside an iframe
Fix the incorrect work of the redo config when the undo config is disabled
### 7.0.8
- Fix some issues with touch support on Android/iOS devices
- Fix regression (appeared in v7.0.6) with link creation and gantt.isLinkAllowed method
- Fix the script error which was thrown when the 'locale' parameter was used in gantt.getGanttInstance
- Fix the script error that was thrown from gantt.destructor when the Keyboard Navigation and the Quick Info extensions were used
### 7.0.7
- Fix the syntax error in type definition of gantt.Promise
### 7.0.6
- Fix script errors that were fired on touch devices during drag and drop
- Fix the incorrect work of the Auto Scheduling extension when types of links were defined using numeric values
- Reduced the number of redundant repaints of the resource histogram
- Performance improvements for the task grouping extension
- Fix the ability to scroll a resource timeline on touch devices
- Fix the incorrect work of the resource control when the 'hide empty' button is used
- The return type of gantt.Promise in type definitions is fixed
### 7.0.5
- Performance improvements for work time calculation when the duration_unit config is set to "hour"
- Performance improvements for work time calculation when the duration_unit config is set to "minute"
- The ability to specify working calendars in the configuration object of Gantt.getGanttInstance is added
### 7.0.4
- Removed the 10000px limit on the gantt size in the autosize mode, which should allow printing larger charts
- Drag and drop now finishes when the user releases the mouse button over any part of the document body rather than over the gantt container only
- Portuguese locale was updated
- The return type of gantt.columnIndexByDate in type definitions is fixed
- Fix script errors that were fired when the Gantt instance was destroyed during drag and drop
- Fix the incorrect calculation of end_date/duration when duration_unit is set to "minute" and the last worktime interval finishes after 23:00
- Fix the issue which caused groups of the grouping extension to expand whenever the user modified any task
- Fix the issue which caused the second parameter of dataProcessor.setTransactionMode to be ignored if an object was passed into the first parameter
- Fix the issue which caused the active inline editor to disappear after repaint of Gantt
- Fix the issue with the static_background extension which caused mouse click on empty cells to be interpreted as a click on task elements
- Gantt now dynamically repaints links between split tasks during drag and drop
- Fix the script error which was thrown from gantt.addTask in node.js package
- Fix the script error which was thrown from gantt.destructor in node.js package
### 7.0.3
- Fix regression in the setWorkTime method which caused a script error when the working time is set for a specific day
- Fix the incorrect work of the Keyboard Navigation extension when Gantt is used inside a SalesForce Lightning Web Component
### 7.0.2
- Fix the incorrect work of date formatters when gantt.config.csp is set to true.
- Fix regression in the Click Drag and Drag Timeline extensions which caused the incorrect work when multiple instances of Gantt were created
- Fix the incorrect css class of a task row element after returning the error status from the dataProcessor router function
- Fix the incorrect work of inline editors inside Shadow DOM
### 7.0.1
- Major performance improvement for calculation tasks' duration in the working minutes
- Fix regression in the Tooltip and Undo extensions which caused the incorrect work when multiple instances of Gantt were created
- Fix the issue with the reordering of grid columns which caused the timeline to scroll when a mouse pointer moved to the edge of the grid during drag and drop
- Fix the incorrect position of the column after its dragging and dropping to the right side of the grid border
- dataProcessor custom router should now work correctly with rejected promises
- Fix the regression in smart rendering which caused some links not to be visible
- Split tasks now display not only the first level children but also all nested subtasks
- Fix the issue with split tasks and smart rendering which happened when a split task had the 'task' type
- Fix the issue with split tasks which caused the gantt not to calculate the duration of the 'project' tasks nested in a split task
- Fix the incorrect position of a placeholder after opening an inline editor in the RTL mode
### 7.0.0
- Nodejs-compatible build of dhtmlxGantt is now available
- Update TypeScript type definitions
- Extensions and Locales are now bundled with dhtmlxgantt.js core file and are enabled from config
- Ability to specify work time in minutes
- Ability to merge several work time calendars
- Changed default work hours from 8:00-17:00 to 8:00-12:00, 13:00-17:00
- Simpler format for entering work time intervals for Calendars
- Extend the API of the QuickInfo extension
- CSP mode is enabled by default
- All custom HTML attributes were changed to `data-` attributes
- Add the ability to use `text-overflow:ellipsis` on grid cells
- Add the ability to reorder grid columns by drag and drop
- Add support for 'elastic' column width for the scrollable grid
- gantt.templates.xml_date/gantt.templates.xml_format were replaced with gantt.templates.parse_date/gantt.templates.format_date
- gantt.config.xml_date was replaced with gantt.config.date_format
- Fix the bug which caused a column to change width after hiding and showing the column again
- Fix the bug which disabled the ability to select any task when the multiselect extension was disabled via the `multiselect` config
- Fix the incorrect work of `gantt.sort` for tasks with equal start dates
- Fix drag and drop of a link when Gantt is initialized inside a Web Component
### 6.3.7
- Significant performance improvement for smart rendering of chart and resource panel
### 6.3.6
- Fix the regression in gantt.resetLayout which caused the script error
- Fix the issue with the QuickInfo popup which caused it to be positioned behind the resource panel in some cases
- Fix the script error thrown from the gantt.getShortcutHandler method
- Fix the script error thrown from the tooltip.show(x, y) method
- gantt.getTaskNode now returns the correct HTML element for split tasks
- Fix the issue with horizontal scrollbars not being displayed when visibility groups are specified in some layout configurations
### 6.3.5
- Fix the issue with task grouping which caused vertical scroll position to reset after moving any task with drag and drop
- Fix the script error which happened when drag_timeline config was set to null
- Fix the incorrect position of highlighted cells when static_background and static_background_cells are enabled and smart_rendering is disabled
- Fix the issue with the onAfterBranchLoading event not being called
- Fix the incorrect work of smart rendering when the value of task_height is less than the value of row_height
- A public method for rebuilding gantt layout after changing its config is added
### 6.3.4
- Fix crashes of the resource load diagram when smart rendering is switched off
- Fix issue with the custom task property named "unit", as gantt considered it as a duration unit value and multiplied the task duration after its dragging
- Fix the incorrect Tooltip position when the autosize config is enabled
- Fix the incorrect alignment behavior of grid cells when both the scrollable property and autofit config are set to true
- Creating a link between a task in the timeline and a placeholder in the grid is now blocked
- Fix the bug with the auto scheduling extension that caused gantt to freeze when a task has the constraint type (SNET/FNET/SNLT/FNLT) with no date specified, or with an invalid date
### 6.3.3
- Fix the incorrect resizing behavior of grid that disabled the Timeline in some cases
- gantt.parse should now correctly update the project tree when a parent task is loaded after its children
- Fix compatibility with SalesForce Lightning Aura components framework (Evaluation build)
- Fix the incorrect position of the Tooltip in SalesForce environment
- Fix the incorrect Tooltip position when the gantt container has a vertical margin
- Add missing WAI-ARIA attributes to elements inside the gantt
- Fix the incorrect work of the min_duration config
- Fix the incorrect work of link formatters with custom instances of the gantt
### 6.3.2
- Fix the script error which happened when gantt.destructor was called when the click-drag feature was enabled
- gantt.parse no longer modifies data objects passed into arguments, deep copies are made instead
- TypeScript type definitions were updated
- onBeforeBranchLoading and onAfterBranchLoading public events were added so it would be possible to modify the url or dynamic parameters of dynamic loading requests
- Added a public method for changing the url of the dataProcessor after its initialization
### 6.3.1
- Fix the regression in the smart rendering which caused links not to be rendered in some cases.
- Fix the bug that allowed modifying and creating new tasks with keyboard navigation when the read-only mode is activated
- Fix the display issue with Fullscreen extension which allowed some page elements to be displayed over the gantt in the fullscreen mode
- Fix the bug that caused the drag-timeline extension to reset the value of the readonly config
### 6.3
- Ability to specify decimal units for the duration of tasks
- Ability to scroll the timeline via mouse click and drag
- Ability to drag and drop multiple tasks horizontally
- Ability to display tasks outside the explicit start_date and end_date range of the time scale
- Add a new task_end_date template for formatting end dates of tasks
- Ability to add custom actions to the Undo stack
- Ability to connect custom layers to smart rendering
- Inline editors for predecessors now support formatted values of links
- Remove default limits for input values in date inline editors
- Ability to specify the root node for the Fullscreen extension
- Ability either to change or disable horizontal scroll by shiftKey+mousewheel
- Roboto font was removed from Material skin and has to be imported manually
- Fix crashes of the resource histogram when smart rendering is switched off
- Fix compatibility with r.js compressor
- Fix various conflicts between keyboard navigation and inline editors
- Fix the incorrect state of the DataProcessor when tasks and links were modified sequentially from a custom router
- A correct data object of Task/Link is now also passed into delete call of a custom router
### 6.2.7
- Fix the issue with vertical resizing of grids with horizontal scroll in complex layouts
- Fix the incorrect work of the resource histogram when the scale step is greater than one
- Fix the reopened bug with collapsed branches after calling gantt.parse from v6.2.4 bugfix
### 6.2.6
- Fix the regression in v6.2 Smart Rendering which in some cases caused incorrect vertical positions of tasks after re-initialization of the Gantt
- Fix the issue with QuickInfo popup not being displayed for unscheduled tasks
- Fix incorrect work of extension files with the Ultimate build of Gantt
### 6.2.5
- Fix incorrect initial values of subtasks in the onBeforeTaskChanged event handler after dragging a project with subtasks
- Fix incorrect work of the grouping extension when auto task types are enabled
- Fix the script error after returning the false value from the onTaskLoading event handler
- Add clearer error messages for the exceptions that can be thrown from gantt.load and gantt.parse
### 6.2.4
- Fix the issue with task branches being collapsed after updating data using gantt.parse
- Fix the incorrect work of smart rendering in the resource view
- Fix the issue which caused the Zoom module to attach redundant DOM event handlers on each re-initialization of the Gantt
### 6.2.3
- Fix the incorrect work of the Constraint control in IE11 and MS Edge browsers
- Fix the size of the Gantt element in Fullscreen mode
- Fix the issue with onExpand and onCollapse events not being called from Fullscreen mode
- Correct the Tooltip position when the mouse pointer is near the left/right edge of the screen
- The Tooltip should now be hidden when the Lightbox is opened
- The Tooltip should now be hidden when the chart is scrolled
- Fix the incorrect work of Tooltip which caused the tooltip not to be updated when mouse pointer moved between two elements matching the same selector
- Fix the incorrect work of getTaskBy when null or 0 is provided as a second argument
- Fix the issue with WBS column not being updated after sorting the gantt
- Fix the incorrect display of static_background in Material skin
### 6.2.2
- Add the `gantt.license` property
- Add the `onLinkCreated` API event for new links, similarly to the `onTaskCreated` functionality for new tasks
- `gantt.moveTask` returns false when the action is prevented using onBeforeTaskMove
- Fix the issue which caused a link line to disappear when the render method is called while a user creates a new link
- Fix the issue when markers were not displayed when their start date was set earlier than the minimal date of the time scale
- Fix the issue when markers were not displayed when gantt was initialized with the `gantt.config.show_chart = false` config
- Fix a disappearing modal overlay of the lightbox when a user changed the type of a task
- Fix the issue in keyboard navigation presets, when onAfterTaskUpdate was fired after Shift+left arrow hotkey even if the action was canceled using onBeforeTaskMove
### 6.2.1
- Fix IE11 compatibility of the click-drag feature
- Fix the script error which happened when the user tried to add a new task into an empty chart with the resource view
- Fix the incorrect behavior of the grouping extension which caused assigning an incorrect group value to new tasks
- Fix a script error in the keyboard navigation extension thrown from the Alt+Arrow key shortcut
- Filtering in the resource control is changed to ignore text case
- Task dragging and drag-and-drop may finish on mouseup on any gantt element
- Fix the script error which happened after saving an unscheduled task
### 6.2.0
- Smart rendering is now embedded into the component
- Smart rendering works for rows and cells in all timelines
- static_background allows rendering highlighted cells
- Ability to expand/collapse split tasks (PRO)
- Add new Zoom module, add the ability to zoom by mousewheel
- New options for inline editors
- Simplified scales API
- Fix bug that caused multiple selected tasks to lose CSS classes after repaint
- Fix script error when destroying Gantt from data processor handler
### 6.1.7
- Fix incorrect behavior of getClosestWorkTime
- Fix issue with the autoscroll which happened after toggling visibility of the timeline
- Fix bug in the Multiselect extension which caused selected tasks to lose highlight after chart repaint
- Fix script error which happened after vertical drag-and-drop if smart rendering and keyboard navigation extensions were enabled
- Fix incorrect behavior which happened when users tried to switch between inline editors using the Tab key if some columns of the grid were hidden
- Fix unexpected behavior which prevented the lightbox and inline editors from overriding constraint dates
### 6.1.6
- Fix issue with not working click handlers of QuickInfo popup after a second gantt.init call
- Fix issue with QuickInfo popup not showing up if show_chart config is set to false
- Fix incorrect `action` argument for dataProcessor router after vertical drag-and-drop
- Fix issue when gantt.createTask ignores the `index` parameter
### 6.1.5
- Fix script error on a second gantt.init call when show_chart config is disabled
- Fix incorrect position of order_branch placeholder in the marker mode
### 6.1.4
- Fix script error on reinitialization of gantt in the IE browser
- Fix incorrect behavior of Tooltip extension when gantt.destructor is called
- Fix incorrect work of inline editors in keyboard_navigation_cell mode when grid contains hidden columns
- Fix bug in the Undo extension when Redo action for recreation of new tasks did not restore all properties
- Fix regression in GPL build which caused a script error on a second gantt.init call
### 6.1.3
- gantt.createTask/gantt.addTask should use root_id config value instead of hardcoded 0 id
- Performance increase for worktime calculations for minute and hour duration units
- Minor performance increase for rendering large lists of tasks in the smart rendering mode
- Ensure vertical drag-and-drop doesn't start when the user selects text inside an inline editor
- Fix script error from keyboard navigation in the cell mode after deleting last tasks from the chart
- Ensure Gantt cleans up autogenerated static background style elements after destruction or reinitialization
- Ensure inline editors are not active when read-only mode is enabled
- Fix incorrect selection of grid header cells in the cell mode of keyboard navigation when the sort config is enabled
- Fix regression in the auto_types config which prevented auto type change when new tasks are added
- Fix bug when returning false from onTaskDblClick blocked onLinkDblClick as well
- Fix script error when parsing constraint dates from JSON data
- Fix incorrect position of tasks and markers with the skip_off_time config
- Fix incorrect height of markers after reordering tasks via drag and drop
- New tasks receive the initial value of the progress property
- Fix incorrect task position after vertical drag and drop in the marker mode
- Fix script error from gantt.destructor when the resource panel is enabled
- Fix the bug which caused an empty line to be displayed in a typeselect block
- Fix the bug which caused a task not to be recognized as a part of critical path after id change
### 6.1.2
- Keyboard navigation: add a method for getting the active cell
- Fix incorrect work of the resource panel after creating a new datastore to overwrite the previous one
- Fix incorrect values of query parameters in the POST mode of dataProcessor
- Fix incorrect result of gantt.getClosestWorkTime when called without specifying a direction
- Fix issue when the English locale couldn't override the previously added locale
- Fix script error with gantt.undo and indent actions in the grid
- Fix SalesForce compatibility: new resize listener was broken in SF, fallback is added
### 6.1.1
- Add missing locale options for the resource lightbox control
- Fix script error when using gantt.destructor together with the dataProcessor
- Fix script error when using gantt.destructor together with the resource panel
- Fix the filesize of the tooltip extension
- Fix unexpected call of the onTaskDblClick event while double clicking on a link element
- Fix stuck lightbox cover if gantt.init is called while lightbox is opened
- Fix issues with lightbox and the tooltip extension in the full-screen mode
### 6.1.0
- Ability to add an overlay for the Gantt Chart (PRO)
- Time constraints for tasks (PRO)
- Routing options for dataProcessor
- Project-level working calendars (PRO)
- Ability to create tooltips for all the elements of dhtmlxGantt
- Ability to import dhtmlxGantt as an ES6 module
### 6.0.7
- reduce the number of redundant repaints of the resource diagram
- fix script error from the resource diagram after deleting a task
- fix script error from the fullscreen extension after exiting fullscreen mode on the `Esc` key
- fix incorrect state of links drag and drop when dragging a link between multiple charts on the page. Creating links between gantts is not supported
- fix script error after deleting multiple selected tasks using keyboard navigation extension
- fix default mapping of inline editors. Inline editors shouldn't block keyboard shortcuts on task cells
### 6.0.4
- fix incorrect task position after task vertical dnd in order_branch='marker' mode
- fix script error after deleting a sub-tree which contains selected task
- fix script error on Save/Cancel lightbox containing resource filters
### 6.0.2
- Fix referenceError: getResourceAssignments is not defined when importing Gantt into Vue.js project
- Fix script error on deleting task after assigning resource to it via resource form
- Fix JS error in resource diagram after second initialization of Gantt
- Fix script error on toggle timeline visibility when marker extension is used
- Fix page freeze on gantt.parse if tasks tree contains cyclic references, script error is thrown instead
### 6.0
- Advanced resource management
- New lightbox control for resource management
- Resource histogram
- Add ability to group by multiple resources
- Updated branch ordering
- Public methods for total slack and free slack
- Add JSON-REST dataprocessor mode
- Import from Excel added to online service
- Auto resize when container size changes
- Performance update for auto_types
- Performance update for auto scheduling
### 5.2
- Inline editing in grid
- Split task support
- Updated keyboard navigation
- Add checkbox and radio controls to the lightbox
- Add ability to set task types automatically
- Add ability to use a placeholder row for creating new tasks
- Auto Scheduling performance improvements
- New methods and events for Auto scheduling and Undo extension
- Updated Content Security Policy extension
- Various bugfixes
### 5.1
- Resource load diagram
- RTL mode
- Horizontal scroll for grid and other layout improvements
- Destructors for gantt and data processor instances
- Ability to set min/max widths of grid columns
- Updated API events for a multiselect extension
- Ability to drag and drop projects
- Fixed issues with keyboard navigation in smart rendering mode
- Many bugfixes
### 5.0
- Major architecture overhaul
- Added global layout config
- Added material skin
- Various bugfixes
### 4.2
- Work Time calendars at the task and resource levels
- WBS code (outline numbers) calculation
- Autoscroll for drag and drop operations
- Persian (Farsi) locale
- The getter function for key navigation shortcuts
- The config for cascade deleting of nested tasks and links
- The ability to scroll timeline horizontally on Shift+a mouse wheel movement
- German and Italian locales are updated
- GIF images in the Gantt skins are replaced with PNG
- various fixes
### 4.1
- Added keyboard navigation
- Added WAI-ARIA support
- Added High-contrast themes
- Updated Auto Scheduling and Critical Path calculations (PRO version)
- Performance improvements for worktime calculation and timescale rendering
- Croatian locale added
- Turkish locale updated
- Fixed bug redrawing vertical markers using gantt.updateMarker
- Fixed bug with gantt.showTask error in smart rendering mode
- Bugfixes for skip_off_time config and multi-tier scales configurations
- Bugfixes with dataProcessor and REST mode support
### 4.0
- Added Smart rendering of big data sets feature
- Added Undo/Redo feature
- Public API improvements - public helpers for popups, ajax, environment variables
- Public API cleanup - remove redundant global objects, resolve conflicts with dhtmlxSuite
- Updated critical path calculation - add support for lag/lead of links
- Updated Spanish and Chinese locales
- Minor bugfixes
### 3.3
- Added dependency Auto Scheduling feature *
- Added support for Fullscreen mode
- Added support of unscheduled tasks
- Added initial support of Content Security Policy
- Allow specifying per column grid sorting settings
- Improved branch ordering feature - allow D'n'D between levels
- Support of REST mode for ajax loading/saving
- Support of backward planning
* The marked functionality requires Commercial or Enterprise license, and not provided under GPL
### 3.2
- Added ability to group tasks by custom properties
- Added multiple selection
- Added export to iCal and to Excel
- Added public events for managing tasks reordering in a grid
- Added ability to specify time range in year selector
- Major performance improvement of worktime and critical path calculations
- New samples and API events
### 3.1
- Added ability to drag tasks on touch devices
- Incorrect tooltip behavior on expand/collapse task tree fixed
- Order of API events during gantt initialization fixed
- Issues with markers and multiple initialization of the gantt fixed
- Issues with markers and gantt.clearAll fixed
- Issues with gantt.serialize method and nested projects of gantt tree fixed
- Fixes in French locale
- Improvements in time range calculation
### 3.0
- Support of Baselines, Deadlines and other custom elements of the timeline *
- Critical path support *
- Ability to display vertical lines in a timeline area (Today line, Status line, etc.)
- Ability to resize Grid by D'n'D, ability to hide/show columns dynamically *
- Simplified API for coloring tasks and links *
- New performance-related options - dynamic loading and simple background rendering *
- Extended configuration for managing 'readonly' state of the tasks
- Extended set of methods for managing task tree hierarchy
- Support of task types and ability to skip time from the scale was removed from a Free version of the component
* The marked functionality requires Commercial or Enterprise license, and not provided under GPL
### 2.1
- Milestone and Projects support
- Custom configuration of the lightbox for different task types
- Non-linear scales, ability to skip time from the scale
- Ability to calculate duration in work days/hours instead of calendar time
- Support of multiple gantts on the page (requires PRO version)
- Updated some localisations
- Added more configurations and API methods events
- Various bugfixes
### 2.0
- jQuery integration
- Major performance improvements
- Ready-to-use PHP integration
- Configurable multi-line scales
- Configurable multi-column grid with optional sorting and Drag-n-Drop
- Configurable popup form for editing tasks
- All text elements can be defined through templates
- All date strings can be configured
- All text labels can be localized
- Default skin changed to "terrace"
- 3 new skins
- Bars can have an optional inner resizer
- Optional UI for task creation
- Vertical and horizontal lines can be colored based on custom rules
- Loading and serialization from JSON
- Loading and serialization with the simplified XML format
- 3 types of task linking
- Gantt charts work on touch devices
- A LOT of events added
- Templates and configuration options added
- API simplified, it uses a single gantt object instead of a bunch of different objects
src/permission.js
@@ -9,7 +9,7 @@
NProgress.configure({ showSpinner: false }) // NProgress Configuration
const whiteList = ['/login', '/zhkb', '/cj', '/ckgl', '/sop'] // no redirect whitelist
const whiteList = ['/login', '/zhkb', '/cj', '/ckgl', '/sop', '/gantt'] // no redirect whitelist
router.beforeEach(async(to, from, next) => {
  // start progress bar
src/router/index.js
@@ -36,6 +36,10 @@
  * çœ‹æ¿éƒ¨åˆ†è·¯ç”±
  * */
  {
    path: '/gantt',
    component: () => import('@/views/gantt/index'),
    hidden: true
  }, {
    path: '/zhkb',
    component: () => import('@/views/kanbanManager/zhkb'),
    hidden: true
src/views/gantt/index.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,1624 @@
<template>
  <div style="padding: 0 10px">
    <!--    <input value="保存到本地存储" class="local_storage" type="button" @click="saveToLocalStorage()">-->
    <!--    <input value="从本地存储加载" class="local_storage" type="button" @click="loadFromLocalStorage()">-->
    <!--    <input value="操作回退" type="button" onclick="gantt.undo()">-->
    <!--    <input value="操作前进" type="button" onclick="gantt.redo()">-->
    <!--    <input type="button" value="放大" onclick="gantt.ext.zoom.zoomIn();">-->
    <!--    <input type="button" value="缩小" onclick="gantt.ext.zoom.zoomOut();">-->
    <!--    <input class="start_date" type="date" value="2025-04-01" @change="changeDates()">-->
    <!--    <input class="end_date" type="date" value="2025-05-10" @change="changeDates()">-->
    <!--    <input type="button" value="Group by priority" @click="group('priority')">-->
    <!--    <input type="button" value="Group by resources" @click="group('owner')">-->
    <!--    <input type="button" value="Reset grouping" @click="group()">-->
    <!--    <label>当前布局:-->
    <!--      <select class="layout_config" name="layout" @input="changeLayout(this.value)">-->
    <!--        <option value="default">Default</option>-->
    <!--        <option value="horizontalScrollbars">Horinzontal Scrollbars</option>-->
    <!--        <option value="resource">With Resource Panel</option>-->
    <!--        <option value="universal">Universal</option>-->
    <!--        <option value="complexScrollbars">Complex with scrollbars</option>-->
    <!--      </select>-->
    <!--    </label>-->
    <div style="padding: 10px 0;display: flex;">
      <el-button type="primary" size="mini" @click="ganttUndo">回退拖动操作</el-button>
      <el-button type="primary" size="mini" @click="ganttRedo">前进拖动操作</el-button>
      <el-button type="primary" size="mini" @click="ganttZoomIn">放大</el-button>
      <el-button type="primary" size="mini" @click="ganttZoomOut">缩小</el-button>
      <el-date-picker
        v-model="ganttDateRange"
        style="margin-left: 10px;"
        size="mini"
        type="daterange"
        :clearable="false"
        range-separator="至"
        start-placeholder="开始日期"
        end-placeholder="结束日期"
        @change="ganttDateRangeChange"
      />
      <el-button type="primary" style="margin-left: 10px;" size="mini" @click="handleGetSelected">
        èŽ·å–å¤é€‰æ¡†é€‰ä¸­ä»»åŠ¡
      </el-button>
      <!--      <el-button size="mini" @click="handleClearSelection">-->
      <!--        æ¸…空复选框选择-->
      <!--      </el-button>-->
    </div>
    <div id="gantt_here" style="width:100%; height:90vh;" />
  </div>
</template>
<script>
// import { gantt } from 'dhtmlx-gantt'
// import 'dhtmlx-gantt/codebase/dhtmlxgantt.css'
import { gantt } from '@/components/dhtmlxGantt'
import '@/components/dhtmlxGantt/codebase/dhtmlxgantt.css'
export default {
  data() {
    return {
      value: 'default',
      ganttDateRange: ['2025-04-01', '2025-05-10'],
      selectedIds: []
    }
  },
  mounted() {
    this.init()
  },
  methods: {
    init() {
      // gantt.clearAll()
      gantt.plugins({
        auto_scheduling: true,
        critical_path: true,
        drag_timeline: true,
        grouping: true,
        keyboard_navigation: true,
        marker: true,
        multiselect: true,
        tooltip: true,
        undo: true
      })
      gantt.config.multiselect = true // å¼€å¯å¤šä»»åŠ¡é€‰æ‹©
      /* â†“↓↓ Auto-scheduling configuration â†“↓↓ */
      gantt.config.auto_scheduling = true
      // gantt.config.project_start = new Date(2025, 03, 05);
      gantt.config.project_start = '2025/03/05'
      gantt.addMarker({
        text: '项目开始',
        start_date: gantt.config.project_start
      })
      function renderDiv(task, date, className) {
        const el = document.createElement('div')
        el.className = className
        const sizes = gantt.getTaskPosition(task, date)
        el.style.left = sizes.left + 'px'
        el.style.top = sizes.top + 'px'
        return el
      }
      gantt.attachEvent('onGanttReady', function() {
        // gantt.addTaskLayer(function draw_deadline(task) {
        //   const constraintType = gantt.getConstraintType(task);
        //   const types = gantt.config.constraint_types;
        //   if (constraintType != types.ASAP && constraintType != types.ALAP && task.constraint_date) {
        //     const dates = gantt.getConstraintLimitations(task);
        //
        //     const els = document.createElement("div");
        //
        //     if (dates.earliestStart) {
        //       els.appendChild(renderDiv(task, dates.earliestStart, 'constraint-marker earliest-start'));
        //     }
        //
        //     if (dates.latestEnd) {
        //       els.appendChild(renderDiv(task, dates.latestEnd, 'constraint-marker latest-end'));
        //     }
        //
        //     els.title = gantt.locale.labels[constraintType] + " " + gantt.templates.task_date(task.constraint_date);
        //
        //     if (els.children.length)
        //       return els;
        //   }
        //   return false;
        // });
      })
      /* â†‘↑↑ Auto-scheduling configuration â†‘↑↑ */
      /* â†“↓↓ Group configuration â†“↓↓ */
      gantt.serverList('task_priority', [
        { key: 1, label: '高' },
        { key: 2, label: '中等' },
        { key: 3, label: '低' }
      ])
      gantt.serverList('task_status', [
        { key: 1, label: 'Planning' },
        { key: 2, label: 'Not started' },
        { key: 3, label: 'In Progress' },
        { key: 4, label: 'Complete' }
      ])
      gantt.i18n.setLocale('cn')
      function byId(list, id) {
        for (let i = 0; i < list.length; i++) {
          if (list[i].key == id) {
            return list[i].label || ''
          }
        }
        return ''
      }
      /* â†‘↑↑ Group configuration â†‘↑↑ */
      /* â†“↓↓ Zoom configuration â†“↓↓ */
      const zoomConfig = {
        levels: [
          {
            name: 'hour',
            scale_height: 27,
            min_column_width: 50,
            scales: [
              { unit: 'day', format: '%Yå¹´%M%d号' },
              { unit: 'hour', format: '%H时' }
            ]
          },
          {
            name: 'day',
            scale_height: 27,
            min_column_width: 80,
            scales: [
              // { unit: 'day', step: 1, format: '%d %M' }
              { unit: 'day', step: 1, format: '%M月%d号' }
            ]
          },
          {
            name: 'week',
            scale_height: 50,
            min_column_width: 50,
            scales: [
              // {
              //   unit: 'week', step: 1, format: function(date) {
              //     const dateToStr = gantt.date.date_to_str('%d %M')
              //     const endDate = gantt.date.add(date, -6, 'day')
              //     const weekNum = gantt.date.date_to_str('%W')(date)
              //     return '第' + weekNum + '周, ' + dateToStr(date) + ' - ' + dateToStr(endDate)
              //   }
              // },
              { unit: 'week', format: '%Yå¹´%M第%W周' },
              // { unit: 'day', step: 1, format: '%j %D' }
              { unit: 'day', step: 1, format: '星期%D' }
            ]
          },
          {
            name: 'month',
            scale_height: 50,
            min_column_width: 120,
            scales: [
              // { unit: 'month', format: '%Yå¹´%F' },
              { unit: 'month', format: '%Yå¹´%M' },
              { unit: 'week', format: '第%W周' }
            ]
          },
          {
            name: 'quarter',
            height: 50,
            min_column_width: 90,
            scales: [
              // {
              //   unit: 'quarter', step: 1, format: function(date) {
              //     const dateToStr = gantt.date.date_to_str('%M')
              //     const endDate = gantt.date.add(gantt.date.add(date, 3, 'month'), -1, 'day')
              //     return dateToStr(date) + ' - ' + dateToStr(endDate)
              //   }
              // },
              { unit: 'month', step: 1, format: '%Yå¹´%M' }
            ]
          },
          {
            name: 'year',
            scale_height: 50,
            min_column_width: 30,
            scales: [
              { unit: 'year', step: 1, format: '%Yå¹´' }
            ]
          }
        ],
        useKey: 'ctrlKey',
        trigger: 'wheel',
        element: function() {
          return gantt.$root.querySelector('.gantt_task')
        }
      }
      gantt.ext.zoom.init(zoomConfig)
      gantt.ext.zoom.setLevel('week')
      /* â†‘↑↑ Zoom configuration â†‘↑↑ */
      // æ˜¯å¦æ˜¯å·¥ä½œæ—¶é—´
      /* â†“↓↓ Working Time configuration â†“↓↓ */
      gantt.templates.scale_cell_class = function(date) {
        if (!gantt.isWorkTime(date)) {
          return 'weekend'
        }
      }
      gantt.templates.timeline_cell_class = function(item, date) {
        if (!gantt.isWorkTime({ date: date, task: item })) {
          return 'weekend'
        }
      }
      gantt.config.work_time = true
      gantt.addCalendar({
        id: 'custom1',
        worktime: {
          hours: ['8:00-12:30', '13:00-17:30'], // global work hours for weekdays
          days: [0, 1, 1, 1, 1, 1, 1]
        }
      })
      // gantt.addCalendar({
      //   id: 'custom2',
      //   hours: ['12:00-21:00'],
      //   days: [1, 0, 1, 0, 1, 0, 1]
      // })
      /* â†‘↑↑ Working Time configuration â†‘↑↑ */
      /* â†“↓↓ Grid Columns configuration â†“↓↓ */
      gantt.config.reorder_grid_columns = true
      const textEditor = { type: 'text', map_to: 'text' }
      const startDateEditor = { type: 'date', map_to: 'start_date' }
      const durationEditor = { type: 'number', map_to: 'duration', min: 0, max: 100 }
      // ç”˜ç‰¹å›¾åˆ—名称
      gantt.config.columns = [
        {
          name: 'checked',
          label: '选择',
          align: 'center',
          width: 35,
          resize: false,
          // å…³é”®ï¼šç”¨ template è¿”回一个复选框
          template: (task) => {
            const checked = task.checked ? 'checked' : ''
            // data-action ç”¨äºŽåœ¨äº‹ä»¶å§”托时识别是复选框
            return `<input type="checkbox" class="taskCheckBox" data-action="check-row" ${checked} />`
          }
        },
        { name: 'wbs', label: '节点', width: 80, template: gantt.getWBSCode },
        { name: 'text', tree: true, label: '任务名称', width: 200, resize: true, editor: textEditor },
        { name: 'start_date', align: 'center', label: '开始日期', width: 80, resize: true, editor: startDateEditor },
        { name: 'duration', width: 60, align: 'center', label: '时长', resize: true, editor: durationEditor },
        {
          name: 'owner', align: 'center', width: 75, label: '作者', template: function(task) {
            if (task.type == gantt.config.types.project) {
              return ''
            }
            const store = gantt.getDatastore('resource')
            const assignments = task[gantt.config.resource_property]
            if (!assignments || !assignments.length) {
              return 'Unassigned'
            }
            if (assignments.length == 1) {
              return store.getItem(assignments[0].resource_id).text
            }
            let result = ''
            assignments.forEach(function(assignment) {
              const owner = store.getItem(assignment.resource_id)
              if (!owner) {
                return
              }
              result += '<div class=\'owner-label\' title=\'' + owner.text + '\'>' + owner.text.substr(0, 1) + '</div>'
            })
            return result
          },
          resize: true
        },
        {
          name: 'priority', width: 60, label: '优先级', align: 'center', resize: true, template: function(task) {
            return byId(gantt.serverList('task_priority'), task.priority)
          }
        },
        { name: 'add', width: 44 }
      ]
      /* â†‘↑↑ Grid Columns configuration â†‘↑↑ */
      /* â†“↓↓ Resource configuration â†“↓↓ */
      function getResourceAssignments(resourceId) {
        let assignments
        const store = gantt.getDatastore(gantt.config.resource_store)
        const resource = store.getItem(resourceId)
        if (resource.$level === 0) {
          assignments = []
          store.getChildren(resourceId).forEach(function(childId) {
            assignments = assignments.concat(gantt.getResourceAssignments(childId))
          })
        } else if (resource.$level === 1) {
          assignments = gantt.getResourceAssignments(resourceId)
        } else {
          assignments = gantt.getResourceAssignments(resource.$resource_id, resource.$task_id)
        }
        return assignments
      }
      gantt.templates.resource_cell_class = function(start_date, end_date, resource, tasks) {
        const css = []
        css.push('resource_marker')
        if (tasks.length <= 1) {
          css.push('workday_ok')
        } else {
          css.push('workday_over')
        }
        return css.join(' ')
      }
      gantt.templates.resource_cell_value = function(start_date, end_date, resource, tasks) {
        let result = 0
        tasks.forEach(function(item) {
          const assignments = gantt.getResourceAssignments(resource.id, item.id)
          assignments.forEach(function(assignment) {
            const task = gantt.getTask(assignment.task_id)
            result += assignment.value * 1
          })
        })
        if (result % 1) {
          result = Math.round(result * 10) / 10
        }
        return '<div>' + result + '</div>'
      }
      gantt.locale.labels.section_resources = 'Owners'
      gantt.locale.labels.section_calendar = 'Calendar'
      // æ±‰åŒ–窗口
      gantt.locale.labels = {
        dhx_cal_today_button: '今天',
        day_tab: '日',
        week_tab: '周',
        month_tab: '月',
        new_event: '新建日程',
        icon_save: '保存',
        icon_cancel: '关闭',
        icon_details: '详细',
        icon_edit: '编辑',
        icon_delete: '删除',
        confirm_closing: '请确认是否撤销修改!', // Your changes will be lost, are your sure?
        confirm_deleting: '是否删除计划?',
        section_description: '描述:',
        section_resources: '自定义选择:',
        section_calendar: '自定义选择2:',
        section_time: '时间范围:',
        section_type: '类型:',
        section_text: '计划名称:',
        section_test: '测试:',
        section_projectClass: '项目类型:',
        taskProjectType_0: '项目任务',
        taskProjectType_1: '普通任务',
        section_head: '负责人:',
        section_priority: '优先级:',
        taskProgress: '任务状态',
        taskProgress_0: '未开始',
        taskProgress_1: '进行中',
        taskProgress_2: '已完成',
        taskProgress_3: '已延期',
        taskProgress_4: '搁置中',
        section_template: 'Details',
        /* grid columns */
        column_text: '计划名称',
        column_start_date: '开始时间',
        column_duration: '持续时间',
        column_add: '',
        column_priority: '难度',
        /* link confirmation */
        link: '关联',
        confirm_link_deleting: '将被删除',
        message_ok: '确定',
        message_cancel: '取消',
        link_start: ' (开始)',
        link_end: ' (结束)',
        type_task: '任务',
        type_project: '项目',
        type_milestone: '里程碑',
        minutes: '分钟',
        hours: '小时',
        days: '天',
        weeks: '周',
        months: '月',
        years: 'å¹´'
      }
      gantt.config.lightbox.sections = [
        { name: 'description', height: 38, map_to: 'text', type: 'textarea', focus: true },
        {
          name: 'resources', type: 'resources', map_to: 'owner', options: gantt.serverList('people'), default_value: 8
        },
        {
          name: 'calendar', height: 25, map_to: 'calendar_id', type: 'select', options: [
            { key: '', label: '默认' },
            { key: 'custom1', label: '选项一' },
            { key: 'custom2', label: '选项二' }
          ]
        },
        { name: 'time', type: 'duration', map_to: 'auto' }
      ]
      gantt.config.resource_store = 'resource'
      gantt.config.resource_property = 'owner'
      gantt.config.order_branch = true
      gantt.config.open_tree_initially = true
      gantt.config.show_errors = false // å‘生异常时,不允许弹出警告到 UI ç•Œé¢
      const resourcesStore = gantt.createDatastore({
        name: gantt.config.resource_store,
        type: 'treeDatastore',
        initItem: function(item) {
          item.parent = item.parent || gantt.config.root_id
          item[gantt.config.resource_property] = item.parent
          item.open = true
          return item
        }
      })
      resourcesStore.attachEvent('onParse', function() {
        const people = []
        resourcesStore.eachItem(function(res) {
          if (!resourcesStore.hasChild(res.id)) {
            const copy = gantt.copy(res)
            copy.key = res.id
            copy.label = res.text
            people.push(copy)
          }
        })
        gantt.updateCollection('people', people)
      })
      resourcesStore.parse([
        { id: 1, text: 'QA', parent: null },
        { id: 2, text: 'Development', parent: null },
        { id: 3, text: 'Sales', parent: null },
        { id: 4, text: 'Other', parent: null },
        { id: 5, text: 'Unassigned', parent: 4 },
        { id: 6, text: 'John', parent: 1, unit: 'hours/day' },
        { id: 7, text: 'Mike', parent: 2, unit: 'hours/day' },
        { id: 8, text: 'Anna', parent: 2, unit: 'hours/day' },
        { id: 9, text: 'Bill', parent: 3, unit: 'hours/day' },
        { id: 10, text: 'Floe', parent: 3, unit: 'hours/day' }
      ])
      /* â†‘↑↑ Resource configuration â†‘↑↑ */
      /* â†“↓↓ Layout configuration â†“↓↓ */
      gantt.config.grid_elastic_columns = true
      // let currentLayout = 'default'
      /* â†‘↑↑ Layout configuration â†‘↑↑ */
      gantt.init('gantt_here')
      gantt.parse({
        'data': [
          {
            'id': 1,
            'text': '任务1',
            'type': 'project',
            'start_date': '02-04-2025 00:00',
            'duration': 17,
            'progress': 0.4,
            'owner': [{ 'resource_id': '5', 'value': 3 }],
            'parent': 0,
            'checked': false
          },
          {
            'id': 2,
            'text': '任务2',
            'type': 'project',
            'start_date': '02-04-2025 00:00',
            'duration': 8,
            'progress': 0.6,
            'owner': [{ 'resource_id': '5', 'value': 4 }],
            'parent': '1',
            checked: false
          },
          {
            'id': 3,
            'text': '任务3',
            'type': 'project',
            'start_date': '11-04-2025 00:00',
            'duration': 8,
            'parent': '1',
            'progress': 0.6,
            'owner': [{ 'resource_id': '5', 'value': 2 }],
            checked: false
          },
          {
            'id': 4,
            'text': '任务4',
            'type': 'project',
            'start_date': '13-04-2025 00:00',
            'duration': 5,
            'parent': '1',
            'progress': 0.5,
            'owner': [{ 'resource_id': '5', 'value': 4 }],
            'priority': 3,
            checked: true
          },
          {
            'id': 5,
            'text': '任务5',
            'calendar_id': 'custom1',
            'type': 'task',
            'start_date': '03-04-2025 00:00',
            'duration': 7,
            'parent': '2',
            'progress': 0.6,
            'owner': [{ 'resource_id': '6', 'value': 5 }],
            'priority': 1,
            checked: true
          },
          {
            'id': 6,
            'text': '任务6',
            'type': 'task',
            'calendar_id': 'custom1',
            'start_date': '03-04-2025 12:00',
            'duration': 7,
            'parent': '2',
            'progress': 0.6,
            'owner': [{ 'resource_id': '7', 'value': 1 }],
            'priority': 2,
            checked: false
          },
          {
            'id': 7,
            'text': '任务7',
            'calendar_id': 'custom1',
            'type': 'task',
            'start_date': '12-04-2025 00:00',
            'duration': 8,
            'parent': '3',
            'progress': 0.6,
            'owner': [{ 'resource_id': '10', 'value': 2 }],
            checked: false
          },
          {
            'id': 8,
            'text': '任务8',
            'calendar_id': 'custom1',
            'type': 'task',
            'start_date': '14-04-2025 00:00',
            'duration': 5,
            'parent': '4',
            'progress': 0.5,
            'owner': [{ 'resource_id': '10', 'value': 4 }, { 'resource_id': '9', 'value': 5 }],
            'priority': 1,
            checked: false
          },
          {
            'id': 9,
            'text': '任务9',
            'type': 'task',
            'start_date': '21-04-2025 00:00',
            'duration': 4,
            'parent': '4',
            'progress': 0.5,
            'owner': [{ 'resource_id': '7', 'value': 3 }],
            checked: false
          },
          {
            'id': 10,
            'text': '任务10',
            'type': 'task',
            'start_date': '27-04-2025 00:00',
            'duration': 3,
            'parent': '4',
            'progress': 0.5,
            'owner': [{ 'resource_id': '8', 'value': 5 }],
            'priority': 2,
            checked: false
          },
          {
            'id': 11,
            'text': '任务11',
            'type': 'project',
            'progress': 0.6,
            'start_date': '02-04-2025 00:00',
            'duration': 13,
            'owner': [{ 'resource_id': '5', 'value': 4 }],
            'parent': 0,
            checked: false
          },
          {
            'id': 12,
            'text': '任务12',
            'calendar_id': 'custom2',
            'type': 'task',
            'start_date': '03-04-2025 00:00',
            'duration': 5,
            'parent': '11',
            'progress': 1,
            'owner': [{ 'resource_id': '7', 'value': 6 }],
            checked: false
          },
          {
            'id': 13,
            'text': '任务13',
            'type': 'project',
            'start_date': '03-04-2025 00:00',
            'duration': 11,
            'parent': '11',
            'progress': 0.5,
            'owner': [{ 'resource_id': '5', 'value': 2 }],
            checked: false
          },
          {
            'id': 14,
            'text': '任务14',
            'calendar_id': 'custom2',
            'type': 'task',
            'start_date': '03-04-2025 00:00',
            'duration': 6,
            'parent': '11',
            'owner': [],
            'progress': 0.8,
            checked: false
          },
          {
            'id': 15,
            'text': '任务15',
            'type': 'project',
            'start_date': '03-04-2025 00:00',
            'duration': 5,
            'parent': '11',
            'progress': 0.2,
            'owner': [{ 'resource_id': '5', 'value': 5 }],
            checked: false
          },
          {
            'id': 16,
            'text': '任务16',
            'calendar_id': 'custom2',
            'type': 'task',
            'start_date': '03-04-2025 00:00',
            'duration': 7,
            'parent': '11',
            'progress': 0,
            'owner': [{ 'resource_id': '7', 'value': 2 }],
            'priority': 1,
            checked: false
          },
          {
            'id': 17,
            'text': '任务17',
            'type': 'task',
            'start_date': '03-04-2025 00:00',
            'duration': 2,
            'parent': '13',
            'progress': 1,
            'owner': [{ 'resource_id': '8', 'value': 1 }],
            'priority': 2,
            checked: false
          },
          {
            'id': 25,
            'text': '任务18',
            // 'type': 'milestone',
            'type': 'task',
            'start_date': '06-04-2025 00:00',
            'parent': '13',
            'progress': 0,
            'owner': [{ 'resource_id': '5', 'value': 1 }],
            'duration': 0,
            checked: false
          },
          {
            'id': 18,
            'text': '任务19',
            'type': 'task',
            'start_date': '10-04-2025 00:00',
            'duration': 2,
            'parent': '13',
            'progress': 0.8,
            'owner': [{ 'resource_id': '6', 'value': 2 }],
            'priority': 3,
            checked: false
          },
          {
            'id': 19,
            'text': '任务20',
            'calendar_id': 'custom1',
            'type': 'task',
            'start_date': '13-04-2025 00:00',
            'duration': 4,
            'parent': '13',
            'progress': 0.2,
            'owner': [{ 'resource_id': '6', 'value': 3 }],
            checked: false
          },
          {
            'id': 20,
            'text': '任务21',
            'type': 'task',
            'start_date': '13-04-2025 00:00',
            'duration': 4,
            'parent': '13',
            'progress': 0,
            'owner': [{ 'resource_id': '8', 'value': 4 }],
            'priority': 1,
            checked: false
          },
          {
            'id': 21,
            'text': '任务22',
            'type': 'task',
            'start_date': '03-04-2025 00:00',
            'duration': 4,
            'parent': '15',
            'progress': 0.5,
            'owner': [{ 'resource_id': '6', 'value': 5 }],
            checked: false
          },
          {
            'id': 22,
            'text': '任务23',
            'calendar_id': 'custom1',
            'type': 'task',
            'start_date': '03-04-2025 00:00',
            'duration': 4,
            'parent': '15',
            'progress': 0.1,
            'owner': [{ 'resource_id': '8', 'value': 3 }],
            'priority': 1,
            checked: false
          },
          {
            'id': 23,
            'text': '任务24',
            'type': 'task',
            'start_date': '03-04-2025 00:00',
            'duration': 5,
            'parent': '15',
            'progress': 0,
            'owner': [{ 'resource_id': '8', 'value': 5 }],
            'priority': 1,
            checked: false
          },
          {
            'id': 24,
            'text': '任务25',
            // 'type': 'milestone',
            'type': 'task',
            'start_date': '20-04-2025 00:00',
            'parent': '11',
            'progress': 0,
            'owner': [{ 'resource_id': '5', 'value': 3 }],
            'duration': 0,
            checked: false
          }
        ]
        // "links": [
        //   { "id": "2", "source": "2", "target": "3", "type": "0" },
        //   { "id": "3", "source": "3", "target": "4", "type": "0" },
        //   { "id": "7", "source": "8", "target": "9", "type": "0" },
        //   { "id": "8", "source": "9", "target": "10", "type": "0" },
        //   { "id": "16", "source": "17", "target": "25", "type": "0" },
        //   { "id": "17", "source": "18", "target": "19", "type": "0" },
        //   { "id": "18", "source": "19", "target": "20", "type": "0" },
        //   { "id": "22", "source": "13", "target": "24", "type": "0" },
        //   { "id": "23", "source": "25", "target": "18", "type": "0" }
        // ]
      })
      // ç»‘定甘特图点击事件(官方推荐的事件委托用法)<span data-allow-html class='source-item source-aggregated' data-group-key='source-group-2' data-url='https://juejin.cn/post/7352376280387764278' data-id='turn0fetch0'><span data-allow-html class='source-item-num' data-group-key='source-group-2' data-id='turn0fetch0' data-url='https://juejin.cn/post/7352376280387764278'><span class='source-item-num-name' data-allow-html>https://juejin.cn/post/7352376280387764278</span></span></span>
      gantt.attachEvent('onTaskClick', (id, e) => {
        // æ‰¾åˆ°ç‚¹å‡»çš„æ˜¯å¦æ˜¯å¤é€‰æ¡†
        const checkbox = e.target.closest('[data-action="check-row"]')
        if (!checkbox) {
          // ä¸æ˜¯ç‚¹å¤é€‰æ¡†ï¼Œå°±ä¿æŒé»˜è®¤è¡Œä¸º
          return true
        }
        // æ˜¯å¤é€‰æ¡†ï¼šåˆ‡æ¢é€‰ä¸­çŠ¶æ€
        const task = gantt.getTask(id)
        if (task) {
          task.checked = !task.checked
          gantt.updateTask(id) // åªåˆ·æ–°è¿™ä¸€è¡Œï¼Œæ€§èƒ½æ›´å¥½
          this.syncSelected() // åŒæ­¥åˆ° Vue çš„ selectedIds
        }
        // é˜»æ­¢é»˜è®¤ç‚¹å‡»è¡Œè¡Œä¸ºï¼ˆé¿å…è¯¯è§¦å‘其他逻辑)
        return false
      })
      // åˆå§‹åŒ–完成后同步一次选中状态
      this.syncSelected()
    },
    // ä¿å­˜åˆ°æœ¬åœ°å­˜å‚¨
    loadFromLocalStorage() {
      this.loadGeneralConfig()
      this.loadStacks()
      this.loadGridColumnsConfig()
      this.loadLayoutConfig()
      this.loadVariousConfig()
    },
    // ä»Žæœ¬åœ°å­˜å‚¨åŠ è½½
    saveToLocalStorage() {
      this.saveGeneralConfig()
      this.saveVariousConfig()
      this.saveGridColumnsConfig()
      this.saveLayoutConfig()
      this.saveStacks()
    },
    saveGeneralConfig() {
      const generalConfig = {}
      // add properties that you want to save in the local storage
      const properties = [
        'grid_width',
        'start_date',
        'end_date'
        // examples of the properties you may want to add
        // "skip_off_time",
        // "show_tasks_outside_timescale",
        // "rtl",
        // "resize_rows",
        // "keyboard_navigation",
        // "keyboard_navigation_cells",
      ]
      properties.forEach(function(prop) {
        switch (typeof gantt.config[prop]) {
          case 'number':
          case 'string':
          case 'boolean':
            generalConfig[prop] = gantt.config[prop]
            break
          case 'object':
            if (gantt.config[prop] && typeof gantt.config[prop].getMonth === 'function') {
              generalConfig[prop] = gantt.date.date_to_str(gantt.config.date_format)(gantt.config[prop])
            }
            break
          // objects and methods should be set from the application
        }
      })
      const storageName = `DHTMLX Gantt: General Configuration`
      const serializedConfig = JSON.stringify(generalConfig) + ''
      localStorage.setItem(storageName, serializedConfig)
    },
    loadGeneralConfig() {
      const storageName = `DHTMLX Gantt: General Configuration`
      const loadedConfig = localStorage.getItem(storageName)
      const generalConfig = JSON.parse(loadedConfig)
      const dateProperties = [
        'start_date',
        'end_date',
        'project_start',
        'project_end'
      ]
      dateProperties.forEach(function(prop) {
        if (generalConfig[prop]) {
          generalConfig[prop] = gantt.date.str_to_date(gantt.config.date_format)(generalConfig[prop])
        }
      })
      gantt.mixin(gantt.config, generalConfig, true)
    },
    saveVariousConfig() {
      const variousConfig = {
        scrollState: gantt.getScrollState(),
        groupMode: gantt.getState().group_mode,
        zoomLevel: gantt.ext.zoom.getCurrentLevel()
      }
      const storageName = `DHTMLX Gantt: Various Configuration`
      const serializedConfig = JSON.stringify(variousConfig) + ''
      localStorage.setItem(storageName, serializedConfig)
    },
    loadVariousConfig() {
      const storageName = `DHTMLX Gantt: Various Configuration`
      const loadedConfig = localStorage.getItem(storageName)
      const variousConfig = JSON.parse(loadedConfig)
      gantt.scrollTo(variousConfig.scrollState.x, variousConfig.scrollState.y)
      if (variousConfig.groupMode) {
        // this is a custom function. in your case, it may be a different name
        this.group(variousConfig.groupMode)
      }
      gantt.ext.zoom.setLevel(variousConfig.zoomLevel)
    },
    saveGridColumnsConfig() {
      const storageName = `DHTMLX Gantt: Grid Columns Configuration`
      const serializedConfig = JSON.stringify(gantt.config.columns) + ''
      // objects and functions cannot be saved
      localStorage.setItem(storageName, serializedConfig)
    },
    loadGridColumnsConfig() {
      const storageName = `DHTMLX Gantt: Grid Columns Configuration`
      const loadedConfig = localStorage.getItem(storageName)
      const gridColumnsConfig = JSON.parse(loadedConfig)
      // as objects and functions cannot be saved, we add them from the existing columns
      // also, this approach helps saving the column order
      gridColumnsConfig.forEach(function(column) {
        const existingColumn = gantt.getGridColumn(column.name)
        gantt.mixin(column, existingColumn, false)
      })
      gantt.config.columns = gridColumnsConfig
    },
    saveLayoutConfig() {
      const layoutConfig = {
        currentLayout,
        gridWidth: gantt.getLayoutView('grid').$state.width
      }
      switch (layoutConfig.currentLayout) {
        case 'resource':
          layoutConfig.ganttPanelHeight = gantt.getLayoutView('ganttPanelCell').$lastSize.y
        case 'default':
          layoutConfig.gridWidth = gantt.config.grid_width
          break
        case 'universal':
        case 'complexScrollbars':
          layoutConfig.ganttPanelHeight = gantt.getLayoutView('mainGrid').$lastSize.y
          break
      }
      const storageName = `DHTMLX Gantt: Layout Configuration`
      const serializedConfig = JSON.stringify(layoutConfig) + ''
      localStorage.setItem(storageName, serializedConfig)
    },
    loadLayoutConfig() {
      const storageName = `DHTMLX Gantt: Layout Configuration`
      const loadedConfig = localStorage.getItem(storageName)
      const layoutConfig = JSON.parse(loadedConfig)
      this.changeLayout(layoutConfig.currentLayout)
      document.querySelector('.layout_config').value = layoutConfig.currentLayout
      switch (layoutConfig.currentLayout) {
        case 'horizontalScrollbars':
          gantt.config.layout.cols[0].width = layoutConfig.gridWidth
          break
        case 'resource':
          gantt.config.layout.rows[0].height = layoutConfig.ganttPanelHeight
          break
        case 'universal':
        case 'complexScrollbars':
          gantt.config.layout.cols[0].width = layoutConfig.gridWidth
          gantt.config.layout.cols[0].rows[0].height = layoutConfig.ganttPanelHeight
          gantt.config.layout.cols[2].rows[0].height = layoutConfig.ganttPanelHeight
          break
      }
      gantt.init('gantt_here')
      // with the rows[cols[]] layout configuration, we need to rely
      // on the grid_width config, and it is correctly applied only
      // after we use the `render` method
      if (layoutConfig.currentLayout == 'default' || layoutConfig.currentLayout == 'resource') {
        gantt.config.grid_width = layoutConfig.gridWidth
        gantt.render()
      }
    },
    saveStacks() {
      this.saveStack('Undo')
      this.saveStack('Redo')
    },
    loadStacks() {
      this.loadStack('Undo')
      this.loadStack('Redo')
    },
    saveStack(stackType) {
      const stack = gantt.copy(gantt[`get${stackType}Stack`]())
      stack.forEach(function(action) {
        action.commands.forEach(function(command) {
          command.oldValue = gantt.json.serializeTask(command.oldValue)
          command.value = gantt.json.serializeTask(command.value)
          const assignments = gantt.config.resource_property
          // if (command.oldValue[assignments]) {
          //   for (assignment in command.oldValue[assignments]) {
          //     command.oldValue[assignments][assignment] = gantt.json.serializeTask(command.oldValue[assignments][assignment])
          //   }
          // }
          // if (command.value[assignments]) {
          //   for (assignment in command.value[assignments]) {
          //     command.value[assignments][assignment] = gantt.json.serializeTask(command.value[assignments][assignment])
          //   }
          // }
        })
      })
      const serializedStack = JSON.stringify(stack) + ''
      const storageName = `DHTMLX Gantt: ${stackType} Stack`
      localStorage.setItem(storageName, serializedStack)
    },
    loadStack(stackType) {
      const storageName = `DHTMLX Gantt: ${stackType} Stack`
      const serializedStack = localStorage.getItem(storageName)
      const loadedStack = JSON.parse(serializedStack)
      loadedStack.forEach(function(action) {
        action.commands.forEach(function(command) {
          convertDateProperties(command.oldValue)
          convertDateProperties(command.value)
          const assignments = gantt.config.resource_property
          // if (command.oldValue[assignments]) {
          //   for (assignment in command.oldValue[assignments]) {
          //     convertDateProperties(command.oldValue[assignments][assignment])
          //   }
          // }
          // if (command.value[assignments]) {
          //   for (assignment in command.value[assignments]) {
          //     convertDateProperties(command.value[assignments][assignment])
          //   }
          // }
        })
      })
      gantt[`clear${stackType}Stack`]()
      const stack = gantt[`get${stackType}Stack`]()
      loadedStack.forEach(function(action) {
        stack.push(action)
      })
      function convertDateProperties(obj) {
        const dateProperties = [
          'start_date',
          'end_date',
          'constraint_date'
        ]
        dateProperties.forEach(function(prop) {
          if (obj[prop]) {
            obj[prop] = gantt.date.parseDate(obj[prop], gantt.config.date_format)
          }
        })
      }
    },
    // changeDates() {
    //   const startDateEl = document.querySelector('.start_date')
    //   const endDateEl = document.querySelector('.end_date')
    //   const startDate = new Date(startDateEl.value)
    //   const endDate = new Date(endDateEl.value)
    //   console.log(startDate)
    //   console.log(endDate)
    //   if (!+startDate || !+endDate) {
    //     return
    //   }
    //
    //   gantt.config.start_date = startDate
    //   gantt.config.end_date = endDate
    //   gantt.render()
    // },
    ganttDateRangeChange(val) {
      gantt.config.start_date = val[0]
      gantt.config.end_date = val[1]
      gantt.render()
    },
    ganttUndo() {
      gantt.undo()
    },
    ganttRedo() {
      gantt.redo()
    },
    ganttZoomIn() {
      gantt.ext.zoom.zoomIn()
    },
    ganttZoomOut() {
      gantt.ext.zoom.zoomOut()
    },
    // åˆ†ç»„
    group(type) {
      switch (type) {
        case 'priority':
          gantt.groupBy({
            groups: gantt.serverList('task_priority'),
            relation_property: type,
            group_id: 'key',
            group_text: 'label'
          })
          break
        case 'owner':
          const groups = gantt.getDatastore('resource').getItems().map(function(item) {
            const group = gantt.copy(item)
            group.group_id = group.id
            group.id = gantt.uid()
            return group
          })
          gantt.groupBy({
            groups: groups,
            relation_property: gantt.config.resource_property,
            group_id: 'group_id',
            group_text: 'text',
            delimiter: ', ',
            default_group_label: 'Not Assigned'
          })
          break
        default:
          gantt.groupBy(false)
          break
      }
    },
    changeLayout(value) {
      console.log(value)
      // currentLayout = value
      const resourceConfig = {
        columns: [
          {
            name: 'name', label: 'Name', tree: true, template: function(resource) {
              return resource.text
            }
          },
          {
            name: 'workload', label: 'Workload', template: function(resource) {
              let totalDuration = 0
              if (resource.$level == 2) {
                const assignment = gantt.getResourceAssignments(resource.$resource_id, resource.$task_id)[0]
                totalDuration = resource.duration * assignment.value
              } else {
                const assignments = getResourceAssignments(resource.id)
                assignments.forEach(function(assignment) {
                  const task = gantt.getTask(assignment.task_id)
                  totalDuration += Number(assignment.value) * task.duration
                })
              }
              return (totalDuration || 0) + 'h'
            }
          }
        ]
      }
      const defaultLayout = {
        css: 'gantt_container',
        rows: [
          {
            cols: [
              {
                // the default grid view
                view: 'grid',
                scrollX: 'scrollHor',
                scrollY: 'scrollVer'
              },
              { resizer: true, width: 1 },
              {
                // the default timeline view
                view: 'timeline',
                scrollX: 'scrollHor',
                scrollY: 'scrollVer'
              },
              {
                view: 'scrollbar',
                id: 'scrollVer'
              }
            ]
          },
          {
            view: 'scrollbar',
            id: 'scrollHor'
          }
        ]
      }
      const gridWidthScrollbarLayout = {
        css: 'gantt_container',
        cols: [
          {
            rows: [
              {
                view: 'grid',
                scrollable: true,
                scrollX: 'scrollHor1',
                scrollY: 'scrollVer'
              },
              {
                view: 'scrollbar',
                id: 'scrollHor1',
                scroll: 'x',
                group: 'hor'
              }
            ]
          },
          { resizer: true, width: 1 },
          {
            rows: [
              {
                view: 'timeline',
                scrollX: 'scrollHor',
                scrollY: 'scrollVer'
              },
              {
                view: 'scrollbar',
                id: 'scrollHor',
                scroll: 'x',
                group: 'hor'
              }
            ]
          },
          {
            view: 'scrollbar',
            id: 'scrollVer'
          }
        ]
      }
      const resourceLayoutGeneral = {
        css: 'gantt_container',
        rows: [
          {
            id: 'ganttPanelCell',
            cols: [
              { view: 'grid', group: 'grids', scrollY: 'scrollVer' },
              { resizer: true, width: 1 },
              { view: 'timeline', scrollX: 'scrollHor', scrollY: 'scrollVer' },
              { view: 'scrollbar', id: 'scrollVer', group: 'vertical' }
            ],
            gravity: 2
          },
          { resizer: true, width: 1 },
          {
            config: resourceConfig,
            cols: [
              { view: 'resourceGrid', group: 'grids', width: 435, scrollY: 'resourceVScroll' },
              { resizer: true, width: 1 },
              { view: 'resourceTimeline', scrollX: 'scrollHor', scrollY: 'resourceVScroll' },
              { view: 'scrollbar', id: 'resourceVScroll', group: 'vertical' }
            ],
            gravity: 1
          },
          { view: 'scrollbar', id: 'scrollHor' }
        ]
      }
      const universalLayout = {
        css: 'gantt_container',
        cols: [
          {
            width: 400,
            rows: [
              {
                id: 'mainGrid',
                linkedView: 'mainTimeline',
                group: 'gantt',
                cols: [
                  {
                    rows: [
                      { view: 'grid', scrollX: 'gridScrollX', scrollable: true, scrollY: 'scrollVer' }
                    ]
                  }
                ]
              },
              { resizer: true, width: 1 },
              {
                id: 'resourceGrid',
                linkedView: 'resourceTimeline',
                group: 'resourceLoad',
                config: resourceConfig,
                cols: [
                  {
                    rows: [
                      { view: 'resourceGrid', scrollY: 'scrollVer2', scrollX: 'gridScrollX', scrollable: true },
                      { view: 'scrollbar', id: 'gridScrollX' }
                    ]
                  }
                ]
              }
            ]
          },
          { resizer: true, width: 1 },
          {
            rows: [
              {
                id: 'mainTimeline',
                linkedView: 'mainGrid',
                group: 'gantt',
                cols: [
                  {
                    rows: [
                      { view: 'timeline', scrollX: 'scrollHor', scrollY: 'scrollVer' }
                    ]
                  },
                  { view: 'scrollbar', id: 'scrollVer' }
                ]
              },
              { resizer: true, width: 1 },
              {
                id: 'resourceTimeline',
                linkedView: 'resourceGrid',
                group: 'resourceLoad',
                cols: [
                  {
                    rows: [
                      { view: 'resourceTimeline', scrollX: 'scrollHor', scrollY: 'scrollVer2' },
                      { view: 'scrollbar', id: 'scrollHor' }
                    ]
                  },
                  { view: 'scrollbar', id: 'scrollVer2' }
                ]
              }
            ]
          }
        ]
      }
      const complexLayoutWithScrollbars = {
        css: 'gantt_container',
        cols: [
          {
            width: 400,
            // min_width: 100,
            rows: [
              {
                id: 'mainGrid',
                group: 'gantt',
                cols: [
                  {
                    rows: [
                      { view: 'grid', scrollX: 'gridScrollX', scrollable: true, scrollY: 'gridScrollY' },
                      { view: 'scrollbar', id: 'gridScrollX', group: 'mainGantt' }
                    ]
                  },
                  { view: 'scrollbar', id: 'gridScrollY' }
                ]
              },
              { resizer: true, width: 1 },
              {
                group: 'resources',
                config: resourceConfig,
                cols: [
                  {
                    rows: [
                      { view: 'resourceGrid', scrollY: 'gridScrollY2', scrollX: 'gridScrollX2', scrollable: true },
                      { view: 'scrollbar', id: 'gridScrollX2', group: 'resourcePanel' }
                    ]
                  },
                  { view: 'scrollbar', id: 'gridScrollY2' }
                ]
              }
            ]
          },
          // {view: "scrollbar", id: "grid",scrollX: "grid"},
          { resizer: true, width: 1 },
          {
            rows: [
              {
                group: 'gantt',
                cols: [
                  {
                    rows: [
                      { view: 'timeline', scrollX: 'scrollHor', scrollY: 'scrollVer' },
                      { view: 'scrollbar', id: 'scrollHor', group: 'mainGantt' }
                    ]
                  },
                  { view: 'scrollbar', id: 'scrollVer' }
                ]
              },
              { resizer: true, width: 1 },
              {
                group: 'resources',
                cols: [
                  {
                    rows: [
                      { view: 'resourceTimeline', scrollX: 'scrollHor2', scrollY: 'scrollVer2' },
                      { view: 'scrollbar', id: 'scrollHor2', group: 'resourcePanel' }
                    ]
                  },
                  { view: 'scrollbar', id: 'scrollVer2' }
                ]
              }
            ]
          }
        ]
      }
      switch (value) {
        case 'default':
          gantt.config.layout = defaultLayout
          break
        case 'horizontalScrollbars':
          gantt.config.layout = gridWidthScrollbarLayout
          break
        case 'resource':
          gantt.config.layout = resourceLayoutGeneral
          break
        case 'universal':
          gantt.config.layout = universalLayout
          break
        case 'complexScrollbars':
          gantt.config.layout = complexLayoutWithScrollbars
          break
      }
      gantt.init('gantt_here')
    },
    // ä»Žç”˜ç‰¹å›¾ä¸­åŒæ­¥é€‰ä¸­çš„ id åˆ° Vue data
    syncSelected() {
      const tasks = gantt.serialize().data || []
      console.log(tasks)
      this.selectedIds = tasks.filter(t => t.checked).map(t => t.id)
      console.log(this.selectedIds)
    },
    // èŽ·å–é€‰ä¸­ä»»åŠ¡ï¼ˆç¤ºä¾‹ï¼‰
    handleGetSelected() {
      const tasks = gantt.serialize().data || []
      const selected = tasks.filter(t => t.checked)
      this.$message.info(`当前已选中${selected.length} æ¡ä»»åŠ¡`)
    },
    // æ¸…空所有选择
    handleClearSelection() {
      // gantt.unselectAll();
      // this.selectedIds = [];
      // æ›´æ–°æ‰€æœ‰å¤é€‰æ¡†çŠ¶æ€ä¸ºæœªé€‰ä¸­
      const tasks = gantt.serialize().data || []
      tasks.forEach(t => {
        if (t.checked) {
          console.log(t, '执行')
          t.checked = false
          gantt.updateTask(t.id)
        }
      })
      const checkboxes = gantt.$container.querySelectorAll('.taskCheckBox')
      checkboxes.forEach(checkbox => {
        checkbox.checked = false
      })
      this.syncSelected()
      // gantt.render()
    }
  }
}
</script>
<style>
body,
html {
  width: 100%;
  height: 100%;
  margin: unset;
}
.local_storage {
  background: lavender;
  border: 2px dotted orange;
  font-weight: bold;
}
.gantt_grid_scale .gantt_grid_head_cell,
.gantt_task .gantt_task_scale .gantt_scale_cell {
  font-weight: bold;
  font-size: 14px;
  color: rgba(0, 0, 0, 0.7);
}
.resource_marker {
  text-align: center;
}
.resource_marker div {
  width: 28px;
  height: 28px;
  line-height: 29px;
  display: inline-block;
  border-radius: 15px;
  color: #FFF;
  margin: 3px;
}
.resource_marker.workday_ok div {
  background: #51c185;
}
.resource_marker.workday_over div {
  background: #ff8686;
}
.owner-label {
  width: 20px;
  height: 20px;
  line-height: 20px;
  font-size: 12px;
  display: inline-block;
  border: 1px solid #cccccc;
  border-radius: 25px;
  background: #e6e6e6;
  color: #6f6f6f;
  margin: 0 3px;
  font-weight: bold;
}
.weekend {
  background: LightGoldenrodYellow;
}
.constraint-marker {
  position: absolute;
  -moz-box-sizing: border-box;
  box-sizing: border-box;
  width: 56px;
  height: 56px;
  margin-top: -11px;
  opacity: 0.4;
  z-index: 1;
  background: url("https://docs.dhtmlx.com/gantt/samples/common/constraint-arrow.svg") center no-repeat;
  background-size: cover;
}
.constraint-marker.earliest-start {
  margin-left: -53px;
}
.constraint-marker.latest-end {
  margin-left: -3px;
  transform: rotate(180deg);
}
.taskCheckBox {
  cursor: pointer;
  z-index: 99999 !important;
}
</style>