@mogura/moguchart-react 1.4.0 → 1.6.0

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/README.ja.md CHANGED
@@ -4,6 +4,8 @@
4
4
 
5
5
  Lit 公式の `@lit/react` をベースに設計されており、Web Components の高いパフォーマンスとフレームワーク非依存の柔軟性を保ちつつ、React アプリケーションで型安全かつ直感的にガントチャートを扱うことができます。
6
6
 
7
+ [English Documentation](./README.md)
8
+
7
9
  ---
8
10
 
9
11
  ## 特徴
@@ -14,6 +16,8 @@ Lit 公式の `@lit/react` をベースに設計されており、Web Components
14
16
  - ⚡ **命令的メソッドへのアクセス**: `ref` を介して `chart.use()`, `chart.exportImage()`, `chart.exportExcel()`, `chart.selectTask()` などを直接呼び出し可能
15
17
  - 🔌 **プラグイン連携**: `@mogura/moguchart-plugin-export` (PNG/PDF) や `@mogura/moguchart-plugin-excel` (Excel) などの公式プラグインをシームレスに利用可能
16
18
  - 📈 **予実管理 (Baseline) 対応**: `task.baseline` と `option.baseline` による計画 vs 実績の同時可視化と遅延検知に対応
19
+ - 📋 **マルチカラムデータグリッド & インライン編集**: `option.grid` による複数列WBSテーブル表示・列幅リサイズ・セル直接編集(`onCellEdit`, `onColumnResize`)に対応
20
+ - 🔗 **自動スケジューリング & FS/SS/FF/SF 依存関係対応**: `GanttDependencyLink` による4種類の依存関係・ラグ指定と、営業日ベース(土日・祝日除外 `calendarMode`)にも対応した後続タスクの自動カスケード移動(`option.dependency.autoSchedule`, `autoSchedule()`)に対応
17
21
  - 📦 **Re-export**: `@mogura/moguchart-core` の型定義や定数をすべて再エクスポートしているため、本パッケージのみのインストールで開発可能
18
22
 
19
23
  ---
