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.
@@ -3385,7 +3385,7 @@ if (typeof window !== 'undefined') {
3385
3385
  // Indicate to webpack that this file can be concatenated
3386
3386
  /* harmony default export */ var setPublicPath = (null);
3387
3387
 
3388
- ;// ./node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib/index.js??clonedRuleSet-83.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
3388
+ ;// ./node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib/index.js??clonedRuleSet-83.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
3389
3389
  var render = function render() {
3390
3390
  var _vm = this,
3391
3391
  _c = _vm._self._c;
@@ -3394,6 +3394,32 @@ var render = function render() {
3394
3394
  "tasks": _vm.tasks,
3395
3395
  "options": _vm.options,
3396
3396
  "dynamicStyle": _vm.dynamicStyle
3397
+ },
3398
+ on: {
3399
+ "task-updated": function ($event) {
3400
+ return _vm.$emit('task-updated', $event);
3401
+ },
3402
+ "gantt-task-updated": function ($event) {
3403
+ return _vm.$emit('gantt-task-updated', $event);
3404
+ },
3405
+ "view-mode-changed": function ($event) {
3406
+ return _vm.$emit('view-mode-changed', $event);
3407
+ },
3408
+ "gantt-view-mode-changed": function ($event) {
3409
+ return _vm.$emit('gantt-view-mode-changed', $event);
3410
+ },
3411
+ "tasks-changed": function ($event) {
3412
+ return _vm.$emit('tasks-changed', $event);
3413
+ },
3414
+ "options-changed": function ($event) {
3415
+ return _vm.$emit('options-changed', $event);
3416
+ },
3417
+ "dynamic-style-changed": function ($event) {
3418
+ return _vm.$emit('dynamic-style-changed', $event);
3419
+ },
3420
+ "mounted": function ($event) {
3421
+ return _vm.$emit('mounted', $event);
3422
+ }
3397
3423
  }
3398
3424
  }, [_vm.components.header ? _c(_vm.components.header, {
3399
3425
  tag: "component",
@@ -3411,8 +3437,8 @@ var render = function render() {
3411
3437
  };
3412
3438
  var staticRenderFns = [];
3413
3439
 
3414
- ;// ./node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib/index.js??clonedRuleSet-83.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
3415
- var GanttElasticvue_type_template_id_100984c8_render = function render() {
3440
+ ;// ./node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib/index.js??clonedRuleSet-83.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
3441
+ var GanttElasticvue_type_template_id_95091692_render = function render() {
3416
3442
  var _vm = this,
3417
3443
  _c = _vm._self._c,
3418
3444
  _setup = _vm._self._setupProxy;
@@ -3441,7 +3467,7 @@ var GanttElasticvue_type_template_id_100984c8_render = function render() {
3441
3467
  }
3442
3468
  }), _vm._t("footer")], 2);
3443
3469
  };
3444
- var GanttElasticvue_type_template_id_100984c8_staticRenderFns = [];
3470
+ var GanttElasticvue_type_template_id_95091692_staticRenderFns = [];
3445
3471
 
3446
3472
  // EXTERNAL MODULE: ./node_modules/core-js/modules/es.array.push.js
3447
3473
  var es_array_push = __webpack_require__(4114);
@@ -3684,8 +3710,8 @@ var component = normalizeComponent(
3684
3710
  )
3685
3711
 
3686
3712
  /* harmony default export */ var GanttViewFilter = (component.exports);
3687
- ;// ./node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib/index.js??clonedRuleSet-83.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
3688
- var MainViewvue_type_template_id_33392d22_render = function render() {
3713
+ ;// ./node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib/index.js??clonedRuleSet-83.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
3714
+ var MainViewvue_type_template_id_79e1eba9_render = function render() {
3689
3715
  var _vm = this,
3690
3716
  _c = _vm._self._c;
3691
3717
  return _c('div', {
@@ -3794,10 +3820,10 @@ var MainViewvue_type_template_id_33392d22_render = function render() {
3794
3820
  }
3795
3821
  })])]);
3796
3822
  };
3797
- var MainViewvue_type_template_id_33392d22_staticRenderFns = [];
3823
+ var MainViewvue_type_template_id_79e1eba9_staticRenderFns = [];
3798
3824
 
3799
- ;// ./node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib/index.js??clonedRuleSet-83.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
3800
- var TaskListvue_type_template_id_74ce1216_render = function render() {
3825
+ ;// ./node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib/index.js??clonedRuleSet-83.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
3826
+ var TaskListvue_type_template_id_b705a4ea_render = function render() {
3801
3827
  var _vm = this,
3802
3828
  _c = _vm._self._c;
3803
3829
  return _c('div', {
@@ -3826,17 +3852,36 @@ var TaskListvue_type_template_id_74ce1216_render = function render() {
3826
3852
  style: {
3827
3853
  ..._vm.root.style['task-list-items'],
3828
3854
  height: _vm.root.state.options.rowsHeight + 'px'
3855
+ },
3856
+ on: {
3857
+ "scroll": _vm.onScroll
3829
3858
  }
3830
- }, _vm._l(_vm.root.visibleTasks, function (task) {
3859
+ }, [_c('div', {
3860
+ style: {
3861
+ height: _vm.totalHeight + 'px',
3862
+ position: 'relative'
3863
+ }
3864
+ }, [_c('div', {
3865
+ style: {
3866
+ transform: `translateY(${_vm.offsetY}px)`,
3867
+ position: 'absolute',
3868
+ top: 0,
3869
+ left: 0,
3870
+ right: 0
3871
+ }
3872
+ }, _vm._l(_vm.visibleTasks, function (task) {
3831
3873
  return _c('task-list-item', {
3832
3874
  key: task.id,
3875
+ style: {
3876
+ height: _vm.taskHeight + 'px'
3877
+ },
3833
3878
  attrs: {
3834
3879
  "task": task
3835
3880
  }
3836
3881
  });
3837
- }), 1)], 1)]);
3882
+ }), 1)])])], 1)]);
3838
3883
  };
3839
- var TaskListvue_type_template_id_74ce1216_staticRenderFns = [];
3884
+ var TaskListvue_type_template_id_b705a4ea_staticRenderFns = [];
3840
3885
 
3841
3886
  ;// ./node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib/index.js??clonedRuleSet-83.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
3842
3887
  var TaskListHeadervue_type_template_id_2ecc0032_render = function render() {
@@ -3889,8 +3934,8 @@ var TaskListHeadervue_type_template_id_2ecc0032_render = function render() {
3889
3934
  };
3890
3935
  var TaskListHeadervue_type_template_id_2ecc0032_staticRenderFns = [];
3891
3936
 
3892
- ;// ./node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib/index.js??clonedRuleSet-83.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
3893
- var Expandervue_type_template_id_ac398cf4_render = function render() {
3937
+ ;// ./node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib/index.js??clonedRuleSet-83.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
3938
+ var Expandervue_type_template_id_4831d194_render = function render() {
3894
3939
  var _vm = this,
3895
3940
  _c = _vm._self._c;
3896
3941
  return _c('div', {
@@ -3927,7 +3972,7 @@ var Expandervue_type_template_id_ac398cf4_render = function render() {
3927
3972
  }
3928
3973
  })]) : _vm._e()]);
