tg-ganttchart 0.0.12 → 0.0.14

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -3375,7 +3375,7 @@ if (typeof window !== 'undefined') {
3375
3375
  // Indicate to webpack that this file can be concatenated
3376
3376
  /* harmony default export */ var setPublicPath = (null);
3377
3377
 
3378
- ;// ./node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!./node_modules/@vue/vue-loader-v15/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./src/GanttElastic.standalone.vue?vue&type=template&id=c24bafbc
3378
+ ;// ./node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!./node_modules/@vue/vue-loader-v15/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./src/GanttElastic.standalone.vue?vue&type=template&id=ba4781dc
3379
3379
  var render = function render() {
3380
3380
  var _vm = this,
3381
3381
  _c = _vm._self._c;
@@ -3384,6 +3384,32 @@ var render = function render() {
3384
3384
  "tasks": _vm.tasks,
3385
3385
  "options": _vm.options,
3386
3386
  "dynamicStyle": _vm.dynamicStyle
3387
+ },
3388
+ on: {
3389
+ "task-updated": function ($event) {
3390
+ return _vm.$emit('task-updated', $event);
3391
+ },
3392
+ "gantt-task-updated": function ($event) {
3393
+ return _vm.$emit('gantt-task-updated', $event);
3394
+ },
3395
+ "view-mode-changed": function ($event) {
3396
+ return _vm.$emit('view-mode-changed', $event);
3397
+ },
3398
+ "gantt-view-mode-changed": function ($event) {
3399
+ return _vm.$emit('gantt-view-mode-changed', $event);
3400
+ },
3401
+ "tasks-changed": function ($event) {
3402
+ return _vm.$emit('tasks-changed', $event);
3403
+ },
3404
+ "options-changed": function ($event) {
3405
+ return _vm.$emit('options-changed', $event);
3406
+ },
3407
+ "dynamic-style-changed": function ($event) {
3408
+ return _vm.$emit('dynamic-style-changed', $event);
3409
+ },
3410
+ "mounted": function ($event) {
3411
+ return _vm.$emit('mounted', $event);
3412
+ }
3387
3413
  }
3388
3414
  }, [_vm.components.header ? _c(_vm.components.header, {
3389
3415
  tag: "component",
@@ -3401,8 +3427,8 @@ var render = function render() {
3401
3427
  };
3402
3428
  var staticRenderFns = [];
3403
3429
 
3404
- ;// ./node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!./node_modules/@vue/vue-loader-v15/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./src/GanttElastic.vue?vue&type=template&id=100984c8
3405
- var GanttElasticvue_type_template_id_100984c8_render = function render() {
3430
+ ;// ./node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!./node_modules/@vue/vue-loader-v15/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./src/GanttElastic.vue?vue&type=template&id=95091692
3431
+ var GanttElasticvue_type_template_id_95091692_render = function render() {
3406
3432
  var _vm = this,
3407
3433
  _c = _vm._self._c,
3408
3434
  _setup = _vm._self._setupProxy;
@@ -3431,7 +3457,7 @@ var GanttElasticvue_type_template_id_100984c8_render = function render() {
3431
3457
  }
3432
3458
  }), _vm._t("footer")], 2);
3433
3459
  };
3434
- var GanttElasticvue_type_template_id_100984c8_staticRenderFns = [];
3460
+ var GanttElasticvue_type_template_id_95091692_staticRenderFns = [];
3435
3461
 
3436
3462
  // EXTERNAL MODULE: ./node_modules/core-js/modules/es.array.push.js
3437
3463
  var es_array_push = __webpack_require__(4114);
@@ -3674,8 +3700,8 @@ var component = normalizeComponent(
3674
3700
  )
3675
3701
 
3676
3702
  /* harmony default export */ var GanttViewFilter = (component.exports);
3677
- ;// ./node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!./node_modules/@vue/vue-loader-v15/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./src/components/MainView.vue?vue&type=template&id=33392d22
3678
- var MainViewvue_type_template_id_33392d22_render = function render() {
3703
+ ;// ./node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!./node_modules/@vue/vue-loader-v15/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./src/components/MainView.vue?vue&type=template&id=79e1eba9
3704
+ var MainViewvue_type_template_id_79e1eba9_render = function render() {
3679
3705
  var _vm = this,
3680
3706
  _c = _vm._self._c;
3681
3707
  return _c('div', {
@@ -3784,10 +3810,10 @@ var MainViewvue_type_template_id_33392d22_render = function render() {
3784
3810
  }
3785
3811
  })])]);
3786
3812
  };
3787
- var MainViewvue_type_template_id_33392d22_staticRenderFns = [];
3813
+ var MainViewvue_type_template_id_79e1eba9_staticRenderFns = [];
3788
3814
 
3789
- ;// ./node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!./node_modules/@vue/vue-loader-v15/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./src/components/TaskList/TaskList.vue?vue&type=template&id=74ce1216
3790
- var TaskListvue_type_template_id_74ce1216_render = function render() {
3815
+ ;// ./node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!./node_modules/@vue/vue-loader-v15/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./src/components/TaskList/TaskList.vue?vue&type=template&id=b705a4ea
3816
+ var TaskListvue_type_template_id_b705a4ea_render = function render() {
3791
3817
  var _vm = this,
3792
3818
  _c = _vm._self._c;
3793
3819
  return _c('div', {
@@ -3816,17 +3842,36 @@ var TaskListvue_type_template_id_74ce1216_render = function render() {
3816
3842
  style: {
3817
3843
  ..._vm.root.style['task-list-items'],
3818
3844
  height: _vm.root.state.options.rowsHeight + 'px'
3845
+ },
3846
+ on: {
3847
+ "scroll": _vm.onScroll
3819
3848
  }
3820
- }, _vm._l(_vm.root.visibleTasks, function (task) {
3849
+ }, [_c('div', {
3850
+ style: {
3851
+ height: _vm.totalHeight + 'px',
3852
+ position: 'relative'
3853
+ }
3854
+ }, [_c('div', {
3855
+ style: {
3856
+ transform: `translateY(${_vm.offsetY}px)`,
3857
+ position: 'absolute',
3858
+ top: 0,
3859
+ left: 0,
3860
+ right: 0
3861
+ }
3862
+ }, _vm._l(_vm.visibleTasks, function (task) {
3821
3863
  return _c('task-list-item', {
3822
3864
  key: task.id,
3865
+ style: {
3866
+ height: _vm.taskHeight + 'px'
3867
+ },
3823
3868
  attrs: {
3824
3869
  "task": task
3825
3870
  }
3826
3871
  });
3827
- }), 1)], 1)]);
3872
+ }), 1)])])], 1)]);
3828
3873
  };
3829
- var TaskListvue_type_template_id_74ce1216_staticRenderFns = [];
3874
+ var TaskListvue_type_template_id_b705a4ea_staticRenderFns = [];
3830
3875
 
3831
3876
  ;// ./node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!./node_modules/@vue/vue-loader-v15/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./src/components/TaskList/TaskListHeader.vue?vue&type=template&id=2ecc0032