@@ -143,7 +147,8 @@ export function GanttToolbar() {
143
147
  - **ズーム操作**: `zoomIn()`, `zoomOut()`, `zoomToPercent(percent)`, `zoomToScale(scale)`, `resetZoom()`, `zoomToFit()`, `getZoomPercent()`, `getZoomScale()`
144
148
  - **スクロール・選択**: `scrollToTask(taskId)`, `scrollToPosition(pos)`, `resetScroll()`, `selectTask(taskId)`
145
149
  - **WBS・折りたたみ**: `toggleRowCollapse(rowId, collapsed?)`, `collapseAll()`, `expandAll()`, `getRowPositions()`
146
- - **依存関係操作**: `triggerDependencyDelete(sourceTaskId, targetTaskId)`, `selectDependency(...)`, `clearDependencySelection()`
150
+ - **グリッド・インラインセル編集**: `startCellEdit(rowId, columnId)`, `commitCellEdit(overrideValue?)`, `cancelCellEdit()`
151
+ - **依存関係・自動スケジュール操作**: `triggerDependencyDelete(sourceTaskId, targetTaskId)`, `autoSchedule(changedTaskIds?, options?)`, `selectDependency(...)`, `clearDependencySelection()`
147
152
  - **画像・PDFエクスポート**: `exportImage(format, options)`(`@mogura/moguchart-plugin-export` 導入時)
148
153
  - **Excelエクスポート**: `exportExcel(options)`(`@mogura/moguchart-plugin-excel` 導入時)
149
154
 
@@ -190,7 +195,7 @@ export function BaselineGanttView() {
190
195
  pxPerDay: 40,
191
196
  },
192
197
  baseline: {
193
- visible: true, // ベースライン表示
198
+ enabled: true, // ベースライン表示を有効化
194
199
  position: 'bottom', // 'bottom' (下部) | 'top' (上部) | 'overlay' (重ねて表示)
195
200
  highlightDelay: true, // 遅延タスクをハイライト強調
196
201
  delayColor: '#EF4444', // 遅延強調アクセント色
@@ -320,11 +325,14 @@ React では標準のイベント Props としてキャメルケース(`onTask
320
325
  | `onRowHeaderDblClick` | 行ヘッダーダブルクリック時(`contentTarget` で行名要素を参照可能) | `CustomEvent<RowHeaderDblClickEventDetail>` |
321
326
  | `onRowHeaderContextMenu` | 行ヘッダー右クリック時 | `CustomEvent<RowHeaderContextMenuEventDetail>` |
322
327
  | `onRowHeaderResize` | 行ヘッダーリサイズ時 | `CustomEvent<RowHeaderResizeEventDetail>` |
328
+ | `onColumnResize` | マルチカラムグリッドの列幅リサイズ時 | `CustomEvent<ColumnResizeEventDetail>` |
329
+ | `onCellEdit` | マルチカラムグリッドのインラインセル編集確定時 | `CustomEvent<CellEditEventDetail>` |
330
+ | `onRowsChange` | 行データ変更時 | `CustomEvent<RowsChangeEventDetail>` |
323
331
  | `onRowReordered` | 行の並び順変更時 | `CustomEvent<RowReorderEventDetail>` |
324
332
  | `onRowSelectionChange` | 行選択状態の変更時 | `CustomEvent<RowSelectionChangeEventDetail>` |
325
333
  | `onRowToggleCollapse` | 行の開閉時(WBS) | `CustomEvent<RowToggleCollapseEventDetail>` |
326
334
  | `onDependencyCreate` | 依存関係(リンク)作成時 | `CustomEvent<DependencyCreateEventDetail>` |
327
- | `onDependencyClick` | 依存関係クリック時 | `CustomEvent<DependencyClickEventDetail>` |
335
+ | `onDependencyClick` | 依存関係クリック・ダブルクリック・右クリック時 | `CustomEvent<DependencyClickEventDetail>` |
328
336
  | `onDependencySelect` | 依存関係の選択状態変更時(ハイライト・削除ボタン表示) | `CustomEvent<DependencySelectEventDetail>` |
329
337
  | `onDependencyDelete` | 依存関係削除時 | `CustomEvent<DependencyDeleteEventDetail>` |
330
338
  | `onMarkerDblClick` | マーカーダブルクリック時 | `CustomEvent<MarkerDblClickEventDetail>` |
package/README.md CHANGED
@@ -16,6 +16,8 @@ Built on top of Lit's official `@lit/react`, it combines the high performance an
16
16
  - ⚡ **Imperative API Access**: Directly access methods like `chart.use()`, `chart.exportImage()`, `chart.exportExcel()`, `chart.selectTask()` via `ref`
17
17
  - 🔌 **Plugin Support**: Seamless integration with `@mogura/moguchart-plugin-export` (PNG/PDF) and `@mogura/moguchart-plugin-excel` (Excel)
18
18
  - 📈 **Baseline & Delay Tracking**: Compare planned schedules (`task.baseline`) against actual timelines with automatic delay highlighting and variance tooltips
19
+ - 📋 **Multi-Column Data Grid & Inline Editing**: WBS data table (`option.grid`) with column resizing and inline cell editing (`onCellEdit`, `onColumnResize`)
20
+ - 🔗 **Auto-Scheduling & FS/SS/FF/SF Dependencies**: Support for `FS`/`SS`/`FF`/`SF` dependency links with lag (`GanttDependencyLink`), working-day/holiday-aware (`calendarMode: 'calendar' | 'weekends' | 'weekends-holidays'`) topological cascade scheduling (`option.dependency.autoSchedule`, `autoSchedule()`)
19
21
  - 📦 **Re-exported Types**: Core types, constants, and utilities are all re-exported from this package
20
22
 
21
23
  ---
@@ -145,7 +147,8 @@ The following methods can be invoked directly on `ref.current`:
145
147
  - **Zoom Operations**: `zoomIn()`, `zoomOut()`, `zoomToPercent(percent)`, `zoomToScale(scale)`, `resetZoom()`, `zoomToFit()`, `getZoomPercent()`, `getZoomScale()`
146
148
  - **Scroll & Selection**: `scrollToTask(taskId)`, `scrollToPosition(pos)`, `resetScroll()`, `selectTask(taskId)`
147
149
  - **WBS & Collapse**: `toggleRowCollapse(rowId, collapsed?)`, `collapseAll()`, `expandAll()`, `getRowPositions()`
148
- - **Dependency Operations**: `triggerDependencyDelete(sourceTaskId, targetTaskId)`, `selectDependency(...)`, `clearDependencySelection()`
150
+ - **Grid & Inline Cell Editing**: `startCellEdit(rowId, columnId)`, `commitCellEdit(overrideValue?)`, `cancelCellEdit()`
151
+ - **Dependency & Auto-Schedule Operations**: `triggerDependencyDelete(sourceTaskId, targetTaskId)`, `autoSchedule(changedTaskIds?, options?)`, `selectDependency(...)`, `clearDependencySelection()`
149
152
  - **Image & PDF Export**: `exportImage(format, options)` (with `@mogura/moguchart-plugin-export`)
150
153
  - **Excel Export**: `exportExcel(options)` (with `@mogura/moguchart-plugin-excel`)
151
154
 
@@ -192,7 +195,7 @@ export function BaselineGanttView() {
192
195
  pxPerDay: 40,
193
196
  },
194
197
  baseline: {
195
- visible: true, // Enable baseline rendering
198
+ enabled: true, // Enable baseline rendering
196
199
  position: 'bottom', // 'bottom' | 'top' | 'overlay'
197
200
  highlightDelay: true, // Visually highlight delayed tasks
198
201
  delayColor: '#EF4444', // Custom accent color for delay indicators
@@ -322,11 +325,14 @@ Events dispatched by `@mogura/moguchart-core` can be listened to via standard ca
322
325
  | `onRowHeaderDblClick` | Fired when a row header is double-clicked (`contentTarget` exposes row name container) | `CustomEvent<RowHeaderDblClickEventDetail>` |
323
326
  | `onRowHeaderContextMenu` | Fired on row header right-click | `CustomEvent<RowHeaderContextMenuEventDetail>` |
324
327
  | `onRowHeaderResize` | Fired when a row header is resized | `CustomEvent<RowHeaderResizeEventDetail>` |
328
+ | `onColumnResize` | Fired when a grid column is resized | `CustomEvent<ColumnResizeEventDetail>` |
329
+ | `onCellEdit` | Fired when an inline grid cell edit is committed | `CustomEvent<CellEditEventDetail>` |
330
+ | `onRowsChange` | Fired when row data changes | `CustomEvent<RowsChangeEventDetail>` |
325
331
  | `onRowReordered` | Fired when rows are reordered | `CustomEvent<RowReorderEventDetail>` |
326
332
  | `onRowSelectionChange` | Fired when row selection changes | `CustomEvent<RowSelectionChangeEventDetail>` |
327
333
  | `onRowToggleCollapse` | Fired when a row is expanded or collapsed (WBS) | `CustomEvent<RowToggleCollapseEventDetail>` |
328
334
  | `onDependencyCreate` | Fired when a dependency link is created | `CustomEvent<DependencyCreateEventDetail>` |
329
- | `onDependencyClick` | Fired when a dependency link is clicked | `CustomEvent<DependencyClickEventDetail>` |
335
+ | `onDependencyClick` | Fired when a dependency link is clicked, double-clicked, or right-clicked | `CustomEvent<DependencyClickEventDetail>` |
330
336
  | `onDependencySelect` | Fired when dependency selection changes (highlight / delete button shown) | `CustomEvent<DependencySelectEventDetail>` |
331
337
  | `onDependencyDelete` | Fired when a dependency link is deleted | `CustomEvent<DependencyDeleteEventDetail>` |
332
338
  | `onMarkerDblClick` | Fired when a marker is double-clicked | `CustomEvent<MarkerDblClickEventDetail>` |
package/dist/index.d.ts CHANGED
@@ -1,6 +1,6 @@
1
1
  import React from 'react';
2
2
  import { type EventName } from '@lit/react';
3
- import { GanttChartElement, type ChartContextMenuEventDetail, type MinimapMoveEventDetail, type MinimapResizeEventDetail, type MinimapCollapseEventDetail, type TaskUpdateEventDetail, type BarHoverEventDetail, type TaskClickEventDetail, type TaskContextMenuEventDetail, type TaskDropEventDetail, type RowReorderEventDetail, type RowHeaderResizeEventDetail, type RowSelectionChangeEventDetail, type BarSelectionChangeEventDetail, type RowHeaderClickEventDetail, type RowHeaderDblClickEventDetail, type RowHeaderContextMenuEventDetail, type RowToggleCollapseEventDetail, type DependencyCreateEventDetail, type DependencyClickEventDetail, type DependencyDeleteEventDetail, type DependencySelectEventDetail, type MarkerDblClickEventDetail, type MarkerContextMenuEventDetail, type TaskDeleteEventDetail, type ZoomChangeEventDetail, type TaskProgressChangeEventDetail, type CommandEventDetail, type HistoryChangeEventDetail } from '@mogura/moguchart-core';
3
+ import { GanttChartElement, type ChartContextMenuEventDetail, type MinimapMoveEventDetail, type MinimapResizeEventDetail, type MinimapCollapseEventDetail, type TaskUpdateEventDetail, type BarHoverEventDetail, type TaskClickEventDetail, type TaskContextMenuEventDetail, type TaskDropEventDetail, type RowReorderEventDetail, type RowHeaderResizeEventDetail, type RowSelectionChangeEventDetail, type BarSelectionChangeEventDetail, type RowHeaderClickEventDetail, type RowHeaderDblClickEventDetail, type RowHeaderContextMenuEventDetail, type RowToggleCollapseEventDetail, type DependencyCreateEventDetail, type DependencyClickEventDetail, type DependencyDeleteEventDetail, type DependencySelectEventDetail, type MarkerDblClickEventDetail, type MarkerContextMenuEventDetail, type TaskDeleteEventDetail, type ZoomChangeEventDetail, type TaskProgressChangeEventDetail, type CommandEventDetail, type HistoryChangeEventDetail, type ColumnResizeEventDetail, type CellEditEventDetail, type RowsChangeEventDetail } from '@mogura/moguchart-core';
4
4
  /**
5
5
  * @mogura/moguchart-core の GanttChartElement をラップした React コンポーネント。
6
6
  * Web Components のライフサイクルと完全同期し、React のプロパティやイベントハンドラー、ref をサポートします。
@@ -35,6 +35,9 @@ export declare const GanttChart: import("@lit/react").ReactWebComponent<GanttCha
35
35
  onTaskProgressChange: EventName<CustomEvent<TaskProgressChangeEventDetail>>;
36
36
  onCommand: EventName<CustomEvent<CommandEventDetail>>;
37
37
  onHistoryChange: EventName<CustomEvent<HistoryChangeEventDetail>>;
38
+ onColumnResize: EventName<CustomEvent<ColumnResizeEventDetail>>;
39
+ onCellEdit: EventName<CustomEvent<CellEditEventDetail>>;
40
+ onRowsChange: EventName<CustomEvent<RowsChangeEventDetail>>;
38
41
  }>;
39
42
  /** GanttChart コンポーネントの Props 型定義 */
40
43
  export type GanttChartProps = React.ComponentProps<typeof GanttChart>;
@@ -2,7 +2,7 @@ import e from "react";
2
2
  import { createComponent as t } from "@lit/react";
3
3
  import { GanttChartElement as n } from "@mogura/moguchart-core";
4
4
  export * from "@mogura/moguchart-core";
5
- //#region src/index.ts
5
+ // src/index.ts
6
6
  var r = t({
7
7
  tagName: "gantt-chart",
8
8
  elementClass: n,
@@ -36,8 +36,10 @@ var r = t({
36
36
  onZoomChange: "zoom-change",
37
37
  onTaskProgressChange: "task-progress-change",
38
38
  onCommand: "command",
39
- onHistoryChange: "history-change"
39
+ onHistoryChange: "history-change",
40
+ onColumnResize: "column-resize",
41
+ onCellEdit: "cell-edit",
42
+ onRowsChange: "rows-change"
40
43
  }
41
44
  });
42
- //#endregion
43
45
  export { r as GanttChart };
@@ -1 +1 @@
1
- (function(e,t){typeof exports==`object`&&typeof module<`u`?t(exports,require("react"),require("@lit/react"),require("@mogura/moguchart-core")):typeof define==`function`&&define.amd?define([`exports`,`react`,`@lit/react`,`@mogura/moguchart-core`],t):(e=typeof globalThis<`u`?globalThis:e||self,t(e.MoguchartReact={},e.React,e.LitReact,e.MoguchartCore))})(this,function(e,t,n,r){Object.defineProperty(e,Symbol.toStringTag,{value:`Module`});var i=Object.create,a=Object.defineProperty,o=Object.getOwnPropertyDescriptor,s=Object.getOwnPropertyNames,c=Object.getPrototypeOf,l=Object.prototype.hasOwnProperty,u=(e,t,n,r)=>{if(t&&typeof t==`object`||typeof t==`function`)for(var i=s(t),c=0,u=i.length,d;c<u;c++)d=i[c],!l.call(e,d)&&d!==n&&a(e,d,{get:(e=>t[e]).bind(null,d),enumerable:!(r=o(t,d))||r.enumerable});return e};t=((e,t,n)=>(n=e==null?{}:i(c(e)),u(t||!e||!e.__esModule||!l.call(e,`default`)?a(n,`default`,{value:e,enumerable:!0}):n,e)))(t,1),e.GanttChart=(0,n.createComponent)({tagName:`gantt-chart`,elementClass:r.GanttChartElement,react:t.default,events:{onChartContextMenu:`chart-contextmenu`,onMinimapMove:`minimap-move`,onMinimapResize:`minimap-resize`,onMinimapCollapse:`minimap-collapse`,onTaskUpdate:`task-update`,onBarHover:`bar-hover`,onTaskClick:`task-click`,onTaskDblClick:`task-dblclick`,onTaskContextMenu:`task-contextmenu`,onTaskDrop:`task-drop`,onRowReordered:`row-reordered`,onRowHeaderResize:`row-header-resize`,onRowSelectionChange:`row-selection-change`,onBarSelectionChange:`bar-selection-change`,onRowHeaderClick:`row-header-click`,onRowHeaderDblClick:`row-header-dblclick`,onRowHeaderContextMenu:`row-header-contextmenu`,onRowToggleCollapse:`row-toggle-collapse`,onDependencyCreate:`dependency-create`,onDependencyClick:`dependency-click`,onDependencyDelete:`dependency-delete`,onDependencySelect:`dependency-select`,onMarkerDblClick:`marker-dblclick`,onMarkerContextMenu:`marker-contextmenu`,onTaskDelete:`task-delete`,onZoomChange:`zoom-change`,onTaskProgressChange:`task-progress-change`,onCommand:`command`,onHistoryChange:`history-change`}}),Object.keys(r).forEach(function(t){t!=="default"&&!Object.prototype.hasOwnProperty.call(e,t)&&Object.defineProperty(e,t,{enumerable:!0,get:function(){return r[t]}})})});
1
+ (function(e,t){typeof exports==`object`&&typeof module<`u`?t(exports,require("react"),require("@lit/react"),require("@mogura/moguchart-core")):typeof define==`function`&&define.amd?define([`exports`,`react`,`@lit/react`,`@mogura/moguchart-core`],t):(e=typeof globalThis<`u`?globalThis:e||self,t(e.MoguchartReact={},e.React,e.LitReact,e.MoguchartCore))})(this,function(e,t,n,r){Object.defineProperty(e,Symbol.toStringTag,{value:`Module`});var i=Object.create,a=Object.defineProperty,o=Object.getOwnPropertyDescriptor,s=Object.getOwnPropertyNames,c=Object.getPrototypeOf,l=Object.prototype.hasOwnProperty,u=(e,t,n,r)=>{if(t&&typeof t==`object`||typeof t==`function`)for(var i=s(t),c=0,u=i.length,d;c<u;c++)d=i[c],!l.call(e,d)&&d!==n&&a(e,d,{get:(e=>t[e]).bind(null,d),enumerable:!(r=o(t,d))||r.enumerable});return e};t=((e,t,n)=>(n=e==null?{}:i(c(e)),u(a(n,`default`,{value:e,enumerable:!0}),e)))(t,1),e.GanttChart=(0,n.createComponent)({tagName:`gantt-chart`,elementClass:r.GanttChartElement,react:t.default,events:{onChartContextMenu:`chart-contextmenu`,onMinimapMove:`minimap-move`,onMinimapResize:`minimap-resize`,onMinimapCollapse:`minimap-collapse`,onTaskUpdate:`task-update`,onBarHover:`bar-hover`,onTaskClick:`task-click`,onTaskDblClick:`task-dblclick`,onTaskContextMenu:`task-contextmenu`,onTaskDrop:`task-drop`,onRowReordered:`row-reordered`,onRowHeaderResize:`row-header-resize`,onRowSelectionChange:`row-selection-change`,onBarSelectionChange:`bar-selection-change`,onRowHeaderClick:`row-header-click`,onRowHeaderDblClick:`row-header-dblclick`,onRowHeaderContextMenu:`row-header-contextmenu`,onRowToggleCollapse:`row-toggle-collapse`,onDependencyCreate:`dependency-create`,onDependencyClick:`dependency-click`,onDependencyDelete:`dependency-delete`,onDependencySelect:`dependency-select`,onMarkerDblClick:`marker-dblclick`,onMarkerContextMenu:`marker-contextmenu`,onTaskDelete:`task-delete`,onZoomChange:`zoom-change`,onTaskProgressChange:`task-progress-change`,onCommand:`command`,onHistoryChange:`history-change`,onColumnResize:`column-resize`,onCellEdit:`cell-edit`,onRowsChange:`rows-change`}}),Object.keys(r).forEach(function(t){t!=="default"&&!Object.prototype.hasOwnProperty.call(e,t)&&Object.defineProperty(e,t,{enumerable:!0,get:function(){return r[t]}})})});
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@mogura/moguchart-react",
3
3
  "type": "module",
4
- "version": "1.4.0",
4
+ "version": "1.6.0",
5
5
  "description": "React wrapper for @mogura/moguchart-core Gantt chart component",
6
6
  "license": "MIT",
7
7
  "author": "Murakami Hiroyuki",
@@ -39,14 +39,15 @@
39
39
  }
40
40
  },
41
41
  "peerDependencies": {
42
+ "@mogura/moguchart-core": "1.6.0",
42
43
  "react": "^18.0.0 || ^19.0.0",
43
- "react-dom": "^18.0.0 || ^19.0.0",
44
- "@mogura/moguchart-core": "1.4.0"
44
+ "react-dom": "^18.0.0 || ^19.0.0"
45
45
  },
46
46
  "dependencies": {
47
47
  "@lit/react": "^1.0.8"
48
48
  },
49
49
  "devDependencies": {
50
+ "@mogura/moguchart-core": "1.6.0",
50
51
  "@testing-library/react": "^16.2.0",
51
52
  "@types/node": "^24.12.0",
52
53
  "@types/react": "^19.0.0",
@@ -56,8 +57,7 @@
56
57
  "react-dom": "^19.0.0",
57
58
  "typescript": "^5.9.3",
58
59
  "vite": "^8.0.0",
59
- "vitest": "^3.0.0",
60
- "@mogura/moguchart-core": "1.4.0"
60
+ "vitest": "^3.0.0"
61
61
  },
62
62
  "scripts": {
63
63
  "build": "vite build && pnpm exec tsc -p tsconfig.build.json",