@operato/gantt 7.0.20 → 7.0.21
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.
- package/CHANGELOG.md +10 -0
- package/dist/src/ox-gantt-chart.d.ts +4 -1
- package/dist/src/ox-gantt-chart.js +13 -8
- package/dist/src/ox-gantt-chart.js.map +1 -1
- package/dist/src/ox-gantt-resize-splitter.js +8 -7
- package/dist/src/ox-gantt-resize-splitter.js.map +1 -1
- package/dist/src/ox-gantt.d.ts +27 -15
- package/dist/src/ox-gantt.js +208 -76
- package/dist/src/ox-gantt.js.map +1 -1
- package/dist/src/ox-resource-chart.d.ts +19 -0
- package/dist/src/ox-resource-chart.js +194 -0
- package/dist/src/ox-resource-chart.js.map +1 -0
- package/dist/src/types.d.ts +5 -0
- package/dist/src/types.js.map +1 -1
- package/dist/stories/ox-gantt.stories.js +66 -2
- package/dist/stories/ox-gantt.stories.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +2 -2
- package/src/ox-gantt-chart.ts +16 -9
- package/src/ox-gantt-resize-splitter.ts +8 -7
- package/src/ox-gantt.ts +209 -80
- package/src/ox-resource-chart.ts +192 -0
- package/src/types.ts +6 -0
- package/stories/ox-gantt.stories.ts +66 -2
- package/translations/en.json +2 -1
- package/translations/ko.json +2 -1
package/CHANGELOG.md
CHANGED
|
@@ -3,6 +3,16 @@
|
|
|
3
3
|
All notable changes to this project will be documented in this file.
|
|
4
4
|
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
|
5
5
|
|
|
6
|
+
### [7.0.21](https://github.com/hatiolab/operato/compare/v7.0.20...v7.0.21) (2024-07-18)
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
### :bug: Bug Fix
|
|
10
|
+
|
|
11
|
+
* gantt resource chart ([0d14e2e](https://github.com/hatiolab/operato/commit/0d14e2e1542f83706817a1c82589f327d24cc6fd))
|
|
12
|
+
* gantt task hierachy ([9c21d39](https://github.com/hatiolab/operato/commit/9c21d39372e4cbb37606f51af7f1067605cca61e))
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
|
|
6
16
|
### [7.0.20](https://github.com/hatiolab/operato/compare/v7.0.19...v7.0.20) (2024-07-17)
|
|
7
17
|
|
|
8
18
|
**Note:** Version bump only for package @operato/gantt
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import './ox-task-tooltip';
|
|
1
|
+
import './ox-task-tooltip.js';
|
|
2
|
+
import './ox-resource-chart.js';
|
|
2
3
|
import { LitElement, PropertyValues, PropertyValueMap } from 'lit';
|
|
3
4
|
import { Task, TimeScale } from './types.js';
|
|
4
5
|
import { OxTaskTooltip } from './ox-task-tooltip.js';
|
|
@@ -20,9 +21,11 @@ export declare class OxGanttChart extends LitElement {
|
|
|
20
21
|
protected firstUpdated(_changedProperties: PropertyValueMap<any> | Map<PropertyKey, unknown>): void;
|
|
21
22
|
updated(changedProperties: PropertyValues<this>): void;
|
|
22
23
|
render(): import("lit-html").TemplateResult<1>;
|
|
24
|
+
flattenTasks(tasks: Task[], level?: number): Task[];
|
|
23
25
|
setVerticalOffset(offset: number): void;
|
|
24
26
|
getVerticalOffset(): number;
|
|
25
27
|
handleWheelForHeader(event: WheelEvent): void;
|
|
28
|
+
handleDateRangeSelected(event: CustomEvent): void;
|
|
26
29
|
updateLocale(locale: string): void;
|
|
27
30
|
initHeaderGestureHandlers(): void;
|
|
28
31
|
highlightSelection(startX: number, endX: number): void;
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { __decorate } from "tslib";
|
|
2
|
-
import './ox-task-tooltip';
|
|
2
|
+
import './ox-task-tooltip.js';
|
|
3
|
+
import './ox-resource-chart.js';
|
|
3
4
|
import { LitElement, html, css } from 'lit';
|
|
4
5
|
import { customElement, property, query } from 'lit/decorators.js';
|
|
5
6
|
import * as d3 from 'd3';
|
|
@@ -34,7 +35,6 @@ let OxGanttChart = class OxGanttChart extends LitElement {
|
|
|
34
35
|
height: 40px;
|
|
35
36
|
background-color: var(--ox-gantt-header-background-color, var(--md-sys-color-secondary-container));
|
|
36
37
|
color: var(--ox-gantt-header-color, var(--md-sys-color-on-secondary-container));
|
|
37
|
-
|
|
38
38
|
position: sticky;
|
|
39
39
|
top: 0;
|
|
40
40
|
z-index: 1;
|
|
@@ -80,11 +80,9 @@ let OxGanttChart = class OxGanttChart extends LitElement {
|
|
|
80
80
|
this.ganttChartController.updateRange(this.fromDate, this.toDate);
|
|
81
81
|
}
|
|
82
82
|
if (changedProperties.has('tasks')) {
|
|
83
|
-
this.ganttChartController.setTasks(this.tasks);
|
|
84
|
-
this.svgBody.style.height =
|
|
85
|
-
Math.max(this.tasks.length * 30, 2000 /* 태스크가 많이 없어도, 빈 공간이 없도록, 충분히 높게 */) + 'px';
|
|
83
|
+
this.ganttChartController.setTasks(this.flattenTasks(this.tasks));
|
|
84
|
+
this.svgBody.style.height = Math.max(this.tasks.length * 30, 2000) + 'px';
|
|
86
85
|
}
|
|
87
|
-
// Update locale
|
|
88
86
|
if (changedProperties.has('locale')) {
|
|
89
87
|
this.updateLocale(this.locale);
|
|
90
88
|
}
|
|
@@ -111,14 +109,17 @@ let OxGanttChart = class OxGanttChart extends LitElement {
|
|
|
111
109
|
>
|
|
112
110
|
<svg
|
|
113
111
|
header
|
|
114
|
-
@date-range-selected=${(e) =>
|
|
112
|
+
@date-range-selected=${(e) => this.handleDateRangeSelected(e)}
|
|
115
113
|
@wheel=${this.handleWheelForHeader.bind(this)}
|
|
116
114
|
></svg>
|
|
117
115
|
<svg body></svg>
|
|
118
|
-
<ox-task-tooltip></ox-task-tooltip>
|
|
116
|
+
<ox-task-tooltip></ox-task-tooltip>
|
|
119
117
|
</div>
|
|
120
118
|
`;
|
|
121
119
|
}
|
|
120
|
+
flattenTasks(tasks, level = 0) {
|
|
121
|
+
return tasks.flatMap(task => [{ ...task, level }, ...this.flattenTasks(task.children || [], level + 1)]);
|
|
122
|
+
}
|
|
122
123
|
setVerticalOffset(offset) {
|
|
123
124
|
this.container.scrollTop = offset;
|
|
124
125
|
}
|
|
@@ -158,6 +159,10 @@ let OxGanttChart = class OxGanttChart extends LitElement {
|
|
|
158
159
|
this.requestUpdate();
|
|
159
160
|
}
|
|
160
161
|
}
|
|
162
|
+
handleDateRangeSelected(event) {
|
|
163
|
+
const detail = event.detail;
|
|
164
|
+
this.dispatchEvent(new CustomEvent('date-range-selected', { detail }));
|
|
165
|
+
}
|
|
161
166
|
updateLocale(locale) {
|
|
162
167
|
const localeDefinition = locales[locale || 'en-US'];
|
|
163
168
|
if (localeDefinition) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ox-gantt-chart.js","sourceRoot":"","sources":["../../src/ox-gantt-chart.ts"],"names":[],"mappings":"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","sourcesContent":["import './ox-task-tooltip'\n\nimport { LitElement, html, css, PropertyValues, PropertyValueMap } from 'lit'\nimport { customElement, property, query } from 'lit/decorators.js'\nimport * as d3 from 'd3'\nimport { locales } from './locales'\n\nimport { styles as MDTypeScaleStyles } from '@material/web/typography/md-typescale-styles'\nimport { ScrollbarStyles } from '@operato/styles'\nimport { GanttChartController } from './gantt-chart-controller'\nimport { Task, TimeScale } from './types.js'\nimport { levelDown, levelUp } from './utils'\nimport { OxTaskTooltip } from './ox-task-tooltip.js'\n\n@customElement('ox-gantt-chart')\nexport class OxGanttChart extends LitElement {\n static styles = [\n MDTypeScaleStyles,\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\n position: sticky;\n top: 0;\n z-index: 1;\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, attribute: 'from-date' }) fromDate: string = new Date(new Date().getFullYear(), 0, 1)\n .toISOString()\n .split('T')[0]\n @property({ type: String, attribute: 'to-date' }) toDate: string = new Date(new Date().getFullYear(), 11, 31)\n .toISOString()\n .split('T')[0]\n @property({ type: String, attribute: 'axis-scale' }) axisScale: TimeScale = 'week-day'\n @property({ type: Boolean, attribute: 'extend-grid-lines' }) extendGridLines: boolean = false\n @property({ type: Array }) tasks: Task[] = []\n @property({ type: String, attribute: 'selected-task-id' }) selectedTaskId?: string\n @property({ type: String }) locale: string = 'en-US'\n\n @query('svg[header]') svgHeader!: SVGElement\n @query('svg[body]') svgBody!: SVGElement\n @query('[chart-container]') container!: HTMLDivElement\n @query('ox-task-tooltip') tooltip!: OxTaskTooltip // 툴팁 요소 쿼리 추가\n\n private ganttChartController: GanttChartController\n\n constructor() {\n super()\n this.ganttChartController = new GanttChartController(this, this.fromDate, this.toDate, this.axisScale)\n }\n\n protected firstUpdated(_changedProperties: PropertyValueMap<any> | Map<PropertyKey, unknown>): void {\n this.initHeaderGestureHandlers()\n }\n\n updated(changedProperties: PropertyValues<this>) {\n if (changedProperties.has('fromDate') || changedProperties.has('toDate')) {\n this.ganttChartController.updateRange(this.fromDate, this.toDate)\n }\n\n if (changedProperties.has('tasks')) {\n this.ganttChartController.setTasks(this.tasks)\n this.svgBody.style.height =\n Math.max(this.tasks.length * 30, 2000 /* 태스크가 많이 없어도, 빈 공간이 없도록, 충분히 높게 */) + 'px'\n }\n\n // Update locale\n if (changedProperties.has('locale')) {\n this.updateLocale(this.locale)\n }\n\n if (changedProperties.has('selectedTaskId')) {\n this.ganttChartController.selectedTaskId = this.selectedTaskId\n }\n\n if (changedProperties.has('extendGridLines')) {\n this.ganttChartController.extendGridLines = this.extendGridLines\n }\n\n if (changedProperties.has('axisScale')) {\n this.ganttChartController.level = this.axisScale\n this.ganttChartController.updateTimeScale()\n }\n\n this.ganttChartController.drawAxes(this.svgHeader)\n this.ganttChartController.drawBody(this.svgBody, this.tooltip)\n }\n\n render() {\n return html`\n <div\n chart-container\n @wheel=${(e: WheelEvent) => this.ganttChartController.handleWheelForBody(e, this.container)}\n @touchstart=${(e: TouchEvent) => this.ganttChartController.handleTouchStartForBody(e, this.container)}\n @touchmove=${(e: TouchEvent) => this.ganttChartController.handleTouchMoveForBody(e, this.container)}\n >\n <svg\n header\n @date-range-selected=${(e: CustomEvent) => console.log(e.detail)}\n @wheel=${this.handleWheelForHeader.bind(this)}\n ></svg>\n <svg body></svg>\n <ox-task-tooltip></ox-task-tooltip> // 툴팁 요소 추가\n </div>\n `\n }\n\n setVerticalOffset(offset: number) {\n this.container.scrollTop = offset\n }\n\n getVerticalOffset(): number {\n return this.container.scrollTop\n }\n\n handleWheelForHeader(event: WheelEvent) {\n event.preventDefault()\n event.stopPropagation()\n\n if (event.altKey || event.ctrlKey || event.shiftKey || event.metaKey) {\n this.container.scrollBy({\n left: event.shiftKey ? event.deltaX : event.deltaY\n })\n } else {\n const zoomFactor = event.deltaY < 0 ? 1.1 : 0.9\n this.ganttChartController.baseWidth *= zoomFactor\n\n if (this.ganttChartController.baseWidth > 40) {\n if (this.ganttChartController.level == 'week-day') {\n this.ganttChartController.baseWidth = 40\n } else {\n this.ganttChartController.level = levelDown(this.ganttChartController.level)\n this.ganttChartController.baseWidth = 30\n }\n } else if (this.ganttChartController.baseWidth < 30) {\n if (this.ganttChartController.level == 'year-quarter') {\n this.ganttChartController.baseWidth = 30\n }\n }\n if (this.ganttChartController.baseWidth < 20) {\n this.ganttChartController.level = levelUp(this.ganttChartController.level)\n this.ganttChartController.baseWidth = 30\n }\n\n this.ganttChartController.updateTimeScale()\n this.requestUpdate()\n }\n }\n\n updateLocale(locale: string) {\n const localeDefinition = (locales as any)[locale || 'en-US']\n if (localeDefinition) {\n d3.timeFormatDefaultLocale(localeDefinition)\n this.ganttChartController.updateTimeScale()\n }\n }\n\n initHeaderGestureHandlers() {\n const header = d3.select(this.svgHeader)\n\n let isDragging = false\n let startX: number | null = null\n let lastTouchDistance: number | null = null\n\n const handleTouchStart = (event: TouchEvent) => {\n event.preventDefault()\n\n if (event.touches.length === 2) {\n lastTouchDistance = getTouchDistance(event.touches)\n } else {\n isDragging = true\n const touch = event.touches[0]\n const containerOffsetX = header.node()!.getBoundingClientRect().left\n startX = touch.clientX - containerOffsetX\n }\n }\n\n const handleTouchMove = (event: TouchEvent) => {\n event.preventDefault()\n\n if (event.touches.length === 2 && lastTouchDistance !== null) {\n const currentDistance = getTouchDistance(event.touches)\n const zoomFactor = currentDistance / lastTouchDistance\n this.ganttChartController.baseWidth *= zoomFactor\n\n if (this.ganttChartController.baseWidth > 60) {\n if (this.ganttChartController.level == 'year-quarter') {\n this.ganttChartController.baseWidth = 60\n } else {\n this.ganttChartController.level = levelUp(this.ganttChartController.level)\n this.ganttChartController.baseWidth = 30\n }\n } else if (this.ganttChartController.baseWidth < 30) {\n if (this.ganttChartController.level == 'week-day') {\n this.ganttChartController.baseWidth = 30\n } else {\n this.ganttChartController.level = levelDown(this.ganttChartController.level)\n this.ganttChartController.baseWidth = 60\n }\n }\n\n lastTouchDistance = currentDistance\n this.ganttChartController.updateTimeScale()\n this.requestUpdate()\n } else if (isDragging && startX !== null) {\n const touch = event.touches[0]\n const containerOffsetX = header.node()!.getBoundingClientRect().left\n const currentX = touch.clientX - containerOffsetX\n this.highlightSelection(startX, currentX)\n }\n }\n\n const handleTouchEnd = (event: TouchEvent) => {\n event.preventDefault()\n\n if (event.touches.length < 2) {\n lastTouchDistance = null\n }\n\n if (!isDragging || startX === null) {\n const touch = event.changedTouches[0]\n const containerOffsetX = header.node()!.getBoundingClientRect().left\n const clickX = touch.clientX - containerOffsetX\n this.finalizeSelection(clickX, clickX)\n return\n }\n\n const touch = event.changedTouches[0]\n const containerOffsetX = header.node()!.getBoundingClientRect().left\n const endX = touch.clientX - containerOffsetX\n this.finalizeSelection(startX, endX)\n\n isDragging = false\n startX = null\n }\n\n const getTouchDistance = (touches: TouchList): number => {\n const dx = touches[0].clientX - touches[1].clientX\n const dy = touches[0].clientY - touches[1].clientY\n return Math.sqrt(dx * dx + dy * dy)\n }\n\n const handleMouseDown = (event: MouseEvent) => {\n isDragging = true\n const containerOffsetX = header.node()!.getBoundingClientRect().left\n startX = event.clientX - containerOffsetX\n }\n\n const handleMouseMove = (event: MouseEvent) => {\n if (!isDragging || startX === null) return\n\n const containerOffsetX = header.node()!.getBoundingClientRect().left\n const currentX = event.clientX - containerOffsetX\n this.highlightSelection(startX, currentX)\n }\n\n const handleMouseUp = (event: MouseEvent) => {\n if (!isDragging || startX === null) {\n const containerOffsetX = header.node()!.getBoundingClientRect().left\n const clickX = event.clientX - containerOffsetX\n this.finalizeSelection(clickX, clickX)\n return\n }\n\n const containerOffsetX = header.node()!.getBoundingClientRect().left\n const endX = event.clientX - containerOffsetX\n this.finalizeSelection(startX, endX)\n\n isDragging = false\n startX = null\n }\n\n header.on('mousedown', handleMouseDown)\n header.on('mousemove', handleMouseMove)\n header.on('mouseup', handleMouseUp)\n header.on('touchstart', handleTouchStart)\n header.on('touchmove', handleTouchMove)\n header.on('touchend', handleTouchEnd)\n }\n\n highlightSelection(startX: number, endX: number) {\n const header = d3.select(this.svgHeader)\n const body = d3.select(this.svgBody)\n\n let startDate = this.ganttChartController.timeScale.invert(startX)\n let endDate = this.ganttChartController.timeScale.invert(endX)\n\n let start, end\n\n if (this.ganttChartController.level === 'week-day') {\n start = d3.timeDay.floor(d3.min([startDate, endDate])!)\n end = d3.timeDay.offset(d3.timeDay.ceil(d3.max([startDate, endDate])!), -1)\n } else if (this.ganttChartController.level === 'quarter-week') {\n start = d3.timeWeek.floor(d3.min([startDate, endDate])!)\n end = d3.timeDay.offset(d3.timeWeek.ceil(d3.max([startDate, endDate])!), -1)\n } else if (this.ganttChartController.level === 'year-month') {\n start = d3.timeMonth.floor(d3.min([startDate, endDate])!)\n end = d3.timeDay.offset(d3.timeMonth.ceil(d3.max([startDate, endDate])!), -1)\n } else if (this.ganttChartController.level === 'year-quarter') {\n start = d3.timeMonth.every(3)!.floor(d3.min([startDate, endDate])!)\n end = d3.timeDay.offset(d3.timeMonth.every(3)!.ceil(d3.max([startDate, endDate])!), -1)\n }\n\n header.selectAll('.selection-rect').remove()\n body.selectAll('.selection-rect').remove()\n\n header\n .append('rect')\n .attr('class', 'selection-rect')\n .attr('x', this.ganttChartController.timeScale(start!))\n .attr('y', 20)\n .attr(\n 'width',\n this.ganttChartController.timeScale(end!) -\n this.ganttChartController.timeScale(start!) +\n this.ganttChartController.baseWidth / this.ganttChartController.getScale()\n )\n .attr('height', 20)\n .attr('fill', 'var(--ox-gantt-selection-color, var(--md-sys-color-secondary))')\n .attr('opacity', '.2')\n\n body\n .append('rect')\n .attr('class', 'selection-rect')\n .attr('x', this.ganttChartController.timeScale(start!))\n .attr('y', 0)\n .attr(\n 'width',\n this.ganttChartController.timeScale(end!) -\n this.ganttChartController.timeScale(start!) +\n this.ganttChartController.baseWidth / this.ganttChartController.getScale()\n )\n .attr('height', '100%')\n .attr('fill', 'var(--ox-gantt-selection-color, var(--md-sys-color-secondary))')\n .attr('opacity', '.2')\n }\n\n finalizeSelection(startX: number, endX: number) {\n const header = d3.select(this.svgHeader)\n const body = d3.select(this.svgBody)\n\n let startDate = this.ganttChartController.timeScale.invert(startX)\n let endDate = this.ganttChartController.timeScale.invert(endX)\n\n let start, end\n\n if (this.ganttChartController.level === 'week-day') {\n start = d3.timeDay.floor(d3.min([startDate, endDate])!)\n end = d3.timeDay.offset(d3.timeDay.ceil(d3.max([startDate, endDate])!), -1)\n } else if (this.ganttChartController.level === 'quarter-week') {\n start = d3.timeWeek.floor(d3.min([startDate, endDate])!)\n end = d3.timeDay.offset(d3.timeWeek.ceil(d3.max([startDate, endDate])!), -1)\n } else if (this.ganttChartController.level === 'year-month') {\n start = d3.timeMonth.floor(d3.min([startDate, endDate])!)\n end = d3.timeDay.offset(d3.timeMonth.ceil(d3.max([startDate, endDate])!), -1)\n } else if (this.ganttChartController.level === 'year-quarter') {\n start = d3.timeMonth.every(3)!.floor(d3.min([startDate, endDate])!)\n end = d3.timeDay.offset(d3.timeMonth.every(3)!.ceil(d3.max([startDate, endDate])!), -1)\n }\n\n header.selectAll('.selection-rect').remove()\n body.selectAll('.selection-rect').remove()\n\n header\n .append('rect')\n .attr('class', 'selection-rect')\n .attr('x', this.ganttChartController.timeScale(start!))\n .attr('y', 20)\n .attr(\n 'width',\n this.ganttChartController.timeScale(end!) -\n this.ganttChartController.timeScale(start!) +\n this.ganttChartController.baseWidth / this.ganttChartController.getScale()\n )\n .attr('height', 20)\n .attr('fill', 'var(--ox-gantt-selection-color, var(--md-sys-color-secondary))')\n .attr('opacity', '.2')\n\n body\n .append('rect')\n .attr('class', 'selection-rect')\n .attr('x', this.ganttChartController.timeScale(start!))\n .attr('y', 0)\n .attr(\n 'width',\n this.ganttChartController.timeScale(end!) -\n this.ganttChartController.timeScale(start!) +\n this.ganttChartController.baseWidth / this.ganttChartController.getScale()\n )\n .attr('height', '100%')\n .attr('fill', 'var(--ox-gantt-selection-color, var(--md-sys-color-secondary))')\n .attr('opacity', '.2')\n\n const formatDate = d3.timeFormat('%Y-%m-%d')\n const customEvent = new CustomEvent('date-range-selected', {\n detail: { start: formatDate(start!), end: formatDate(end!) }\n })\n\n header.node()?.dispatchEvent(customEvent)\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"ox-gantt-chart.js","sourceRoot":"","sources":["../../src/ox-gantt-chart.ts"],"names":[],"mappings":"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","sourcesContent":["import './ox-task-tooltip.js'\nimport './ox-resource-chart.js'\n\nimport { LitElement, html, css, PropertyValues, PropertyValueMap } from 'lit'\nimport { customElement, property, query } from 'lit/decorators.js'\nimport * as d3 from 'd3'\nimport { locales } from './locales'\n\nimport { styles as MDTypeScaleStyles } from '@material/web/typography/md-typescale-styles'\nimport { ScrollbarStyles } from '@operato/styles'\nimport { GanttChartController } from './gantt-chart-controller'\nimport { Task, TimeScale } from './types.js'\nimport { levelDown, levelUp } from './utils'\nimport { OxTaskTooltip } from './ox-task-tooltip.js'\n\n@customElement('ox-gantt-chart')\nexport class OxGanttChart extends LitElement {\n static styles = [\n MDTypeScaleStyles,\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 .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, attribute: 'from-date' }) fromDate: string = new Date(new Date().getFullYear(), 0, 1)\n .toISOString()\n .split('T')[0]\n @property({ type: String, attribute: 'to-date' }) toDate: string = new Date(new Date().getFullYear(), 11, 31)\n .toISOString()\n .split('T')[0]\n @property({ type: String, attribute: 'axis-scale' }) axisScale: TimeScale = 'week-day'\n @property({ type: Boolean, attribute: 'extend-grid-lines' }) extendGridLines: boolean = false\n @property({ type: Array }) tasks: Task[] = []\n @property({ type: String, attribute: 'selected-task-id' }) selectedTaskId?: string\n @property({ type: String }) locale: string = 'en-US'\n\n @query('svg[header]') svgHeader!: SVGElement\n @query('svg[body]') svgBody!: SVGElement\n @query('[chart-container]') container!: HTMLDivElement\n @query('ox-task-tooltip') tooltip!: OxTaskTooltip\n\n private ganttChartController: GanttChartController\n\n constructor() {\n super()\n this.ganttChartController = new GanttChartController(this, this.fromDate, this.toDate, this.axisScale)\n }\n\n protected firstUpdated(_changedProperties: PropertyValueMap<any> | Map<PropertyKey, unknown>): void {\n this.initHeaderGestureHandlers()\n }\n\n updated(changedProperties: PropertyValues<this>) {\n if (changedProperties.has('fromDate') || changedProperties.has('toDate')) {\n this.ganttChartController.updateRange(this.fromDate, this.toDate)\n }\n\n if (changedProperties.has('tasks')) {\n this.ganttChartController.setTasks(this.flattenTasks(this.tasks))\n this.svgBody.style.height = Math.max(this.tasks.length * 30, 2000) + 'px'\n }\n\n if (changedProperties.has('locale')) {\n this.updateLocale(this.locale)\n }\n\n if (changedProperties.has('selectedTaskId')) {\n this.ganttChartController.selectedTaskId = this.selectedTaskId\n }\n\n if (changedProperties.has('extendGridLines')) {\n this.ganttChartController.extendGridLines = this.extendGridLines\n }\n\n if (changedProperties.has('axisScale')) {\n this.ganttChartController.level = this.axisScale\n this.ganttChartController.updateTimeScale()\n }\n\n this.ganttChartController.drawAxes(this.svgHeader)\n this.ganttChartController.drawBody(this.svgBody, this.tooltip)\n }\n\n render() {\n return html`\n <div\n chart-container\n @wheel=${(e: WheelEvent) => this.ganttChartController.handleWheelForBody(e, this.container)}\n @touchstart=${(e: TouchEvent) => this.ganttChartController.handleTouchStartForBody(e, this.container)}\n @touchmove=${(e: TouchEvent) => this.ganttChartController.handleTouchMoveForBody(e, this.container)}\n >\n <svg\n header\n @date-range-selected=${(e: CustomEvent) => this.handleDateRangeSelected(e)}\n @wheel=${this.handleWheelForHeader.bind(this)}\n ></svg>\n <svg body></svg>\n <ox-task-tooltip></ox-task-tooltip>\n </div>\n `\n }\n\n flattenTasks(tasks: Task[], level: number = 0): Task[] {\n return tasks.flatMap(task => [{ ...task, level }, ...this.flattenTasks(task.children || [], level + 1)])\n }\n\n setVerticalOffset(offset: number) {\n this.container.scrollTop = offset\n }\n\n getVerticalOffset(): number {\n return this.container.scrollTop\n }\n\n handleWheelForHeader(event: WheelEvent) {\n event.preventDefault()\n event.stopPropagation()\n\n if (event.altKey || event.ctrlKey || event.shiftKey || event.metaKey) {\n this.container.scrollBy({\n left: event.shiftKey ? event.deltaX : event.deltaY\n })\n } else {\n const zoomFactor = event.deltaY < 0 ? 1.1 : 0.9\n this.ganttChartController.baseWidth *= zoomFactor\n\n if (this.ganttChartController.baseWidth > 40) {\n if (this.ganttChartController.level == 'week-day') {\n this.ganttChartController.baseWidth = 40\n } else {\n this.ganttChartController.level = levelDown(this.ganttChartController.level)\n this.ganttChartController.baseWidth = 30\n }\n } else if (this.ganttChartController.baseWidth < 30) {\n if (this.ganttChartController.level == 'year-quarter') {\n this.ganttChartController.baseWidth = 30\n }\n }\n if (this.ganttChartController.baseWidth < 20) {\n this.ganttChartController.level = levelUp(this.ganttChartController.level)\n this.ganttChartController.baseWidth = 30\n }\n\n this.ganttChartController.updateTimeScale()\n this.requestUpdate()\n }\n }\n\n handleDateRangeSelected(event: CustomEvent) {\n const detail = event.detail\n this.dispatchEvent(new CustomEvent('date-range-selected', { detail }))\n }\n\n updateLocale(locale: string) {\n const localeDefinition = (locales as any)[locale || 'en-US']\n if (localeDefinition) {\n d3.timeFormatDefaultLocale(localeDefinition)\n this.ganttChartController.updateTimeScale()\n }\n }\n\n initHeaderGestureHandlers() {\n const header = d3.select(this.svgHeader)\n\n let isDragging = false\n let startX: number | null = null\n let lastTouchDistance: number | null = null\n\n const handleTouchStart = (event: TouchEvent) => {\n event.preventDefault()\n\n if (event.touches.length === 2) {\n lastTouchDistance = getTouchDistance(event.touches)\n } else {\n isDragging = true\n const touch = event.touches[0]\n const containerOffsetX = header.node()!.getBoundingClientRect().left\n startX = touch.clientX - containerOffsetX\n }\n }\n\n const handleTouchMove = (event: TouchEvent) => {\n event.preventDefault()\n\n if (event.touches.length === 2 && lastTouchDistance !== null) {\n const currentDistance = getTouchDistance(event.touches)\n const zoomFactor = currentDistance / lastTouchDistance\n this.ganttChartController.baseWidth *= zoomFactor\n\n if (this.ganttChartController.baseWidth > 60) {\n if (this.ganttChartController.level == 'year-quarter') {\n this.ganttChartController.baseWidth = 60\n } else {\n this.ganttChartController.level = levelUp(this.ganttChartController.level)\n this.ganttChartController.baseWidth = 30\n }\n } else if (this.ganttChartController.baseWidth < 30) {\n if (this.ganttChartController.level == 'week-day') {\n this.ganttChartController.baseWidth = 30\n } else {\n this.ganttChartController.level = levelDown(this.ganttChartController.level)\n this.ganttChartController.baseWidth = 60\n }\n }\n\n lastTouchDistance = currentDistance\n this.ganttChartController.updateTimeScale()\n this.requestUpdate()\n } else if (isDragging && startX !== null) {\n const touch = event.touches[0]\n const containerOffsetX = header.node()!.getBoundingClientRect().left\n const currentX = touch.clientX - containerOffsetX\n this.highlightSelection(startX, currentX)\n }\n }\n\n const handleTouchEnd = (event: TouchEvent) => {\n event.preventDefault()\n\n if (event.touches.length < 2) {\n lastTouchDistance = null\n }\n\n if (!isDragging || startX === null) {\n const touch = event.changedTouches[0]\n const containerOffsetX = header.node()!.getBoundingClientRect().left\n const clickX = touch.clientX - containerOffsetX\n this.finalizeSelection(clickX, clickX)\n return\n }\n\n const touch = event.changedTouches[0]\n const containerOffsetX = header.node()!.getBoundingClientRect().left\n const endX = touch.clientX - containerOffsetX\n this.finalizeSelection(startX, endX)\n\n isDragging = false\n startX = null\n }\n\n const getTouchDistance = (touches: TouchList): number => {\n const dx = touches[0].clientX - touches[1].clientX\n const dy = touches[0].clientY - touches[1].clientY\n return Math.sqrt(dx * dx + dy * dy)\n }\n\n const handleMouseDown = (event: MouseEvent) => {\n isDragging = true\n const containerOffsetX = header.node()!.getBoundingClientRect().left\n startX = event.clientX - containerOffsetX\n }\n\n const handleMouseMove = (event: MouseEvent) => {\n if (!isDragging || startX === null) return\n\n const containerOffsetX = header.node()!.getBoundingClientRect().left\n const currentX = event.clientX - containerOffsetX\n this.highlightSelection(startX, currentX)\n }\n\n const handleMouseUp = (event: MouseEvent) => {\n if (!isDragging || startX === null) {\n const containerOffsetX = header.node()!.getBoundingClientRect().left\n const clickX = event.clientX - containerOffsetX\n this.finalizeSelection(clickX, clickX)\n return\n }\n\n const containerOffsetX = header.node()!.getBoundingClientRect().left\n const endX = event.clientX - containerOffsetX\n this.finalizeSelection(startX, endX)\n\n isDragging = false\n startX = null\n }\n\n header.on('mousedown', handleMouseDown)\n header.on('mousemove', handleMouseMove)\n header.on('mouseup', handleMouseUp)\n header.on('touchstart', handleTouchStart)\n header.on('touchmove', handleTouchMove)\n header.on('touchend', handleTouchEnd)\n }\n\n highlightSelection(startX: number, endX: number) {\n const header = d3.select(this.svgHeader)\n const body = d3.select(this.svgBody)\n\n let startDate = this.ganttChartController.timeScale.invert(startX)\n let endDate = this.ganttChartController.timeScale.invert(endX)\n\n let start, end\n\n if (this.ganttChartController.level === 'week-day') {\n start = d3.timeDay.floor(d3.min([startDate, endDate])!)\n end = d3.timeDay.offset(d3.timeDay.ceil(d3.max([startDate, endDate])!), -1)\n } else if (this.ganttChartController.level === 'quarter-week') {\n start = d3.timeWeek.floor(d3.min([startDate, endDate])!)\n end = d3.timeDay.offset(d3.timeWeek.ceil(d3.max([startDate, endDate])!), -1)\n } else if (this.ganttChartController.level === 'year-month') {\n start = d3.timeMonth.floor(d3.min([startDate, endDate])!)\n end = d3.timeDay.offset(d3.timeMonth.ceil(d3.max([startDate, endDate])!), -1)\n } else if (this.ganttChartController.level === 'year-quarter') {\n start = d3.timeMonth.every(3)!.floor(d3.min([startDate, endDate])!)\n end = d3.timeDay.offset(d3.timeMonth.every(3)!.ceil(d3.max([startDate, endDate])!), -1)\n }\n\n header.selectAll('.selection-rect').remove()\n body.selectAll('.selection-rect').remove()\n\n header\n .append('rect')\n .attr('class', 'selection-rect')\n .attr('x', this.ganttChartController.timeScale(start!))\n .attr('y', 20)\n .attr(\n 'width',\n this.ganttChartController.timeScale(end!) -\n this.ganttChartController.timeScale(start!) +\n this.ganttChartController.baseWidth / this.ganttChartController.getScale()\n )\n .attr('height', 20)\n .attr('fill', 'var(--ox-gantt-selection-color, var(--md-sys-color-secondary))')\n .attr('opacity', '.2')\n\n body\n .append('rect')\n .attr('class', 'selection-rect')\n .attr('x', this.ganttChartController.timeScale(start!))\n .attr('y', 0)\n .attr(\n 'width',\n this.ganttChartController.timeScale(end!) -\n this.ganttChartController.timeScale(start!) +\n this.ganttChartController.baseWidth / this.ganttChartController.getScale()\n )\n .attr('height', '100%')\n .attr('fill', 'var(--ox-gantt-selection-color, var(--md-sys-color-secondary))')\n .attr('opacity', '.2')\n }\n\n finalizeSelection(startX: number, endX: number) {\n const header = d3.select(this.svgHeader)\n const body = d3.select(this.svgBody)\n\n let startDate = this.ganttChartController.timeScale.invert(startX)\n let endDate = this.ganttChartController.timeScale.invert(endX)\n\n let start, end\n\n if (this.ganttChartController.level === 'week-day') {\n start = d3.timeDay.floor(d3.min([startDate, endDate])!)\n end = d3.timeDay.offset(d3.timeDay.ceil(d3.max([startDate, endDate])!), -1)\n } else if (this.ganttChartController.level === 'quarter-week') {\n start = d3.timeWeek.floor(d3.min([startDate, endDate])!)\n end = d3.timeDay.offset(d3.timeWeek.ceil(d3.max([startDate, endDate])!), -1)\n } else if (this.ganttChartController.level === 'year-month') {\n start = d3.timeMonth.floor(d3.min([startDate, endDate])!)\n end = d3.timeDay.offset(d3.timeMonth.ceil(d3.max([startDate, endDate])!), -1)\n } else if (this.ganttChartController.level === 'year-quarter') {\n start = d3.timeMonth.every(3)!.floor(d3.min([startDate, endDate])!)\n end = d3.timeDay.offset(d3.timeMonth.every(3)!.ceil(d3.max([startDate, endDate])!), -1)\n }\n\n header.selectAll('.selection-rect').remove()\n body.selectAll('.selection-rect').remove()\n\n header\n .append('rect')\n .attr('class', 'selection-rect')\n .attr('x', this.ganttChartController.timeScale(start!))\n .attr('y', 20)\n .attr(\n 'width',\n this.ganttChartController.timeScale(end!) -\n this.ganttChartController.timeScale(start!) +\n this.ganttChartController.baseWidth / this.ganttChartController.getScale()\n )\n .attr('height', 20)\n .attr('fill', 'var(--ox-gantt-selection-color, var(--md-sys-color-secondary))')\n .attr('opacity', '.2')\n\n body\n .append('rect')\n .attr('class', 'selection-rect')\n .attr('x', this.ganttChartController.timeScale(start!))\n .attr('y', 0)\n .attr(\n 'width',\n this.ganttChartController.timeScale(end!) -\n this.ganttChartController.timeScale(start!) +\n this.ganttChartController.baseWidth / this.ganttChartController.getScale()\n )\n .attr('height', '100%')\n .attr('fill', 'var(--ox-gantt-selection-color, var(--md-sys-color-secondary))')\n .attr('opacity', '.2')\n\n const formatDate = d3.timeFormat('%Y-%m-%d')\n const customEvent = new CustomEvent('date-range-selected', {\n detail: { start: formatDate(start!), end: formatDate(end!) }\n })\n\n header.node()?.dispatchEvent(customEvent)\n }\n}\n"]}
|
|
@@ -12,6 +12,8 @@ let OxGanttResizeSplitter = class OxGanttResizeSplitter extends LitElement {
|
|
|
12
12
|
position: relative;
|
|
13
13
|
opacity: 0.7;
|
|
14
14
|
background-color: var(--splitter-background-color);
|
|
15
|
+
width: var(--width);
|
|
16
|
+
height: var(--height);
|
|
15
17
|
}
|
|
16
18
|
|
|
17
19
|
:host(:hover) {
|
|
@@ -19,21 +21,20 @@ let OxGanttResizeSplitter = class OxGanttResizeSplitter extends LitElement {
|
|
|
19
21
|
}
|
|
20
22
|
|
|
21
23
|
div {
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
height: 100%;
|
|
24
|
+
width: var(--width);
|
|
25
|
+
height: var(--height);
|
|
25
26
|
}
|
|
26
27
|
`; }
|
|
27
28
|
connectedCallback() {
|
|
28
29
|
super.connectedCallback();
|
|
29
30
|
if (this.hasAttribute('vertical')) {
|
|
30
|
-
this.style.width
|
|
31
|
-
this.style.height
|
|
31
|
+
this.style.setProperty('--width', '3px');
|
|
32
|
+
this.style.setProperty('--height', '100%');
|
|
32
33
|
this.style.cursor = 'col-resize';
|
|
33
34
|
}
|
|
34
35
|
else {
|
|
35
|
-
this.style.
|
|
36
|
-
this.style.
|
|
36
|
+
this.style.setProperty('--height', '3px');
|
|
37
|
+
this.style.setProperty('--width', '100%');
|
|
37
38
|
this.style.cursor = 'row-resize';
|
|
38
39
|
}
|
|
39
40
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ox-gantt-resize-splitter.js","sourceRoot":"","sources":["../../src/ox-gantt-resize-splitter.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,UAAU,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,KAAK,CAAA;AAC3C,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;AAG1C,IAAM,qBAAqB,GAA3B,MAAM,qBAAsB,SAAQ,UAAU;IAA9C;;
|
|
1
|
+
{"version":3,"file":"ox-gantt-resize-splitter.js","sourceRoot":"","sources":["../../src/ox-gantt-resize-splitter.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,UAAU,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,KAAK,CAAA;AAC3C,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;AAG1C,IAAM,qBAAqB,GAA3B,MAAM,qBAAsB,SAAQ,UAAU;IAA9C;;QA6DG,uBAAkB,GAAG,CAAC,CAAa,EAAE,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAA;QAC3D,qBAAgB,GAAG,CAAC,CAAa,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAA;IAgEjE,CAAC;aA7HQ,WAAM,GAAG,GAAG,CAAA;;;;;;;;;;;;;;;;;GAiBlB,AAjBY,CAiBZ;IAID,iBAAiB;QACf,KAAK,CAAC,iBAAiB,EAAE,CAAA;QAEzB,IAAI,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,EAAE,CAAC;YAClC,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,SAAS,EAAE,KAAK,CAAC,CAAA;YACxC,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,UAAU,EAAE,MAAM,CAAC,CAAA;YAC1C,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,YAAY,CAAA;QAClC,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,UAAU,EAAE,KAAK,CAAC,CAAA;YACzC,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,SAAS,EAAE,MAAM,CAAC,CAAA;YACzC,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,YAAY,CAAA;QAClC,CAAC;IACH,CAAC;IAED,MAAM;QACJ,OAAO,IAAI,CAAA,mBAAmB,CAAC,CAAa,EAAE,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS,CAAA;IAC/E,CAAC;IAEO,WAAW,CAAC,CAAa;QAC/B,IAAI,CAAC,SAAS,GAAG;YACf,CAAC,EAAE,CAAC,CAAC,OAAO;YACZ,CAAC,EAAE,CAAC,CAAC,OAAO;SACb,CAAA;QAED,IAAI,CAAC,aAAa,CAChB,IAAI,WAAW,CAAC,oBAAoB,EAAE;YACpC,OAAO,EAAE,IAAI;YACb,QAAQ,EAAE,IAAI;SACf,CAAC,CACH,CAAA;QAED,IAAI,CAAC,aAAc,CAAC,gBAAgB,CAAC,WAAW,EAAE,IAAI,CAAC,kBAAkB,CAAC,CAAA;QAC1E,IAAI,CAAC,aAAc,CAAC,gBAAgB,CAAC,SAAS,EAAE,IAAI,CAAC,gBAAgB,CAAC,CAAA;QACtE,MAAM,CAAC,gBAAgB,CAAC,WAAW,EAAE,IAAI,CAAC,kBAAkB,CAAC,CAAA;QAC7D,MAAM,CAAC,gBAAgB,CAAC,SAAS,EAAE,IAAI,CAAC,gBAAgB,CAAC,CAAA;QAEzD,CAAC,CAAC,eAAe,EAAE,CAAA;IACrB,CAAC;IAKO,WAAW,CAAC,CAAa;QAC/B,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;YACpB,OAAM;QACR,CAAC;QAED,MAAM,UAAU,GAAG,IAAI,CAAC,aAAc,CAAC,qBAAqB,EAAE,CAAA;QAC9D,IACE,CAAC,CAAC,OAAO,GAAG,UAAU,CAAC,IAAI;YAC3B,CAAC,CAAC,OAAO,GAAG,UAAU,CAAC,KAAK;YAC5B,CAAC,CAAC,OAAO,GAAG,UAAU,CAAC,GAAG;YAC1B,CAAC,CAAC,OAAO,GAAG,UAAU,CAAC,MAAM,EAC7B,CAAC;YACD,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAA;YACjB,OAAM;QACR,CAAC;QAED,CAAC,CAAC,cAAc,EAAE,CAAA;QAElB,IAAI,CAAC,aAAa,CAChB,IAAI,WAAW,CAAC,eAAe,EAAE;YAC/B,OAAO,EAAE,IAAI;YACb,QAAQ,EAAE,IAAI;YACd,MAAM,EAAE;gBACN,CAAC,EAAE,CAAC,CAAC,OAAO,GAAG,IAAI,CAAC,SAAU,CAAC,CAAC;gBAChC,CAAC,EAAE,CAAC,CAAC,OAAO,GAAG,IAAI,CAAC,SAAU,CAAC,CAAC;aACjC;SACF,CAAC,CACH,CAAA;QAED,IAAI,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,EAAE,CAAC;YAClC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,YAAY,CAAA;QAC3C,CAAC;aAAM,CAAC;YACN,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,YAAY,CAAA;QAC3C,CAAC;QAED,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG,MAAM,CAAA;QAEvC,CAAC,CAAC,eAAe,EAAE,CAAA;IACrB,CAAC;IAEO,SAAS,CAAC,CAAa;QAC7B,IAAI,CAAC,aAAc,CAAC,mBAAmB,CAAC,WAAW,EAAE,IAAI,CAAC,kBAAkB,CAAC,CAAA;QAC7E,IAAI,CAAC,aAAc,CAAC,mBAAmB,CAAC,SAAS,EAAE,IAAI,CAAC,gBAAgB,CAAC,CAAA;QACzE,MAAM,CAAC,mBAAmB,CAAC,WAAW,EAAE,IAAI,CAAC,kBAAkB,CAAC,CAAA;QAChE,MAAM,CAAC,mBAAmB,CAAC,SAAS,EAAE,IAAI,CAAC,gBAAgB,CAAC,CAAA;QAE5D,IAAI,CAAC,aAAa,CAChB,IAAI,WAAW,CAAC,kBAAkB,EAAE;YAClC,OAAO,EAAE,IAAI;YACb,QAAQ,EAAE,IAAI;YACd,MAAM,EAAE;gBACN,CAAC,EAAE,CAAC,CAAC,OAAO,GAAG,IAAI,CAAC,SAAU,CAAC,CAAC;gBAChC,CAAC,EAAE,CAAC,CAAC,OAAO,GAAG,IAAI,CAAC,SAAU,CAAC,CAAC;aACjC;SACF,CAAC,CACH,CAAA;QAED,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,EAAE,CAAA;QAC/B,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG,EAAE,CAAA;QAEnC,CAAC,CAAC,eAAe,EAAE,CAAA;IACrB,CAAC;;AA7HU,qBAAqB;IADjC,aAAa,CAAC,0BAA0B,CAAC;GAC7B,qBAAqB,CA8HjC","sourcesContent":["import { LitElement, css, html } from 'lit'\nimport { customElement } from 'lit/decorators.js'\n\n@customElement('ox-gantt-resize-splitter')\nexport class OxGanttResizeSplitter extends LitElement {\n static styles = css`\n :host {\n position: relative;\n opacity: 0.7;\n background-color: var(--splitter-background-color);\n width: var(--width);\n height: var(--height);\n }\n\n :host(:hover) {\n background-color: var(--splitter-hover-background-color);\n }\n\n div {\n width: var(--width);\n height: var(--height);\n }\n `\n\n private dragstart?: { x: number; y: number }\n\n connectedCallback() {\n super.connectedCallback()\n\n if (this.hasAttribute('vertical')) {\n this.style.setProperty('--width', '3px')\n this.style.setProperty('--height', '100%')\n this.style.cursor = 'col-resize'\n } else {\n this.style.setProperty('--height', '3px')\n this.style.setProperty('--width', '100%')\n this.style.cursor = 'row-resize'\n }\n }\n\n render() {\n return html`<div @mousedown=${(e: MouseEvent) => this.onMouseDown(e)}></div>`\n }\n\n private onMouseDown(e: MouseEvent) {\n this.dragstart = {\n x: e.clientX,\n y: e.clientY\n }\n\n this.dispatchEvent(\n new CustomEvent('splitter-dragstart', {\n bubbles: true,\n composed: true\n })\n )\n\n this.parentElement!.addEventListener('mousemove', this.onMouseMoveHandler)\n this.parentElement!.addEventListener('mouseup', this.onMouseUpHandler)\n window.addEventListener('mousemove', this.onMouseMoveHandler)\n window.addEventListener('mouseup', this.onMouseUpHandler)\n\n e.stopPropagation()\n }\n\n private onMouseMoveHandler = (e: MouseEvent) => this.onMouseMove(e)\n private onMouseUpHandler = (e: MouseEvent) => this.onMouseUp(e)\n\n private onMouseMove(e: MouseEvent) {\n if (!this.dragstart) {\n return\n }\n\n const parentRect = this.parentElement!.getBoundingClientRect()\n if (\n e.clientX < parentRect.left ||\n e.clientX > parentRect.right ||\n e.clientY < parentRect.top ||\n e.clientY > parentRect.bottom\n ) {\n this.onMouseUp(e)\n return\n }\n\n e.preventDefault()\n\n this.dispatchEvent(\n new CustomEvent('splitter-drag', {\n bubbles: true,\n composed: true,\n detail: {\n x: e.clientX - this.dragstart!.x,\n y: e.clientY - this.dragstart!.y\n }\n })\n )\n\n if (this.hasAttribute('vertical')) {\n document.body.style.cursor = 'col-resize'\n } else {\n document.body.style.cursor = 'row-resize'\n }\n\n document.body.style.userSelect = 'none'\n\n e.stopPropagation()\n }\n\n private onMouseUp(e: MouseEvent) {\n this.parentElement!.removeEventListener('mousemove', this.onMouseMoveHandler)\n this.parentElement!.removeEventListener('mouseup', this.onMouseUpHandler)\n window.removeEventListener('mousemove', this.onMouseMoveHandler)\n window.removeEventListener('mouseup', this.onMouseUpHandler)\n\n this.dispatchEvent(\n new CustomEvent('splitter-dragend', {\n bubbles: true,\n composed: true,\n detail: {\n x: e.clientX - this.dragstart!.x,\n y: e.clientY - this.dragstart!.y\n }\n })\n )\n\n document.body.style.cursor = ''\n document.body.style.userSelect = ''\n\n e.stopPropagation()\n }\n}\n"]}
|
package/dist/src/ox-gantt.d.ts
CHANGED
|
@@ -1,38 +1,50 @@
|
|
|
1
|
-
import { LitElement, PropertyValues, PropertyValueMap } from 'lit';
|
|
1
|
+
import { LitElement, PropertyValues, PropertyValueMap, TemplateResult } from 'lit';
|
|
2
2
|
import './ox-gantt-chart.js';
|
|
3
|
+
import './ox-resource-chart.js';
|
|
3
4
|
import './ox-gantt-resize-splitter.js';
|
|
4
5
|
import { OxGanttChart } from './ox-gantt-chart.js';
|
|
5
|
-
import {
|
|
6
|
+
import { OxResourceChart } from './ox-resource-chart.js';
|
|
7
|
+
import { ColumnConfig, Task, TimeScale, Resource } from './types.js';
|
|
6
8
|
export declare class OxGantt extends LitElement {
|
|
7
9
|
static styles: import("lit").CSSResult[];
|
|
8
10
|
tasks: Task[];
|
|
11
|
+
resources: Resource[];
|
|
9
12
|
fromDate: string;
|
|
10
13
|
toDate: string;
|
|
11
14
|
extendGridLines: boolean;
|
|
12
15
|
timeScale: TimeScale;
|
|
13
16
|
columnConfig: ColumnConfig[];
|
|
14
17
|
selectedTaskId?: string;
|
|
15
|
-
container: HTMLDivElement;
|
|
16
18
|
taskContainer: HTMLDivElement;
|
|
17
|
-
|
|
19
|
+
taskTableContainer: HTMLDivElement;
|
|
20
|
+
taskChartContainer: HTMLDivElement;
|
|
21
|
+
resourceContainer: HTMLDivElement;
|
|
22
|
+
resourceTableContainer: HTMLDivElement;
|
|
23
|
+
resourceChartContainer: HTMLDivElement;
|
|
18
24
|
taskTable: HTMLTableElement;
|
|
19
25
|
ganttChart: OxGanttChart;
|
|
26
|
+
resourceChart: OxResourceChart;
|
|
20
27
|
private _startWidth;
|
|
28
|
+
private _startHeight;
|
|
21
29
|
private _isDragging;
|
|
22
|
-
render():
|
|
23
|
-
renderTaskTable():
|
|
30
|
+
render(): TemplateResult<1>;
|
|
31
|
+
renderTaskTable(): TemplateResult<1> | undefined;
|
|
32
|
+
renderTaskRows(tasks: Task[], level?: number): TemplateResult[];
|
|
33
|
+
renderTaskRow(task: Task, level: number): TemplateResult<1>;
|
|
34
|
+
renderResourceRow(resource: Resource): TemplateResult<1>;
|
|
24
35
|
getTaskFieldValue(task: Task, field: string): string | number;
|
|
25
|
-
mergeTasksBySection(tasks: Task[]): Array<{
|
|
26
|
-
task: Task;
|
|
27
|
-
showSection: boolean;
|
|
28
|
-
rowSpan: number;
|
|
29
|
-
}>;
|
|
30
36
|
selectTask(taskId: string): void;
|
|
31
37
|
handleTaskClicked(event: CustomEvent): void;
|
|
32
38
|
protected firstUpdated(_changedProperties: PropertyValueMap<any> | Map<PropertyKey, unknown>): void;
|
|
33
|
-
updated(
|
|
39
|
+
updated(changedProperties: PropertyValues<this>): void;
|
|
40
|
+
aggregateResources(tasks: Task[]): Resource[];
|
|
34
41
|
syncScroll(e: Event): void;
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
42
|
+
syncResourceChartScroll(e: CustomEvent): void;
|
|
43
|
+
syncTaskChartScroll(e: CustomEvent): void;
|
|
44
|
+
resizeHorizontalStart(e: CustomEvent): void;
|
|
45
|
+
resizeHorizontalDrag(e: CustomEvent): void;
|
|
46
|
+
resizeHorizontalEnd(e: CustomEvent): void;
|
|
47
|
+
resizeVerticalStart(e: CustomEvent): void;
|
|
48
|
+
resizeVerticalDrag(e: CustomEvent): void;
|
|
49
|
+
resizeVerticalEnd(e: CustomEvent): void;
|
|
38
50
|
}
|