3929
3974
  };
3930
- var Expandervue_type_template_id_ac398cf4_staticRenderFns = [];
3975
+ var Expandervue_type_template_id_4831d194_staticRenderFns = [];
3931
3976
 
3932
3977
  ;// ./node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib/index.js??clonedRuleSet-83.use[1]!./node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./src/components/Expander.vue?vue&type=script&lang=js
3933
3978
 
@@ -3984,7 +4029,9 @@ var Expandervue_type_template_id_ac398cf4_staticRenderFns = [];
3984
4029
  }
3985
4030
  let collapsed = 0;
3986
4031
  for (let i = 0, len = this.tasks.length; i < len; i++) {
3987
- if (this.tasks[i].collapsed) {
4032
+ // Use original task if available (for virtual scrolling), otherwise use the task itself
4033
+ const originalTask = this.tasks[i]._originalTask || this.tasks[i];
4034
+ if (originalTask.collapsed) {
3988
4035
  collapsed++;
3989
4036
  }
3990
4037
  }
@@ -4009,7 +4056,9 @@ var Expandervue_type_template_id_ac398cf4_staticRenderFns = [];
4009
4056
  }
4010
4057
  const collapsed = !this.collapsed;
4011
4058
  this.tasks.forEach(task => {
4012
- task.collapsed = collapsed;
4059
+ // Use original task if available (for virtual scrolling), otherwise use the task itself
4060
+ const originalTask = task._originalTask || task;
4061
+ originalTask.collapsed = collapsed;
4013
4062
  });
4014
4063
 
4015
4064
  // Force reactivity update
@@ -4030,8 +4079,8 @@ var Expandervue_type_template_id_ac398cf4_staticRenderFns = [];
4030
4079
  ;
4031
4080
  var Expander_component = normalizeComponent(
4032
4081
  components_Expandervue_type_script_lang_js,
4033
- Expandervue_type_template_id_ac398cf4_render,
4034
- Expandervue_type_template_id_ac398cf4_staticRenderFns,
4082
+ Expandervue_type_template_id_4831d194_render,
4083
+ Expandervue_type_template_id_4831d194_staticRenderFns,
4035
4084
  false,
4036
4085
  null,
4037
4086
  null,
@@ -4560,6 +4609,7 @@ var TaskListItem_component = normalizeComponent(
4560
4609
  ;// ./node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib/index.js??clonedRuleSet-83.use[1]!./node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./src/components/TaskList/TaskList.vue?vue&type=script&lang=js
4561
4610
 
4562
4611
 
4612
+
4563
4613
  /* harmony default export */ var TaskListvue_type_script_lang_js = ({
4564
4614
  name: 'TaskList',
4565
4615
  components: {
@@ -4568,7 +4618,104 @@ var TaskListItem_component = normalizeComponent(
4568
4618
  },
4569
4619
  inject: ['root'],
4570
4620
  data() {
4571
- return {};
4621
+ return {
4622
+ scrollTop: 0,
4623
+ containerHeight: 0,
4624
+ bufferSize: 5,
4625
+ // Number of extra items to render above and below viewport
4626
+ lastScrollTime: 0,
4627
+ scrollThrottleDelay: 16 // ~60fps
4628
+ };
4629
+ },
4630
+ computed: {
4631
+ /**
4632
+ * Get all tasks that should be visible
4633
+ */
4634
+ allVisibleTasks() {
4635
+ return this.root.visibleTasks || [];
4636
+ },
4637
+ /**
4638
+ * Get task height
4639
+ */
4640
+ taskHeight() {
4641
+ return this.root.state.options.row.height + this.root.state.options.chart.grid.horizontal.gap * 2;
4642
+ },
4643
+ /**
4644
+ * Get total height of all tasks
4645
+ */
4646
+ totalHeight() {
4647
+ return this.allVisibleTasks.length * this.taskHeight;
4648
+ },
4649
+ /**
4650
+ * Get visible range for virtual scrolling
4651
+ */
4652
+ visibleRange() {
4653
+ const start = Math.max(0, Math.floor(this.scrollTop / this.taskHeight) - this.bufferSize);
4654
+ const end = Math.min(this.allVisibleTasks.length, Math.ceil((this.scrollTop + this.containerHeight) / this.taskHeight) + this.bufferSize);
4655
+ return {
4656
+ start,
4657
+ end
4658
+ };
4659
+ },
4660
+ /**
4661
+ * Get visible tasks for virtual scrolling
4662
+ * This respects the expand/collapse state from the root component
4663
+ */
4664
+ visibleTasks() {
4665
+ // First get all tasks that should be visible based on expand/collapse state
4666
+ const allVisibleTasks = this.root.visibleTasks || [];
4667
+
4668
+ // If we have virtual scrolling enabled and enough tasks, apply viewport culling
4669
+ if (allVisibleTasks.length > 100 && this.containerHeight > 0) {
4670
+ const {
4671
+ start,
4672
+ end
4673
+ } = this.visibleRange;
4674
+ return allVisibleTasks.slice(start, end).map((task, index) => {
4675
+ // Create a wrapper object that preserves the original task reference
4676
+ return {
4677
+ ...task,
4678
+ virtualIndex: start + index,
4679
+ _originalTask: task // Keep reference to original task for expander
4680
+ };
4681
+ });
4682
+ }
4683
+
4684
+ // For smaller datasets or when virtual scrolling is not needed, return all visible tasks
4685
+ return allVisibleTasks.map((task, index) => ({
4686
+ ...task,
4687
+ virtualIndex: index,
4688
+ _originalTask: task // Keep reference to original task for expander
4689
+ }));
4690
+ },
4691
+ /**
4692
+ * Get offset for virtual scrolling
4693
+ */
4694
+ offsetY() {
4695
+ return this.visibleRange.start * this.taskHeight;
4696
+ }
4697
+ },
4698
+ methods: {
4699
+ /**
4700
+ * Handle scroll event with throttling
4701
+ */
4702
+ onScroll(event) {
4703
+ const now = Date.now();
4704
+ if (now - this.lastScrollTime < this.scrollThrottleDelay) {
4705
+ return;
4706
+ }
4707
+ this.lastScrollTime = now;
4708
+ this.scrollTop = event.target.scrollTop;
4709
+ this.containerHeight = event.target.clientHeight;
4710
+ },
4711
+ /**
4712
+ * Update container height when component updates
4713
+ */
4714
+ updateContainerHeight() {
4715
+ if (this.$refs.taskListItems) {
4716
+ this.containerHeight = this.$refs.taskListItems.clientHeight;
4717
+ }
4718
+ }
4572
4719
  },
4573
4720
  /**
4574
4721
  * Mounted
@@ -4577,6 +4724,30 @@ var TaskListItem_component = normalizeComponent(
4577
4724
  this.root.state.refs.taskListWrapper = this.$refs.taskListWrapper;
4578
4725
  this.root.state.refs.taskList = this.$refs.taskList;
4579
4726
  this.root.state.refs.taskListItems = this.$refs.taskListItems;
4727
+
4728
+ // Initialize container height
4729
+ this.$nextTick(() => {
4730
+ this.updateContainerHeight();
4731
+ });
4732
+ },
4733
+ /**
4734
+ * Watch for changes in visible tasks to update virtual scrolling
4735
+ */
4736
+ watch: {
4737
+ 'root.visibleTasks': {
4738
+ handler() {
4739
+ this.$nextTick(() => {
4740
+ this.updateContainerHeight();
4741
+ });
4742
+ },
4743
+ deep: true
4744
+ }
4745
+ },
4746
+ /**
4747
+ * Updated lifecycle hook
4748
+ */
4749
+ updated() {
4750
+ this.updateContainerHeight();
4580
4751
  }
4581
4752
  });
4582
4753
  ;// ./src/components/TaskList/TaskList.vue?vue&type=script&lang=js
@@ -4591,8 +4762,8 @@ var TaskListItem_component = normalizeComponent(
4591
4762
  ;
4592
4763
  var TaskList_component = normalizeComponent(
4593
4764
  TaskList_TaskListvue_type_script_lang_js,
4594
- TaskListvue_type_template_id_74ce1216_render,
4595
- TaskListvue_type_template_id_74ce1216_staticRenderFns,
4765
+ TaskListvue_type_template_id_b705a4ea_render,
4766
+ TaskListvue_type_template_id_b705a4ea_staticRenderFns,
4596
4767
  false,
4597
4768
  null,
4598
4769
  null,
@@ -4601,8 +4772,8 @@ var TaskList_component = normalizeComponent(
4601
4772
  )
4602
4773
 
4603
4774
  /* harmony default export */ var TaskList = (TaskList_component.exports);
4604
- ;// ./node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib/index.js??clonedRuleSet-83.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
4605
- var Chartvue_type_template_id_2bc7fe5e_render = function render() {
4775
+ ;// ./node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib/index.js??clonedRuleSet-83.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
4776
+ var Chartvue_type_template_id_0856b85c_render = function render() {
4606
4777
  var _vm = this,
4607
4778
  _c = _vm._self._c;
4608
4779
  return _c('div', {
@@ -4677,7 +4848,7 @@ var Chartvue_type_template_id_2bc7fe5e_render = function render() {
4677
4848
  })], 1);
4678
4849
  })], 2)])])])]);
