@operato/gantt 7.0.21 → 7.0.23

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.
@@ -1,8 +1,9 @@
1
1
  import { __decorate } from "tslib";
2
2
  import { LitElement, html, css } from 'lit';
3
- import { customElement, property } from 'lit/decorators.js';
3
+ import { customElement, property, query } from 'lit/decorators.js';
4
4
  import * as d3 from 'd3';
5
5
  import { ScrollbarStyles } from '@operato/styles';
6
+ import { drawTimeScaleHeader } from './draw-time-scale-header';
6
7
  let OxResourceChart = class OxResourceChart extends LitElement {
7
8
  constructor() {
8
9
  super(...arguments);
@@ -10,8 +11,9 @@ let OxResourceChart = class OxResourceChart extends LitElement {
10
11
  this.toDate = new Date(new Date().getFullYear(), 11, 31).toISOString().split('T')[0];
11
12
  this.axisScale = 'week-day';
12
13
  this.resources = [];
13
- this._baseWidth = 30;
14
- this._level = 'week-day';
14
+ this.tasks = [];
15
+ this.baseWidth = 30;
16
+ this.level = 'week-day';
15
17
  }
16
18
  static { this.styles = [
17
19
  ScrollbarStyles,
@@ -21,43 +23,51 @@ let OxResourceChart = class OxResourceChart extends LitElement {
21
23
  overflow: hidden;
22
24
  position: relative;
23
25
  }
26
+
24
27
  div[chart-container] {
25
- display: block;
28
+ display: flex;
29
+ flex-direction: column;
30
+
26
31
  overflow-x: auto;
27
- overflow-y: hidden;
28
- }
29
- svg {
30
- min-width: 100%;
32
+ overflow-y: auto;
31
33
  }
34
+
32
35
  svg[header] {
33
36
  display: block;
34
37
  min-width: 100%;
35
38
  box-sizing: border-box;
36
39
  border-bottom: 1px solid var(--ox-gantt-header-border-color, var(--md-sys-color-on-secondary-container));
37
- height: 40px;
40
+ height: 30px;
38
41
  background-color: var(--ox-gantt-header-background-color, var(--md-sys-color-secondary-container));
39
42
  color: var(--ox-gantt-header-color, var(--md-sys-color-on-secondary-container));
40
43
  position: sticky;
41
44
  top: 0;
42
45
  z-index: 1;
43
46
  }
47
+
44
48
  svg[body] {
49
+ flex: 1;
45
50
  display: block;
46
51
  min-width: 100%;
47
52
  }
53
+
48
54
  .top-axis text,
49
55
  .bottom-axis text {
50
56
  font-size: 12px;
51
57
  }
58
+
52
59
  .grid line {
53
60
  stroke: #e0e0e0;
54
61
  }
62
+
55
63
  .grid path {
56
64
  stroke-width: 0;
57
65
  }
66
+
58
67
  .no-select {
59
68
  user-select: none;
60
69
  }
70
+
61
71
  .selected {
62
72
  stroke-width: 2px;
63
73
  stroke: var(--ox-gantt-selected-color, blue);
@@ -76,57 +86,53 @@ let OxResourceChart = class OxResourceChart extends LitElement {
76
86
  if (changedProperties.has('fromDate') || changedProperties.has('toDate') || changedProperties.has('axisScale')) {
77
87
  this.updateTimeScale();
78
88
  }
79
- if (changedProperties.has('resources')) {
89
+ if (changedProperties.has('resources') || changedProperties.has('tasks')) {
80
90
  this.drawBody();
81
91
  }
82
92
  this.drawAxes();
83
93
  }
84
94
  updateTimeScale() {
85
- this._timeScale = d3
95
+ this.fromTime = new Date(this.fromDate);
96
+ this.toTime = new Date(this.toDate);
97
+ this.timeScale = d3
86
98
  .scaleTime()
87
99
  .domain([d3.timeDay.floor(new Date(this.fromDate)), d3.timeDay.offset(new Date(this.toDate), 1)])
88
100
  .range([0, this.getChartWidth()]);
89
101
  }
90
102
  getChartWidth() {
91
103
  const totalDays = d3.timeDay.count(new Date(this.fromDate), d3.timeDay.offset(new Date(this.toDate), 1));
92
- return (totalDays * this._baseWidth) / this.getScale();
104
+ return (totalDays * this.baseWidth) / this.getScale();
93
105
  }
94
106
  getScale() {
95
- if (this._level == 'quarter-week') {
107
+ if (this.level == 'quarter-week') {
96
108
  return 7 / 2;
97
109
  }
98
- else if (this._level == 'year-month') {
110
+ else if (this.level == 'year-month') {
99
111
  return 30 / 2;
100
112
  }
101
- else if (this._level == 'year-quarter') {
113
+ else if (this.level === 'year-quarter') {
102
114
  return 90 / 2;
103
115
  }
104
116
  return 1;
105
117
  }
106
118
  drawAxes() {
107
- const header = d3.select(this.renderRoot.querySelector('svg[header]'));
108
- header.selectAll('*').remove();
109
- header.attr('width', this.getChartWidth());
110
- const axisTop = d3.axisTop(this._timeScale).tickSize(-20);
111
- const axisBottom = d3.axisBottom(this._timeScale).tickSize(-20);
112
- header.append('g').attr('class', 'top-axis').attr('transform', 'translate(0, 20)').call(axisTop);
113
- header.append('g').attr('class', 'bottom-axis').attr('transform', 'translate(0, 40)').call(axisBottom);
119
+ drawTimeScaleHeader(this.svgHeader, this.timeScale, this.fromTime, this.toTime, this.baseWidth, this.level, false /* 1 level only header */);
114
120
  }
115
121
  drawBody() {
116
- const body = d3.select(this.renderRoot.querySelector('svg[body]'));
122
+ const body = d3.select(this.svgBody);
117
123
  body.selectAll('*').remove();
118
124
  body.attr('width', this.getChartWidth());
119
- // Add grid lines for resource chart
120
125
  if (this.resources.length > 0) {
126
+ const chartHeight = this.resources.length * 30;
121
127
  const addVerticalGridLines = (ticks) => {
122
128
  ticks.forEach(tick => {
123
- const startX = this._timeScale(tick);
129
+ const startX = this.timeScale(tick);
124
130
  body
125
131
  .append('line')
126
132
  .attr('x1', startX)
127
133
  .attr('x2', startX)
128
134
  .attr('y1', 0)
129
- .attr('y2', this.resources.length * 30) // Adjust according to the number of resource rows
135
+ .attr('y2', chartHeight) // Ensure vertical lines extend to the bottom
130
136
  .attr('stroke', 'var(--ox-gantt-color-gridlines, var(--md-sys-color-outline))')
131
137
  .attr('stroke-width', 1);
132
138
  });
@@ -143,36 +149,141 @@ let OxResourceChart = class OxResourceChart extends LitElement {
143
149
  .attr('stroke', 'var(--ox-gantt-color-gridlines, var(--md-sys-color-outline))')
144
150
  .attr('stroke-width', 1);
145
151
  });
152
+ // Ensure the last horizontal line extends to the bottom of the chart
153
+ body
154
+ .append('line')
155
+ .attr('x1', 0)
156
+ .attr('x2', this.getChartWidth())
157
+ .attr('y1', chartHeight)
158
+ .attr('y2', chartHeight)
159
+ .attr('stroke', 'var(--ox-gantt-color-gridlines, var(--md-sys-color-outline))')
160
+ .attr('stroke-width', 1);
146
161
  };
147
- if (this._level === 'week-day') {
148
- const dayTicks = d3.timeDay
162
+ let ticks;
163
+ if (this.level === 'week-day') {
164
+ ticks = d3.timeDay
149
165
  .every(1)
150
166
  .range(d3.timeDay.floor(new Date(this.fromDate)), d3.timeDay.offset(new Date(this.toDate), 1));
151
- addVerticalGridLines(dayTicks);
152
167
  }
153
- else if (this._level === 'quarter-week') {
154
- const weekTicks = d3.timeWeek
168
+ else if (this.level === 'quarter-week') {
169
+ ticks = d3.timeWeek
155
170
  .every(1)
156
171
  .range(d3.timeWeek.floor(new Date(this.fromDate)), d3.timeWeek.offset(new Date(this.toDate), 1));
157
- addVerticalGridLines(weekTicks);
158
172
  }
159
- else if (this._level === 'year-month') {
160
- const monthTicks = d3.timeMonth
173
+ else if (this.level === 'year-month') {
174
+ ticks = d3.timeMonth
161
175
  .every(1)
162
176
  .range(d3.timeMonth.floor(new Date(this.fromDate)), d3.timeMonth.offset(new Date(this.toDate), 1));
163
- addVerticalGridLines(monthTicks);
164
177
  }
165
- else if (this._level === 'year-quarter') {
166
- const quarterTicks = d3.timeMonth
178
+ else if (this.level === 'year-quarter') {
179
+ ticks = d3.timeMonth
167
180
  .every(3)
168
181
  .range(d3.timeMonth.floor(new Date(this.fromDate)), d3.timeMonth.offset(new Date(this.toDate), 3));
169
- addVerticalGridLines(quarterTicks);
170
182
  }
183
+ addVerticalGridLines(ticks);
171
184
  addHorizontalGridLines();
185
+ // Render the resource allocations
186
+ this.renderResourceAllocations(body, ticks);
172
187
  }
173
188
  }
174
- syncScroll(e) {
175
- this.shadowRoot.querySelector('div[chart-container]').scrollLeft = e.detail.offset;
189
+ renderResourceAllocations(body, ticks) {
190
+ const resourceAllocations = this.calculateResourceAllocations(ticks);
191
+ this.resources.forEach((resource, index) => {
192
+ const y = index * 30 + 15; // Center the text vertically in the row
193
+ ticks.forEach(tick => {
194
+ const tickEnd = this.getTickEnd(tick);
195
+ const dateKey = this.formatDateKey(tick, tickEnd);
196
+ const allocation = resourceAllocations[resource.type][dateKey];
197
+ if (allocation > 0) {
198
+ const startX = this.timeScale(tick);
199
+ const tickInterval = this.timeScale(tickEnd) - startX;
200
+ body
201
+ .append('text')
202
+ .attr('x', startX + tickInterval / 2)
203
+ .attr('y', y)
204
+ .attr('text-anchor', 'middle')
205
+ .attr('alignment-baseline', 'middle')
206
+ .attr('dominant-baseline', 'middle')
207
+ .text(allocation)
208
+ .style('font-size', '12px');
209
+ }
210
+ });
211
+ });
212
+ }
213
+ calculateResourceAllocations(ticks) {
214
+ const resourceAllocations = {};
215
+ // Initialize the resourceAllocations object
216
+ this.resources.forEach(resource => {
217
+ resourceAllocations[resource.type] = {};
218
+ ticks.forEach(tick => {
219
+ const tickEnd = this.getTickEnd(tick);
220
+ const dateKey = this.formatDateKey(tick, tickEnd);
221
+ resourceAllocations[resource.type][dateKey] = 0;
222
+ });
223
+ });
224
+ // Function to process tasks recursively
225
+ const processTask = (task) => {
226
+ const startDate = new Date(task.startDate);
227
+ const endDate = new Date(task.endDate);
228
+ let currentDate = startDate;
229
+ while (currentDate <= endDate) {
230
+ const tick = ticks.find(t => currentDate >= t && currentDate < this.getTickEnd(t));
231
+ if (tick) {
232
+ const tickEnd = this.getTickEnd(tick);
233
+ const dateKey = this.formatDateKey(tick, tickEnd);
234
+ (task.resources || []).forEach(resource => {
235
+ if (resourceAllocations[resource.type][dateKey] !== undefined) {
236
+ resourceAllocations[resource.type][dateKey] += resource.allocated;
237
+ }
238
+ });
239
+ }
240
+ currentDate.setDate(currentDate.getDate() + 1);
241
+ }
242
+ // Recursively process child tasks
243
+ if (task.children) {
244
+ task.children.forEach(childTask => processTask(childTask));
245
+ }
246
+ };
247
+ // Process all tasks
248
+ this.tasks.forEach(task => processTask(task));
249
+ return resourceAllocations;
250
+ }
251
+ getTickEnd(tick) {
252
+ if (this.level === 'week-day') {
253
+ return d3.timeDay.offset(tick, 1);
254
+ }
255
+ else if (this.level === 'quarter-week') {
256
+ return d3.timeWeek.offset(tick, 1);
257
+ }
258
+ else if (this.level === 'year-month') {
259
+ return d3.timeMonth.offset(tick, 1);
260
+ }
261
+ else if (this.level === 'year-quarter') {
262
+ return d3.timeMonth.offset(tick, 3);
263
+ }
264
+ return d3.timeDay.offset(tick, 1);
265
+ }
266
+ formatDateKey(start, end) {
267
+ return `${start.toISOString().split('T')[0]}_${end.toISOString().split('T')[0]}`;
268
+ }
269
+ syncTimeScale(detail) {
270
+ this.baseWidth = detail.baseWidth;
271
+ this.level = detail.level;
272
+ this.updateTimeScale();
273
+ this.drawAxes();
274
+ this.drawBody();
275
+ }
276
+ setVerticalOffset(offset) {
277
+ this.container.scrollTop = offset;
278
+ }
279
+ getVerticalOffset() {
280
+ return this.container.scrollTop;
281
+ }
282
+ setHorizontalOffset(offset) {
283
+ this.container.scrollLeft = offset;
284
+ }
285
+ getHorizontalOffset() {
286
+ return this.container.scrollLeft;
176
287
  }
177
288
  };
178
289
  __decorate([
@@ -187,6 +298,18 @@ __decorate([
187
298
  __decorate([
188
299
  property({ type: Array })
189
300
  ], OxResourceChart.prototype, "resources", void 0);
301
+ __decorate([
302
+ property({ type: Array })
303
+ ], OxResourceChart.prototype, "tasks", void 0);
304
+ __decorate([
305
+ query('[chart-container')
306
+ ], OxResourceChart.prototype, "container", void 0);
307
+ __decorate([
308
+ query('svg[header]')
309
+ ], OxResourceChart.prototype, "svgHeader", void 0);
310
+ __decorate([
311
+ query('svg[body]')
312
+ ], OxResourceChart.prototype, "svgBody", void 0);
190
313
  OxResourceChart = __decorate([
191
314
  customElement('ox-resource-chart')
192
315
  ], OxResourceChart);
@@ -1 +1 @@
1
- {"version":3,"file":"ox-resource-chart.js","sourceRoot":"","sources":["../../src/ox-resource-chart.ts"],"names":[],"mappings":"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","sourcesContent":["import { LitElement, html, css, PropertyValues } from 'lit'\nimport { customElement, property } from 'lit/decorators.js'\nimport * as d3 from 'd3'\n\nimport { ScrollbarStyles } from '@operato/styles'\n\n@customElement('ox-resource-chart')\nexport class OxResourceChart extends LitElement {\n static styles = [\n ScrollbarStyles,\n css`\n :host {\n display: flex;\n overflow: hidden;\n position: relative;\n }\n div[chart-container] {\n display: block;\n overflow-x: auto;\n overflow-y: hidden;\n }\n svg {\n min-width: 100%;\n }\n svg[header] {\n display: block;\n min-width: 100%;\n box-sizing: border-box;\n border-bottom: 1px solid var(--ox-gantt-header-border-color, var(--md-sys-color-on-secondary-container));\n height: 40px;\n background-color: var(--ox-gantt-header-background-color, var(--md-sys-color-secondary-container));\n color: var(--ox-gantt-header-color, var(--md-sys-color-on-secondary-container));\n position: sticky;\n top: 0;\n z-index: 1;\n }\n svg[body] {\n display: block;\n min-width: 100%;\n }\n .top-axis text,\n .bottom-axis text {\n font-size: 12px;\n }\n .grid line {\n stroke: #e0e0e0;\n }\n .grid path {\n stroke-width: 0;\n }\n .no-select {\n user-select: none;\n }\n .selected {\n stroke-width: 2px;\n stroke: var(--ox-gantt-selected-color, blue);\n }\n `\n ]\n\n @property({ type: String }) fromDate: string = new Date(new Date().getFullYear(), 0, 1).toISOString().split('T')[0]\n @property({ type: String }) toDate: string = new Date(new Date().getFullYear(), 11, 31).toISOString().split('T')[0]\n @property({ type: String }) axisScale: string = 'week-day'\n @property({ type: Array }) resources: any[] = []\n\n private _timeScale: any\n private _baseWidth: number = 30\n private _level: string = 'week-day'\n\n render() {\n return html`\n <div chart-container>\n <svg header></svg>\n <svg body></svg>\n </div>\n `\n }\n\n updated(changedProperties: PropertyValues<this>) {\n if (changedProperties.has('fromDate') || changedProperties.has('toDate') || changedProperties.has('axisScale')) {\n this.updateTimeScale()\n }\n\n if (changedProperties.has('resources')) {\n this.drawBody()\n }\n\n this.drawAxes()\n }\n\n updateTimeScale() {\n this._timeScale = d3\n .scaleTime()\n .domain([d3.timeDay.floor(new Date(this.fromDate)), d3.timeDay.offset(new Date(this.toDate), 1)])\n .range([0, this.getChartWidth()])\n }\n\n getChartWidth() {\n const totalDays = d3.timeDay.count(new Date(this.fromDate), d3.timeDay.offset(new Date(this.toDate), 1))\n return (totalDays * this._baseWidth) / this.getScale()\n }\n\n getScale() {\n if (this._level == 'quarter-week') {\n return 7 / 2\n } else if (this._level == 'year-month') {\n return 30 / 2\n } else if (this._level == 'year-quarter') {\n return 90 / 2\n }\n return 1\n }\n\n drawAxes() {\n const header = d3.select(this.renderRoot.querySelector('svg[header]')!)\n\n header.selectAll('*').remove()\n header.attr('width', this.getChartWidth())\n\n const axisTop = d3.axisTop(this._timeScale).tickSize(-20)\n const axisBottom = d3.axisBottom(this._timeScale).tickSize(-20)\n\n header.append('g').attr('class', 'top-axis').attr('transform', 'translate(0, 20)').call(axisTop)\n header.append('g').attr('class', 'bottom-axis').attr('transform', 'translate(0, 40)').call(axisBottom)\n }\n\n drawBody() {\n const body = d3.select(this.renderRoot.querySelector('svg[body]')!)\n\n body.selectAll('*').remove()\n body.attr('width', this.getChartWidth())\n\n // Add grid lines for resource chart\n if (this.resources.length > 0) {\n const addVerticalGridLines = (ticks: Date[]) => {\n ticks.forEach(tick => {\n const startX = this._timeScale(tick)\n body\n .append('line')\n .attr('x1', startX)\n .attr('x2', startX)\n .attr('y1', 0)\n .attr('y2', this.resources.length * 30) // Adjust according to the number of resource rows\n .attr('stroke', 'var(--ox-gantt-color-gridlines, var(--md-sys-color-outline))')\n .attr('stroke-width', 1)\n })\n }\n\n const addHorizontalGridLines = () => {\n this.resources.forEach((_, index) => {\n const y = (index + 1) * 30\n body\n .append('line')\n .attr('x1', 0)\n .attr('x2', this.getChartWidth())\n .attr('y1', y)\n .attr('y2', y)\n .attr('stroke', 'var(--ox-gantt-color-gridlines, var(--md-sys-color-outline))')\n .attr('stroke-width', 1)\n })\n }\n\n if (this._level === 'week-day') {\n const dayTicks = d3.timeDay\n .every(1)!\n .range(d3.timeDay.floor(new Date(this.fromDate)), d3.timeDay.offset(new Date(this.toDate), 1))\n addVerticalGridLines(dayTicks)\n } else if (this._level === 'quarter-week') {\n const weekTicks = d3.timeWeek\n .every(1)!\n .range(d3.timeWeek.floor(new Date(this.fromDate)), d3.timeWeek.offset(new Date(this.toDate), 1))\n addVerticalGridLines(weekTicks)\n } else if (this._level === 'year-month') {\n const monthTicks = d3.timeMonth\n .every(1)!\n .range(d3.timeMonth.floor(new Date(this.fromDate)), d3.timeMonth.offset(new Date(this.toDate), 1))\n addVerticalGridLines(monthTicks)\n } else if (this._level === 'year-quarter') {\n const quarterTicks = d3.timeMonth\n .every(3)!\n .range(d3.timeMonth.floor(new Date(this.fromDate)), d3.timeMonth.offset(new Date(this.toDate), 3))\n addVerticalGridLines(quarterTicks)\n }\n\n addHorizontalGridLines()\n }\n }\n\n syncScroll(e: CustomEvent) {\n this.shadowRoot!.querySelector('div[chart-container]')!.scrollLeft = e.detail.offset\n }\n}\n"]}
1
+ {"version":3,"file":"ox-resource-chart.js","sourceRoot":"","sources":["../../src/ox-resource-chart.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,GAAG,EAAkB,MAAM,KAAK,CAAA;AAC3D,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAA;AAClE,OAAO,KAAK,EAAE,MAAM,IAAI,CAAA;AAExB,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAA;AAEjD,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAA;AAIvD,IAAM,eAAe,GAArB,MAAM,eAAgB,SAAQ,UAAU;IAAxC;;QA6DuB,aAAQ,GAAW,IAAI,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAA;QACvF,WAAM,GAAW,IAAI,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAA;QACvF,cAAS,GAAW,UAAU,CAAA;QAC/B,cAAS,GAAU,EAAE,CAAA;QACrB,UAAK,GAAW,EAAE,CAAA;QAGrC,cAAS,GAAW,EAAE,CAAA;QACtB,UAAK,GAAc,UAAU,CAAA;IAgQvC,CAAC;aApUQ,WAAM,GAAG;QACd,eAAe;QACf,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KAuDF;KACF,AA1DY,CA0DZ;IAkBD,MAAM;QACJ,OAAO,IAAI,CAAA;;;;;KAKV,CAAA;IACH,CAAC;IAED,OAAO,CAAC,iBAAuC;QAC7C,IAAI,iBAAiB,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,iBAAiB,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,iBAAiB,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE,CAAC;YAC/G,IAAI,CAAC,eAAe,EAAE,CAAA;QACxB,CAAC;QAED,IAAI,iBAAiB,CAAC,GAAG,CAAC,WAAW,CAAC,IAAI,iBAAiB,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;YACzE,IAAI,CAAC,QAAQ,EAAE,CAAA;QACjB,CAAC;QAED,IAAI,CAAC,QAAQ,EAAE,CAAA;IACjB,CAAC;IAED,eAAe;QACb,IAAI,CAAC,QAAQ,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;QACvC,IAAI,CAAC,MAAM,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;QAEnC,IAAI,CAAC,SAAS,GAAG,EAAE;aAChB,SAAS,EAAE;aACX,MAAM,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;aAChG,KAAK,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,aAAa,EAAE,CAAC,CAAC,CAAA;IACrC,CAAC;IAED,aAAa;QACX,MAAM,SAAS,GAAG,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;QACxG,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAA;IACvD,CAAC;IAED,QAAQ;QACN,IAAI,IAAI,CAAC,KAAK,IAAI,cAAc,EAAE,CAAC;YACjC,OAAO,CAAC,GAAG,CAAC,CAAA;QACd,CAAC;aAAM,IAAI,IAAI,CAAC,KAAK,IAAI,YAAY,EAAE,CAAC;YACtC,OAAO,EAAE,GAAG,CAAC,CAAA;QACf,CAAC;aAAM,IAAI,IAAI,CAAC,KAAK,KAAK,cAAc,EAAE,CAAC;YACzC,OAAO,EAAE,GAAG,CAAC,CAAA;QACf,CAAC;QACD,OAAO,CAAC,CAAA;IACV,CAAC;IAED,QAAQ;QACN,mBAAmB,CACjB,IAAI,CAAC,SAAgB,EACrB,IAAI,CAAC,SAAS,EACd,IAAI,CAAC,QAAS,EACd,IAAI,CAAC,MAAO,EACZ,IAAI,CAAC,SAAS,EACd,IAAI,CAAC,KAAK,EACV,KAAK,CAAC,yBAAyB,CAChC,CAAA;IACH,CAAC;IAED,QAAQ;QACN,MAAM,IAAI,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;QAEpC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAA;QAC5B,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,aAAa,EAAE,CAAC,CAAA;QAExC,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC9B,MAAM,WAAW,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,EAAE,CAAA;YAE9C,MAAM,oBAAoB,GAAG,CAAC,KAAa,EAAE,EAAE;gBAC7C,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;oBACnB,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAA;oBACnC,IAAI;yBACD,MAAM,CAAC,MAAM,CAAC;yBACd,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC;yBAClB,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC;yBAClB,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;yBACb,IAAI,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC,6CAA6C;yBACrE,IAAI,CAAC,QAAQ,EAAE,8DAA8D,CAAC;yBAC9E,IAAI,CAAC,cAAc,EAAE,CAAC,CAAC,CAAA;gBAC5B,CAAC,CAAC,CAAA;YACJ,CAAC,CAAA;YAED,MAAM,sBAAsB,GAAG,GAAG,EAAE;gBAClC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE;oBAClC,MAAM,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,CAAC,GAAG,EAAE,CAAA;oBAC1B,IAAI;yBACD,MAAM,CAAC,MAAM,CAAC;yBACd,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;yBACb,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,aAAa,EAAE,CAAC;yBAChC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;yBACb,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;yBACb,IAAI,CAAC,QAAQ,EAAE,8DAA8D,CAAC;yBAC9E,IAAI,CAAC,cAAc,EAAE,CAAC,CAAC,CAAA;gBAC5B,CAAC,CAAC,CAAA;gBAEF,qEAAqE;gBACrE,IAAI;qBACD,MAAM,CAAC,MAAM,CAAC;qBACd,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;qBACb,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,aAAa,EAAE,CAAC;qBAChC,IAAI,CAAC,IAAI,EAAE,WAAW,CAAC;qBACvB,IAAI,CAAC,IAAI,EAAE,WAAW,CAAC;qBACvB,IAAI,CAAC,QAAQ,EAAE,8DAA8D,CAAC;qBAC9E,IAAI,CAAC,cAAc,EAAE,CAAC,CAAC,CAAA;YAC5B,CAAC,CAAA;YAED,IAAI,KAAK,CAAA;YACT,IAAI,IAAI,CAAC,KAAK,KAAK,UAAU,EAAE,CAAC;gBAC9B,KAAK,GAAG,EAAE,CAAC,OAAO;qBACf,KAAK,CAAC,CAAC,CAAE;qBACT,KAAK,CAAC,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;YAClG,CAAC;iBAAM,IAAI,IAAI,CAAC,KAAK,KAAK,cAAc,EAAE,CAAC;gBACzC,KAAK,GAAG,EAAE,CAAC,QAAQ;qBAChB,KAAK,CAAC,CAAC,CAAE;qBACT,KAAK,CAAC,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;YACpG,CAAC;iBAAM,IAAI,IAAI,CAAC,KAAK,KAAK,YAAY,EAAE,CAAC;gBACvC,KAAK,GAAG,EAAE,CAAC,SAAS;qBACjB,KAAK,CAAC,CAAC,CAAE;qBACT,KAAK,CAAC,EAAE,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,EAAE,EAAE,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;YACtG,CAAC;iBAAM,IAAI,IAAI,CAAC,KAAK,KAAK,cAAc,EAAE,CAAC;gBACzC,KAAK,GAAG,EAAE,CAAC,SAAS;qBACjB,KAAK,CAAC,CAAC,CAAE;qBACT,KAAK,CAAC,EAAE,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,EAAE,EAAE,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;YACtG,CAAC;YAED,oBAAoB,CAAC,KAAM,CAAC,CAAA;YAC5B,sBAAsB,EAAE,CAAA;YAExB,kCAAkC;YAClC,IAAI,CAAC,yBAAyB,CAAC,IAAI,EAAE,KAAM,CAAC,CAAA;QAC9C,CAAC;IACH,CAAC;IAED,yBAAyB,CAAC,IAA2D,EAAE,KAAa;QAClG,MAAM,mBAAmB,GAAG,IAAI,CAAC,4BAA4B,CAAC,KAAK,CAAC,CAAA;QAEpE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,KAAK,EAAE,EAAE;YACzC,MAAM,CAAC,GAAG,KAAK,GAAG,EAAE,GAAG,EAAE,CAAA,CAAC,wCAAwC;YAClE,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;gBACnB,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAA;gBACrC,MAAM,OAAO,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,OAAO,CAAC,CAAA;gBACjD,MAAM,UAAU,GAAG,mBAAmB,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,CAAA;gBAC9D,IAAI,UAAU,GAAG,CAAC,EAAE,CAAC;oBACnB,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAA;oBACnC,MAAM,YAAY,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,GAAG,MAAM,CAAA;oBAErD,IAAI;yBACD,MAAM,CAAC,MAAM,CAAC;yBACd,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,YAAY,GAAG,CAAC,CAAC;yBACpC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;yBACZ,IAAI,CAAC,aAAa,EAAE,QAAQ,CAAC;yBAC7B,IAAI,CAAC,oBAAoB,EAAE,QAAQ,CAAC;yBACpC,IAAI,CAAC,mBAAmB,EAAE,QAAQ,CAAC;yBACnC,IAAI,CAAC,UAAU,CAAC;yBAChB,KAAK,CAAC,WAAW,EAAE,MAAM,CAAC,CAAA;gBAC/B,CAAC;YACH,CAAC,CAAC,CAAA;QACJ,CAAC,CAAC,CAAA;IACJ,CAAC;IAED,4BAA4B,CAAC,KAAa;QACxC,MAAM,mBAAmB,GAAiD,EAAE,CAAA;QAE5E,4CAA4C;QAC5C,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE;YAChC,mBAAmB,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,EAAE,CAAA;YACvC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;gBACnB,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAA;gBACrC,MAAM,OAAO,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,OAAO,CAAC,CAAA;gBACjD,mBAAmB,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAA;YACjD,CAAC,CAAC,CAAA;QACJ,CAAC,CAAC,CAAA;QAEF,wCAAwC;QACxC,MAAM,WAAW,GAAG,CAAC,IAAU,EAAE,EAAE;YACjC,MAAM,SAAS,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;YAC1C,MAAM,OAAO,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;YACtC,IAAI,WAAW,GAAG,SAAS,CAAA;YAE3B,OAAO,WAAW,IAAI,OAAO,EAAE,CAAC;gBAC9B,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,WAAW,IAAI,CAAC,IAAI,WAAW,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAA;gBAClF,IAAI,IAAI,EAAE,CAAC;oBACT,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAA;oBACrC,MAAM,OAAO,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,OAAO,CAAC,CAEhD;oBAAA,CAAC,IAAI,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE;wBACzC,IAAI,mBAAmB,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,KAAK,SAAS,EAAE,CAAC;4BAC9D,mBAAmB,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,IAAI,QAAQ,CAAC,SAAS,CAAA;wBACnE,CAAC;oBACH,CAAC,CAAC,CAAA;gBACJ,CAAC;gBAED,WAAW,CAAC,OAAO,CAAC,WAAW,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,CAAA;YAChD,CAAC;YAED,kCAAkC;YAClC,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;gBAClB,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,CAAA;YAC5D,CAAC;QACH,CAAC,CAAA;QAED,oBAAoB;QACpB,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAA;QAE7C,OAAO,mBAAmB,CAAA;IAC5B,CAAC;IAED,UAAU,CAAC,IAAU;QACnB,IAAI,IAAI,CAAC,KAAK,KAAK,UAAU,EAAE,CAAC;YAC9B,OAAO,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAAA;QACnC,CAAC;aAAM,IAAI,IAAI,CAAC,KAAK,KAAK,cAAc,EAAE,CAAC;YACzC,OAAO,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAAA;QACpC,CAAC;aAAM,IAAI,IAAI,CAAC,KAAK,KAAK,YAAY,EAAE,CAAC;YACvC,OAAO,EAAE,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAAA;QACrC,CAAC;aAAM,IAAI,IAAI,CAAC,KAAK,KAAK,cAAc,EAAE,CAAC;YACzC,OAAO,EAAE,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAAA;QACrC,CAAC;QACD,OAAO,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAAA;IACnC,CAAC;IAED,aAAa,CAAC,KAAW,EAAE,GAAS;QAClC,OAAO,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAA;IAClF,CAAC;IAED,aAAa,CAAC,MAA+C;QAC3D,IAAI,CAAC,SAAS,GAAG,MAAM,CAAC,SAAS,CAAA;QACjC,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,CAAA;QAEzB,IAAI,CAAC,eAAe,EAAE,CAAA;QACtB,IAAI,CAAC,QAAQ,EAAE,CAAA;QACf,IAAI,CAAC,QAAQ,EAAE,CAAA;IACjB,CAAC;IAED,iBAAiB,CAAC,MAAc;QAC9B,IAAI,CAAC,SAAS,CAAC,SAAS,GAAG,MAAM,CAAA;IACnC,CAAC;IAED,iBAAiB;QACf,OAAO,IAAI,CAAC,SAAS,CAAC,SAAS,CAAA;IACjC,CAAC;IAED,mBAAmB,CAAC,MAAc;QAChC,IAAI,CAAC,SAAS,CAAC,UAAU,GAAG,MAAM,CAAA;IACpC,CAAC;IAED,mBAAmB;QACjB,OAAO,IAAI,CAAC,SAAS,CAAC,UAAU,CAAA;IAClC,CAAC;;AAvQ2B;IAA3B,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;iDAAwF;AACvF;IAA3B,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;+CAAwF;AACvF;IAA3B,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;kDAA+B;AAC/B;IAA1B,QAAQ,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;kDAAsB;AACrB;IAA1B,QAAQ,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;8CAAmB;AAQlB;IAA1B,KAAK,CAAC,kBAAkB,CAAC;kDAA2B;AAC/B;IAArB,KAAK,CAAC,aAAa,CAAC;kDAA0B;AAC3B;IAAnB,KAAK,CAAC,WAAW,CAAC;gDAAwB;AA3EhC,eAAe;IAD3B,aAAa,CAAC,mBAAmB,CAAC;GACtB,eAAe,CAqU3B","sourcesContent":["import { LitElement, html, css, PropertyValues } from 'lit'\nimport { customElement, property, query } from 'lit/decorators.js'\nimport * as d3 from 'd3'\n\nimport { ScrollbarStyles } from '@operato/styles'\n\nimport { drawTimeScaleHeader } from './draw-time-scale-header'\nimport { Task, TimeScale } from './types'\n\n@customElement('ox-resource-chart')\nexport class OxResourceChart extends LitElement {\n static styles = [\n ScrollbarStyles,\n css`\n :host {\n display: flex;\n overflow: hidden;\n position: relative;\n }\n\n div[chart-container] {\n display: flex;\n flex-direction: column;\n\n overflow-x: auto;\n overflow-y: auto;\n }\n\n svg[header] {\n display: block;\n min-width: 100%;\n box-sizing: border-box;\n border-bottom: 1px solid var(--ox-gantt-header-border-color, var(--md-sys-color-on-secondary-container));\n height: 30px;\n background-color: var(--ox-gantt-header-background-color, var(--md-sys-color-secondary-container));\n color: var(--ox-gantt-header-color, var(--md-sys-color-on-secondary-container));\n position: sticky;\n top: 0;\n z-index: 1;\n }\n\n svg[body] {\n flex: 1;\n display: block;\n min-width: 100%;\n }\n\n .top-axis text,\n .bottom-axis text {\n font-size: 12px;\n }\n\n .grid line {\n stroke: #e0e0e0;\n }\n\n .grid path {\n stroke-width: 0;\n }\n\n .no-select {\n user-select: none;\n }\n\n .selected {\n stroke-width: 2px;\n stroke: var(--ox-gantt-selected-color, blue);\n }\n `\n ]\n\n @property({ type: String }) fromDate: string = new Date(new Date().getFullYear(), 0, 1).toISOString().split('T')[0]\n @property({ type: String }) toDate: string = new Date(new Date().getFullYear(), 11, 31).toISOString().split('T')[0]\n @property({ type: String }) axisScale: string = 'week-day'\n @property({ type: Array }) resources: any[] = []\n @property({ type: Array }) tasks: Task[] = []\n\n private timeScale: any\n private baseWidth: number = 30\n private level: TimeScale = 'week-day'\n private fromTime?: Date\n private toTime?: Date\n\n @query('[chart-container') container!: HTMLDivElement\n @query('svg[header]') svgHeader!: SVGSVGElement\n @query('svg[body]') svgBody!: SVGSVGElement\n\n render() {\n return html`\n <div chart-container>\n <svg header></svg>\n <svg body></svg>\n </div>\n `\n }\n\n updated(changedProperties: PropertyValues<this>) {\n if (changedProperties.has('fromDate') || changedProperties.has('toDate') || changedProperties.has('axisScale')) {\n this.updateTimeScale()\n }\n\n if (changedProperties.has('resources') || changedProperties.has('tasks')) {\n this.drawBody()\n }\n\n this.drawAxes()\n }\n\n updateTimeScale() {\n this.fromTime = new Date(this.fromDate)\n this.toTime = new Date(this.toDate)\n\n this.timeScale = d3\n .scaleTime()\n .domain([d3.timeDay.floor(new Date(this.fromDate)), d3.timeDay.offset(new Date(this.toDate), 1)])\n .range([0, this.getChartWidth()])\n }\n\n getChartWidth() {\n const totalDays = d3.timeDay.count(new Date(this.fromDate), d3.timeDay.offset(new Date(this.toDate), 1))\n return (totalDays * this.baseWidth) / this.getScale()\n }\n\n getScale() {\n if (this.level == 'quarter-week') {\n return 7 / 2\n } else if (this.level == 'year-month') {\n return 30 / 2\n } else if (this.level === 'year-quarter') {\n return 90 / 2\n }\n return 1\n }\n\n drawAxes() {\n drawTimeScaleHeader(\n this.svgHeader as any,\n this.timeScale,\n this.fromTime!,\n this.toTime!,\n this.baseWidth,\n this.level,\n false /* 1 level only header */\n )\n }\n\n drawBody() {\n const body = d3.select(this.svgBody)\n\n body.selectAll('*').remove()\n body.attr('width', this.getChartWidth())\n\n if (this.resources.length > 0) {\n const chartHeight = this.resources.length * 30\n\n const addVerticalGridLines = (ticks: Date[]) => {\n ticks.forEach(tick => {\n const startX = this.timeScale(tick)\n body\n .append('line')\n .attr('x1', startX)\n .attr('x2', startX)\n .attr('y1', 0)\n .attr('y2', chartHeight) // Ensure vertical lines extend to the bottom\n .attr('stroke', 'var(--ox-gantt-color-gridlines, var(--md-sys-color-outline))')\n .attr('stroke-width', 1)\n })\n }\n\n const addHorizontalGridLines = () => {\n this.resources.forEach((_, index) => {\n const y = (index + 1) * 30\n body\n .append('line')\n .attr('x1', 0)\n .attr('x2', this.getChartWidth())\n .attr('y1', y)\n .attr('y2', y)\n .attr('stroke', 'var(--ox-gantt-color-gridlines, var(--md-sys-color-outline))')\n .attr('stroke-width', 1)\n })\n\n // Ensure the last horizontal line extends to the bottom of the chart\n body\n .append('line')\n .attr('x1', 0)\n .attr('x2', this.getChartWidth())\n .attr('y1', chartHeight)\n .attr('y2', chartHeight)\n .attr('stroke', 'var(--ox-gantt-color-gridlines, var(--md-sys-color-outline))')\n .attr('stroke-width', 1)\n }\n\n let ticks\n if (this.level === 'week-day') {\n ticks = d3.timeDay\n .every(1)!\n .range(d3.timeDay.floor(new Date(this.fromDate)), d3.timeDay.offset(new Date(this.toDate), 1))\n } else if (this.level === 'quarter-week') {\n ticks = d3.timeWeek\n .every(1)!\n .range(d3.timeWeek.floor(new Date(this.fromDate)), d3.timeWeek.offset(new Date(this.toDate), 1))\n } else if (this.level === 'year-month') {\n ticks = d3.timeMonth\n .every(1)!\n .range(d3.timeMonth.floor(new Date(this.fromDate)), d3.timeMonth.offset(new Date(this.toDate), 1))\n } else if (this.level === 'year-quarter') {\n ticks = d3.timeMonth\n .every(3)!\n .range(d3.timeMonth.floor(new Date(this.fromDate)), d3.timeMonth.offset(new Date(this.toDate), 3))\n }\n\n addVerticalGridLines(ticks!)\n addHorizontalGridLines()\n\n // Render the resource allocations\n this.renderResourceAllocations(body, ticks!)\n }\n }\n\n renderResourceAllocations(body: d3.Selection<SVGSVGElement, unknown, null, undefined>, ticks: Date[]) {\n const resourceAllocations = this.calculateResourceAllocations(ticks)\n\n this.resources.forEach((resource, index) => {\n const y = index * 30 + 15 // Center the text vertically in the row\n ticks.forEach(tick => {\n const tickEnd = this.getTickEnd(tick)\n const dateKey = this.formatDateKey(tick, tickEnd)\n const allocation = resourceAllocations[resource.type][dateKey]\n if (allocation > 0) {\n const startX = this.timeScale(tick)\n const tickInterval = this.timeScale(tickEnd) - startX\n\n body\n .append('text')\n .attr('x', startX + tickInterval / 2)\n .attr('y', y)\n .attr('text-anchor', 'middle')\n .attr('alignment-baseline', 'middle')\n .attr('dominant-baseline', 'middle')\n .text(allocation)\n .style('font-size', '12px')\n }\n })\n })\n }\n\n calculateResourceAllocations(ticks: Date[]) {\n const resourceAllocations: { [key: string]: { [key: string]: number } } = {}\n\n // Initialize the resourceAllocations object\n this.resources.forEach(resource => {\n resourceAllocations[resource.type] = {}\n ticks.forEach(tick => {\n const tickEnd = this.getTickEnd(tick)\n const dateKey = this.formatDateKey(tick, tickEnd)\n resourceAllocations[resource.type][dateKey] = 0\n })\n })\n\n // Function to process tasks recursively\n const processTask = (task: Task) => {\n const startDate = new Date(task.startDate)\n const endDate = new Date(task.endDate)\n let currentDate = startDate\n\n while (currentDate <= endDate) {\n const tick = ticks.find(t => currentDate >= t && currentDate < this.getTickEnd(t))\n if (tick) {\n const tickEnd = this.getTickEnd(tick)\n const dateKey = this.formatDateKey(tick, tickEnd)\n\n ;(task.resources || []).forEach(resource => {\n if (resourceAllocations[resource.type][dateKey] !== undefined) {\n resourceAllocations[resource.type][dateKey] += resource.allocated\n }\n })\n }\n\n currentDate.setDate(currentDate.getDate() + 1)\n }\n\n // Recursively process child tasks\n if (task.children) {\n task.children.forEach(childTask => processTask(childTask))\n }\n }\n\n // Process all tasks\n this.tasks.forEach(task => processTask(task))\n\n return resourceAllocations\n }\n\n getTickEnd(tick: Date) {\n if (this.level === 'week-day') {\n return d3.timeDay.offset(tick, 1)\n } else if (this.level === 'quarter-week') {\n return d3.timeWeek.offset(tick, 1)\n } else if (this.level === 'year-month') {\n return d3.timeMonth.offset(tick, 1)\n } else if (this.level === 'year-quarter') {\n return d3.timeMonth.offset(tick, 3)\n }\n return d3.timeDay.offset(tick, 1)\n }\n\n formatDateKey(start: Date, end: Date) {\n return `${start.toISOString().split('T')[0]}_${end.toISOString().split('T')[0]}`\n }\n\n syncTimeScale(detail: { baseWidth: number; level: TimeScale }) {\n this.baseWidth = detail.baseWidth\n this.level = detail.level\n\n this.updateTimeScale()\n this.drawAxes()\n this.drawBody()\n }\n\n setVerticalOffset(offset: number) {\n this.container.scrollTop = offset\n }\n\n getVerticalOffset(): number {\n return this.container.scrollTop\n }\n\n setHorizontalOffset(offset: number) {\n this.container.scrollLeft = offset\n }\n\n getHorizontalOffset(): number {\n return this.container.scrollLeft\n }\n}\n"]}
@@ -53,8 +53,8 @@ const Template = ({ tasks, fromDate, toDate, extendGridLines, timeScale = 'week-
53
53
  }
54
54
 
55
55
  ox-gantt {
56
- width: 90%;
57
- height: 500px;
56
+ width: 95%;
57
+ height: 650px;
58
58
  box-sizing: border-box;
59
59
 
60
60
  background-color: var(--md-sys-color-primary-container);
@@ -153,8 +153,8 @@ Regular.args = {
153
153
  progress: 60,
154
154
  dependsOn: '',
155
155
  length: '4d',
156
- tags: ['done'],
157
- resources: [{ type: '창호공', allocated: 6 }],
156
+ tags: ['active'],
157
+ resources: [{ type: '창호공', allocated: 5 }],
158
158
  children: []
159
159
  },
160
160
  {
@@ -167,7 +167,7 @@ Regular.args = {
167
167
  dependsOn: '3-1-1',
168
168
  length: '5d',
169
169
  tags: ['active'],
170
- resources: [{ type: '창호공', allocated: 6 }],
170
+ resources: [{ type: '창호공', allocated: 3 }],
171
171
  children: []
172
172
  }
173
173
  ]
@@ -198,7 +198,7 @@ Regular.args = {
198
198
  dependsOn: '1',
199
199
  length: '1d',
200
200
  tags: ['done'],
201
- resources: [{ type: '방수공', allocated: 6 }],
201
+ resources: [{ type: '방수공', allocated: 5 }],
202
202
  children: []
203
203
  },
204
204
  {
@@ -211,7 +211,7 @@ Regular.args = {
211
211
  dependsOn: '4',
212
212
  length: '1d',
213
213
  tags: ['milestone'],
214
- resources: [{ type: '목공', allocated: 6 }],
214
+ resources: [{ type: '목공', allocated: 3 }],
215
215
  children: []
216
216
  },
217
217
  {
@@ -224,7 +224,7 @@ Regular.args = {
224
224
  dependsOn: '5',
225
225
  length: '1d',
226
226
  tags: ['milestone'],
227
- resources: [{ type: '금속공', allocated: 6 }],
227
+ resources: [{ type: '금속공', allocated: 1 }],
228
228
  children: []
229
229
  },
230
230
  {
@@ -250,7 +250,7 @@ Regular.args = {
250
250
  dependsOn: '7',
251
251
  length: '1d',
252
252
  tags: ['critical'],
253
- resources: [{ type: '창호공', allocated: 6 }],
253
+ resources: [{ type: '창호공', allocated: 7 }],
254
254
  children: []
255
255
  },
256
256
  {
@@ -263,7 +263,7 @@ Regular.args = {
263
263
  dependsOn: '8',
264
264
  length: '1d',
265
265
  tags: ['active'],
266
- resources: [{ type: '도배공', allocated: 6 }],
266
+ resources: [{ type: '도배공', allocated: 8 }],
267
267
  children: []
268
268
  },
269
269
  {
@@ -289,6 +289,7 @@ Regular.args = {
289
289
  dependsOn: '9',
290
290
  length: '1d',
291
291
  tags: ['milestone'],
292
+ resources: [{ type: '철근/형틀공', allocated: 6 }],
292
293
  children: []
293
294
  },
294
295
  {
@@ -300,6 +301,7 @@ Regular.args = {
300
301
  endDate: '2023-01-23',
301
302
  dependsOn: '9',
302
303
  length: '1d',
304
+ resources: [{ type: '방수공', allocated: 6 }],
303
305
  tags: ['milestone'],
304
306
  children: [
305
307
  {
@@ -313,6 +315,7 @@ Regular.args = {
313
315
  dependsOn: '',
314
316
  length: '4d',
315
317
  tags: ['done'],
318
+ resources: [{ type: '방수공', allocated: 6 }],
316
319
  children: []
317
320
  },
318
321
  {
@@ -325,6 +328,7 @@ Regular.args = {
325
328
  dependsOn: '12-1',
326
329
  length: '5d',
327
330
  tags: ['active'],
331
+ resources: [{ type: '조적공', allocated: 6 }],
328
332
  children: []
329
333
  }
330
334
  ]
@@ -351,6 +355,7 @@ Regular.args = {
351
355
  dependsOn: '13',
352
356
  length: '1d',
353
357
  tags: ['milestone'],
358
+ resources: [{ type: '금속공', allocated: 1 }],
354
359
  children: []
355
360
  },
356
361
  {
@@ -374,6 +379,7 @@ Regular.args = {
374
379
  endDate: '2023-02-05',
375
380
  dependsOn: '15',
376
381
  length: '1d',
382
+ resources: [{ type: '창호공', allocated: 1 }],
377
383
  tags: ['active'],
378
384
  children: []
379
385
  },
@@ -411,6 +417,7 @@ Regular.args = {
411
417
  dependsOn: '18',
412
418
  length: '1d',
413
419
  tags: ['milestone'],
420
+ resources: [{ type: '창호공', allocated: 7 }],
414
421
  children: []
415
422
  }
416
423
  ]
@@ -1 +1 @@
1
- {"version":3,"file":"ox-gantt.stories.js","sourceRoot":"","sources":["../../stories/ox-gantt.stories.ts"],"names":[],"mappings":"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","sourcesContent":["import { CommonHeaderStyles } from '@operato/styles'\nimport '../src/ox-gantt.js'\n\nimport { html, TemplateResult } from 'lit'\nimport { styles as MDTypeScaleStyles } from '@material/web/typography/md-typescale-styles'\n\nimport { Task, Section, TimeScale } from '../src/types.js'\n\nexport default {\n title: 'ox-gantt',\n component: 'ox-gantt',\n argTypes: {\n fromDate: { control: 'date' },\n toDate: { control: 'date' },\n timeScale: { control: 'select', options: ['year-quarter', 'year-month', 'quarter-week', 'week-day'] },\n extendGridLines: { control: 'boolean' },\n tasks: { control: 'object' }\n }\n}\n\ninterface Story<T> {\n (args: T): TemplateResult\n args?: Partial<T>\n argTypes?: Record<string, unknown>\n}\n\ninterface ArgTypes {\n tasks: Task[]\n fromDate: number | string\n toDate: number | string\n extendGridLines: boolean\n timeScale: TimeScale\n}\n\nconst Template: Story<ArgTypes> = ({\n tasks,\n fromDate,\n toDate,\n extendGridLines,\n timeScale = 'week-day'\n}: ArgTypes) => html`\n <link href=\"https://fonts.googleapis.com/css2?family=Roboto:wght@400;500;700&display=swap\" rel=\"stylesheet\" />\n\n <link href=\"/themes/light.css\" rel=\"stylesheet\" />\n <link href=\"/themes/dark.css\" rel=\"stylesheet\" />\n <link href=\"/themes/spacing.css\" rel=\"stylesheet\" />\n <link href=\"/themes/md-typescale-styles.css\" rel=\"stylesheet\" />\n\n <link\n href=\"https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined:opsz,wght,FILL@20..48,100..700,0..1\"\n rel=\"stylesheet\"\n />\n <link\n href=\"https://fonts.googleapis.com/css2?family=Material+Symbols+Rounded:opsz,wght,FILL@20..48,100..700,0..1\"\n rel=\"stylesheet\"\n />\n <link\n href=\"https://fonts.googleapis.com/css2?family=Material+Symbols+Sharp:opsz,wght,FILL@20..48,100..700,0..1\"\n rel=\"stylesheet\"\n />\n\n <style>\n ${MDTypeScaleStyles.cssText}\n </style>\n\n <style>\n ${CommonHeaderStyles.cssText}\n </style>\n\n <style>\n body {\n width: 100%;\n height: 800px;\n text-align: center;\n\n background-color: var(--md-sys-color-background);\n color: var(--md-sys-color-on-background);\n }\n\n ox-gantt {\n width: 90%;\n height: 500px;\n box-sizing: border-box;\n\n background-color: var(--md-sys-color-primary-container);\n color: var(--md-sys-color-on-primary-container);\n }\n </style>\n\n <ox-gantt\n from-date=${new Date(fromDate).toISOString().split('T')[0]}\n to-date=${new Date(toDate).toISOString().split('T')[0]}\n .timeScale=${timeScale}\n .tasks=${tasks}\n @date-range-selected=${(e: CustomEvent) => {\n console.log('date-range-selected', e.detail)\n }}\n @task-clicked=${(e: CustomEvent) => {\n console.log('task-clicked', e.detail)\n }}\n ?extend-grid-lines=${extendGridLines}\n >\n </ox-gantt>\n`\n\nconst developmentSection: Section = {\n name: 'Development'\n}\n\nconst testSection: Section = {\n name: 'Test'\n}\n\nconst releaseSection: Section = {\n name: 'Release'\n}\n\nexport const Regular = Template.bind({})\nRegular.args = {\n fromDate: '2022-12-27',\n toDate: '2024-12-31',\n tasks: [\n {\n id: '1',\n title: 'Design',\n type: 'task',\n // section: developmentSection,\n startDate: '2023-01-01',\n endDate: '2023-01-05',\n progress: 60,\n dependsOn: '',\n length: '5d',\n tags: ['active'],\n resources: [{ type: '철근/형틀공', allocated: 6 }],\n children: []\n },\n {\n id: '2',\n title: 'Development',\n type: 'milestone',\n // section: developmentSection,\n startDate: '2023-01-06',\n endDate: '2023-01-06',\n progress: 30,\n dependsOn: '1',\n length: '1d',\n tags: ['milestone'],\n resources: [{ type: '철근/형틀공', allocated: 6 }],\n children: []\n },\n {\n id: '3',\n title: 'Coding',\n type: 'phase',\n // section: developmentSection,\n startDate: '2023-01-07',\n endDate: '2023-01-15',\n progress: 10,\n dependsOn: '2',\n length: '9d',\n tags: ['critical'],\n children: [\n {\n id: '3-1',\n title: 'Coding-A',\n type: 'task',\n // section: developmentSection,\n startDate: '2023-01-07',\n endDate: '2023-01-10',\n progress: 60,\n dependsOn: '',\n length: '4d',\n tags: ['done'],\n children: [\n {\n id: '3-1-1',\n title: 'Coding-A',\n type: 'task',\n // section: developmentSection,\n startDate: '2023-01-07',\n endDate: '2023-01-10',\n progress: 60,\n dependsOn: '',\n length: '4d',\n tags: ['done'],\n resources: [{ type: '창호공', allocated: 6 }],\n children: []\n },\n {\n id: '3-1-2',\n title: 'Coding-B',\n type: 'task',\n // section: developmentSection,\n startDate: '2023-01-11',\n endDate: '2023-01-15',\n dependsOn: '3-1-1',\n length: '5d',\n tags: ['active'],\n resources: [{ type: '창호공', allocated: 6 }],\n children: []\n }\n ]\n },\n {\n id: '3-2',\n title: 'Coding-B',\n type: 'task',\n // section: developmentSection,\n startDate: '2023-01-11',\n endDate: '2023-01-15',\n dependsOn: '3-1',\n length: '5d',\n tags: ['active'],\n resources: [{ type: '창호공', allocated: 6 }],\n children: []\n }\n ]\n },\n {\n id: '4',\n title: 'Test',\n type: 'milestone',\n // section: developmentSection,\n startDate: '2023-01-07',\n endDate: '2023-01-10',\n progress: 100,\n dependsOn: '1',\n length: '1d',\n tags: ['done'],\n resources: [{ type: '방수공', allocated: 6 }],\n children: []\n },\n {\n id: '5',\n title: 'Deploy',\n type: 'milestone',\n // section: developmentSection,\n startDate: '2023-01-15',\n endDate: '2023-01-21',\n dependsOn: '4',\n length: '1d',\n tags: ['milestone'],\n resources: [{ type: '목공', allocated: 6 }],\n children: []\n },\n {\n id: '6',\n title: 'Publishing',\n type: 'milestone',\n // section: developmentSection,\n startDate: '2023-01-11',\n endDate: '2023-01-15',\n dependsOn: '5',\n length: '1d',\n tags: ['milestone'],\n resources: [{ type: '금속공', allocated: 6 }],\n children: []\n },\n {\n id: '7',\n title: 'Provisioning',\n type: 'milestone',\n // section: developmentSection,\n startDate: '2023-01-12',\n endDate: '2023-01-15',\n dependsOn: '6',\n length: '1d',\n tags: ['milestone'],\n resources: [{ type: '타일공', allocated: 6 }],\n children: []\n },\n {\n id: '8',\n title: 'Alpha Test',\n type: 'milestone',\n // section: testSection,\n startDate: '2023-01-15',\n endDate: '2023-01-17',\n dependsOn: '7',\n length: '1d',\n tags: ['critical'],\n resources: [{ type: '창호공', allocated: 6 }],\n children: []\n },\n {\n id: '9',\n title: 'Beta Task',\n type: 'milestone',\n // section: testSection,\n startDate: '2023-01-15',\n endDate: '2023-01-18',\n dependsOn: '8',\n length: '1d',\n tags: ['active'],\n resources: [{ type: '도배공', allocated: 6 }],\n children: []\n },\n {\n id: '10',\n title: 'Gamma Test',\n type: 'milestone',\n // section: testSection,\n startDate: '2023-01-18',\n endDate: '2023-01-19',\n dependsOn: '9',\n length: '1d',\n tags: ['critical'],\n resources: [{ type: '조적공', allocated: 6 }],\n children: []\n },\n {\n id: '11',\n title: 'Zeta Test',\n type: 'milestone',\n // section: testSection,\n startDate: '2023-01-18',\n endDate: '2023-01-22',\n dependsOn: '9',\n length: '1d',\n tags: ['milestone'],\n children: []\n },\n {\n id: '12',\n title: 'Release',\n type: 'milestone',\n // section: releaseSection,\n startDate: '2023-01-18',\n endDate: '2023-01-23',\n dependsOn: '9',\n length: '1d',\n tags: ['milestone'],\n children: [\n {\n id: '12-1',\n title: 'Coding-A',\n type: 'task',\n // section: developmentSection,\n startDate: '2023-01-07',\n endDate: '2023-01-10',\n progress: 60,\n dependsOn: '',\n length: '4d',\n tags: ['done'],\n children: []\n },\n {\n id: '12-2',\n title: 'Coding-B',\n type: 'task',\n // section: developmentSection,\n startDate: '2023-01-11',\n endDate: '2023-01-15',\n dependsOn: '12-1',\n length: '5d',\n tags: ['active'],\n children: []\n }\n ]\n },\n {\n id: '13',\n title: 'Release',\n type: 'milestone',\n // section: releaseSection,\n startDate: '2023-01-22',\n endDate: '2023-01-27',\n dependsOn: '12',\n length: '1d',\n tags: ['done'],\n children: []\n },\n {\n id: '14',\n title: 'Release',\n type: 'milestone',\n // section: releaseSection,\n startDate: '2023-01-27',\n endDate: '2023-01-30',\n dependsOn: '13',\n length: '1d',\n tags: ['milestone'],\n children: []\n },\n {\n id: '15',\n title: 'Release',\n type: 'milestone',\n // section: releaseSection,\n startDate: '2023-01-30',\n endDate: '2023-01-31',\n dependsOn: '14',\n length: '1d',\n tags: ['milestone'],\n children: []\n },\n {\n id: '16',\n title: 'Release',\n type: 'milestone',\n // section: releaseSection,\n startDate: '2023-01-31',\n endDate: '2023-02-05',\n dependsOn: '15',\n length: '1d',\n tags: ['active'],\n children: []\n },\n {\n id: '17',\n title: 'Release',\n type: 'milestone',\n // section: releaseSection,\n startDate: '2023-02-06',\n endDate: '2023-02-07',\n dependsOn: '16',\n length: '1d',\n tags: ['milestone'],\n children: []\n },\n {\n id: '18',\n title: 'Release',\n type: 'milestone',\n // section: releaseSection,\n startDate: '2023-02-08',\n endDate: '2023-02-09',\n dependsOn: '17',\n length: '1d',\n tags: ['critical'],\n children: []\n },\n {\n id: '19',\n title: 'Release',\n type: 'milestone',\n // section: releaseSection,\n startDate: '2023-02-10',\n endDate: '2023-02-25',\n dependsOn: '18',\n length: '1d',\n tags: ['milestone'],\n children: []\n }\n ]\n}\n"]}
1
+ {"version":3,"file":"ox-gantt.stories.js","sourceRoot":"","sources":["../../stories/ox-gantt.stories.ts"],"names":[],"mappings":"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","sourcesContent":["import { CommonHeaderStyles } from '@operato/styles'\nimport '../src/ox-gantt.js'\n\nimport { html, TemplateResult } from 'lit'\nimport { styles as MDTypeScaleStyles } from '@material/web/typography/md-typescale-styles'\n\nimport { Task, Section, TimeScale } from '../src/types.js'\n\nexport default {\n title: 'ox-gantt',\n component: 'ox-gantt',\n argTypes: {\n fromDate: { control: 'date' },\n toDate: { control: 'date' },\n timeScale: { control: 'select', options: ['year-quarter', 'year-month', 'quarter-week', 'week-day'] },\n extendGridLines: { control: 'boolean' },\n tasks: { control: 'object' }\n }\n}\n\ninterface Story<T> {\n (args: T): TemplateResult\n args?: Partial<T>\n argTypes?: Record<string, unknown>\n}\n\ninterface ArgTypes {\n tasks: Task[]\n fromDate: number | string\n toDate: number | string\n extendGridLines: boolean\n timeScale: TimeScale\n}\n\nconst Template: Story<ArgTypes> = ({\n tasks,\n fromDate,\n toDate,\n extendGridLines,\n timeScale = 'week-day'\n}: ArgTypes) => html`\n <link href=\"https://fonts.googleapis.com/css2?family=Roboto:wght@400;500;700&display=swap\" rel=\"stylesheet\" />\n\n <link href=\"/themes/light.css\" rel=\"stylesheet\" />\n <link href=\"/themes/dark.css\" rel=\"stylesheet\" />\n <link href=\"/themes/spacing.css\" rel=\"stylesheet\" />\n <link href=\"/themes/md-typescale-styles.css\" rel=\"stylesheet\" />\n\n <link\n href=\"https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined:opsz,wght,FILL@20..48,100..700,0..1\"\n rel=\"stylesheet\"\n />\n <link\n href=\"https://fonts.googleapis.com/css2?family=Material+Symbols+Rounded:opsz,wght,FILL@20..48,100..700,0..1\"\n rel=\"stylesheet\"\n />\n <link\n href=\"https://fonts.googleapis.com/css2?family=Material+Symbols+Sharp:opsz,wght,FILL@20..48,100..700,0..1\"\n rel=\"stylesheet\"\n />\n\n <style>\n ${MDTypeScaleStyles.cssText}\n </style>\n\n <style>\n ${CommonHeaderStyles.cssText}\n </style>\n\n <style>\n body {\n width: 100%;\n height: 800px;\n text-align: center;\n\n background-color: var(--md-sys-color-background);\n color: var(--md-sys-color-on-background);\n }\n\n ox-gantt {\n width: 95%;\n height: 650px;\n box-sizing: border-box;\n\n background-color: var(--md-sys-color-primary-container);\n color: var(--md-sys-color-on-primary-container);\n }\n </style>\n\n <ox-gantt\n from-date=${new Date(fromDate).toISOString().split('T')[0]}\n to-date=${new Date(toDate).toISOString().split('T')[0]}\n .timeScale=${timeScale}\n .tasks=${tasks}\n @date-range-selected=${(e: CustomEvent) => {\n console.log('date-range-selected', e.detail)\n }}\n @task-clicked=${(e: CustomEvent) => {\n console.log('task-clicked', e.detail)\n }}\n ?extend-grid-lines=${extendGridLines}\n >\n </ox-gantt>\n`\n\nconst developmentSection: Section = {\n name: 'Development'\n}\n\nconst testSection: Section = {\n name: 'Test'\n}\n\nconst releaseSection: Section = {\n name: 'Release'\n}\n\nexport const Regular = Template.bind({})\nRegular.args = {\n fromDate: '2022-12-27',\n toDate: '2024-12-31',\n tasks: [\n {\n id: '1',\n title: 'Design',\n type: 'task',\n // section: developmentSection,\n startDate: '2023-01-01',\n endDate: '2023-01-05',\n progress: 60,\n dependsOn: '',\n length: '5d',\n tags: ['active'],\n resources: [{ type: '철근/형틀공', allocated: 6 }],\n children: []\n },\n {\n id: '2',\n title: 'Development',\n type: 'milestone',\n // section: developmentSection,\n startDate: '2023-01-06',\n endDate: '2023-01-06',\n progress: 30,\n dependsOn: '1',\n length: '1d',\n tags: ['milestone'],\n resources: [{ type: '철근/형틀공', allocated: 6 }],\n children: []\n },\n {\n id: '3',\n title: 'Coding',\n type: 'phase',\n // section: developmentSection,\n startDate: '2023-01-07',\n endDate: '2023-01-15',\n progress: 10,\n dependsOn: '2',\n length: '9d',\n tags: ['critical'],\n children: [\n {\n id: '3-1',\n title: 'Coding-A',\n type: 'task',\n // section: developmentSection,\n startDate: '2023-01-07',\n endDate: '2023-01-10',\n progress: 60,\n dependsOn: '',\n length: '4d',\n tags: ['done'],\n children: [\n {\n id: '3-1-1',\n title: 'Coding-A',\n type: 'task',\n // section: developmentSection,\n startDate: '2023-01-07',\n endDate: '2023-01-10',\n progress: 60,\n dependsOn: '',\n length: '4d',\n tags: ['active'],\n resources: [{ type: '창호공', allocated: 5 }],\n children: []\n },\n {\n id: '3-1-2',\n title: 'Coding-B',\n type: 'task',\n // section: developmentSection,\n startDate: '2023-01-11',\n endDate: '2023-01-15',\n dependsOn: '3-1-1',\n length: '5d',\n tags: ['active'],\n resources: [{ type: '창호공', allocated: 3 }],\n children: []\n }\n ]\n },\n {\n id: '3-2',\n title: 'Coding-B',\n type: 'task',\n // section: developmentSection,\n startDate: '2023-01-11',\n endDate: '2023-01-15',\n dependsOn: '3-1',\n length: '5d',\n tags: ['active'],\n resources: [{ type: '창호공', allocated: 6 }],\n children: []\n }\n ]\n },\n {\n id: '4',\n title: 'Test',\n type: 'milestone',\n // section: developmentSection,\n startDate: '2023-01-07',\n endDate: '2023-01-10',\n progress: 100,\n dependsOn: '1',\n length: '1d',\n tags: ['done'],\n resources: [{ type: '방수공', allocated: 5 }],\n children: []\n },\n {\n id: '5',\n title: 'Deploy',\n type: 'milestone',\n // section: developmentSection,\n startDate: '2023-01-15',\n endDate: '2023-01-21',\n dependsOn: '4',\n length: '1d',\n tags: ['milestone'],\n resources: [{ type: '목공', allocated: 3 }],\n children: []\n },\n {\n id: '6',\n title: 'Publishing',\n type: 'milestone',\n // section: developmentSection,\n startDate: '2023-01-11',\n endDate: '2023-01-15',\n dependsOn: '5',\n length: '1d',\n tags: ['milestone'],\n resources: [{ type: '금속공', allocated: 1 }],\n children: []\n },\n {\n id: '7',\n title: 'Provisioning',\n type: 'milestone',\n // section: developmentSection,\n startDate: '2023-01-12',\n endDate: '2023-01-15',\n dependsOn: '6',\n length: '1d',\n tags: ['milestone'],\n resources: [{ type: '타일공', allocated: 6 }],\n children: []\n },\n {\n id: '8',\n title: 'Alpha Test',\n type: 'milestone',\n // section: testSection,\n startDate: '2023-01-15',\n endDate: '2023-01-17',\n dependsOn: '7',\n length: '1d',\n tags: ['critical'],\n resources: [{ type: '창호공', allocated: 7 }],\n children: []\n },\n {\n id: '9',\n title: 'Beta Task',\n type: 'milestone',\n // section: testSection,\n startDate: '2023-01-15',\n endDate: '2023-01-18',\n dependsOn: '8',\n length: '1d',\n tags: ['active'],\n resources: [{ type: '도배공', allocated: 8 }],\n children: []\n },\n {\n id: '10',\n title: 'Gamma Test',\n type: 'milestone',\n // section: testSection,\n startDate: '2023-01-18',\n endDate: '2023-01-19',\n dependsOn: '9',\n length: '1d',\n tags: ['critical'],\n resources: [{ type: '조적공', allocated: 6 }],\n children: []\n },\n {\n id: '11',\n title: 'Zeta Test',\n type: 'milestone',\n // section: testSection,\n startDate: '2023-01-18',\n endDate: '2023-01-22',\n dependsOn: '9',\n length: '1d',\n tags: ['milestone'],\n resources: [{ type: '철근/형틀공', allocated: 6 }],\n children: []\n },\n {\n id: '12',\n title: 'Release',\n type: 'milestone',\n // section: releaseSection,\n startDate: '2023-01-18',\n endDate: '2023-01-23',\n dependsOn: '9',\n length: '1d',\n resources: [{ type: '방수공', allocated: 6 }],\n tags: ['milestone'],\n children: [\n {\n id: '12-1',\n title: 'Coding-A',\n type: 'task',\n // section: developmentSection,\n startDate: '2023-01-07',\n endDate: '2023-01-10',\n progress: 60,\n dependsOn: '',\n length: '4d',\n tags: ['done'],\n resources: [{ type: '방수공', allocated: 6 }],\n children: []\n },\n {\n id: '12-2',\n title: 'Coding-B',\n type: 'task',\n // section: developmentSection,\n startDate: '2023-01-11',\n endDate: '2023-01-15',\n dependsOn: '12-1',\n length: '5d',\n tags: ['active'],\n resources: [{ type: '조적공', allocated: 6 }],\n children: []\n }\n ]\n },\n {\n id: '13',\n title: 'Release',\n type: 'milestone',\n // section: releaseSection,\n startDate: '2023-01-22',\n endDate: '2023-01-27',\n dependsOn: '12',\n length: '1d',\n tags: ['done'],\n children: []\n },\n {\n id: '14',\n title: 'Release',\n type: 'milestone',\n // section: releaseSection,\n startDate: '2023-01-27',\n endDate: '2023-01-30',\n dependsOn: '13',\n length: '1d',\n tags: ['milestone'],\n resources: [{ type: '금속공', allocated: 1 }],\n children: []\n },\n {\n id: '15',\n title: 'Release',\n type: 'milestone',\n // section: releaseSection,\n startDate: '2023-01-30',\n endDate: '2023-01-31',\n dependsOn: '14',\n length: '1d',\n tags: ['milestone'],\n children: []\n },\n {\n id: '16',\n title: 'Release',\n type: 'milestone',\n // section: releaseSection,\n startDate: '2023-01-31',\n endDate: '2023-02-05',\n dependsOn: '15',\n length: '1d',\n resources: [{ type: '창호공', allocated: 1 }],\n tags: ['active'],\n children: []\n },\n {\n id: '17',\n title: 'Release',\n type: 'milestone',\n // section: releaseSection,\n startDate: '2023-02-06',\n endDate: '2023-02-07',\n dependsOn: '16',\n length: '1d',\n tags: ['milestone'],\n children: []\n },\n {\n id: '18',\n title: 'Release',\n type: 'milestone',\n // section: releaseSection,\n startDate: '2023-02-08',\n endDate: '2023-02-09',\n dependsOn: '17',\n length: '1d',\n tags: ['critical'],\n children: []\n },\n {\n id: '19',\n title: 'Release',\n type: 'milestone',\n // section: releaseSection,\n startDate: '2023-02-10',\n endDate: '2023-02-25',\n dependsOn: '18',\n length: '1d',\n tags: ['milestone'],\n resources: [{ type: '창호공', allocated: 7 }],\n children: []\n }\n ]\n}\n"]}