schedulant 1.0.0-alpha.1 → 1.1.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.
@@ -27,21 +27,14 @@ export declare class CheckpointApi {
27
27
  private checkpoint;
28
28
  private resourceApi?;
29
29
  constructor(checkpoint: Checkpoint);
30
- setId(id: string): void;
30
+ setResourceApi(resourceApi: ResourceApi): void;
31
31
  getId(): string;
32
- setTitle(title: string): void;
33
32
  getTitle(): string;
34
- setTime(time: Dayjs): void;
35
33
  getTime(): Dayjs;
36
- setResourceId(resourceId: string): void;
37
34
  getResourceId(): string;
38
- setResourceApi(resourceApi: ResourceApi): void;
39
35
  getResourceApi(): ResourceApi;
40
- setColor(color: string): void;
41
36
  getColor(): Option<string>;
42
- setTooltip(tooltip: ReactNode): void;
43
37
  getTooltip(): ReactNode;
44
- setExtendedProps(extendedProps: Dictionary): void;
45
38
  getExtendProps(): Option<Dictionary>;
46
39
  }
47
40
  export type PublicCheckpointApi = Pick<CheckpointApi, "getId" | "getTitle" | "getTime" | "getResourceId" | "getResourceApi" | "getColor" | "getTooltip" | "getExtendProps">;
@@ -6,7 +6,6 @@ export declare class DayTimelineView extends TimelineView {
6
6
  renderColgroup(): ReactNode;
7
7
  renderBodySlots(): ReactNode;
8
8
  renderHeaderSlots(): ReactNode;
9
- calculateDate(timelineWidth: number, point: number): Dayjs;
10
- calculateSlotWidth(timelineWidth: number): number;
9
+ getTotalSlots(): number;
11
10
  calculatePosition(timelineWidth: number, start: Dayjs, end: Dayjs): Position;
12
11
  }
@@ -20,11 +20,11 @@ export type EventMoveMountArg = MountArg<EventArg & {
20
20
  }>;