3832
3877
  var TaskListHeadervue_type_template_id_2ecc0032_render = function render() {
@@ -3879,8 +3924,8 @@ var TaskListHeadervue_type_template_id_2ecc0032_render = function render() {
3879
3924
  };
3880
3925
  var TaskListHeadervue_type_template_id_2ecc0032_staticRenderFns = [];
3881
3926
 
3882
- ;// ./node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!./node_modules/@vue/vue-loader-v15/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./src/components/Expander.vue?vue&type=template&id=ac398cf4
3883
- var Expandervue_type_template_id_ac398cf4_render = function render() {
3927
+ ;// ./node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!./node_modules/@vue/vue-loader-v15/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./src/components/Expander.vue?vue&type=template&id=4831d194
3928
+ var Expandervue_type_template_id_4831d194_render = function render() {
3884
3929
  var _vm = this,
3885
3930
  _c = _vm._self._c;
3886
3931
  return _c('div', {
@@ -3917,7 +3962,7 @@ var Expandervue_type_template_id_ac398cf4_render = function render() {
3917
3962
  }
3918
3963
  })]) : _vm._e()]);
3919
3964
  };
3920
- var Expandervue_type_template_id_ac398cf4_staticRenderFns = [];
3965
+ var Expandervue_type_template_id_4831d194_staticRenderFns = [];
3921
3966
 
3922
3967
  ;// ./node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!./node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./src/components/Expander.vue?vue&type=script&lang=js
3923
3968
 
@@ -3974,7 +4019,9 @@ var Expandervue_type_template_id_ac398cf4_staticRenderFns = [];
3974
4019
  }
3975
4020
  let collapsed = 0;
3976
4021
  for (let i = 0, len = this.tasks.length; i < len; i++) {
3977
- if (this.tasks[i].collapsed) {
4022
+ // Use original task if available (for virtual scrolling), otherwise use the task itself
4023
+ const originalTask = this.tasks[i]._originalTask || this.tasks[i];
4024
+ if (originalTask.collapsed) {
3978
4025
  collapsed++;
3979
4026
  }
3980
4027
  }
@@ -3999,7 +4046,9 @@ var Expandervue_type_template_id_ac398cf4_staticRenderFns = [];
3999
4046
  }
4000
4047
  const collapsed = !this.collapsed;
4001
4048
  this.tasks.forEach(task => {
4002
- task.collapsed = collapsed;
4049
+ // Use original task if available (for virtual scrolling), otherwise use the task itself
4050
+ const originalTask = task._originalTask || task;
4051
+ originalTask.collapsed = collapsed;
4003
4052
  });
4004
4053
 
4005
4054
  // Force reactivity update
@@ -4020,8 +4069,8 @@ var Expandervue_type_template_id_ac398cf4_staticRenderFns = [];
4020
4069
  ;
4021
4070
  var Expander_component = normalizeComponent(
4022
4071
  components_Expandervue_type_script_lang_js,
4023
- Expandervue_type_template_id_ac398cf4_render,
4024
- Expandervue_type_template_id_ac398cf4_staticRenderFns,
4072
+ Expandervue_type_template_id_4831d194_render,
4073
+ Expandervue_type_template_id_4831d194_staticRenderFns,
4025
4074
  false,
4026
4075
  null,
4027
4076
  null,
@@ -4550,6 +4599,7 @@ var TaskListItem_component = normalizeComponent(
4550
4599
  ;// ./node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!./node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./src/components/TaskList/TaskList.vue?vue&type=script&lang=js
4551
4600
 
4552
4601
 
4602
+
4553
4603
  /* harmony default export */ var TaskListvue_type_script_lang_js = ({
4554
4604
  name: 'TaskList',
4555
4605
  components: {
@@ -4558,7 +4608,104 @@ var TaskListItem_component = normalizeComponent(
4558
4608
  },
4559
4609
  inject: ['root'],
4560
4610
  data() {
4561
- return {};
4611
+ return {
4612
+ scrollTop: 0,
4613
+ containerHeight: 0,
4614
+ bufferSize: 5,
4615
+ // Number of extra items to render above and below viewport
4616
+ lastScrollTime: 0,
4617
+ scrollThrottleDelay: 16 // ~60fps
4618
+ };
4619
+ },
4620
+ computed: {
4621
+ /**
4622
+ * Get all tasks that should be visible
4623
+ */
4624
+ allVisibleTasks() {
4625
+ return this.root.visibleTasks || [];
4626
+ },
4627
+ /**
4628
+ * Get task height
4629
+ */
4630
+ taskHeight() {
4631
+ return this.root.state.options.row.height + this.root.state.options.chart.grid.horizontal.gap * 2;
4632
+ },
4633
+ /**
4634
+ * Get total height of all tasks
4635
+ */
4636
+ totalHeight() {
4637
+ return this.allVisibleTasks.length * this.taskHeight;
4638
+ },
4639
+ /**
4640
+ * Get visible range for virtual scrolling
4641
+ */
4642
+ visibleRange() {
4643
+ const start = Math.max(0, Math.floor(this.scrollTop / this.taskHeight) - this.bufferSize);
4644
+ const end = Math.min(this.allVisibleTasks.length, Math.ceil((this.scrollTop + this.containerHeight) / this.taskHeight) + this.bufferSize);
4645
+ return {
4646
+ start,
4647
+ end
4648
+ };
4649
+ },
4650
+ /**
4651
+ * Get visible tasks for virtual scrolling
4652
+ * This respects the expand/collapse state from the root component
4653
+ */
4654
+ visibleTasks() {
4655
+ // First get all tasks that should be visible based on expand/collapse state
4656
+ const allVisibleTasks = this.root.visibleTasks || [];
4657
+
4658
+ // If we have virtual scrolling enabled and enough tasks, apply viewport culling
4659
+ if (allVisibleTasks.length > 100 && this.containerHeight > 0) {
4660
+ const {
4661
+ start,
4662
+ end
4663
+ } = this.visibleRange;
4664
+ return allVisibleTasks.slice(start, end).map((task, index) => {
4665
+ // Create a wrapper object that preserves the original task reference
4666
+ return {
4667
+ ...task,
4668
+ virtualIndex: start + index,
4669
+ _originalTask: task // Keep reference to original task for expander
4670
+ };
4671
+ });
4672
+ }
4673
+
4674
+ // For smaller datasets or when virtual scrolling is not needed, return all visible tasks
4675
+ return allVisibleTasks.map((task, index) => ({
4676
+ ...task,
4677
+ virtualIndex: index,
4678
+ _originalTask: task // Keep reference to original task for expander
4679
+ }));
4680
+ },
4681
+ /**
4682
+ * Get offset for virtual scrolling
4683
+ */
4684
+ offsetY() {
4685
+ return this.visibleRange.start * this.taskHeight;
4686
+ }
4687
+ },
4688
+ methods: {
4689
+ /**
4690
+ * Handle scroll event with throttling
4691
+ */
4692
+ onScroll(event) {
4693
+ const now = Date.now();
4694
+ if (now - this.lastScrollTime < this.scrollThrottleDelay) {
4695
+ return;
4696
+ }
4697
+ this.lastScrollTime = now;
4698
+ this.scrollTop = event.target.scrollTop;
4699
+ this.containerHeight = event.target.clientHeight;
4700
+ },
4701
+ /**
4702
+ * Update container height when component updates
4703
+ */
4704
+ updateContainerHeight() {
4705
+ if (this.$refs.taskListItems) {
4706
+ this.containerHeight = this.$refs.taskListItems.clientHeight;
4707
+ }
4708
+ }
4562
4709
  },
4563
4710
  /**
4564
4711
  * Mounted
@@ -4567,6 +4714,30 @@ var TaskListItem_component = normalizeComponent(
4567
4714
  this.root.state.refs.taskListWrapper = this.$refs.taskListWrapper;
4568
4715
  this.root.state.refs.taskList = this.$refs.taskList;
4569
4716
  this.root.state.refs.taskListItems = this.$refs.taskListItems;
4717
+
4718
+ // Initialize container height
4719
+ this.$nextTick(() => {
4720
+ this.updateContainerHeight();
4721
+ });
4722
+ },
4723
+ /**
4724
+ * Watch for changes in visible tasks to update virtual scrolling
4725
+ */
4726
+ watch: {
4727
+ 'root.visibleTasks': {
4728
+ handler() {
4729
+ this.$nextTick(() => {
4730
+ this.updateContainerHeight();
4731
+ });
4732
+ },
4733
+ deep: true
4734
+ }
4735
+ },
4736
+ /**
4737
+ * Updated lifecycle hook
4738
+ */
4739
+ updated() {
4740
+ this.updateContainerHeight();
4570
4741
  }
4571
4742
  });
4572
4743
  ;// ./src/components/TaskList/TaskList.vue?vue&type=script&lang=js
@@ -4581,8 +4752,8 @@ var TaskListItem_component = normalizeComponent(
4581
4752
  ;
4582
4753
  var TaskList_component = normalizeComponent(
4583
4754
  TaskList_TaskListvue_type_script_lang_js,
4584
- TaskListvue_type_template_id_74ce1216_render,
4585
- TaskListvue_type_template_id_74ce1216_staticRenderFns,
4755
+ TaskListvue_type_template_id_b705a4ea_render,
4756
+ TaskListvue_type_template_id_b705a4ea_staticRenderFns,
4586
4757
  false,
4587
4758
  null,
4588
4759
  null,
@@ -4591,8 +4762,8 @@ var TaskList_component = normalizeComponent(
4591
4762
  )
4592
4763
 
4593
4764
  /* harmony default export */ var TaskList = (TaskList_component.exports);
4594
- ;// ./node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!./node_modules/@vue/vue-loader-v15/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./src/components/Chart/Chart.vue?vue&type=template&id=2bc7fe5e
4595
- var Chartvue_type_template_id_2bc7fe5e_render = function render() {
4765
+ ;// ./node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!./node_modules/@vue/vue-loader-v15/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./src/components/Chart/Chart.vue?vue&type=template&id=0856b85c
4766
+ var Chartvue_type_template_id_0856b85c_render = function render() {
4596
4767
  var _vm = this,
4597
4768
  _c = _vm._self._c;
4598
4769
  return _c('div', {
@@ -4667,7 +4838,7 @@ var Chartvue_type_template_id_2bc7fe5e_render = function render() {
4667
4838
  })], 1);
4668
4839
  })], 2)])])])]);