4679
4850
  };
4680
- var Chartvue_type_template_id_2bc7fe5e_staticRenderFns = [];
4851
+ var Chartvue_type_template_id_0856b85c_staticRenderFns = [];
4681
4852
 
4682
4853
  ;// ./node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib/index.js??clonedRuleSet-83.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
4683
4854
  var Gridvue_type_template_id_244ea0ee_render = function render() {
@@ -5886,8 +6057,8 @@ var DependencyLines_component = normalizeComponent(
5886
6057
  )
5887
6058
 
5888
6059
  /* harmony default export */ var DependencyLines = (DependencyLines_component.exports);
5889
- ;// ./node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib/index.js??clonedRuleSet-83.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
5890
- var Taskvue_type_template_id_2c01a3c8_render = function render() {
6060
+ ;// ./node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib/index.js??clonedRuleSet-83.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
6061
+ var Taskvue_type_template_id_23849415_render = function render() {
5891
6062
  var _vm = this,
5892
6063
  _c = _vm._self._c;
5893
6064
  return _c('g', {
@@ -5999,16 +6170,17 @@ var Taskvue_type_template_id_2c01a3c8_render = function render() {
5999
6170
  "clip-path": 'url(#' + _vm.clipPathId + ')'
6000
6171
  }
6001
6172
  }), _c('rect', {
6002
- staticClass: "gantt-elastic__chart-row-extend-handle",
6173
+ staticClass: "gantt-elastic__chart-row-extend-handle gantt-elastic__drag-handle",
6003
6174
  staticStyle: {
6004
6175
  "pointer-events": "all",
6005
- "z-index": "20"
6176
+ "z-index": "50",
6177
+ "cursor": "ew-resize !important"
6006
6178
  },
6007
6179
  style: _vm.root.style['chart-row-extend-handle'],
6008
6180
  attrs: {
6009
- "x": "8",
6181
+ "x": "0",
6010
6182
  "y": "0",
6011
- "width": 8,
6183
+ "width": 12,
6012
6184
  "height": _vm.task.height
6013
6185
  },
6014
6186
  on: {
@@ -6022,16 +6194,17 @@ var Taskvue_type_template_id_2c01a3c8_render = function render() {
6022
6194
  }
6023
6195
  }
6024
6196
  }), _c('rect', {
6025
- staticClass: "gantt-elastic__chart-row-extend-handle",
6197
+ staticClass: "gantt-elastic__chart-row-extend-handle gantt-elastic__drag-handle",
6026
6198
  staticStyle: {
6027
6199
  "pointer-events": "all",
6028
- "z-index": "20"
6200
+ "z-index": "50",
6201
+ "cursor": "ew-resize !important"
6029
6202
  },
6030
6203
  style: _vm.root.style['chart-row-extend-handle'],
6031
6204
  attrs: {
6032
- "x": _vm.task.width - 8,
6205
+ "x": _vm.task.width - 12,
6033
6206
  "y": "0",
6034
- "width": 8,
6207
+ "width": 12,
6035
6208
  "height": _vm.task.height
6036
6209
  },
6037
6210
  on: {
@@ -6050,7 +6223,7 @@ var Taskvue_type_template_id_2c01a3c8_render = function render() {
6050
6223
  }
6051
6224
  }) : _vm._e()], 1);
6052
6225
  };
6053
- var Taskvue_type_template_id_2c01a3c8_staticRenderFns = [];
6226
+ var Taskvue_type_template_id_23849415_staticRenderFns = [];
6054
6227
 
6055
6228
  ;// ./node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib/index.js??clonedRuleSet-83.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
6056
6229
  var Textvue_type_template_id_634f40aa_render = function render() {
@@ -6401,13 +6574,13 @@ var ProgressBar_component = normalizeComponent(
6401
6574
  event.stopPropagation();
6402
6575
 
6403
6576
  // Debug logging
6404
- console.log('Starting drag:', {
6405
- type: type,
6406
- taskId: this.task.id,
6407
- taskType: this.task.type,
6408
- originalStart: this.task.startTime,
6409
- originalEnd: this.task.endTime
6410
- });
6577
+ // console.log('Starting drag:', {
6578
+ // type: type,
6579
+ // taskId: this.task.id,
6580
+ // taskType: this.task.type,
6581
+ // originalStart: this.task.startTime,
6582
+ // originalEnd: this.task.endTime
6583
+ // });
6411
6584
 
6412
6585
  // Safety checks
6413
6586
  if (!this.root || !this.root.state || !this.root.state.options || !this.root.state.options.times) {
@@ -6531,15 +6704,15 @@ var ProgressBar_component = normalizeComponent(
6531
6704
 
6532
6705
  // Debug logging for epic tasks
6533
6706
  if (this.task.type === 'epic') {
6534
- console.log('Epic task drag:', {
6535
- dragType: this.dragType,
6536
- originalStart: this.originalStartTime,
6537
- originalEnd: this.originalEndTime,
6538
- newStart: newStartTime,
6539
- newEnd: newEndTime,
6540
- startChanged: newStartTime !== this.originalStartTime,
6541
- endChanged: newEndTime !== this.originalEndTime
6542
- });
6707
+ // console.log('Epic task drag:', {
6708
+ // dragType: this.dragType,
6709
+ // originalStart: this.originalStartTime,
6710
+ // originalEnd: this.originalEndTime,
6711
+ // newStart: newStartTime,
6712
+ // newEnd: newEndTime,
6713
+ // startChanged: newStartTime !== this.originalStartTime,
6714
+ // endChanged: newEndTime !== this.originalEndTime
6715
+ // });
6543
6716
  }
6544
6717
 
6545
6718
  // Update task data
@@ -6548,15 +6721,15 @@ var ProgressBar_component = normalizeComponent(
6548
6721
  this.task.duration = newEndTime - newStartTime;
6549
6722
 
6550
6723
  // Debug logging
6551
- console.log('Updating task time:', {
6552
- taskId: this.task.id,
6553
- newStartTime,
6554
- newEndTime,
6555
- duration: this.task.duration,
6556
- root: !!this.root,
6557
- timeToPixelOffsetX: !!(this.root && this.root.timeToPixelOffsetX),
6558
- timePerPixel: this.root && this.root.state && this.root.state.options && this.root.state.options.times && this.root.state.options.times.timePerPixel
6559
- });
6724
+ // console.log('Updating task time:', {
6725
+ // taskId: this.task.id,
6726
+ // newStartTime,
6727
+ // newEndTime,
6728
+ // duration: this.task.duration,
6729
+ // root: !!this.root,
6730
+ // timeToPixelOffsetX: !!(this.root && this.root.timeToPixelOffsetX),
6731
+ // timePerPixel: this.root && this.root.state && this.root.state.options && this.root.state.options.times && this.root.state.options.times.timePerPixel
6732
+ // });
6560
6733
 
6561
6734
  // Update task position and width using the correct method
6562
6735
  if (this.root && this.root.timeToPixelOffsetX) {
@@ -6600,15 +6773,15 @@ var ProgressBar_component = normalizeComponent(
6600
6773
  });
6601
6774
 
6602
6775
  // Log the update for debugging
6603
- console.log('Task drag completed:', {
6604
- id: this.task.id,
6605
- dragType: this.dragType,
6606
- startDate: startDate.toLocaleDateString(),
6607
- endDate: endDate.toLocaleDateString(),
6608
- duration: `${durationDays} days`,
6609
- startTime: this.task.startTime,
6610
- endTime: this.task.endTime
6611
- });
6776
+ // console.log('Task drag completed:', {
6777
+ // id: this.task.id,
6778
+ // dragType: this.dragType,
6779
+ // startDate: startDate.toLocaleDateString(),
6780
+ // endDate: endDate.toLocaleDateString(),
6781
+ // duration: `${durationDays} days`,
6782
+ // startTime: this.task.startTime,
6783
+ // endTime: this.task.endTime
6784
+ // });
6612
6785
  },
6613
6786
  /**
6614
6787
  * Show context menu for task actions
@@ -7058,8 +7231,8 @@ var ProgressBar_component = normalizeComponent(
7058
7231
  ;
7059
7232
  var Task_component = normalizeComponent(
7060
7233
  Row_Taskvue_type_script_lang_js,
7061
- Taskvue_type_template_id_2c01a3c8_render,
7062
- Taskvue_type_template_id_2c01a3c8_staticRenderFns,
7234
+ Taskvue_type_template_id_23849415_render,
7235
+ Taskvue_type_template_id_23849415_staticRenderFns,
7063
7236
  false,
7064
7237
  null,
7065
7238
  null,
@@ -7068,8 +7241,8 @@ var Task_component = normalizeComponent(
7068
7241
  )
7069
7242
 
7070
7243
  /* harmony default export */ var Task = (Task_component.exports);
7071
- ;// ./node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib/index.js??clonedRuleSet-83.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
7072
- var Milestonevue_type_template_id_4cea99c4_render = function render() {
7244
+ ;// ./node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib/index.js??clonedRuleSet-83.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
7245
+ var Milestonevue_type_template_id_c9bfeb4a_render = function render() {
7073
7246
  var _vm = this,
7074
7247
  _c = _vm._self._c;
7075
7248
  return _c('g', {
@@ -7181,16 +7354,17 @@ var Milestonevue_type_template_id_4cea99c4_render = function render() {
7181
7354
  "clip-path": 'url(#' + _vm.clipPathId + ')'
7182
7355
  }
7183
7356
  }), _c('rect', {
7184
- staticClass: "gantt-elastic__chart-row-extend-handle",
7357
+ staticClass: "gantt-elastic__chart-row-extend-handle gantt-elastic__drag-handle",
7185
7358
  staticStyle: {
7186
7359
  "pointer-events": "all",
7187
- "z-index": "20"
7360
+ "z-index": "50",
7361
+ "cursor": "ew-resize !important"
7188
7362
  },
7189
7363
  style: _vm.root.style['chart-row-extend-handle'],
7190
7364
  attrs: {
7191
- "x": "8",
7365
+ "x": "0",
7192
7366
  "y": "0",
7193
- "width": 8,
7367
+ "width": 12,
7194
7368
  "height": _vm.task.height
7195
7369
  },
7196
7370
  on: {
@@ -7204,16 +7378,17 @@ var Milestonevue_type_template_id_4cea99c4_render = function render() {
7204
7378
  }
7205
7379
  }
7206
7380
  }), _c('rect', {
7207
- staticClass: "gantt-elastic__chart-row-extend-handle",
7381
+ staticClass: "gantt-elastic__chart-row-extend-handle gantt-elastic__drag-handle",
7208
7382
  staticStyle: {
7209
7383
  "pointer-events": "all",
7210
- "z-index": "20"
7384
+ "z-index": "50",
7385
+ "cursor": "ew-resize !important"
7211
7386
  },
7212
7387
  style: _vm.root.style['chart-row-extend-handle'],
7213
7388
  attrs: {
7214
- "x": _vm.task.width - 8,
7389
+ "x": _vm.task.width - 12,
7215
7390
  "y": "0",
7216
- "width": 8,
7391
+ "width": 12,
7217
7392
  "height": _vm.task.height
7218
7393
  },
7219
7394
  on: {
@@ -7232,7 +7407,7 @@ var Milestonevue_type_template_id_4cea99c4_render = function render() {
7232
7407
  }
7233
7408
  }) : _vm._e()], 1);
7234
7409
  };
7235
- var Milestonevue_type_template_id_4cea99c4_staticRenderFns = [];
7410
+ var Milestonevue_type_template_id_c9bfeb4a_staticRenderFns = [];
7236
7411
 
7237
7412
  ;// ./node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib/index.js??clonedRuleSet-83.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
7238
7413
 
@@ -7314,8 +7489,8 @@ var Milestonevue_type_template_id_4cea99c4_staticRenderFns = [];
7314
7489
  ;
7315
7490
  var Milestone_component = normalizeComponent(
7316
7491
  Row_Milestonevue_type_script_lang_js,
7317
- Milestonevue_type_template_id_4cea99c4_render,
7318
- Milestonevue_type_template_id_4cea99c4_staticRenderFns,
7492
+ Milestonevue_type_template_id_c9bfeb4a_render,
7493
+ Milestonevue_type_template_id_c9bfeb4a_staticRenderFns,
7319
7494
  false,
7320
7495
  null,
7321
7496
  null,
@@ -7324,8 +7499,8 @@ var Milestone_component = normalizeComponent(
7324
7499
  )
7325
7500
 
7326
7501
  /* harmony default export */ var Milestone = (Milestone_component.exports);
7327
- ;// ./node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib/index.js??clonedRuleSet-83.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
7328
- var Projectvue_type_template_id_5dcaf9ef_render = function render() {
7502
+ ;// ./node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib/index.js??clonedRuleSet-83.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
7503
+ var Projectvue_type_template_id_72239142_render = function render() {
7329
7504
  var _vm = this,
7330
7505
  _c = _vm._self._c;
7331
7506
  return _c('g', {
@@ -7437,16 +7612,17 @@ var Projectvue_type_template_id_5dcaf9ef_render = function render() {
7437
7612
  "clip-path": 'url(#' + _vm.clipPathId + ')'
7438
7613
  }
7439
7614
  }), _c('rect', {
7440
- staticClass: "gantt-elastic__chart-row-extend-handle",
7615
+ staticClass: "gantt-elastic__chart-row-extend-handle gantt-elastic__drag-handle",
7441
7616
  staticStyle: {
7442
7617
  "pointer-events": "all",
7443
- "z-index": "20"
7618
+ "z-index": "50",
7619
+ "cursor": "ew-resize !important"
7444
7620
  },
7445
7621
  style: _vm.root.style['chart-row-extend-handle'],
7446
7622
  attrs: {
7447
- "x": "8",
7623
+ "x": "0",
7448
7624
  "y": "0",
7449
- "width": 8,
7625
+ "width": 12,
7450
7626
  "height": _vm.task.height
7451
7627
  },
7452
7628
  on: {
@@ -7460,16 +7636,17 @@ var Projectvue_type_template_id_5dcaf9ef_render = function render() {
7460
7636
  }
7461
7637
  }
7462
7638
  }), _c('rect', {
7463
- staticClass: "gantt-elastic__chart-row-extend-handle",
7639
+ staticClass: "gantt-elastic__chart-row-extend-handle gantt-elastic__drag-handle",
7464
7640
  staticStyle: {
7465
7641
  "pointer-events": "all",
7466
- "z-index": "20"
7642
+ "z-index": "50",
7643
+ "cursor": "ew-resize !important"
7467
7644
  },
7468
7645
  style: _vm.root.style['chart-row-extend-handle'],
7469
7646
  attrs: {
7470
- "x": _vm.task.width - 8,
7647
+ "x": _vm.task.width - 12,
7471
7648
  "y": "0",
7472
- "width": 8,
7649
+ "width": 12,
7473
7650
  "height": _vm.task.height
7474
7651
  },
7475
7652
  on: {
@@ -7488,7 +7665,7 @@ var Projectvue_type_template_id_5dcaf9ef_render = function render() {
7488
7665
  }
7489
7666
  }) : _vm._e()], 1);
7490
7667
  };
7491
- var Projectvue_type_template_id_5dcaf9ef_staticRenderFns = [];
7668
+ var Projectvue_type_template_id_72239142_staticRenderFns = [];
7492
7669
 
7493
7670
  ;// ./node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib/index.js??clonedRuleSet-83.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
7494
7671
 
@@ -7588,8 +7765,8 @@ var Projectvue_type_template_id_5dcaf9ef_staticRenderFns = [];
7588
7765
  ;
7589
7766
  var Project_component = normalizeComponent(
7590
7767
  Row_Projectvue_type_script_lang_js,
7591
- Projectvue_type_template_id_5dcaf9ef_render,
7592
- Projectvue_type_template_id_5dcaf9ef_staticRenderFns,
7768
+ Projectvue_type_template_id_72239142_render,
7769
+ Projectvue_type_template_id_72239142_staticRenderFns,
7593
7770
  false,
7594
7771
  null,
7595
7772
  null,
@@ -7598,8 +7775,8 @@ var Project_component = normalizeComponent(
7598
7775
  )
7599
7776
 
7600
7777
  /* harmony default export */ var Project = (Project_component.exports);
7601
- ;// ./node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib/index.js??clonedRuleSet-83.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
7602
- var Epicvue_type_template_id_6e337196_render = function render() {
7778
+ ;// ./node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib/index.js??clonedRuleSet-83.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
7779
+ var Epicvue_type_template_id_80ad2e9c_render = function render() {
7603
7780
  var _vm = this,
7604
7781
  _c = _vm._self._c;
7605
7782
  return _c('g', {
@@ -7713,16 +7890,17 @@ var Epicvue_type_template_id_6e337196_render = function render() {
7713
7890
  "clip-path": 'url(#' + _vm.clipPathId + ')'
7714
7891
  }
7715
7892
  }) : _vm._e(), _c('rect', {
7716
- staticClass: "gantt-elastic__chart-row-extend-handle",
7893
+ staticClass: "gantt-elastic__chart-row-extend-handle gantt-elastic__drag-handle",
7717
7894
  staticStyle: {
7718
7895
  "pointer-events": "all",
7719
- "z-index": "30"
7896
+ "z-index": "50",
7897
+ "cursor": "ew-resize !important"
7720
7898
  },
7721
7899
  style: _vm.root.style['chart-row-extend-handle'],
7722
7900
  attrs: {
7723
- "x": "8",
7901
+ "x": "0",
7724
7902
  "y": "0",
7725
- "width": 8,
7903
+ "width": 12,
7726
7904
  "height": _vm.task.height
7727
7905
  },
7728
7906
  on: {
@@ -7736,16 +7914,17 @@ var Epicvue_type_template_id_6e337196_render = function render() {
7736
7914
  }
7737
7915
  }
7738
7916
  }), _c('rect', {
7739
- staticClass: "gantt-elastic__chart-row-extend-handle",
7917
+ staticClass: "gantt-elastic__chart-row-extend-handle gantt-elastic__drag-handle",
7740
7918
  staticStyle: {
7741
7919
  "pointer-events": "all",
7742
- "z-index": "30"
7920
+ "z-index": "50",
7921
+ "cursor": "ew-resize !important"
7743
7922
  },
7744
7923
  style: _vm.root.style['chart-row-extend-handle'],
7745
7924
  attrs: {
7746
- "x": _vm.task.width - 8,
7925
+ "x": _vm.task.width - 12,
7747
7926
  "y": "0",
7748
- "width": 8,
7927
+ "width": 12,
7749
7928
  "height": _vm.task.height
7750
7929
  },
7751
7930
  on: {
@@ -7764,7 +7943,7 @@ var Epicvue_type_template_id_6e337196_render = function render() {
7764
7943
  }
7765
7944
  }) : _vm._e()], 1);
7766
7945
  };
7767
- var Epicvue_type_template_id_6e337196_staticRenderFns = [];
7946
+ var Epicvue_type_template_id_80ad2e9c_staticRenderFns = [];
7768
7947
 
7769
7948
  ;// ./node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib/index.js??clonedRuleSet-83.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
7770
7949
 
@@ -7864,8 +8043,8 @@ var Epicvue_type_template_id_6e337196_staticRenderFns = [];
7864
8043
  ;
7865
8044
  var Epic_component = normalizeComponent(
7866
8045
  Row_Epicvue_type_script_lang_js,
7867
- Epicvue_type_template_id_6e337196_render,
7868
- Epicvue_type_template_id_6e337196_staticRenderFns,
8046
+ Epicvue_type_template_id_80ad2e9c_render,
8047
+ Epicvue_type_template_id_80ad2e9c_staticRenderFns,
7869
8048
  false,
7870
8049
  null,
7871
8050
  null,
@@ -7874,8 +8053,8 @@ var Epic_component = normalizeComponent(
7874
8053
  )
7875
8054
 
7876
8055
  /* harmony default export */ var Epic = (Epic_component.exports);
7877
- ;// ./node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib/index.js??clonedRuleSet-83.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
7878
- var Subtaskvue_type_template_id_339b7174_render = function render() {
8056
+ ;// ./node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib/index.js??clonedRuleSet-83.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
8057
+ var Subtaskvue_type_template_id_52219a35_render = function render() {
7879
8058
  var _vm = this,
7880
8059
  _c = _vm._self._c;
7881
8060
  return _c('g', {
@@ -7987,16 +8166,17 @@ var Subtaskvue_type_template_id_339b7174_render = function render() {
7987
8166
  "clip-path": 'url(#' + _vm.clipPathId + ')'
7988
8167
  }
7989
8168
  }), _c('rect', {
7990
- staticClass: "gantt-elastic__chart-row-extend-handle",
8169
+ staticClass: "gantt-elastic__chart-row-extend-handle gantt-elastic__drag-handle",
7991
8170
  staticStyle: {
7992
8171
  "pointer-events": "all",
7993
- "z-index": "20"
8172
+ "z-index": "50",
8173
+ "cursor": "ew-resize !important"
7994
8174
  },
7995
8175
  style: _vm.root.style['chart-row-extend-handle'],
7996
8176
  attrs: {
7997
- "x": "8",
8177
+ "x": "0",
7998
8178
  "y": "0",
7999
- "width": 8,
8179
+ "width": 12,
8000
8180
  "height": _vm.task.height
8001
8181
  },
8002
8182
  on: {
@@ -8010,16 +8190,17 @@ var Subtaskvue_type_template_id_339b7174_render = function render() {
8010
8190
  }
8011
8191
  }
8012
8192
  }), _c('rect', {
8013
- staticClass: "gantt-elastic__chart-row-extend-handle",
8193
+ staticClass: "gantt-elastic__chart-row-extend-handle gantt-elastic__drag-handle",
8014
8194
  staticStyle: {
8015
8195
  "pointer-events": "all",
8016
- "z-index": "20"
8196
+ "z-index": "50",
8197
+ "cursor": "ew-resize !important"
8017
8198
  },
8018
8199
  style: _vm.root.style['chart-row-extend-handle'],
8019
8200
  attrs: {
8020
- "x": _vm.task.width - 8,
8201
+ "x": _vm.task.width - 12,
8021
8202
  "y": "0",
8022
- "width": 8,
8203
+ "width": 12,
8023
8204
  "height": _vm.task.height
8024
8205
  },
8025
8206
  on: {
@@ -8038,7 +8219,7 @@ var Subtaskvue_type_template_id_339b7174_render = function render() {
8038
8219
  }
8039
8220
  }) : _vm._e()], 1);
8040
8221
  };
8041
- var Subtaskvue_type_template_id_339b7174_staticRenderFns = [];
8222
+ var Subtaskvue_type_template_id_52219a35_staticRenderFns = [];
8042
8223
 
8043
8224
  ;// ./node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib/index.js??clonedRuleSet-83.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
8044
8225
 
@@ -8110,8 +8291,8 @@ var Subtaskvue_type_template_id_339b7174_staticRenderFns = [];
8110
8291
  ;
8111
8292
  var Subtask_component = normalizeComponent(
8112
8293
  Row_Subtaskvue_type_script_lang_js,
8113
- Subtaskvue_type_template_id_339b7174_render,
8114
- Subtaskvue_type_template_id_339b7174_staticRenderFns,
8294
+ Subtaskvue_type_template_id_52219a35_render,
8295
+ Subtaskvue_type_template_id_52219a35_staticRenderFns,
8115
8296
  false,
8116
8297
  null,
8117
8298
  null,
@@ -8120,8 +8301,8 @@ var Subtask_component = normalizeComponent(
8120
8301
  )
8121
8302
 
8122
8303
  /* harmony default export */ var Subtask = (Subtask_component.exports);
8123
- ;// ./node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib/index.js??clonedRuleSet-83.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
8124
- var Storyvue_type_template_id_3d0395f2_render = function render() {
8304
+ ;// ./node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib/index.js??clonedRuleSet-83.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
8305
+ var Storyvue_type_template_id_5d688d0c_render = function render() {
8125
8306
  var _vm = this,
8126
8307
  _c = _vm._self._c;
8127
8308
  return _c('g', {
@@ -8233,16 +8414,17 @@ var Storyvue_type_template_id_3d0395f2_render = function render() {
8233
8414
  "clip-path": 'url(#' + _vm.clipPathId + ')'
8234
8415
  }
8235
8416
  }), _c('rect', {
8236
- staticClass: "gantt-elastic__chart-row-extend-handle",
8417
+ staticClass: "gantt-elastic__chart-row-extend-handle gantt-elastic__drag-handle",
8237
8418
  staticStyle: {
8238
8419
  "pointer-events": "all",
8239
- "z-index": "20"
8420
+ "z-index": "50",
8421
+ "cursor": "ew-resize !important"
8240
8422
  },
8241
8423
  style: _vm.root.style['chart-row-extend-handle'],
8242
8424
  attrs: {
8243
- "x": "8",
8425
+ "x": "0",
8244
8426
  "y": "0",
8245
- "width": 8,
8427
+ "width": 12,
8246
8428
  "height": _vm.task.height
8247
8429
  },
8248
8430
  on: {
@@ -8256,16 +8438,17 @@ var Storyvue_type_template_id_3d0395f2_render = function render() {
8256
8438
  }
8257
8439
  }
8258
8440
  }), _c('rect', {
8259
- staticClass: "gantt-elastic__chart-row-extend-handle",
8441
+ staticClass: "gantt-elastic__chart-row-extend-handle gantt-elastic__drag-handle",
8260
8442
  staticStyle: {
8261
8443
  "pointer-events": "all",
8262
- "z-index": "20"
8444
+ "z-index": "50",
8445
+ "cursor": "ew-resize !important"
8263
8446
  },
8264
8447
  style: _vm.root.style['chart-row-extend-handle'],
8265
8448
  attrs: {
8266
- "x": _vm.task.width - 8,
8449
+ "x": _vm.task.width - 12,
8267
8450
  "y": "0",
8268
- "width": 8,
8451
+ "width": 12,
8269
8452
  "height": _vm.task.height
8270
8453
  },
8271
8454
  on: {
@@ -8284,7 +8467,7 @@ var Storyvue_type_template_id_3d0395f2_render = function render() {
8284
8467
  }
8285
8468
  }) : _vm._e()], 1);
8286
8469
  };
8287
- var Storyvue_type_template_id_3d0395f2_staticRenderFns = [];
8470
+ var Storyvue_type_template_id_5d688d0c_staticRenderFns = [];
8288
8471
 
8289
8472
  ;// ./node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib/index.js??clonedRuleSet-83.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
8290
8473
 
@@ -8376,8 +8559,8 @@ var Storyvue_type_template_id_3d0395f2_staticRenderFns = [];
8376
8559
  ;
8377
8560
  var Story_component = normalizeComponent(
8378
8561
  Row_Storyvue_type_script_lang_js,
8379
- Storyvue_type_template_id_3d0395f2_render,
8380
- Storyvue_type_template_id_3d0395f2_staticRenderFns,
8562
+ Storyvue_type_template_id_5d688d0c_render,
8563
+ Storyvue_type_template_id_5d688d0c_staticRenderFns,
8381
8564
  false,
8382
8565
  null,
8383
8566
  null,
@@ -8435,6 +8618,7 @@ var Story_component = normalizeComponent(
8435
8618
  */
8436
8619
  handleTaskUpdated(updatedTask) {
8437
8620
  // Emit event to parent component
8621
+ console.log("task-updated --Chart");
8438
8622
  this.$emit('task-updated', updatedTask);
8439
8623
 
8440
8624
  // Update the task in the root state
@@ -8486,8 +8670,8 @@ var Story_component = normalizeComponent(
8486
8670
  ;
8487
8671
  var Chart_component = normalizeComponent(
8488
8672
  Chart_Chartvue_type_script_lang_js,
8489
- Chartvue_type_template_id_2bc7fe5e_render,
8490
- Chartvue_type_template_id_2bc7fe5e_staticRenderFns,
8673
+ Chartvue_type_template_id_0856b85c_render,
8674
+ Chartvue_type_template_id_0856b85c_staticRenderFns,
8491
8675
  false,
8492
8676
  null,
8493
8677
  null,
@@ -8583,6 +8767,7 @@ let ignoreScrollEvents = false;
8583
8767
  */
8584
8768
  handleTaskUpdated(updatedTask) {
8585
8769
  // Emit event to parent component
8770
+ console.log("task-updated --MainView");
8586
8771
  this.$emit('task-updated', updatedTask);
8587
8772
  },
8588
8773
  /**
@@ -8701,8 +8886,8 @@ let ignoreScrollEvents = false;
8701
8886
  ;
8702
8887
  var MainView_component = normalizeComponent(
8703
8888
  components_MainViewvue_type_script_lang_js,
8704
- MainViewvue_type_template_id_33392d22_render,
8705
- MainViewvue_type_template_id_33392d22_staticRenderFns,
8889
+ MainViewvue_type_template_id_79e1eba9_render,
8890
+ MainViewvue_type_template_id_79e1eba9_staticRenderFns,
8706
8891
  false,
8707
8892
  null,
8708
8893
  null,
@@ -11351,12 +11536,99 @@ const GanttElastic = {
11351
11536
  unwatchOutputTasks: null,
11352
11537
  unwatchOutputOptions: null,
11353
11538
  unwatchOutputStyle: null
11354
- }
11539
+ },
11540
+ // Performance optimization properties
11541
+ updateQueue: [],
11542
+ updateTimeout: null,
11543
+ lastUpdateTime: 0,
11544
+ updateThrottleDelay: 16,
11545
+ // ~60fps
11546
+ isUpdating: false
11355
11547
  };
11356
11548
  },
11357
11549
  methods: {
11358
11550
  mergeDeep,
11359
11551
  mergeDeepReactive,
11552
+ /**
11553
+ * Debounced update method to prevent excessive re-renders
11554
+ */
11555
+ debouncedUpdate(updateFn, context = 'general') {
11556
+ const now = Date.now();
11557
+
11558
+ // Add to update queue
11559
+ this.updateQueue.push({
11560
+ fn: updateFn,
11561
+ context,
11562
+ timestamp: now
11563
+ });
11564
+
11565
+ // Clear existing timeout
11566
+ if (this.updateTimeout) {
11567
+ clearTimeout(this.updateTimeout);
11568
+ }
11569
+
11570
+ // Set new timeout
11571
+ this.updateTimeout = setTimeout(() => {
11572
+ this.processUpdateQueue();
11573
+ }, this.updateThrottleDelay);
11574
+ },
11575
+ /**
11576
+ * Process the update queue
11577
+ */
11578
+ processUpdateQueue() {
11579
+ if (this.isUpdating || this.updateQueue.length === 0) {
11580
+ return;
11581
+ }
11582
+ this.isUpdating = true;
11583
+ const startTime = performance.now();
11584
+ try {
11585
+ // Group updates by context
11586
+ const groupedUpdates = {};
11587
+ this.updateQueue.forEach(update => {
11588
+ if (!groupedUpdates[update.context]) {
11589
+ groupedUpdates[update.context] = [];
11590
+ }
11591
+ groupedUpdates[update.context].push(update);
11592
+ });
11593
+
11594
+ // Process each group
11595
+ Object.keys(groupedUpdates).forEach(context => {
11596
+ const updates = groupedUpdates[context];
11597
+ const latestUpdate = updates[updates.length - 1]; // Use the latest update
11598
+ latestUpdate.fn();
11599
+ });
11600
+
11601
+ // Clear the queue
11602
+ this.updateQueue = [];
11603
+
11604
+ // Performance monitoring
11605
+ const endTime = performance.now();
11606
+ const duration = endTime - startTime;
11607
+ if (duration > 16) {
11608
+ // Log if update takes longer than one frame
11609
+ console.warn(`Gantt update took ${duration.toFixed(2)}ms for ${Object.keys(groupedUpdates).length} contexts`);
11610
+ }
11611
+ } finally {
11612
+ this.isUpdating = false;
11613
+ }
11614
+ },
11615
+ /**
11616
+ * Performance monitoring method
11617
+ */
11618
+ logPerformanceMetrics() {
11619
+ const metrics = {
11620
+ totalTasks: this.state.tasks.length,
11621
+ visibleTasks: this.visibleTasks.length,
11622
+ updateQueueLength: this.updateQueue.length,
11623
+ isUpdating: this.isUpdating,
11624
+ memoryUsage: performance.memory ? {
11625
+ used: Math.round(performance.memory.usedJSHeapSize / 1024 / 1024) + 'MB',
11626
+ total: Math.round(performance.memory.totalJSHeapSize / 1024 / 1024) + 'MB'
11627
+ } : 'Not available'
11628
+ };
11629
+ console.log('Gantt Performance Metrics:', metrics);
11630
+ return metrics;
11631
+ },
11360
11632
  onViewModeChanged(mode) {
11361
11633
  // Update the calendar view mode
11362
11634
  this.options.calendar.viewMode = mode;
@@ -11384,6 +11656,15 @@ const GanttElastic = {
11384
11656
  }
11385
11657
  }
11386
11658
 
11659
+ // Emit event to parent component
11660
+ this.$emit('view-mode-changed', mode);
11661
+
11662
+ // Also emit to root for plugin usage
11663
+ this.$root.$emit('gantt-view-mode-changed', mode);
11664
+
11665
+ // Log the view mode change for debugging
11666
+ console.log('View mode changed - from GanttElastic:', mode);
11667
+
11387
11668
  // Force recalculation by triggering a reactive update
11388
11669
  this.$nextTick(() => {
11389
11670
  this.$forceUpdate();
@@ -11409,15 +11690,12 @@ const GanttElastic = {
11409
11690
  */
11410
11691
  handleTaskUpdated(updatedTask) {
11411
11692
  // Emit event to parent component
11693
+ console.log('Task updated -- GanttElastic:');
11412
11694
  this.$emit('task-updated', updatedTask);
11695
+ this.$emit('gantt-task-updated', updatedTask);
11413
11696
 
11414
- // Log the update for debugging
11415
- console.log('Task updated:', updatedTask);
11416
-
11417
- // You can add additional logic here like:
11418
- // - Save to backend
11419
- // - Update local storage
11420
- // - Trigger other updates
11697
+ // Also emit to root for plugin usage
11698
+ this.$root.$emit('gantt-task-updated', updatedTask);
11421
11699
  },
11422
11700
  /**
11423
11701
  * Calculate height of scrollbar in current browser
@@ -12637,7 +12915,9 @@ const GanttElastic = {
12637
12915
  this.state.options.height = this.getHeight(visibleTasks) - heightCompensation;
12638
12916
  this.state.options.allVisibleTasksHeight = this.getTasksHeight(visibleTasks);
12639
12917
  this.state.options.outerHeight = this.getHeight(visibleTasks, true) - heightCompensation;
12640
- let len = visibleTasks.length;
12918
+
12919
+ // Calculate task positions only for visible tasks
12920
+ const len = visibleTasks.length;
12641
12921
  for (let index = 0; index < len; index++) {
12642
12922
  let task = visibleTasks[index];
12643
12923
  task.width = task.duration / this.state.options.times.timePerPixel - this.style['grid-line-vertical']['stroke-width'];
@@ -12685,19 +12965,22 @@ const GanttElastic = {
12685
12965
  this.state.unwatchTasks = this.$watch('tasks', tasks => {
12686
12966
  const notEqual = notEqualDeep(tasks, this.outputTasks);
12687
12967
  if (notEqual) {
12688
- this.setup('tasks');
12968
+ this.debouncedUpdate(() => {
12969
+ this.setup('tasks');
12970
+ this.$nextTick(() => {
12971
+ this.recalculateHeight();
12972
+ });
12973
+ }, 'tasks');
12689
12974
  }
12690
- // Recalculate height when tasks change
12691
- this.$nextTick(() => {
12692
- this.recalculateHeight();
12693
- });
12694
12975
  }, {
12695
12976
  deep: true
12696
12977
  });
12697
12978
  this.state.unwatchOptions = this.$watch('options', opts => {
12698
12979
  const notEqual = notEqualDeep(opts, this.outputOptions);
12699
12980
  if (notEqual) {
12700
- this.setup('options');
12981
+ this.debouncedUpdate(() => {
12982
+ this.setup('options');
12983
+ }, 'options');
12701
12984
  }
12702
12985
  }, {
12703
12986
  deep: true
@@ -12761,6 +13044,38 @@ const GanttElastic = {
12761
13044
  this.$root.$emit('gantt-elastic-mounted', this);
12762
13045
  this.$emit('mounted', this);
12763
13046
  this.$root.$emit('gantt-elastic-ready', this);
13047
+
13048
+ // Expose methods for plugin usage
13049
+ this.$gantt = {
13050
+ onTaskUpdated: this.handleTaskUpdated,
13051
+ onViewModeChanged: this.onViewModeChanged,
13052
+ getTasks: () => this.state.tasks,
13053
+ updateTask: (taskId, updates) => {
13054
+ const taskIndex = this.state.tasks.findIndex(task => task.id === taskId);
13055
+ if (taskIndex !== -1) {
13056
+ Object.assign(this.state.tasks[taskIndex], updates);
13057
+ this.$forceUpdate();
13058
+ }
13059
+ }
13060
+ };
13061
+
13062
+ /*
13063
+ * PLUGIN USAGE EXAMPLE:
13064
+ *
13065
+ * // Listen to events when using as plugin:
13066
+ * this.$root.$on('gantt-task-updated', (updatedTask) => {
13067
+ * console.log('Task updated:', updatedTask);
13068
+ * });
13069
+ *
13070
+ * this.$root.$on('gantt-view-mode-changed', (mode) => {
13071
+ * console.log('View mode changed:', mode);
13072
+ * });
13073
+ *
13074
+ * // Access gantt methods:
13075
+ * const ganttInstance = this.$refs.ganttChart.$gantt;
13076
+ * ganttInstance.updateTask(1, { label: 'New Task Name' });
13077
+ * const tasks = ganttInstance.getTasks();
13078
+ */
12764
13079
  },
12765
13080
  /**
12766
13081
  * Emit event when data was changed and before update (you can cleanup dom events here for example)
@@ -12800,10 +13115,10 @@ const GanttElastic = {
12800
13115
  /* harmony default export */ var GanttElasticvue_type_script_lang_js = (GanttElastic);
12801
13116
  ;// ./src/GanttElastic.vue?vue&type=script&lang=js
12802
13117
  /* harmony default export */ var src_GanttElasticvue_type_script_lang_js = (GanttElasticvue_type_script_lang_js);
12803
- ;// ./node_modules/mini-css-extract-plugin/dist/loader.js??clonedRuleSet-55.use[0]!./node_modules/@vue/cli-service/node_modules/css-loader/dist/cjs.js??clonedRuleSet-55.use[1]!./node_modules/@vue/vue-loader-v15/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-55.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
13118
+ ;// ./node_modules/mini-css-extract-plugin/dist/loader.js??clonedRuleSet-55.use[0]!./node_modules/@vue/cli-service/node_modules/css-loader/dist/cjs.js??clonedRuleSet-55.use[1]!./node_modules/@vue/vue-loader-v15/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-55.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
12804
13119
  // extracted by mini-css-extract-plugin
12805
13120
 
12806
- ;// ./src/GanttElastic.vue?vue&type=style&index=0&id=100984c8&prod&lang=css
13121
+ ;// ./src/GanttElastic.vue?vue&type=style&index=0&id=95091692&prod&lang=css
12807
13122
 
12808
13123
  ;// ./src/GanttElastic.vue
12809
13124
 
@@ -12816,8 +13131,8 @@ const GanttElastic = {
12816
13131
 
12817
13132
  var GanttElastic_component = normalizeComponent(
12818
13133
  src_GanttElasticvue_type_script_lang_js,
12819
- GanttElasticvue_type_template_id_100984c8_render,
12820
- GanttElasticvue_type_template_id_100984c8_staticRenderFns,
13134
+ GanttElasticvue_type_template_id_95091692_render,
13135
+ GanttElasticvue_type_template_id_95091692_staticRenderFns,
12821
13136
  false,
12822
13137
  null,
12823
13138
  null,