21
21
  export type Event = {
22
22
  id: string;
23
- start: Dayjs;
24
23
  title: string;
24
+ start: Dayjs;
25
+ end: Dayjs;
25
26
  color: string;
26
27
  resourceId: string;
27
- end?: Dayjs;
28
28
  url?: string;
29
29
  tooltip?: ReactNode;
30
30
  textColor?: string;
@@ -36,31 +36,19 @@ export declare class EventApi {
36
36
  private event;
37
37
  private resourceApi?;
38
38
  constructor(event: Event);
39
- setId(id: string): void;
39
+ setResourceApi(resourceApi: ResourceApi): void;
40
40
  getId(): string;
41
- setTitle(title: string): void;
42
41
  getTitle(): string;
43
- setColor(color: string): void;
44
42
  getColor(): string;
45
- setStart(start: Dayjs): void;
46
43
  getStart(): Dayjs;
47
- setEnd(end: Dayjs): void;
48
- getEnd(): Option<Dayjs>;
49
- setResourceId(resourceId: string): void;
44
+ getEnd(): Dayjs;
50
45
  getResourceId(): string;
51
- setResourceApi(resourceApi: ResourceApi): void;
52
46
  getResourceApi(): ResourceApi;
53
- setUrl(url: string): void;
54
47
  getUrl(): Option<string>;
55
- setTooltip(tooltip: React.ReactNode): void;
56
- getTooltip(): React.ReactNode;
57
- setTextColor(textColor: string): void;
48
+ getTooltip(): ReactNode;
58
49
  getTextColor(): Option<string>;
59
- setBorderColor(borderColor: string): void;
60
50
  getBorderColor(): Option<string>;
61
- setBackgroundColor(backgroundColor: string): void;
62
51
  getBackgroundColor(): Option<string>;
63
- setExtendedProps(extendedProps: Dictionary): void;
64
52
  getExtendProps(): Option<Dictionary>;
65
53
  }
66
54
  export type PublicEventApi = Pick<EventApi, "getId" | "getTitle" | "getColor" | "getStart" | "getEnd" | "getResourceId" | "getResourceApi" | "getUrl" | "getTooltip" | "getTextColor" | "getBorderColor" | "getBackgroundColor" | "getExtendProps">;
@@ -2,6 +2,5 @@ export type { SchedulantProps, SchedulantMountArg, PublicSchedulantApi } from '.
2
2
  export type { Event, EventArg, EventMountArg, PublicEventApi, EventMoveMountArg, EventContextMenuArg, EventResizeMountArg, EventContextMenuItems } from './event.ts';
3
3
  export type { Milestone, MilestoneArg, MilestoneStatus, MilestoneMountArg, PublicMilestoneApi, MilestoneMoveMountArg, MilestoneContextMenuArg, MilestoneContextMenuItems } from './milestone.ts';
4
4
  export type { Checkpoint, CheckpointArg, CheckpointMountArg, PublicCheckpointApi, CheckpointMoveMountArg, CheckpointContextMenuArg, CheckpointContextMenuItems } from './checkpoint.ts';
5
- export type { Resource, ResourceLaneArg, ResourceLabelArg, PublicResourceApi, ResourceAreaColumn, ResourceLaneMountArg, ResourceLabelMountArg, ResourceContextMenuItems, ResourceLaneContextMenuArg, ResourceLabelContextMenuArg } from './resource.ts';
5
+ export type { Resource, ResourceLaneArg, ResourceLabelArg, PublicResourceApi, ResourceAreaColumn, ResourceLaneMountArg, ResourceLabelMountArg, ResourceLaneMoveMountArg, ResourceContextMenuItems, ResourceLaneContextMenuArg, ResourceLabelContextMenuArg, } from './resource.ts';
6
6
  export type { TimelineSlotArg, TimelineSlotLaneMountArg, TimelineSlotLabelMountArg } from './timeline.ts';
7
- export type { SelectInfoArg } from './misc.ts';
@@ -29,23 +29,15 @@ export declare class MilestoneApi {
29
29
  private milestone;
30
30
  private resourceApi?;
31
31
  constructor(milestone: Milestone);
32
- setId(id: string): void;
32
+ setResourceApi(resourceApi: ResourceApi): void;
33
33
  getId(): string;
34
- setTitle(title: string): void;
35
34
  getTitle(): string;
36
- setTime(timestamp: Dayjs): void;
37
35
  getTime(): Dayjs;
38
- setStatus(status: MilestoneStatus): void;
39
36
  getStatus(): MilestoneStatus;
40
- setResourceApi(resourceApi: ResourceApi): void;
41
37
  getResourceApi(): ResourceApi;
42
- setResourceId(resourceId: string): void;
43
38
  getResourceId(): string;
44
- setColor(color: string): void;
45
39
  getColor(): Option<string>;
46
- setTooltip(tooltip: ReactNode): void;
47
40
  getTooltip(): ReactNode;
48
- setExtendedProps(extendedProps: Dictionary): void;
49
41
  getExtendProps(): Option<Dictionary>;
50
42
  }
51
43
  export type PublicMilestoneApi = Pick<MilestoneApi, "getId" | "getTitle" | "getTime" | "getStatus" | "getResourceApi" | "getResourceId" | "getColor" | "getTooltip" | "getExtendProps">;
@@ -3,10 +3,9 @@ import { Position } from './base.ts';
3
3
  import { Dayjs } from 'dayjs';
4
4
  import { ReactNode } from 'react';
5
5
  export declare class MonthTimelineView extends TimelineView {
6
+ getTotalSlots(): number;
6
7
  renderColgroup(): ReactNode;
7
8
  renderBodySlots(): ReactNode;
8
9
  renderHeaderSlots(): ReactNode;
9
- calculateDate(timelineWidth: number, point: number): Dayjs;
10
- calculateSlotWidth(timelineWidth: number): number;
11
10
  calculatePosition(timelineWidth: number, start: Dayjs, end: Dayjs): Position;
12
11
  }
@@ -3,10 +3,9 @@ import { ReactNode } from 'react';
3
3
  import { Dayjs } from 'dayjs';
4
4
  import { Position } from './base.ts';
5
5
  export declare class QuarterTimelineView extends TimelineView {
6
+ getTotalSlots(): number;
6
7
  renderColgroup(): ReactNode;
7
8
  renderBodySlots(): ReactNode;
8
9
  renderHeaderSlots(): ReactNode;
9
- calculateDate(timelineWidth: number, point: number): Dayjs;
10
- calculateSlotWidth(timelineWidth: number): number;
11
10
  calculatePosition(timelineWidth: number, start: Dayjs, end: Dayjs): Position;
12
11
  }
@@ -22,6 +22,13 @@ export type ResourceLaneMountArg = MountArg<ResourceLaneArg>;
22
22
  export type ResourceLabelMountArg = MountArg<ResourceLabelArg>;
23
23
  export type ResourceLaneContextMenuArg = MenuArg<ResourceLaneArg>;
24
24
  export type ResourceLabelContextMenuArg = MenuArg<ResourceLabelArg>;
25
+ export type ResourceLaneMoveMountArg = MountArg<{
26
+ schedulantApi: PublicSchedulantApi;
27
+ draggedResourceApi: PublicResourceApi;
28
+ targetResourceApi: PublicResourceApi;
29
+ position: 'before' | 'after' | 'child';
30
+ oldParentResourceApi?: PublicResourceApi;
31
+ }>;
25
32
  export type Resource = {
26
33
  id: string;
27
34
  title: string;
@@ -42,27 +49,19 @@ export declare class ResourceApi {
42
49
  private milestoneApis?;
43
50
  private checkpointApis?;
44
51
  constructor(resource: Resource);
45
- setId(id: string): void;
52
+ setDepth(depth: number): void;
46
53
  getId(): string;
47
- setTitle(title: string): void;
48
54
  getTitle(): string;
49
- setDepth(depth: number): void;
50
55
  getDepth(): number;
51
- setTooltip(tooltip: ReactNode): void;
52
56
  getTooltip(): ReactNode;
53
57
  setParent(parent?: ResourceApi): void;
54
58
  getParent(): Option<ResourceApi>;
55
- setParentId(parentId: string): void;
56
59
  getParentId(): Option<string>;
57
60
  setChildren(children: ResourceApi[]): void;
58
61
  getChildren(): ResourceApi[];
59
- setEventColor(color: string): void;
60
62
  getEventColor(): Option<string>;
61
- setEventTextColor(color: string): void;
62
63
  getEventTextColor(): Option<string>;
63
- setEventBorderColor(color: string): void;
64
64
  getEventBorderColor(): Option<string>;
65
- setEventBackgroundColor(color: string): void;
66
65
  getEventBackgroundColor(): Option<string>;
67
66
  getResource(): Resource;
68
67
  setEventApis(eventApis: EventApi[]): void;
@@ -71,7 +70,6 @@ export declare class ResourceApi {
71
70
  getMilestoneApis(): MilestoneApi[];
72
71
  setCheckpointApis(checkpointApis: CheckpointApi[]): void;
73
72
  getCheckpointApis(): CheckpointApi[];
74
- setExtendedProps(extendedProps: Dictionary): void;
75
73
  getExtendProps(): Option<Dictionary>;
76
74
  }
77
75
  export declare class ResourceApiHelper {
@@ -1,6 +1,8 @@
1
1
  import { SchedulantApi, SchedulantProps } from './schedulant';
2
2
  import { TimelineView } from './timeline-view.tsx';
3
- import { MutableRefObject, ReactNode } from 'react';
3
+ import { default as React, MutableRefObject, ReactNode } from 'react';
4
+ import { ResourceApi } from './resource.ts';
5
+ import { ResizerMouseDownFunc, ResizerMouseUp } from '../hooks/use-resource-area-resizer.ts';
4
6
  export type SchedulantViewType = "Day" | "Week" | "Month" | "Quarter" | "Year";
5
7
  export declare class SchedulantView {
6
8
  private readonly schedulantApi;
@@ -12,8 +14,20 @@ export declare class SchedulantView {
12
14
  renderTimelineHeaderTableSlots(): ReactNode;
13
15
  renderTimelineDrawingBoardTable(collapseIds: Array<string>, timelineWidth: number): ReactNode;
14
16
  renderResourceTableColgroup(): ReactNode;
15
- renderResourceLabel(): ReactNode;
16
- renderResourceLane(collapseIds: Array<string>): ReactNode;
17
+ renderResourceLabel(cellResizerMouseUp: ResizerMouseUp, cellResizerMouseDownFunc: ResizerMouseDownFunc): ReactNode;
18
+ renderResourceLane(collapseIds: Array<string>, cellResizerMouseUp: ResizerMouseUp, cellResizerMouseDownFunc: ResizerMouseDownFunc, dragDropHandlers?: {
19
+ isDraggable: boolean;
20
+ dragState: {
21
+ draggedResource: ResourceApi | null;
22
+ dragOverResource: ResourceApi | null;
23
+ dropPosition: 'before' | 'after' | 'child' | null;
24
+ };
25
+ handleDragStart: (resourceApi: ResourceApi) => (e: React.DragEvent) => void;
26
+ handleDragOver: (resourceApi: ResourceApi) => (e: React.DragEvent) => void;
27
+ handleDragLeave: (e: React.DragEvent) => void;
28
+ handleDrop: (resourceApi: ResourceApi) => (e: React.DragEvent) => void;
29
+ handleDragEnd: () => void;
30
+ }): ReactNode;
17
31
  getTimelineView(): TimelineView;
18
32
  getScheduleApi(): SchedulantApi;
19
33
  getScheduleElRef(): MutableRefObject<HTMLDivElement | null>;
@@ -1,11 +1,10 @@
1
1
  import { Dayjs } from 'dayjs';
2
2
  import { EventApi, Event, EventContextMenuArg, EventContextMenuItems, EventMountArg, EventMoveMountArg, EventResizeMountArg } from './event.ts';
3
- import { Resource, ResourceApi, ResourceAreaColumn, ResourceContextMenuItems, ResourceLabelContextMenuArg, ResourceLabelMountArg, ResourceLaneContextMenuArg, ResourceLaneMountArg } from './resource.ts';
3
+ import { Resource, ResourceApi, ResourceAreaColumn, ResourceContextMenuItems, ResourceLaneMoveMountArg, ResourceLabelContextMenuArg, ResourceLabelMountArg, ResourceLaneContextMenuArg, ResourceLaneMountArg } from './resource.ts';
4
4
  import { MilestoneApi, Milestone, MilestoneContextMenuArg, MilestoneContextMenuItems, MilestoneMountArg, MilestoneMoveMountArg } from './milestone.ts';
5
5
  import { CheckpointApi, Checkpoint, CheckpointContextMenuArg, CheckpointContextMenuItems, CheckpointMountArg, CheckpointMoveMountArg } from './checkpoint.ts';
6
- import { ContextMenuClickHandler, DidMountHandler, MountArg, MoveHandler, ResizeHandler, SelectHandler, WillUnmountHandler } from './base.ts';
6
+ import { ContextMenuClickHandler, DidMountHandler, MountArg, MoveHandler, ResizeHandler, WillUnmountHandler } from './base.ts';
7
7
  import { Option } from './option.ts';
8
- import { SelectInfoArg } from './misc';
9
8
  import { SchedulantView, SchedulantViewType } from './schedulant-view.tsx';
10
9
  import { TimelineApi, TimelineSlotLabelMountArg, TimelineSlotLaneMountArg } from './timeline';
11
10
  import { MutableRefObject } from 'react';
@@ -25,10 +24,8 @@ export type SchedulantProps = {
25
24
  companyHolidays?: Dayjs[];
26
25
  specialWorkdays?: Dayjs[];
27
26
  nationalHolidays?: Dayjs[];
28
- defaultEmptyLanes?: number;
29
27
  resourceAreaWidth?: string;
30
28
  resourceAreaColumns?: Array<ResourceAreaColumn>;
31
- selectAllow?: SelectHandler<SelectInfoArg>;
32
29
  enableEventContextMenu?: boolean;
33
30
  eventContextMenuClick?: ContextMenuClickHandler<EventContextMenuArg>;
34
31
  eventContextMenuItems?: EventContextMenuItems;
@@ -54,6 +51,7 @@ export type SchedulantProps = {
54
51
  resourceLaneContextMenuItems?: ResourceContextMenuItems;
55
52
  resourceLaneDidMount?: DidMountHandler<ResourceLaneMountArg>;
56
53
  resourceLaneWillUnmount?: WillUnmountHandler<ResourceLaneMountArg>;
54
+ resourceLaneMove?: MoveHandler<ResourceLaneMoveMountArg>;
57
55
  enableResourceLabelContextMenu?: boolean;
58
56
  resourceLabelContextMenuClick?: ContextMenuClickHandler<ResourceLabelContextMenuArg>;
59
57
  resourceLabelContextMenuItems?: ResourceContextMenuItems;
@@ -104,10 +102,10 @@ export declare class SchedulantApi implements PublicSchedulantApi {
104
102
  eventMove(arg: EventMoveMountArg): void;
105
103
  eventResizeStart(arg: EventResizeMountArg): void;
106
104
  eventResizeEnd(arg: EventResizeMountArg): void;
107
- selectAllow(arg: SelectInfoArg): void;
108
105
  isEnableEventContextMenu(): boolean;
109
106
  getEventContextMenuItems(): import('antd/es/menu/interface').ItemType[] | undefined;
110
107
  onEventContextMenuClick(arg: EventContextMenuArg): void;
108
+ resourceLaneMove(arg: ResourceLaneMoveMountArg): void;
111
109
  resourceLaneDidMount(arg: ResourceLaneMountArg): void;
112
110
  resourceLaneWillUnmount(arg: ResourceLaneMountArg): void;
113
111
  isEnableResourceLaneContextMenu(): boolean;
@@ -9,16 +9,15 @@ export declare abstract class TimelineView {
9
9
  constructor(schedulantApi: SchedulantApi);
10
10
  getSchedulantApi(): SchedulantApi;
11
11
  getTimelineApi(): TimelineApi;
12
- renderLane(resourceApi: ResourceApi, timelineWidth: number): ReactNode;
12
+ renderLane(): ReactNode;
13
13
  renderEvents(resourceApi: ResourceApi, timelineWidth: number): ReactNode;
14
14
  renderMilestones(resource: ResourceApi, timelineWidth: number): ReactNode;
15
15
  renderCheckpoints(resource: ResourceApi, timelineWidth: number): ReactNode;
16
16
  calculateLaneHeight(resourceApi: ResourceApi): number;
17
17
  calculateEventHeight(): number;
18
+ abstract getTotalSlots(): number;
18
19
  abstract renderColgroup(): ReactNode;
19
20
  abstract renderBodySlots(): ReactNode;
20
21
  abstract renderHeaderSlots(): ReactNode;
21
- abstract calculateDate(timelineWidth: number, point: number): Dayjs;
22
- abstract calculateSlotWidth(timelineWidth: number): number;
23
22
  abstract calculatePosition(timelineWidth: number, start: Dayjs, end: Dayjs): Position;
24
23
  }
@@ -3,10 +3,9 @@ import { ReactNode } from 'react';
3
3
  import { Dayjs } from 'dayjs';
4
4
  import { Position } from './base.ts';
5
5
  export declare class WeekTimelineView extends TimelineView {
6
+ getTotalSlots(): number;
6
7
  renderColgroup(): ReactNode;
7
8
  renderBodySlots(): ReactNode;
8
9
  renderHeaderSlots(): ReactNode;
9
- calculateDate(timelineWidth: number, point: number): Dayjs;
10
- calculateSlotWidth(timelineWidth: number): number;
11
10
  calculatePosition(timelineWidth: number, start: Dayjs, end: Dayjs): Position;
12
11
  }
@@ -3,10 +3,9 @@ import { TimelineView } from './timeline-view';
3
3
  import { Dayjs } from 'dayjs';
4
4
  import { Position } from './base.ts';
5
5
  export declare class YearTimelineView extends TimelineView {
6
+ getTotalSlots(): number;
6
7
  renderColgroup(): ReactNode;
7
8
  renderBodySlots(): ReactNode;
8
9
  renderHeaderSlots(): ReactNode;
9
- calculateDate(timelineWidth: number, point: number): Dayjs;
10
- calculateSlotWidth(timelineWidth: number): number;
11
10
  calculatePosition(timelineWidth: number, start: Dayjs, end: Dayjs): Position;
12
11
  }
@@ -1,3 +1,4 @@
1
1
  export declare const extractNumber: (value: string) => number;
2
2
  export declare const numberToPixels: (value: number) => string;
3
3
  export declare const pixelsToNumber: (value: string) => number;
4
+ export declare const getHTMLTableElementByClassName: (className: string) => HTMLTableElement;
package/package.json CHANGED
@@ -7,7 +7,7 @@
7
7
  ],
8
8
  "license": "MIT",
9
9
  "author": "mengen.dai@outlook.com",
10
- "version": "1.0.0-alpha.1",
10
+ "version": "1.1.0",
11
11
  "main": "dist/schedulant.js",
12
12
  "typings": "dist/schedulant.d.ts",
13
13
  "keywords": [
@@ -39,7 +39,7 @@
39
39
  "@types/node": "^22.13.9",
40
40
  "@types/react": "^18.3.18",
41
41
  "@types/react-dom": "^18.3.5",
42
- "@vitejs/plugin-react": "^4.4.1",
42
+ "@vitejs/plugin-react": "^5.0.4",
43
43
  "antd": "^5.24.3",
44
44
  "dayjs": "^1.11.13",
45
45
  "eslint": "^9.21.0",
@@ -52,7 +52,7 @@
52
52
  "sass": "^1.85.1",
53
53
  "typescript": "^5.8.3",
54
54
  "typescript-eslint": "^8.24.1",
55
- "vite": "^6.3.5",
55
+ "vite": "7.1.5",
56
56
  "vite-plugin-dts": "^4.5.3"
57
57
  }
58
58
  }