Gathering detailed insights and metrics for gantt-elastic-group
Gathering detailed insights and metrics for gantt-elastic-group
Gathering detailed insights and metrics for gantt-elastic-group
Gathering detailed insights and metrics for gantt-elastic-group
Gantt Chart [ javascript gantt chart, gantt component, vue gantt, vue gantt chart, responsive gantt, project manager , vue projects ]
npm install gantt-elastic-group
Typescript
Module System
Node Version
NPM Version
Vue (68.33%)
HTML (17.03%)
JavaScript (14.64%)
Total Downloads
0
Last Day
0
Last Week
0
Last Month
0
Last Year
0
MIT License
1,348 Stars
767 Commits
316 Forks
43 Watchers
14 Branches
5 Contributors
Updated on Jul 11, 2025
Latest Version
1.0.8
Package Id
gantt-elastic-group@1.0.8
Unpacked Size
10.48 MB
Size
8.91 MB
File Count
61
NPM Version
8.15.0
Node Version
16.17.1
Published on
Feb 07, 2023
Cumulative downloads
Total Downloads
Last Day
0%
NaN
Compared to previous day
Last Week
0%
NaN
Compared to previous week
Last Month
0%
NaN
Compared to previous month
Last Year
0%
NaN
Compared to previous year
3
is a vue component but it could be used in other frameworks or even with jQuery (vue is kind of elastic and lightweight framework).
npm install --save gantt-elastic
or download zip from github / clone repo
and if you want default header
npm install --save gantt-elastic-header
1<!DOCTYPE html> 2<html charset="utf-8"> 3 <head> 4 <meta charset="utf-8" /> 5 <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0" /> 6 <title>GanttElastic editor demo</title> 7 <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script> 8 <script src="https://cdn.jsdelivr.net/npm/dayjs"></script> 9 10 <script src="https://unpkg.com/gantt-elastic/dist/GanttElastic.umd.js"></script> 11 <script src="https://unpkg.com/gantt-elastic-header/dist/Header.umd.js"></script> 12 </head> 13 14 <body> 15 <div style="width:100%;height:100%"> 16 <div id="app" v-if="!destroy"> 17 <gantt-elastic :tasks="tasks" :options="options" :dynamic-style="dynamicStyle"> 18 <gantt-header slot="header"></gantt-header> 19 <gantt-footer slot="footer"></gantt-footer> 20 </gantt-elastic> 21 </div> 22 </div> 23 24 <script> 25 // just helper to get current dates 26 function getDate(hours) { 27 const currentDate = new Date(); 28 const currentYear = currentDate.getFullYear(); 29 const currentMonth = currentDate.getMonth(); 30 const currentDay = currentDate.getDate(); 31 const timeStamp = new Date(currentYear, currentMonth, currentDay, 0, 0, 0).getTime(); 32 return new Date(timeStamp + hours * 60 * 60 * 1000).getTime(); 33 } 34 35 let tasks = [ 36 { 37 id: 1, 38 label: 'Make some noise', 39 user: 40 '<a href="https://www.google.com/search?q=John+Doe" target="_blank" style="color:#0077c0;">John Doe</a>', 41 start: getDate(-24 * 5), 42 duration: 15 * 24 * 60 * 60 * 1000, 43 progress: 85, 44 type: 'project', 45 //collapsed: true, 46 }, 47 { 48 id: 2, 49 label: 'With great power comes great responsibility', 50 user: 51 '<a href="https://www.google.com/search?q=Peter+Parker" target="_blank" style="color:#0077c0;">Peter Parker</a>', 52 parentId: 1, 53 start: getDate(-24 * 4), 54 duration: 4 * 24 * 60 * 60 * 1000, 55 progress: 50, 56 type: 'milestone', 57 collapsed: true, 58 style: { 59 base: { 60 fill: '#1EBC61', 61 stroke: '#0EAC51', 62 }, 63 /*'tree-row-bar': { 64 fill: '#1EBC61', 65 stroke: '#0EAC51' 66 }, 67 'tree-row-bar-polygon': { 68 stroke: '#0EAC51' 69 }*/ 70 }, 71 }, 72 { 73 id: 3, 74 label: 'Courage is being scared to death, but saddling up anyway.', 75 user: 76 '<a href="https://www.google.com/search?q=John+Wayne" target="_blank" style="color:#0077c0;">John Wayne</a>', 77 parentId: 2, 78 start: getDate(-24 * 3), 79 duration: 2 * 24 * 60 * 60 * 1000, 80 progress: 100, 81 type: 'task', 82 }, 83 { 84 id: 4, 85 label: 'Put that toy AWAY!', 86 user: 87 '<a href="https://www.google.com/search?q=Clark+Kent" target="_blank" style="color:#0077c0;">Clark Kent</a>', 88 start: getDate(-24 * 2), 89 duration: 2 * 24 * 60 * 60 * 1000, 90 progress: 50, 91 type: 'task', 92 dependentOn: [3], 93 }, 94 ]; 95 96 let options = { 97 maxRows: 100, 98 maxHeight: 300, 99 title: { 100 label: 'Your project title as html (link or whatever...)', 101 html: false, 102 }, 103 row: { 104 height: 24, 105 }, 106 calendar: { 107 hour: { 108 display: false, 109 }, 110 }, 111 chart: { 112 progress: { 113 bar: false, 114 }, 115 expander: { 116 display: true, 117 }, 118 }, 119 taskList: { 120 expander: { 121 straight: false, 122 }, 123 columns: [ 124 { 125 id: 1, 126 label: 'ID', 127 value: 'id', 128 width: 40, 129 }, 130 { 131 id: 2, 132 label: 'Description', 133 value: 'label', 134 width: 200, 135 expander: true, 136 html: true, 137 events: { 138 click({ data, column }) { 139 alert('description clicked!\n' + data.label); 140 }, 141 }, 142 }, 143 { 144 id: 3, 145 label: 'Assigned to', 146 value: 'user', 147 width: 130, 148 html: true, 149 }, 150 { 151 id: 3, 152 label: 'Start', 153 value: (task) => dayjs(task.start).format('YYYY-MM-DD'), 154 width: 78, 155 }, 156 { 157 id: 4, 158 label: 'Type', 159 value: 'type', 160 width: 68, 161 }, 162 { 163 id: 5, 164 label: '%', 165 value: 'progress', 166 width: 35, 167 style: { 168 'task-list-header-label': { 169 'text-align': 'center', 170 width: '100%', 171 }, 172 'task-list-item-value-container': { 173 'text-align': 'center', 174 width: '100%', 175 }, 176 }, 177 }, 178 ], 179 }, 180 /*locale:{ 181 name: 'pl', // name String 182 weekdays: 'Poniedziałek_Wtorek_Środa_Czwartek_Piątek_Sobota_Niedziela'.split('_'), // weekdays Array 183 weekdaysShort: 'Pon_Wto_Śro_Czw_Pią_Sob_Nie'.split('_'), // OPTIONAL, short weekdays Array, use first three letters if not provided 184 weekdaysMin: 'Pn_Wt_Śr_Cz_Pt_So_Ni'.split('_'), // OPTIONAL, min weekdays Array, use first two letters if not provided 185 months: 'Styczeń_Luty_Marzec_Kwiecień_Maj_Czerwiec_Lipiec_Sierpień_Wrzesień_Październik_Listopad_Grudzień'.split('_'), // months Array 186 monthsShort: 'Sty_Lut_Mar_Kwi_Maj_Cze_Lip_Sie_Wrz_Paź_Lis_Gru'.split('_'), // OPTIONAL, short months Array, use first three letters if not provided 187 ordinal: n => `${n}`, // ordinal Function (number) => return number + output 188 relativeTime: { // relative time format strings, keep %s %d as the same 189 future: 'za %s', // e.g. in 2 hours, %s been replaced with 2hours 190 past: '%s temu', 191 s: 'kilka sekund', 192 m: 'minutę', 193 mm: '%d minut', 194 h: 'godzinę', 195 hh: '%d godzin', // e.g. 2 hours, %d been replaced with 2 196 d: 'dzień', 197 dd: '%d dni', 198 M: 'miesiąc', 199 MM: '%d miesięcy', 200 y: 'rok', 201 yy: '%d lat' 202 } 203 }*/ 204 }; 205 206 // create instance 207 const app = new Vue({ 208 components: { 209 'gantt-header': Header, 210 'gantt-elastic': GanttElastic, 211 'gantt-footer': { 212 template: `<span>this is a footer</span>`, 213 }, 214 }, 215 data: { 216 tasks: tasks.map((task) => Object.assign({}, task)), 217 options, 218 dynamicStyle: { 219 'task-list-header-label': { 220 'font-weight': 'bold', 221 }, 222 }, 223 destroy: false, 224 }, 225 }); 226 227 // gantt state which will be updated in realtime 228 let ganttState, ganttInstance; 229 230 // listen to 'gantt-elastic.ready' or 'gantt-elastic.mounted' event 231 // to get the gantt state for real time modification 232 app.$on('gantt-elastic-ready', (ganttElasticInstance) => { 233 ganttInstance = ganttElasticInstance; 234 235 ganttInstance.$on('tasks-changed', (tasks) => { 236 app.tasks = tasks; 237 }); 238 ganttInstance.$on('options-changed', (options) => { 239 app.options = options; 240 }); 241 ganttInstance.$on('dynamic-style-changed', (style) => { 242 app.dynamicStyle = style; 243 }); 244 245 ganttInstance.$on('chart-task-mouseenter', ({ data, event }) => { 246 console.log('task mouse enter', { data, event }); 247 }); 248 ganttInstance.$on('updated', () => { 249 //console.log('gantt view was updated'); 250 }); 251 ganttInstance.$on('destroyed', () => { 252 //console.log('gantt was destroyed'); 253 }); 254 ganttInstance.$on('times-timeZoom-updated', () => { 255 console.log('time zoom changed'); 256 }); 257 ganttInstance.$on('taskList-task-click', ({ event, data, column }) => { 258 console.log('task list clicked! (task)', { data, column }); 259 }); 260 }); 261 262 // mount gantt to DOM 263 app.$mount('#app'); 264 </script> 265 </body> 266</html>
Take a look at the vue.html
inside examples folder file to see how you could add gantt-elastic inside <script>
tag along with the Vue framework
Demo project: https://github.com/neuronetio/vue-gantt-elastic
You can also import gantt-elastic as compiled js component in commonjs or umd format (examples folder) or just grab GanttElastic.vue from src directory and add to your existing vue project.
1import Vue from 'vue'; 2import GanttElastic from "gantt-elastic"; 3import Header from "gantt-elastic-header"; // if you want standard header (npm i -s gantt-elastic-header) 4new Vue({ 5 el:'#gantt', 6 template:`<gantt-elastic :tasks="tasks" :options="options"> 7 <gantt-elastic-header slot="header"></gantt-elastic-header> 8 <gantt-elastic-footer slot="footer"></gantt-elastic-footer> 9 </gantt-elastic>`, 10 components: { 11 ganttElasticHeader: {template:`<span>your header</span>`}, // or Header 12 ganttElastic: GanttElastic 13 ganttElasticFooter: {template:`<span>your footer</span>`}, 14 }, 15 data() { 16 return { 17 tasks: tasks, 18 options: options 19 }; 20 } 21});
or
1import Vue from 'vue'; 2import App from './App.vue'; // your app that uses gantt-elastic from 'gantt-elastic/src/GanttElastic.vue' 3 4new Vue({ 5 el: '#app', 6 render: (h) => h(App), 7});
Take a look at this demo project: https://github.com/neuronetio/gantt-elastic-webpack for other bundlers use umd or commonjs from dist folder.
1import GanttElastic from 'gantt-elastic/dist/GantElastic.umd.js'; 2import GanttElastic from 'gantt-elastic/dist/GantElastic.common.js'; // same as import GanttElastic from 'gantt-elastic'; 3import GanttElastic from 'gantt-elastic/src/GantElastic.vue'; // if you want vue component directly without compilation - look above 4// and the same with require 5const GanttElastic = require('gantt-elastic/dist/GantElastic.common.js');
If you are using uglifyjs in your project be sure to have es6 compatible version like uglify-es
MIT
No vulnerabilities found.
Reason
no binaries found in the repo
Reason
license file detected
Details
Reason
Found 2/26 approved changesets -- score normalized to 0
Reason
project is archived
Details
Reason
no effort to earn an OpenSSF best practices badge detected
Reason
security policy file not detected
Details
Reason
branch protection not enabled on development/release branches
Details
Reason
SAST tool is not run on all commits -- score normalized to 0
Details
Reason
project is not fuzzed
Details
Reason
118 existing vulnerabilities detected
Details
Score
Last Scanned on 2025-07-07
The Open Source Security Foundation is a cross-industry collaboration to improve the security of open source software (OSS). The Scorecard provides security health metrics for open source projects.
Learn More