4669
4840
  };
4670
- var Chartvue_type_template_id_2bc7fe5e_staticRenderFns = [];
4841
+ var Chartvue_type_template_id_0856b85c_staticRenderFns = [];
4671
4842
 
4672
4843
  ;// ./node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!./node_modules/@vue/vue-loader-v15/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./src/components/Chart/Grid.vue?vue&type=template&id=244ea0ee
4673
4844
  var Gridvue_type_template_id_244ea0ee_render = function render() {
@@ -5876,8 +6047,8 @@ var DependencyLines_component = normalizeComponent(
5876
6047
  )
5877
6048
 
5878
6049
  /* harmony default export */ var DependencyLines = (DependencyLines_component.exports);
5879
- ;// ./node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!./node_modules/@vue/vue-loader-v15/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./src/components/Chart/Row/Task.vue?vue&type=template&id=2c01a3c8
5880
- var Taskvue_type_template_id_2c01a3c8_render = function render() {
6050
+ ;// ./node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!./node_modules/@vue/vue-loader-v15/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./src/components/Chart/Row/Task.vue?vue&type=template&id=23849415
6051
+ var Taskvue_type_template_id_23849415_render = function render() {
5881
6052
  var _vm = this,
5882
6053
  _c = _vm._self._c;
5883
6054
  return _c('g', {
@@ -5989,16 +6160,17 @@ var Taskvue_type_template_id_2c01a3c8_render = function render() {
5989
6160
  "clip-path": 'url(#' + _vm.clipPathId + ')'
5990
6161
  }
5991
6162
  }), _c('rect', {
5992
- staticClass: "gantt-elastic__chart-row-extend-handle",
6163
+ staticClass: "gantt-elastic__chart-row-extend-handle gantt-elastic__drag-handle",
5993
6164
  staticStyle: {
5994
6165
  "pointer-events": "all",
5995
- "z-index": "20"
6166
+ "z-index": "50",
6167
+ "cursor": "ew-resize !important"
5996
6168
  },
5997
6169
  style: _vm.root.style['chart-row-extend-handle'],
5998
6170
  attrs: {
5999
- "x": "8",
6171
+ "x": "0",
6000
6172
  "y": "0",
6001
- "width": 8,
6173
+ "width": 12,
6002
6174
  "height": _vm.task.height
6003
6175
  },
6004
6176
  on: {
@@ -6012,16 +6184,17 @@ var Taskvue_type_template_id_2c01a3c8_render = function render() {
6012
6184
  }
6013
6185
  }
6014
6186
  }), _c('rect', {
6015
- staticClass: "gantt-elastic__chart-row-extend-handle",
6187
+ staticClass: "gantt-elastic__chart-row-extend-handle gantt-elastic__drag-handle",
6016
6188
  staticStyle: {
6017
6189
  "pointer-events": "all",
6018
- "z-index": "20"
6190
+ "z-index": "50",
6191
+ "cursor": "ew-resize !important"
6019
6192
  },
6020
6193
  style: _vm.root.style['chart-row-extend-handle'],
6021
6194
  attrs: {
6022
- "x": _vm.task.width - 8,
6195
+ "x": _vm.task.width - 12,
6023
6196
  "y": "0",
6024
- "width": 8,
6197
+ "width": 12,
6025
6198
  "height": _vm.task.height
6026
6199
  },
6027
6200
  on: {
@@ -6040,7 +6213,7 @@ var Taskvue_type_template_id_2c01a3c8_render = function render() {
6040
6213
  }
6041
6214
  }) : _vm._e()], 1);
6042
6215
  };
6043
- var Taskvue_type_template_id_2c01a3c8_staticRenderFns = [];
6216
+ var Taskvue_type_template_id_23849415_staticRenderFns = [];
6044
6217
 
6045
6218
  ;// ./node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!./node_modules/@vue/vue-loader-v15/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./src/components/Chart/Text.vue?vue&type=template&id=634f40aa
6046
6219
  var Textvue_type_template_id_634f40aa_render = function render() {
@@ -6391,13 +6564,13 @@ var ProgressBar_component = normalizeComponent(
6391
6564
  event.stopPropagation();
6392
6565
 
6393
6566
  // Debug logging
6394
- console.log('Starting drag:', {
6395
- type: type,
6396
- taskId: this.task.id,
6397
- taskType: this.task.type,
6398
- originalStart: this.task.startTime,
6399
- originalEnd: this.task.endTime
6400
- });
6567
+ // console.log('Starting drag:', {
6568
+ // type: type,
6569
+ // taskId: this.task.id,
6570
+ // taskType: this.task.type,
6571
+ // originalStart: this.task.startTime,
6572
+ // originalEnd: this.task.endTime
6573
+ // });
6401
6574
 
6402
6575
  // Safety checks
6403
6576
  if (!this.root || !this.root.state || !this.root.state.options || !this.root.state.options.times) {
@@ -6521,15 +6694,15 @@ var ProgressBar_component = normalizeComponent(
6521
6694
 
6522
6695
  // Debug logging for epic tasks
6523
6696
  if (this.task.type === 'epic') {
6524
- console.log('Epic task drag:', {
6525
- dragType: this.dragType,
6526
- originalStart: this.originalStartTime,
6527
- originalEnd: this.originalEndTime,
6528
- newStart: newStartTime,
6529
- newEnd: newEndTime,
6530
- startChanged: newStartTime !== this.originalStartTime,
6531
- endChanged: newEndTime !== this.originalEndTime
6532
- });
6697
+ // console.log('Epic task drag:', {
6698
+ // dragType: this.dragType,
6699
+ // originalStart: this.originalStartTime,
6700
+ // originalEnd: this.originalEndTime,
6701
+ // newStart: newStartTime,
6702
+ // newEnd: newEndTime,
6703
+ // startChanged: newStartTime !== this.originalStartTime,
6704
+ // endChanged: newEndTime !== this.originalEndTime
6705
+ // });
6533
6706
  }
6534
6707
 
6535
6708
  // Update task data
@@ -6538,15 +6711,15 @@ var ProgressBar_component = normalizeComponent(
6538
6711
  this.task.duration = newEndTime - newStartTime;
6539
6712
 
6540
6713
  // Debug logging
6541
- console.log('Updating task time:', {
6542
- taskId: this.task.id,
6543
- newStartTime,
6544
- newEndTime,
6545
- duration: this.task.duration,
6546
- root: !!this.root,
6547
- timeToPixelOffsetX: !!(this.root && this.root.timeToPixelOffsetX),
6548
- timePerPixel: this.root && this.root.state && this.root.state.options && this.root.state.options.times && this.root.state.options.times.timePerPixel
6549
- });
6714
+ // console.log('Updating task time:', {
6715
+ // taskId: this.task.id,
6716
+ // newStartTime,
6717
+ // newEndTime,
6718
+ // duration: this.task.duration,
6719
+ // root: !!this.root,
6720
+ // timeToPixelOffsetX: !!(this.root && this.root.timeToPixelOffsetX),
6721
+ // timePerPixel: this.root && this.root.state && this.root.state.options && this.root.state.options.times && this.root.state.options.times.timePerPixel
6722
+ // });
6550
6723
 
6551
6724
  // Update task position and width using the correct method
6552
6725
  if (this.root && this.root.timeToPixelOffsetX) {
@@ -6590,15 +6763,15 @@ var ProgressBar_component = normalizeComponent(
6590
6763
  });
6591
6764
 
6592
6765
  // Log the update for debugging
6593
- console.log('Task drag completed:', {
6594
- id: this.task.id,
6595
- dragType: this.dragType,
6596
- startDate: startDate.toLocaleDateString(),
6597
- endDate: endDate.toLocaleDateString(),
6598
- duration: `${durationDays} days`,
6599
- startTime: this.task.startTime,
6600
- endTime: this.task.endTime
6601
- });
6766
+ // console.log('Task drag completed:', {
6767
+ // id: this.task.id,
6768
+ // dragType: this.dragType,
6769
+ // startDate: startDate.toLocaleDateString(),
6770
+ // endDate: endDate.toLocaleDateString(),
6771
+ // duration: `${durationDays} days`,
6772
+ // startTime: this.task.startTime,
6773
+ // endTime: this.task.endTime
6774
+ // });
6602
6775
  },
6603
6776
  /**
6604
6777
  * Show context menu for task actions
@@ -7048,8 +7221,8 @@ var ProgressBar_component = normalizeComponent(
7048
7221
  ;
7049
7222
  var Task_component = normalizeComponent(
7050
7223
  Row_Taskvue_type_script_lang_js,
7051
- Taskvue_type_template_id_2c01a3c8_render,
7052
- Taskvue_type_template_id_2c01a3c8_staticRenderFns,
7224
+ Taskvue_type_template_id_23849415_render,
7225
+ Taskvue_type_template_id_23849415_staticRenderFns,
7053
7226
  false,
7054
7227
  null,
7055
7228
  null,
@@ -7058,8 +7231,8 @@ var Task_component = normalizeComponent(
7058
7231
  )
7059
7232
 
7060
7233
  /* harmony default export */ var Task = (Task_component.exports);
7061
- ;// ./node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!./node_modules/@vue/vue-loader-v15/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./src/components/Chart/Row/Milestone.vue?vue&type=template&id=4cea99c4
7062
- var Milestonevue_type_template_id_4cea99c4_render = function render() {
7234
+ ;// ./node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!./node_modules/@vue/vue-loader-v15/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./src/components/Chart/Row/Milestone.vue?vue&type=template&id=c9bfeb4a
7235
+ var Milestonevue_type_template_id_c9bfeb4a_render = function render() {
7063
7236
  var _vm = this,
7064
7237
  _c = _vm._self._c;
7065
7238
  return _c('g', {
@@ -7171,16 +7344,17 @@ var Milestonevue_type_template_id_4cea99c4_render = function render() {
7171
7344
  "clip-path": 'url(#' + _vm.clipPathId + ')'
7172
7345
  }
7173
7346
  }), _c('rect', {
7174
- staticClass: "gantt-elastic__chart-row-extend-handle",
7347
+ staticClass: "gantt-elastic__chart-row-extend-handle gantt-elastic__drag-handle",
7175
7348
  staticStyle: {
7176
7349
  "pointer-events": "all",
7177
- "z-index": "20"
7350
+ "z-index": "50",
7351
+ "cursor": "ew-resize !important"
7178
7352
  },
7179
7353
  style: _vm.root.style['chart-row-extend-handle'],
7180
7354
  attrs: {
7181
- "x": "8",
7355
+ "x": "0",
7182
7356
  "y": "0",
7183
- "width": 8,
7357
+ "width": 12,
7184
7358
  "height": _vm.task.height
7185
7359
  },
7186
7360
  on: {
@@ -7194,16 +7368,17 @@ var Milestonevue_type_template_id_4cea99c4_render = function render() {
7194
7368
  }
7195
7369
  }
7196
7370
  }), _c('rect', {
7197
- staticClass: "gantt-elastic__chart-row-extend-handle",
7371
+ staticClass: "gantt-elastic__chart-row-extend-handle gantt-elastic__drag-handle",
7198
7372
  staticStyle: {
7199
7373
  "pointer-events": "all",
7200
- "z-index": "20"
7374
+ "z-index": "50",
7375
+ "cursor": "ew-resize !important"
7201
7376
  },
7202
7377
  style: _vm.root.style['chart-row-extend-handle'],
7203
7378
  attrs: {
7204
- "x": _vm.task.width - 8,
7379
+ "x": _vm.task.width - 12,
7205
7380
  "y": "0",
7206
- "width": 8,
7381
+ "width": 12,
7207
7382
  "height": _vm.task.height
7208
7383
  },
7209
7384
  on: {
@@ -7222,7 +7397,7 @@ var Milestonevue_type_template_id_4cea99c4_render = function render() {
7222
7397
  }
7223
7398
  }) : _vm._e()], 1);
7224
7399
  };
7225
- var Milestonevue_type_template_id_4cea99c4_staticRenderFns = [];
7400
+ var Milestonevue_type_template_id_c9bfeb4a_staticRenderFns = [];
7226
7401
 
7227
7402
  ;// ./node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!./node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./src/components/Chart/Row/Milestone.vue?vue&type=script&lang=js
7228
7403
 
@@ -7304,8 +7479,8 @@ var Milestonevue_type_template_id_4cea99c4_staticRenderFns = [];
7304
7479
  ;
7305
7480
  var Milestone_component = normalizeComponent(
7306
7481
  Row_Milestonevue_type_script_lang_js,
7307
- Milestonevue_type_template_id_4cea99c4_render,
7308
- Milestonevue_type_template_id_4cea99c4_staticRenderFns,
7482
+ Milestonevue_type_template_id_c9bfeb4a_render,
7483
+ Milestonevue_type_template_id_c9bfeb4a_staticRenderFns,
7309
7484
  false,
7310
7485
  null,
7311
7486
  null,
@@ -7314,8 +7489,8 @@ var Milestone_component = normalizeComponent(
7314
7489
  )
7315
7490
 
7316
7491
  /* harmony default export */ var Milestone = (Milestone_component.exports);
7317
- ;// ./node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!./node_modules/@vue/vue-loader-v15/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./src/components/Chart/Row/Project.vue?vue&type=template&id=5dcaf9ef
7318
- var Projectvue_type_template_id_5dcaf9ef_render = function render() {
7492
+ ;// ./node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!./node_modules/@vue/vue-loader-v15/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./src/components/Chart/Row/Project.vue?vue&type=template&id=72239142
7493
+ var Projectvue_type_template_id_72239142_render = function render() {
7319
7494
  var _vm = this,
7320
7495
  _c = _vm._self._c;
7321
7496
  return _c('g', {
@@ -7427,16 +7602,17 @@ var Projectvue_type_template_id_5dcaf9ef_render = function render() {
7427
7602
  "clip-path": 'url(#' + _vm.clipPathId + ')'
7428
7603
  }
7429
7604
  }), _c('rect', {
7430
- staticClass: "gantt-elastic__chart-row-extend-handle",
7605
+ staticClass: "gantt-elastic__chart-row-extend-handle gantt-elastic__drag-handle",
7431
7606
  staticStyle: {
7432
7607
  "pointer-events": "all",
7433
- "z-index": "20"
7608
+ "z-index": "50",
7609
+ "cursor": "ew-resize !important"
7434
7610
  },
7435
7611
  style: _vm.root.style['chart-row-extend-handle'],
7436
7612
  attrs: {
7437
- "x": "8",
7613
+ "x": "0",
7438
7614
  "y": "0",
7439
- "width": 8,
7615
+ "width": 12,
7440
7616
  "height": _vm.task.height
7441
7617
  },
7442
7618
  on: {
@@ -7450,16 +7626,17 @@ var Projectvue_type_template_id_5dcaf9ef_render = function render() {
7450
7626
  }
7451
7627
  }
7452
7628
  }), _c('rect', {
7453
- staticClass: "gantt-elastic__chart-row-extend-handle",
7629
+ staticClass: "gantt-elastic__chart-row-extend-handle gantt-elastic__drag-handle",
7454
7630
  staticStyle: {
7455
7631
  "pointer-events": "all",
7456
- "z-index": "20"
7632
+ "z-index": "50",
7633
+ "cursor": "ew-resize !important"
7457
7634
  },
7458
7635
  style: _vm.root.style['chart-row-extend-handle'],
7459
7636
  attrs: {
7460
- "x": _vm.task.width - 8,
7637
+ "x": _vm.task.width - 12,
7461
7638
  "y": "0",
7462
- "width": 8,
7639
+ "width": 12,
7463
7640
  "height": _vm.task.height
7464
7641
  },
7465
7642
  on: {
@@ -7478,7 +7655,7 @@ var Projectvue_type_template_id_5dcaf9ef_render = function render() {
7478
7655
  }
7479
7656
  }) : _vm._e()], 1);
7480
7657
  };
7481
- var Projectvue_type_template_id_5dcaf9ef_staticRenderFns = [];
7658
+ var Projectvue_type_template_id_72239142_staticRenderFns = [];
7482
7659
 
7483
7660
  ;// ./node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!./node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./src/components/Chart/Row/Project.vue?vue&type=script&lang=js
7484
7661
 
@@ -7578,8 +7755,8 @@ var Projectvue_type_template_id_5dcaf9ef_staticRenderFns = [];
7578
7755
  ;
7579
7756
  var Project_component = normalizeComponent(
7580
7757
  Row_Projectvue_type_script_lang_js,
7581
- Projectvue_type_template_id_5dcaf9ef_render,
7582
- Projectvue_type_template_id_5dcaf9ef_staticRenderFns,
7758
+ Projectvue_type_template_id_72239142_render,
7759
+ Projectvue_type_template_id_72239142_staticRenderFns,
7583
7760
  false,
7584
7761
  null,
7585
7762
  null,
@@ -7588,8 +7765,8 @@ var Project_component = normalizeComponent(
7588
7765
  )
7589
7766
 
7590
7767
  /* harmony default export */ var Project = (Project_component.exports);
7591
- ;// ./node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!./node_modules/@vue/vue-loader-v15/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./src/components/Chart/Row/Epic.vue?vue&type=template&id=6e337196
7592
- var Epicvue_type_template_id_6e337196_render = function render() {
7768
+ ;// ./node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!./node_modules/@vue/vue-loader-v15/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./src/components/Chart/Row/Epic.vue?vue&type=template&id=80ad2e9c
7769
+ var Epicvue_type_template_id_80ad2e9c_render = function render() {
7593
7770
  var _vm = this,
7594
7771
  _c = _vm._self._c;
7595
7772
  return _c('g', {
@@ -7703,16 +7880,17 @@ var Epicvue_type_template_id_6e337196_render = function render() {
7703
7880
  "clip-path": 'url(#' + _vm.clipPathId + ')'
7704
7881
  }
7705
7882
  }) : _vm._e(), _c('rect', {
7706
- staticClass: "gantt-elastic__chart-row-extend-handle",
7883
+ staticClass: "gantt-elastic__chart-row-extend-handle gantt-elastic__drag-handle",
7707
7884
  staticStyle: {
7708
7885
  "pointer-events": "all",
7709
- "z-index": "30"
7886
+ "z-index": "50",
7887
+ "cursor": "ew-resize !important"
7710
7888
  },
7711
7889
  style: _vm.root.style['chart-row-extend-handle'],
7712
7890
  attrs: {
7713
- "x": "8",
7891
+ "x": "0",
7714
7892
  "y": "0",
7715
- "width": 8,
7893
+ "width": 12,
7716
7894
  "height": _vm.task.height
7717
7895
  },
7718
7896
  on: {
@@ -7726,16 +7904,17 @@ var Epicvue_type_template_id_6e337196_render = function render() {
7726
7904
  }
7727
7905
  }
7728
7906
  }), _c('rect', {
7729
- staticClass: "gantt-elastic__chart-row-extend-handle",
7907
+ staticClass: "gantt-elastic__chart-row-extend-handle gantt-elastic__drag-handle",
7730
7908
  staticStyle: {
7731
7909
  "pointer-events": "all",
7732
- "z-index": "30"
7910
+ "z-index": "50",
7911
+ "cursor": "ew-resize !important"
7733
7912
  },
7734
7913
  style: _vm.root.style['chart-row-extend-handle'],
7735
7914
  attrs: {
7736
- "x": _vm.task.width - 8,
7915
+ "x": _vm.task.width - 12,
7737
7916
  "y": "0",
7738
- "width": 8,
7917
+ "width": 12,
7739
7918
  "height": _vm.task.height
7740
7919
  },
7741
7920
  on: {
@@ -7754,7 +7933,7 @@ var Epicvue_type_template_id_6e337196_render = function render() {
7754
7933
  }
7755
7934
  }) : _vm._e()], 1);
7756
7935
  };
7757
- var Epicvue_type_template_id_6e337196_staticRenderFns = [];
7936
+ var Epicvue_type_template_id_80ad2e9c_staticRenderFns = [];
7758
7937
 
7759
7938
  ;// ./node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!./node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./src/components/Chart/Row/Epic.vue?vue&type=script&lang=js
7760
7939
 
@@ -7854,8 +8033,8 @@ var Epicvue_type_template_id_6e337196_staticRenderFns = [];
7854
8033
  ;
7855
8034
  var Epic_component = normalizeComponent(
7856
8035
  Row_Epicvue_type_script_lang_js,
7857
- Epicvue_type_template_id_6e337196_render,
7858
- Epicvue_type_template_id_6e337196_staticRenderFns,
8036
+ Epicvue_type_template_id_80ad2e9c_render,
8037
+ Epicvue_type_template_id_80ad2e9c_staticRenderFns,
7859
8038
  false,
7860
8039
  null,
7861
8040
  null,
@@ -7864,8 +8043,8 @@ var Epic_component = normalizeComponent(
7864
8043
  )
7865
8044
 
7866
8045
  /* harmony default export */ var Epic = (Epic_component.exports);
7867
- ;// ./node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!./node_modules/@vue/vue-loader-v15/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./src/components/Chart/Row/Subtask.vue?vue&type=template&id=339b7174
7868
- var Subtaskvue_type_template_id_339b7174_render = function render() {
8046
+ ;// ./node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!./node_modules/@vue/vue-loader-v15/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./src/components/Chart/Row/Subtask.vue?vue&type=template&id=52219a35
8047
+ var Subtaskvue_type_template_id_52219a35_render = function render() {
7869
8048
  var _vm = this,
7870
8049
  _c = _vm._self._c;
7871
8050
  return _c('g', {
@@ -7977,16 +8156,17 @@ var Subtaskvue_type_template_id_339b7174_render = function render() {
7977
8156
  "clip-path": 'url(#' + _vm.clipPathId + ')'
7978
8157
  }
7979
8158
  }), _c('rect', {
7980
- staticClass: "gantt-elastic__chart-row-extend-handle",
8159
+ staticClass: "gantt-elastic__chart-row-extend-handle gantt-elastic__drag-handle",
7981
8160
  staticStyle: {
7982
8161
  "pointer-events": "all",
7983
- "z-index": "20"
8162
+ "z-index": "50",
8163
+ "cursor": "ew-resize !important"
7984
8164
  },
7985
8165
  style: _vm.root.style['chart-row-extend-handle'],
7986
8166
  attrs: {
7987
- "x": "8",
8167
+ "x": "0",
7988
8168
  "y": "0",
7989
- "width": 8,
8169
+ "width": 12,
7990
8170
  "height": _vm.task.height
7991
8171
  },
7992
8172
  on: {
@@ -8000,16 +8180,17 @@ var Subtaskvue_type_template_id_339b7174_render = function render() {
8000
8180
  }
8001
8181
  }
8002
8182
  }), _c('rect', {
8003
- staticClass: "gantt-elastic__chart-row-extend-handle",
8183
+ staticClass: "gantt-elastic__chart-row-extend-handle gantt-elastic__drag-handle",
8004
8184
  staticStyle: {
8005
8185
  "pointer-events": "all",
8006
- "z-index": "20"
8186
+ "z-index": "50",
8187
+ "cursor": "ew-resize !important"
8007
8188
  },
8008
8189
  style: _vm.root.style['chart-row-extend-handle'],
8009
8190
  attrs: {
8010
- "x": _vm.task.width - 8,
8191
+ "x": _vm.task.width - 12,
8011
8192
  "y": "0",
8012
- "width": 8,
8193
+ "width": 12,
8013
8194
  "height": _vm.task.height
8014
8195
  },
8015
8196
  on: {
@@ -8028,7 +8209,7 @@ var Subtaskvue_type_template_id_339b7174_render = function render() {
8028
8209
  }
8029
8210
  }) : _vm._e()], 1);
8030
8211
  };
8031
- var Subtaskvue_type_template_id_339b7174_staticRenderFns = [];
8212
+ var Subtaskvue_type_template_id_52219a35_staticRenderFns = [];
8032
8213
 
8033
8214
  ;// ./node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!./node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./src/components/Chart/Row/Subtask.vue?vue&type=script&lang=js
8034
8215
 
@@ -8100,8 +8281,8 @@ var Subtaskvue_type_template_id_339b7174_staticRenderFns = [];
8100
8281
  ;
8101
8282
  var Subtask_component = normalizeComponent(
8102
8283
  Row_Subtaskvue_type_script_lang_js,
8103
- Subtaskvue_type_template_id_339b7174_render,
8104
- Subtaskvue_type_template_id_339b7174_staticRenderFns,
8284
+ Subtaskvue_type_template_id_52219a35_render,
8285
+ Subtaskvue_type_template_id_52219a35_staticRenderFns,
8105
8286
  false,
8106
8287
  null,
8107
8288
  null,
@@ -8110,8 +8291,8 @@ var Subtask_component = normalizeComponent(
8110
8291
  )
8111
8292
 
8112
8293
  /* harmony default export */ var Subtask = (Subtask_component.exports);
8113
- ;// ./node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!./node_modules/@vue/vue-loader-v15/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./src/components/Chart/Row/Story.vue?vue&type=template&id=3d0395f2
8114
- var Storyvue_type_template_id_3d0395f2_render = function render() {
8294
+ ;// ./node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!./node_modules/@vue/vue-loader-v15/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./src/components/Chart/Row/Story.vue?vue&type=template&id=5d688d0c
8295
+ var Storyvue_type_template_id_5d688d0c_render = function render() {
8115
8296
  var _vm = this,
8116
8297
  _c = _vm._self._c;
8117
8298
  return _c('g', {
@@ -8223,16 +8404,17 @@ var Storyvue_type_template_id_3d0395f2_render = function render() {
8223
8404
  "clip-path": 'url(#' + _vm.clipPathId + ')'
8224
8405
  }
8225
8406
  }), _c('rect', {
8226
- staticClass: "gantt-elastic__chart-row-extend-handle",
8407
+ staticClass: "gantt-elastic__chart-row-extend-handle gantt-elastic__drag-handle",
8227
8408
  staticStyle: {
8228
8409
  "pointer-events": "all",
8229
- "z-index": "20"
8410
+ "z-index": "50",
8411
+ "cursor": "ew-resize !important"
8230
8412
  },
8231
8413
  style: _vm.root.style['chart-row-extend-handle'],
8232
8414
  attrs: {
8233
- "x": "8",
8415
+ "x": "0",
8234
8416
  "y": "0",
8235
- "width": 8,
8417
+ "width": 12,
8236
8418
  "height": _vm.task.height
8237
8419
  },
8238
8420
  on: {
@@ -8246,16 +8428,17 @@ var Storyvue_type_template_id_3d0395f2_render = function render() {
8246
8428
  }
8247
8429
  }
8248
8430
  }), _c('rect', {
8249
- staticClass: "gantt-elastic__chart-row-extend-handle",
8431
+ staticClass: "gantt-elastic__chart-row-extend-handle gantt-elastic__drag-handle",
8250
8432
  staticStyle: {
8251
8433
  "pointer-events": "all",
8252
- "z-index": "20"
8434
+ "z-index": "50",
8435
+ "cursor": "ew-resize !important"
8253
8436
  },
8254
8437
  style: _vm.root.style['chart-row-extend-handle'],
8255
8438
  attrs: {
8256
- "x": _vm.task.width - 8,
8439
+ "x": _vm.task.width - 12,
8257
8440
  "y": "0",
8258
- "width": 8,
8441
+ "width": 12,
8259
8442
  "height": _vm.task.height
8260
8443
  },
8261
8444
  on: {
@@ -8274,7 +8457,7 @@ var Storyvue_type_template_id_3d0395f2_render = function render() {
8274
8457
  }
8275
8458
  }) : _vm._e()], 1);
8276
8459
  };
8277
- var Storyvue_type_template_id_3d0395f2_staticRenderFns = [];
8460
+ var Storyvue_type_template_id_5d688d0c_staticRenderFns = [];
8278
8461
 
8279
8462
  ;// ./node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!./node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./src/components/Chart/Row/Story.vue?vue&type=script&lang=js
8280
8463
 
@@ -8366,8 +8549,8 @@ var Storyvue_type_template_id_3d0395f2_staticRenderFns = [];
8366
8549
  ;
8367
8550
  var Story_component = normalizeComponent(
8368
8551
  Row_Storyvue_type_script_lang_js,
8369
- Storyvue_type_template_id_3d0395f2_render,
8370
- Storyvue_type_template_id_3d0395f2_staticRenderFns,
8552
+ Storyvue_type_template_id_5d688d0c_render,
8553
+ Storyvue_type_template_id_5d688d0c_staticRenderFns,
8371
8554
  false,
8372
8555
  null,
8373
8556
  null,
@@ -8425,6 +8608,7 @@ var Story_component = normalizeComponent(
8425
8608
  */
8426
8609
  handleTaskUpdated(updatedTask) {
8427
8610
  // Emit event to parent component
8611
+ console.log("task-updated --Chart");
8428
8612
  this.$emit('task-updated', updatedTask);
8429
8613
 
8430
8614
  // Update the task in the root state
@@ -8476,8 +8660,8 @@ var Story_component = normalizeComponent(
8476
8660
  ;
8477
8661
  var Chart_component = normalizeComponent(
8478
8662
  Chart_Chartvue_type_script_lang_js,
8479
- Chartvue_type_template_id_2bc7fe5e_render,
8480
- Chartvue_type_template_id_2bc7fe5e_staticRenderFns,
8663
+ Chartvue_type_template_id_0856b85c_render,
8664
+ Chartvue_type_template_id_0856b85c_staticRenderFns,
8481
8665
  false,
8482
8666
  null,
8483
8667
  null,
@@ -8573,6 +8757,7 @@ let ignoreScrollEvents = false;
8573
8757
  */
8574
8758
  handleTaskUpdated(updatedTask) {
8575
8759
  // Emit event to parent component
8760
+ console.log("task-updated --MainView");
8576
8761
  this.$emit('task-updated', updatedTask);
8577
8762
  },
8578
8763
  /**
@@ -8691,8 +8876,8 @@ let ignoreScrollEvents = false;
8691
8876
  ;
8692
8877
  var MainView_component = normalizeComponent(
8693
8878
  components_MainViewvue_type_script_lang_js,
8694
- MainViewvue_type_template_id_33392d22_render,
8695
- MainViewvue_type_template_id_33392d22_staticRenderFns,
8879
+ MainViewvue_type_template_id_79e1eba9_render,
8880
+ MainViewvue_type_template_id_79e1eba9_staticRenderFns,
8696
8881
  false,
8697
8882
  null,
8698
8883
  null,
@@ -11341,12 +11526,99 @@ const GanttElastic = {
11341
11526
  unwatchOutputTasks: null,
11342
11527
  unwatchOutputOptions: null,
11343
11528
  unwatchOutputStyle: null
11344
- }
11529
+ },
11530
+ // Performance optimization properties
11531
+ updateQueue: [],
11532
+ updateTimeout: null,
11533
+ lastUpdateTime: 0,
11534
+ updateThrottleDelay: 16,
11535
+ // ~60fps
11536
+ isUpdating: false
11345
11537
  };
11346
11538
  },
11347
11539
  methods: {
11348
11540
  mergeDeep,
11349
11541
  mergeDeepReactive,
11542
+ /**
11543
+ * Debounced update method to prevent excessive re-renders
11544
+ */
11545
+ debouncedUpdate(updateFn, context = 'general') {
11546
+ const now = Date.now();
11547
+
11548
+ // Add to update queue
11549
+ this.updateQueue.push({
11550
+ fn: updateFn,
11551
+ context,
11552
+ timestamp: now
11553
+ });
11554
+
11555
+ // Clear existing timeout
11556
+ if (this.updateTimeout) {
11557
+ clearTimeout(this.updateTimeout);
11558
+ }
11559
+
11560
+ // Set new timeout
11561
+ this.updateTimeout = setTimeout(() => {
11562
+ this.processUpdateQueue();
11563
+ }, this.updateThrottleDelay);
11564
+ },
11565
+ /**
11566
+ * Process the update queue
11567
+ */
11568
+ processUpdateQueue() {
11569
+ if (this.isUpdating || this.updateQueue.length === 0) {
11570
+ return;
11571
+ }
11572
+ this.isUpdating = true;
11573
+ const startTime = performance.now();
11574
+ try {
11575
+ // Group updates by context
11576
+ const groupedUpdates = {};
11577
+ this.updateQueue.forEach(update => {
11578
+ if (!groupedUpdates[update.context]) {
11579
+ groupedUpdates[update.context] = [];
11580
+ }
11581
+ groupedUpdates[update.context].push(update);
11582
+ });
11583
+
11584
+ // Process each group
11585
+ Object.keys(groupedUpdates).forEach(context => {
11586
+ const updates = groupedUpdates[context];
11587
+ const latestUpdate = updates[updates.length - 1]; // Use the latest update
11588
+ latestUpdate.fn();
11589
+ });
11590
+
11591
+ // Clear the queue
11592
+ this.updateQueue = [];
11593
+
11594
+ // Performance monitoring
11595
+ const endTime = performance.now();
11596
+ const duration = endTime - startTime;
11597
+ if (duration > 16) {
11598
+ // Log if update takes longer than one frame
11599
+ console.warn(`Gantt update took ${duration.toFixed(2)}ms for ${Object.keys(groupedUpdates).length} contexts`);
11600
+ }
11601
+ } finally {
11602
+ this.isUpdating = false;
11603
+ }
11604
+ },
11605
+ /**
11606
+ * Performance monitoring method
11607
+ */
11608
+ logPerformanceMetrics() {
11609
+ const metrics = {
11610
+ totalTasks: this.state.tasks.length,
11611
+ visibleTasks: this.visibleTasks.length,
11612
+ updateQueueLength: this.updateQueue.length,
11613
+ isUpdating: this.isUpdating,
11614
+ memoryUsage: performance.memory ? {
11615
+ used: Math.round(performance.memory.usedJSHeapSize / 1024 / 1024) + 'MB',
11616
+ total: Math.round(performance.memory.totalJSHeapSize / 1024 / 1024) + 'MB'
11617
+ } : 'Not available'
11618
+ };
11619
+ console.log('Gantt Performance Metrics:', metrics);
11620
+ return metrics;
11621
+ },
11350
11622
  onViewModeChanged(mode) {
11351
11623
  // Update the calendar view mode
11352
11624
  this.options.calendar.viewMode = mode;
@@ -11374,6 +11646,15 @@ const GanttElastic = {
11374
11646
  }
11375
11647
  }
11376
11648
 
11649
+ // Emit event to parent component
11650
+ this.$emit('view-mode-changed', mode);
11651
+
11652
+ // Also emit to root for plugin usage
11653
+ this.$root.$emit('gantt-view-mode-changed', mode);
11654
+
11655
+ // Log the view mode change for debugging
11656
+ console.log('View mode changed - from GanttElastic:', mode);
11657
+
11377
11658
  // Force recalculation by triggering a reactive update
11378
11659
  this.$nextTick(() => {
11379
11660
  this.$forceUpdate();
@@ -11399,15 +11680,12 @@ const GanttElastic = {
11399
11680
  */
11400
11681
  handleTaskUpdated(updatedTask) {
11401
11682
  // Emit event to parent component
11683
+ console.log('Task updated -- GanttElastic:');
11402
11684
  this.$emit('task-updated', updatedTask);
11685
+ this.$emit('gantt-task-updated', updatedTask);
11403
11686
 
11404
- // Log the update for debugging
11405
- console.log('Task updated:', updatedTask);
11406
-
11407
- // You can add additional logic here like:
11408
- // - Save to backend
11409
- // - Update local storage
11410
- // - Trigger other updates
11687
+ // Also emit to root for plugin usage
11688
+ this.$root.$emit('gantt-task-updated', updatedTask);
11411
11689
  },
11412
11690
  /**
11413
11691
  * Calculate height of scrollbar in current browser
@@ -12627,7 +12905,9 @@ const GanttElastic = {
12627
12905
  this.state.options.height = this.getHeight(visibleTasks) - heightCompensation;
12628
12906
  this.state.options.allVisibleTasksHeight = this.getTasksHeight(visibleTasks);
12629
12907
  this.state.options.outerHeight = this.getHeight(visibleTasks, true) - heightCompensation;
12630
- let len = visibleTasks.length;
12908
+
12909
+ // Calculate task positions only for visible tasks
12910
+ const len = visibleTasks.length;
12631
12911
  for (let index = 0; index < len; index++) {
12632
12912
  let task = visibleTasks[index];
12633
12913
  task.width = task.duration / this.state.options.times.timePerPixel - this.style['grid-line-vertical']['stroke-width'];
@@ -12675,19 +12955,22 @@ const GanttElastic = {
12675
12955
  this.state.unwatchTasks = this.$watch('tasks', tasks => {
12676
12956
  const notEqual = notEqualDeep(tasks, this.outputTasks);
12677
12957
  if (notEqual) {
12678
- this.setup('tasks');
12958
+ this.debouncedUpdate(() => {
12959
+ this.setup('tasks');
12960
+ this.$nextTick(() => {
12961
+ this.recalculateHeight();
12962
+ });
12963
+ }, 'tasks');
12679
12964
  }
12680
- // Recalculate height when tasks change
12681
- this.$nextTick(() => {
12682
- this.recalculateHeight();
12683
- });
12684
12965
  }, {
12685
12966
  deep: true
12686
12967
  });
12687
12968
  this.state.unwatchOptions = this.$watch('options', opts => {
12688
12969
  const notEqual = notEqualDeep(opts, this.outputOptions);
12689
12970
  if (notEqual) {
12690
- this.setup('options');
12971
+ this.debouncedUpdate(() => {
12972
+ this.setup('options');
12973
+ }, 'options');
12691
12974
  }
12692
12975
  }, {
12693
12976
  deep: true
@@ -12751,6 +13034,38 @@ const GanttElastic = {
12751
13034
  this.$root.$emit('gantt-elastic-mounted', this);
12752
13035
  this.$emit('mounted', this);
12753
13036
  this.$root.$emit('gantt-elastic-ready', this);
13037
+
13038
+ // Expose methods for plugin usage
13039
+ this.$gantt = {
13040
+ onTaskUpdated: this.handleTaskUpdated,
13041
+ onViewModeChanged: this.onViewModeChanged,
13042
+ getTasks: () => this.state.tasks,
13043
+ updateTask: (taskId, updates) => {
13044
+ const taskIndex = this.state.tasks.findIndex(task => task.id === taskId);
13045
+ if (taskIndex !== -1) {
13046
+ Object.assign(this.state.tasks[taskIndex], updates);
13047
+ this.$forceUpdate();
13048
+ }
13049
+ }
13050
+ };
13051
+
13052
+ /*
13053
+ * PLUGIN USAGE EXAMPLE:
13054
+ *
13055
+ * // Listen to events when using as plugin:
13056
+ * this.$root.$on('gantt-task-updated', (updatedTask) => {
13057
+ * console.log('Task updated:', updatedTask);
13058
+ * });
13059
+ *
13060
+ * this.$root.$on('gantt-view-mode-changed', (mode) => {
13061
+ * console.log('View mode changed:', mode);
13062
+ * });
13063
+ *
13064
+ * // Access gantt methods:
13065
+ * const ganttInstance = this.$refs.ganttChart.$gantt;
13066
+ * ganttInstance.updateTask(1, { label: 'New Task Name' });
13067
+ * const tasks = ganttInstance.getTasks();
13068
+ */
12754
13069
  },
12755
13070
  /**
12756
13071
  * Emit event when data was changed and before update (you can cleanup dom events here for example)
@@ -12790,10 +13105,10 @@ const GanttElastic = {
12790
13105
  /* harmony default export */ var GanttElasticvue_type_script_lang_js = (GanttElastic);
12791
13106
  ;// ./src/GanttElastic.vue?vue&type=script&lang=js
12792
13107
  /* harmony default export */ var src_GanttElasticvue_type_script_lang_js = (GanttElasticvue_type_script_lang_js);
12793
- ;// ./node_modules/mini-css-extract-plugin/dist/loader.js??clonedRuleSet-12.use[0]!./node_modules/@vue/cli-service/node_modules/css-loader/dist/cjs.js??clonedRuleSet-12.use[1]!./node_modules/@vue/vue-loader-v15/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-12.use[2]!./node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./src/GanttElastic.vue?vue&type=style&index=0&id=100984c8&prod&lang=css
13108
+ ;// ./node_modules/mini-css-extract-plugin/dist/loader.js??clonedRuleSet-12.use[0]!./node_modules/@vue/cli-service/node_modules/css-loader/dist/cjs.js??clonedRuleSet-12.use[1]!./node_modules/@vue/vue-loader-v15/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-12.use[2]!./node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./src/GanttElastic.vue?vue&type=style&index=0&id=95091692&prod&lang=css
12794
13109
  // extracted by mini-css-extract-plugin
12795
13110
 
12796
- ;// ./src/GanttElastic.vue?vue&type=style&index=0&id=100984c8&prod&lang=css
13111
+ ;// ./src/GanttElastic.vue?vue&type=style&index=0&id=95091692&prod&lang=css
12797
13112
 
12798
13113
  ;// ./src/GanttElastic.vue
12799
13114
 
@@ -12806,8 +13121,8 @@ const GanttElastic = {
12806
13121
 
12807
13122
  var GanttElastic_component = normalizeComponent(
12808
13123
  src_GanttElasticvue_type_script_lang_js,
12809
- GanttElasticvue_type_template_id_100984c8_render,
12810
- GanttElasticvue_type_template_id_100984c8_staticRenderFns,
13124
+ GanttElasticvue_type_template_id_95091692_render,
13125
+ GanttElasticvue_type_template_id_95091692_staticRenderFns,
12811
13126
  false,
12812
13127
  null,
12813
13128
  null,