react-timelane 0.0.0 → 0.0.2
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/dist/components/Timelane.d.ts +15 -0
- package/dist/components/TimelaneAside.d.ts +13 -0
- package/dist/components/TimelaneBackground.d.ts +5 -0
- package/dist/components/TimelaneBody.d.ts +6 -0
- package/dist/components/TimelaneBodyInner.d.ts +16 -0
- package/dist/components/TimelaneHeader/DaysHeader.d.ts +15 -0
- package/dist/components/TimelaneHeader/MonthsHeader.d.ts +15 -0
- package/dist/components/TimelaneHeader/TimelaneHeader.d.ts +24 -0
- package/dist/components/TimelaneHeader/WeeksHeader.d.ts +15 -0
- package/dist/components/TimelaneHeader/index.d.ts +5 -0
- package/dist/components/TimelaneHeader/renderingUtils.d.ts +4 -0
- package/dist/components/TimelaneSelectionLayer.d.ts +6 -0
- package/dist/components/TimelaneSettingsContext.d.ts +7 -0
- package/dist/components/TimelaneSettingsProvider.d.ts +7 -0
- package/dist/components/TimelaneWrapper.d.ts +20 -0
- package/dist/components/core/CoreItem/CoreItemComponent.d.ts +14 -0
- package/dist/components/core/CoreItem/DragResizeComponent.d.ts +20 -0
- package/dist/components/core/CoreSwimlane/AvailableSpaceIndicator.d.ts +21 -0
- package/dist/components/core/CoreSwimlane/CoreSwimlane.d.ts +16 -0
- package/dist/components/core/CoreSwimlane/DropPreview.d.ts +9 -0
- package/dist/components/core/CoreSwimlane/DropTarget.d.ts +11 -0
- package/dist/components/core/CoreSwimlane/OverlapIndicator.d.ts +6 -0
- package/dist/components/core/CoreSwimlane/utils.d.ts +13 -0
- package/dist/components/core/utils.d.ts +15 -0
- package/dist/components/layout/TimelaneLayout.d.ts +23 -0
- package/dist/hooks/useScroll.d.ts +10 -0
- package/dist/hooks/useTimelaneContext.d.ts +1 -0
- package/dist/index.d.ts +13 -0
- package/dist/react-timelane.css +1 -0
- package/dist/react-timelane.js +4701 -0
- package/dist/types/AvailableSpace.d.ts +6 -0
- package/dist/types/CoreItem.d.ts +12 -0
- package/dist/types/DateBounds.d.ts +4 -0
- package/dist/types/Dimensions.d.ts +4 -0
- package/dist/types/GrabInfo.d.ts +5 -0
- package/dist/types/Grid.d.ts +6 -0
- package/dist/types/OffsetBounds.d.ts +4 -0
- package/dist/types/Pixels.d.ts +4 -0
- package/{src/types/Position.ts → dist/types/Position.d.ts} +2 -2
- package/dist/types/Rectangle.d.ts +6 -0
- package/dist/types/SwimlaneT.d.ts +5 -0
- package/dist/types/TimeRange.d.ts +4 -0
- package/dist/types/TimelaneSettings.d.ts +11 -0
- package/dist/types/index.d.ts +15 -0
- package/package.json +1 -1
- package/vite.config.ts +2 -2
- package/.github/workflows/static.yml +0 -55
- package/docs/README.md +0 -54
- package/docs/eslint.config.js +0 -28
- package/docs/index.html +0 -12
- package/docs/package-lock.json +0 -5101
- package/docs/package.json +0 -35
- package/docs/src/App.css +0 -5
- package/docs/src/App.tsx +0 -59
- package/docs/src/assets/react.svg +0 -1
- package/docs/src/components/AllocationComponent.tsx +0 -82
- package/docs/src/components/Timeline.tsx +0 -183
- package/docs/src/constants.ts +0 -42
- package/docs/src/hooks/useLocalStorage.ts +0 -21
- package/docs/src/main.tsx +0 -9
- package/docs/src/models/Allocation.ts +0 -11
- package/docs/src/models/AllocationId.ts +0 -1
- package/docs/src/models/Resource.ts +0 -8
- package/docs/src/models/ResourceId.ts +0 -1
- package/docs/src/vite-env.d.ts +0 -1
- package/docs/tsconfig.json +0 -27
- package/docs/vite.config.ts +0 -8
- package/src/components/Timeline.scss +0 -297
- package/src/components/TimelineAside.tsx +0 -81
- package/src/components/TimelineBackground.tsx +0 -53
- package/src/components/TimelineBody.tsx +0 -54
- package/src/components/TimelineHeader/DaysHeader.tsx +0 -44
- package/src/components/TimelineHeader/MonthsHeader.tsx +0 -62
- package/src/components/TimelineHeader/TimelineHeader.tsx +0 -64
- package/src/components/TimelineHeader/WeeksHeader.tsx +0 -63
- package/src/components/TimelineHeader/index.ts +0 -9
- package/src/components/TimelineHeader/renderingUtils.tsx +0 -57
- package/src/components/TimelineSelectionLayer.tsx +0 -179
- package/src/components/TimelineSettingsContext.tsx +0 -27
- package/src/components/TimelineSettingsProvider.tsx +0 -24
- package/src/components/TimelineWrapper.tsx +0 -51
- package/src/components/core/CoreItem/CoreItemComponent.tsx +0 -69
- package/src/components/core/CoreItem/DragResizeComponent.tsx +0 -180
- package/src/components/core/CoreSwimlane/AvailableSpaceIndicator.tsx +0 -156
- package/src/components/core/CoreSwimlane/CoreSwimlane.tsx +0 -245
- package/src/components/core/CoreSwimlane/DropPreview.tsx +0 -30
- package/src/components/core/CoreSwimlane/DropTarget.tsx +0 -83
- package/src/components/core/CoreSwimlane/OverlapIndicator.tsx +0 -22
- package/src/components/core/CoreSwimlane/utils.ts +0 -375
- package/src/components/core/utils.ts +0 -154
- package/src/components/layout/TimelineLayout.tsx +0 -93
- package/src/components/layout/layout.scss +0 -107
- package/src/global.d.ts +0 -9
- package/src/hooks/useScroll.tsx +0 -71
- package/src/hooks/useTimelineContext.tsx +0 -6
- package/src/index.ts +0 -15
- package/src/types/AvailableSpace.ts +0 -6
- package/src/types/CoreItem.ts +0 -23
- package/src/types/DateBounds.ts +0 -4
- package/src/types/Dimensions.ts +0 -4
- package/src/types/GrabInfo.ts +0 -6
- package/src/types/Grid.ts +0 -6
- package/src/types/OffsetBounds.ts +0 -4
- package/src/types/Pixels.ts +0 -4
- package/src/types/Rectangle.ts +0 -6
- package/src/types/SwimlaneT.ts +0 -6
- package/src/types/TimeRange.ts +0 -4
- package/src/types/TimelineSettings.ts +0 -11
- package/src/types/index.ts +0 -15
- package/tsconfig.json +0 -32
- /package/{src/types/ItemId.ts → dist/types/ItemId.d.ts} +0 -0
- /package/{src/types/SwimlaneId.ts → dist/types/SwimlaneId.d.ts} +0 -0
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { PropsWithChildren } from 'react';
|
|
2
|
+
import { CoreSwimlane, TimelaneBody, TimelaneLayout } from '..';
|
|
3
|
+
import { TimelaneHeader } from './TimelaneHeader/TimelaneHeader';
|
|
4
|
+
import { TimelaneBackground } from './TimelaneBackground';
|
|
5
|
+
import { TimelaneAside } from './TimelaneAside';
|
|
6
|
+
export declare function Timelane({ children }: PropsWithChildren): import("react/jsx-runtime").JSX.Element;
|
|
7
|
+
export declare namespace Timelane {
|
|
8
|
+
var Container: typeof Timelane;
|
|
9
|
+
var Header: typeof TimelaneHeader;
|
|
10
|
+
var Body: typeof TimelaneBody;
|
|
11
|
+
var Background: typeof TimelaneBackground;
|
|
12
|
+
var Aside: typeof TimelaneAside;
|
|
13
|
+
var Lane: typeof CoreSwimlane;
|
|
14
|
+
var Layout: typeof TimelaneLayout;
|
|
15
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { MouseEvent, ReactElement } from 'react';
|
|
2
|
+
import { SwimlaneT } from '../types';
|
|
3
|
+
interface TimelaneAsideProps {
|
|
4
|
+
lanes: SwimlaneT[];
|
|
5
|
+
focusedLane?: SwimlaneT | null;
|
|
6
|
+
setFocusedLane?: (lane: SwimlaneT | null) => void;
|
|
7
|
+
onLaneHeaderClick?: (lane: SwimlaneT, e: MouseEvent) => void;
|
|
8
|
+
onLaneHeaderDoubleClick?: (lane: SwimlaneT, e: MouseEvent) => void;
|
|
9
|
+
onLaneHeaderContextMenu?: (lane: SwimlaneT, e: MouseEvent) => void;
|
|
10
|
+
renderLaneHeader?: (lane: SwimlaneT) => ReactElement;
|
|
11
|
+
}
|
|
12
|
+
export declare function TimelaneAside({ lanes, focusedLane, setFocusedLane, onLaneHeaderClick, onLaneHeaderDoubleClick, onLaneHeaderContextMenu, renderLaneHeader, }: TimelaneAsideProps): import("react/jsx-runtime").JSX.Element;
|
|
13
|
+
export {};
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { PropsWithChildren } from 'react';
|
|
2
|
+
interface TimelaneBodyProps {
|
|
3
|
+
onSelect?: (selection: number[]) => void;
|
|
4
|
+
}
|
|
5
|
+
export declare function TimelaneBody({ onSelect, children, }: PropsWithChildren<TimelaneBodyProps>): import("react/jsx-runtime").JSX.Element;
|
|
6
|
+
export {};
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { MouseEvent, ReactElement } from 'react';
|
|
2
|
+
import { AvailableSpace, CoreItem, SwimlaneT } from '../types';
|
|
3
|
+
interface TimelaneBodyInnerProps<T> {
|
|
4
|
+
lanes: SwimlaneT[];
|
|
5
|
+
items: CoreItem<T>[];
|
|
6
|
+
renderItem?: (item: CoreItem<T>, isDragged: boolean) => ReactElement;
|
|
7
|
+
onItemUpdate?: (item: CoreItem<T>) => void;
|
|
8
|
+
onLaneClick?: (lane: SwimlaneT, when: Date, availableSpace: AvailableSpace | null, e: MouseEvent) => void;
|
|
9
|
+
onLaneDoubleClick?: (lane: SwimlaneT, when: Date, availableSpace: AvailableSpace | null, e: MouseEvent) => void;
|
|
10
|
+
onLaneContextMenu?: (lane: SwimlaneT, when: Date, e: MouseEvent) => void;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* @deprecated The component should not be used
|
|
14
|
+
*/
|
|
15
|
+
export declare function TimelaneBodyInner<T>({ lanes, items, renderItem, onItemUpdate, onLaneClick, onLaneDoubleClick, onLaneContextMenu, }: TimelaneBodyInnerProps<T>): import("react/jsx-runtime").JSX.Element;
|
|
16
|
+
export {};
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { MouseEvent, ReactElement } from 'react';
|
|
2
|
+
import { Pixels, TimeRange } from '../../types';
|
|
3
|
+
interface DaysHeaderProps {
|
|
4
|
+
range: TimeRange;
|
|
5
|
+
pixels: Pixels;
|
|
6
|
+
focusedDay?: Date | null;
|
|
7
|
+
setFocusedDay?: (day: Date | null) => void;
|
|
8
|
+
render?: (day: Date) => ReactElement;
|
|
9
|
+
onDayClick?: (_: {
|
|
10
|
+
day: Date;
|
|
11
|
+
e: MouseEvent;
|
|
12
|
+
}) => void;
|
|
13
|
+
}
|
|
14
|
+
export declare function DaysHeader({ range, pixels, focusedDay, setFocusedDay, render, onDayClick, }: DaysHeaderProps): import("react/jsx-runtime").JSX.Element;
|
|
15
|
+
export {};
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { MouseEvent, ReactElement } from 'react';
|
|
2
|
+
import { Pixels, TimeRange } from '../../types';
|
|
3
|
+
interface MonthsHeaderProps {
|
|
4
|
+
range: TimeRange;
|
|
5
|
+
pixels: Pixels;
|
|
6
|
+
setFocusedDay?: (day: Date | null) => void;
|
|
7
|
+
render?: (firstDay: Date, lastDay: Date) => ReactElement;
|
|
8
|
+
onMonthClick?: (params: {
|
|
9
|
+
firstDay: Date;
|
|
10
|
+
lastDay: Date;
|
|
11
|
+
e: MouseEvent;
|
|
12
|
+
}) => void;
|
|
13
|
+
}
|
|
14
|
+
export declare function MonthsHeader({ range, pixels, setFocusedDay, render, onMonthClick, }: MonthsHeaderProps): import("react/jsx-runtime").JSX.Element;
|
|
15
|
+
export {};
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { MouseEvent, ReactElement } from 'react';
|
|
2
|
+
interface TimelaneHeaderProps {
|
|
3
|
+
focusedDay?: Date | null;
|
|
4
|
+
setFocusedDay?: (day: Date | null) => void;
|
|
5
|
+
renderMonthHeader?: (firstDay: Date, lastDay: Date) => ReactElement;
|
|
6
|
+
renderWeekHeader?: (firstDay: Date, lastDay: Date) => ReactElement;
|
|
7
|
+
renderDayHeader?: (day: Date) => ReactElement;
|
|
8
|
+
onMonthClick?: (_: {
|
|
9
|
+
firstDay: Date;
|
|
10
|
+
lastDay: Date;
|
|
11
|
+
e: MouseEvent;
|
|
12
|
+
}) => void;
|
|
13
|
+
onWeekClick?: (_: {
|
|
14
|
+
firstDay: Date;
|
|
15
|
+
lastDay: Date;
|
|
16
|
+
e: MouseEvent;
|
|
17
|
+
}) => void;
|
|
18
|
+
onDayClick?: (_: {
|
|
19
|
+
day: Date;
|
|
20
|
+
e: MouseEvent;
|
|
21
|
+
}) => void;
|
|
22
|
+
}
|
|
23
|
+
export declare function TimelaneHeader({ focusedDay, setFocusedDay, renderMonthHeader, renderWeekHeader, renderDayHeader, onMonthClick, onDayClick, onWeekClick, }: TimelaneHeaderProps): import("react/jsx-runtime").JSX.Element;
|
|
24
|
+
export {};
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { MouseEvent, ReactElement } from 'react';
|
|
2
|
+
import { Pixels, TimeRange } from '../../types';
|
|
3
|
+
interface WeeksHeaderProps {
|
|
4
|
+
range: TimeRange;
|
|
5
|
+
pixels: Pixels;
|
|
6
|
+
setFocusedDay?: (day: Date | null) => void;
|
|
7
|
+
render?: (firstDay: Date, lastDay: Date) => ReactElement;
|
|
8
|
+
onWeekClick?: (params: {
|
|
9
|
+
firstDay: Date;
|
|
10
|
+
lastDay: Date;
|
|
11
|
+
e: MouseEvent;
|
|
12
|
+
}) => void;
|
|
13
|
+
}
|
|
14
|
+
export declare function WeeksHeader({ range, pixels, setFocusedDay, render, onWeekClick, }: WeeksHeaderProps): import("react/jsx-runtime").JSX.Element;
|
|
15
|
+
export {};
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export { DaysHeader } from './DaysHeader';
|
|
2
|
+
export { WeeksHeader } from './WeeksHeader';
|
|
3
|
+
export { MonthsHeader } from './MonthsHeader';
|
|
4
|
+
export { TimelaneHeader } from './TimelaneHeader';
|
|
5
|
+
export { renderDayHeader, renderMonthHeader, renderWeekHeader, } from './renderingUtils';
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { ReactElement } from 'react';
|
|
2
|
+
export declare function renderMonthHeader(firstDay: Date, lastDay: Date): ReactElement;
|
|
3
|
+
export declare function renderWeekHeader(firstDay: Date, lastDay: Date): ReactElement;
|
|
4
|
+
export declare function renderDayHeader(day: Date): ReactElement;
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { PropsWithChildren } from 'react';
|
|
2
|
+
interface TimelaneSelectionLayerProps {
|
|
3
|
+
onSelect: (selection: number[]) => void;
|
|
4
|
+
}
|
|
5
|
+
export declare function TimelaneSelectionLayer({ children, onSelect, }: PropsWithChildren<TimelaneSelectionLayerProps>): import("react/jsx-runtime").JSX.Element;
|
|
6
|
+
export {};
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { Dispatch, SetStateAction } from 'react';
|
|
2
|
+
import { TimelaneSettings } from '../types/TimelaneSettings';
|
|
3
|
+
export interface TimelaneContextOuter {
|
|
4
|
+
settings: TimelaneSettings;
|
|
5
|
+
setSettings: Dispatch<SetStateAction<TimelaneSettings>>;
|
|
6
|
+
}
|
|
7
|
+
export declare const TimelaneSettingsContext: import('react').Context<TimelaneContextOuter>;
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { PropsWithChildren } from 'react';
|
|
2
|
+
import { TimelaneSettings } from '../types/TimelaneSettings';
|
|
3
|
+
interface TimelaneSettingsProviderProps {
|
|
4
|
+
settings: TimelaneSettings;
|
|
5
|
+
}
|
|
6
|
+
export declare const TimelaneSettingsProvider: ({ settings: _settings, children, }: PropsWithChildren<TimelaneSettingsProviderProps>) => import("react/jsx-runtime").JSX.Element;
|
|
7
|
+
export {};
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { PropsWithChildren } from 'react';
|
|
2
|
+
import { SwimlaneT } from '../types';
|
|
3
|
+
interface TimelaneWrapperProps {
|
|
4
|
+
focusedDay?: Date | null;
|
|
5
|
+
focusedSwimlane?: SwimlaneT | null;
|
|
6
|
+
start?: Date;
|
|
7
|
+
end?: Date;
|
|
8
|
+
pixelsPerDay?: number;
|
|
9
|
+
pixelsPerResource?: number;
|
|
10
|
+
showMonths?: boolean;
|
|
11
|
+
showWeeks?: boolean;
|
|
12
|
+
showDays?: boolean;
|
|
13
|
+
allowOverlaps?: boolean;
|
|
14
|
+
focusedDate?: Date | null;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* @deprecated The component should not be used
|
|
18
|
+
*/
|
|
19
|
+
export default function TimelaneWrapper({ children, start, end, pixelsPerDay, pixelsPerResource, showMonths, showWeeks, showDays, allowOverlaps, focusedDate, }: PropsWithChildren<TimelaneWrapperProps>): import("react/jsx-runtime").JSX.Element;
|
|
20
|
+
export {};
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { PropsWithChildren } from 'react';
|
|
2
|
+
import { CoreItem, Position, SwimlaneT, TimelaneSettings } from '../../../types';
|
|
3
|
+
interface CoreItemComponentProps<T> {
|
|
4
|
+
item: CoreItem<T>;
|
|
5
|
+
swimlane: SwimlaneT;
|
|
6
|
+
settings: TimelaneSettings;
|
|
7
|
+
onDragStart: (grabPosition: Position, relativeGrabPosition: Position) => void;
|
|
8
|
+
onDrop: () => void;
|
|
9
|
+
onDrag: () => void;
|
|
10
|
+
onUpdate: (updatedItem: CoreItem<T>) => void;
|
|
11
|
+
onResizeStart: () => void;
|
|
12
|
+
}
|
|
13
|
+
export default function CoreItemComponent<T>({ swimlane, item, settings, children, onDragStart, onDrag, onDrop, onUpdate, onResizeStart, }: PropsWithChildren<CoreItemComponentProps<T>>): import("react/jsx-runtime").JSX.Element;
|
|
14
|
+
export {};
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { PropsWithChildren } from 'react';
|
|
2
|
+
import { Position, Rectangle, Dimensions, CoreItem } from '../../../types';
|
|
3
|
+
interface DragResizeComponentProps<T> {
|
|
4
|
+
item: CoreItem<T>;
|
|
5
|
+
rectangle: Rectangle;
|
|
6
|
+
boundingRectangle: Dimensions;
|
|
7
|
+
onDragStart: (grabPosition: Position, relativeGrabPosition: Position) => void;
|
|
8
|
+
onDrag: () => void;
|
|
9
|
+
onDrop: () => void;
|
|
10
|
+
onUpdate: (rectangle: Rectangle) => void;
|
|
11
|
+
onResizeStart: () => void;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* takes care of pixel-level drag-and-drop and resizing.
|
|
15
|
+
* will emit every event through event handlers.
|
|
16
|
+
* @param param0 t
|
|
17
|
+
* @returns
|
|
18
|
+
*/
|
|
19
|
+
export default function DragResizeComponent<T>({ item, rectangle, boundingRectangle, children, onDrag, onDragStart, onDrop, onUpdate, onResizeStart, }: PropsWithChildren<DragResizeComponentProps<T>>): import("react/jsx-runtime").JSX.Element;
|
|
20
|
+
export {};
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { PropsWithChildren } from 'react';
|
|
2
|
+
import { CoreItem, Pixels, SwimlaneT, TimeRange } from '../../../types';
|
|
3
|
+
interface AvailableSpaceIndicatorProps<T> {
|
|
4
|
+
pixels: Pixels;
|
|
5
|
+
range: TimeRange;
|
|
6
|
+
swimlane: SwimlaneT;
|
|
7
|
+
debug: boolean;
|
|
8
|
+
items: CoreItem<T>[];
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* A component that displays the available space at the mouse cursor position.
|
|
12
|
+
* The available space is a rectangle that does not overlap with it's surrounding items.
|
|
13
|
+
* It is determined by some heuristics.
|
|
14
|
+
*
|
|
15
|
+
* Only used for debugging purposes.
|
|
16
|
+
*
|
|
17
|
+
* @param param0
|
|
18
|
+
* @returns
|
|
19
|
+
*/
|
|
20
|
+
export default function AvailableSpaceIndicator<T>({ pixels, range, swimlane, items, debug, children, }: PropsWithChildren<AvailableSpaceIndicatorProps<T>>): import("react/jsx-runtime").JSX.Element;
|
|
21
|
+
export {};
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { MouseEvent, ReactElement } from 'react';
|
|
2
|
+
import { AvailableSpace, CoreItem, SwimlaneT } from '../../../types';
|
|
3
|
+
interface CoreSwimlaneProps<T> {
|
|
4
|
+
swimlane: SwimlaneT;
|
|
5
|
+
items: CoreItem<T>[];
|
|
6
|
+
focused?: boolean;
|
|
7
|
+
onItemUpdate?: (item: CoreItem<T>) => void;
|
|
8
|
+
onMouseUp?: (e: MouseEvent) => void;
|
|
9
|
+
onClick?: (when: Date, availableSpace: AvailableSpace | null, e: MouseEvent) => void;
|
|
10
|
+
onDoubleClick?: (when: Date, availableSpace: AvailableSpace | null, e: MouseEvent) => void;
|
|
11
|
+
onContextMenu?: (when: Date, e: MouseEvent) => void;
|
|
12
|
+
renderItem?: (item: CoreItem<T>, isDragged: boolean) => ReactElement;
|
|
13
|
+
onResizeStart?: (data: T) => void;
|
|
14
|
+
}
|
|
15
|
+
export declare function CoreSwimlane<T>({ swimlane, items, focused, onItemUpdate, onMouseUp, onClick, onDoubleClick, onContextMenu, renderItem, onResizeStart, }: CoreSwimlaneProps<T>): import("react/jsx-runtime").JSX.Element;
|
|
16
|
+
export {};
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { PropsWithChildren } from 'react';
|
|
2
|
+
interface DropPreviewProps {
|
|
3
|
+
x: number;
|
|
4
|
+
y: number;
|
|
5
|
+
width: number;
|
|
6
|
+
height: number;
|
|
7
|
+
}
|
|
8
|
+
export default function DropPreview({ x, y, width, height, children, }: PropsWithChildren<DropPreviewProps>): import("react/jsx-runtime").JSX.Element;
|
|
9
|
+
export {};
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { PropsWithChildren } from 'react';
|
|
2
|
+
import { GrabInfo, Position } from '../../../types';
|
|
3
|
+
interface DropTargetProps {
|
|
4
|
+
onDragStart?: (mousePos: Position, grabInfo: GrabInfo, data: any) => void;
|
|
5
|
+
onDrag?: (mousePos: Position, grabInfo: GrabInfo, data: any) => void;
|
|
6
|
+
onDrop?: (mousePos: Position, grabInfo: GrabInfo, data: any) => void;
|
|
7
|
+
onDragEnter?: (mousePos: Position, grabInfo: GrabInfo, data: any) => void;
|
|
8
|
+
onDragLeave?: (grabInfo: GrabInfo, data: any) => void;
|
|
9
|
+
}
|
|
10
|
+
export default function DropTarget({ children, onDragStart, onDrag, onDrop, onDragEnter, onDragLeave, }: PropsWithChildren<DropTargetProps>): import("react/jsx-runtime").JSX.Element;
|
|
11
|
+
export {};
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { AvailableSpace, CoreItem, Dimensions, GrabInfo, Grid, Pixels, Position, Rectangle, SwimlaneT, TimeRange } from '../../../types';
|
|
2
|
+
export declare function getDropPreviewRectangle<S, T>(swimlane: SwimlaneT, items: CoreItem<T>[], item: CoreItem<S>, mousePosition: Position | null, grabInfo: GrabInfo, pixels: Pixels, grid: Grid, range: TimeRange, allowOverlaps: boolean): Rectangle | null;
|
|
3
|
+
/**
|
|
4
|
+
* Returns true if two rectangles (l1, r1) and (l2, r2) overlap
|
|
5
|
+
* @param el1
|
|
6
|
+
* @param el2
|
|
7
|
+
* @returns
|
|
8
|
+
*/
|
|
9
|
+
export declare function doOverlap(el1: Rectangle, el2: Rectangle): boolean;
|
|
10
|
+
export declare function getOverlap(rect1: Rectangle, rect2: Rectangle): Rectangle | null;
|
|
11
|
+
export declare function itemsDoOverlap<T>(a: CoreItem<T>, b: CoreItem<T>): boolean;
|
|
12
|
+
export declare function isWithinTargetDimensions(item: Rectangle, targetDimensions: Dimensions): boolean;
|
|
13
|
+
export declare function getAvailableSpace<T>(clickedDate: Date, clickedOffset: number, swimlane: SwimlaneT, items: CoreItem<T>[], range: TimeRange): AvailableSpace | null;
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { DragLocationHistory, ElementDragPayload } from '@atlaskit/pragmatic-drag-and-drop/dist/types/internal-types';
|
|
2
|
+
import { CoreItem, Dimensions, Pixels, Position, Rectangle, SwimlaneT, TimeRange } from '../../types';
|
|
3
|
+
export declare function getDropTargetDimensions(swimlane: SwimlaneT, pixels: Pixels, range: TimeRange): Dimensions;
|
|
4
|
+
export declare function getDropTargetHeight(swimlane: SwimlaneT, pixels: Pixels): number;
|
|
5
|
+
export declare function getDropTargetWidth(swimlane: SwimlaneT, pixels: Pixels, range: TimeRange): number;
|
|
6
|
+
export declare function getItemRectangle<T>(item: CoreItem<T>, swimlane: SwimlaneT, range: TimeRange, pixels: Pixels): Rectangle;
|
|
7
|
+
export declare function getItemDimensions<T>(item: CoreItem<T>, swimlane: SwimlaneT, pixels: Pixels): Dimensions;
|
|
8
|
+
export declare function dateToPixel(date: Date, start: Date, pixels: Pixels): number;
|
|
9
|
+
export declare function offsetToPixel(offset: number, capacity: number, pixels: Pixels): number;
|
|
10
|
+
export declare function getItemPosition<T>(item: CoreItem<T>, swimlane: SwimlaneT, start: Date, pixels: Pixels): Position;
|
|
11
|
+
export declare function getGrabPosition(source: ElementDragPayload, location: DragLocationHistory): {
|
|
12
|
+
absolute: Position;
|
|
13
|
+
relative: Position;
|
|
14
|
+
};
|
|
15
|
+
export declare function getUpdatedItem<T>(oldItem: CoreItem<T>, swimlane: SwimlaneT, dropPreviewRect: Rectangle, pixels: Pixels, range: TimeRange): CoreItem<T>;
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { PropsWithChildren } from 'react';
|
|
2
|
+
export declare function TimelaneLayout({ children }: PropsWithChildren<{}>): import("react/jsx-runtime").JSX.Element;
|
|
3
|
+
export declare namespace TimelaneLayout {
|
|
4
|
+
var Header: typeof TimelaneLayoutHeader;
|
|
5
|
+
var Body: typeof TimelaneLayoutBody;
|
|
6
|
+
var Background: typeof TimelaneLayoutBackground;
|
|
7
|
+
var Footer: typeof TimelaneLayoutFooter;
|
|
8
|
+
var Aside: typeof TimelaneLayoutAside;
|
|
9
|
+
var Corner: typeof TimelaneLayoutCorner;
|
|
10
|
+
}
|
|
11
|
+
declare function TimelaneLayoutHeader({ children }: PropsWithChildren<{}>): import("react/jsx-runtime").JSX.Element;
|
|
12
|
+
declare function TimelaneLayoutBackground({ children }: PropsWithChildren<{}>): import("react/jsx-runtime").JSX.Element;
|
|
13
|
+
declare function TimelaneLayoutBody({ children }: PropsWithChildren<{}>): import("react/jsx-runtime").JSX.Element;
|
|
14
|
+
declare function TimelaneLayoutFooter({ children }: PropsWithChildren<{}>): import("react/jsx-runtime").JSX.Element;
|
|
15
|
+
interface TimelaneLayoutAsideProps {
|
|
16
|
+
side?: "left" | "right";
|
|
17
|
+
}
|
|
18
|
+
declare function TimelaneLayoutAside({ side, children, }: PropsWithChildren<TimelaneLayoutAsideProps>): import("react/jsx-runtime").JSX.Element;
|
|
19
|
+
interface TimelaneLayoutCornerProps {
|
|
20
|
+
corner?: "top left" | "top right" | "bottom left" | "bottom right";
|
|
21
|
+
}
|
|
22
|
+
declare function TimelaneLayoutCorner({ corner, children, }: PropsWithChildren<TimelaneLayoutCornerProps>): import("react/jsx-runtime").JSX.Element;
|
|
23
|
+
export {};
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { ItemId, SwimlaneId } from '../types';
|
|
2
|
+
export declare const useScroll: () => {
|
|
3
|
+
scrollTo: (destination: {
|
|
4
|
+
horz?: Date;
|
|
5
|
+
vert?: SwimlaneId;
|
|
6
|
+
} | ItemId) => void;
|
|
7
|
+
scrollToDate: (date: Date) => void;
|
|
8
|
+
scrollToItem: (itemId: ItemId) => void;
|
|
9
|
+
scrollToLane: (laneId: SwimlaneId) => void;
|
|
10
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const useTimelaneContext: () => import('../components/TimelaneSettingsContext').TimelaneContextOuter;
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export { TimelaneLayout } from './components/layout/TimelaneLayout';
|
|
2
|
+
export { TimelaneAside } from './components/TimelaneAside';
|
|
3
|
+
export { TimelaneBackground } from './components/TimelaneBackground';
|
|
4
|
+
export { CoreSwimlane } from './components/core/CoreSwimlane/CoreSwimlane';
|
|
5
|
+
export { TimelaneBody } from './components/TimelaneBody';
|
|
6
|
+
export { Timelane } from './components/Timelane';
|
|
7
|
+
export { TimelaneSettingsProvider } from './components/TimelaneSettingsProvider';
|
|
8
|
+
export * from './components/TimelaneHeader';
|
|
9
|
+
export * from './types';
|
|
10
|
+
export * from './components/core/utils';
|
|
11
|
+
export * from './components/core/CoreSwimlane/utils';
|
|
12
|
+
export { useScroll } from './hooks/useScroll';
|
|
13
|
+
export { useTimelaneContext } from './hooks/useTimelaneContext';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
.timelane-layout{position:relative;width:100%;height:100%;overflow:auto}.timelane-layout .timelane-layout-inner{position:relative;width:fit-content;height:fit-content;display:grid;grid-template-areas:"corner-tl header corner-tr" "aside-l body aside-r" "corner-bl footer corner-br"}.timelane-layout .timelane-layout-inner .timelane-layout-header,.timelane-layout .timelane-layout-inner .timelane-layout-footer,.timelane-layout .timelane-layout-inner .timelane-layout-aside,.timelane-layout .timelane-layout-inner .timelane-layout-corner{background:#fff}.timelane-layout .timelane-layout-inner .timelane-layout-header{grid-area:header;position:sticky;position:-webkit-sticky;top:0;z-index:101;overflow:hidden}.timelane-layout .timelane-layout-inner .timelane-layout-body{grid-area:body;z-index:100}.timelane-layout .timelane-layout-inner .timelane-layout-background{grid-area:body;z-index:-1}.timelane-layout .timelane-layout-inner .timelane-layout-footer{grid-area:footer;position:sticky;position:-webkit-sticky;bottom:0;z-index:101;border-top:1px solid lightgray}.timelane-layout .timelane-layout-inner .timelane-layout-aside{grid-area:aside-l;position:sticky;position:-webkit-sticky;left:0;z-index:101}.timelane-layout .timelane-layout-inner .timelane-layout-aside.timelane-layout-aside-right{grid-area:aside-r;right:0;left:initial;border-left:1px solid lightgray}.timelane-layout .timelane-layout-inner .timelane-layout-corner{position:sticky;position:-webkit-sticky;z-index:102}.timelane-layout .timelane-layout-inner .timelane-layout-corner.timelane-layout-corner-top-left{grid-area:corner-tl;top:0;left:0;border-bottom:1px solid lightgray;border-right:1px solid lightgray}.timelane-layout .timelane-layout-inner .timelane-layout-corner.timelane-layout-corner-top-right{grid-area:corner-tr;top:0;right:0;border-bottom:1px solid lightgray;border-left:1px solid lightgray}.timelane-layout .timelane-layout-inner .timelane-layout-corner.timelane-layout-corner-bottom-left{grid-area:corner-bl;bottom:0;left:0;border-top:1px solid lightgray;border-right:1px solid lightgray}.timelane-layout .timelane-layout-inner .timelane-layout-corner.timelane-layout-corner-bottom-right{grid-area:corner-br;bottom:0;right:0;border-top:1px solid lightgray;border-left:1px solid lightgray}*{box-sizing:border-box}.timelane{--timelane-aside-width: 150px;--timelane-border-color-light: #f0f0f0;--timelane-border-color-normal: lightgray;--timelane-border-color-dark: gray;--timelane-highlight-color: #f8f8f8;--timelane-focused-color: rgba(0, 0, 255, .1);--timelane-hover-color: rgba(0, 0, 0, .05);overflow:auto;position:relative;width:100%;height:100%;border-left:1px solid var(--timelane-border-color-normal)}.timelane .timelane-header{top:0;z-index:101;background:#fff}.timelane .timelane-header .timelane-header-months{display:flex;flex-flow:row nowrap}.timelane .timelane-header .timelane-header-months .timelane-header-month-label{border-right:1px solid var(--timelane-border-color-normal);border-bottom:1px solid var(--timelane-border-color-normal);overflow:hidden;font-size:1em;height:30px;line-height:30px;text-align:center;cursor:pointer}.timelane .timelane-header .timelane-header-months .timelane-header-month-label:hover{background:var(--timelane-hover-color)}.timelane .timelane-header .timelane-header-weeks{display:flex;flex-flow:row nowrap}.timelane .timelane-header .timelane-header-weeks .timelane-header-week-label{border-right:1px solid var(--timelane-border-color-normal);border-bottom:1px solid var(--timelane-border-color-normal);overflow:hidden;font-size:1em;height:30px;line-height:30px;text-align:center;cursor:pointer}.timelane .timelane-header .timelane-header-weeks .timelane-header-week-label:hover{background:var(--timelane-hover-color)}.timelane .timelane-header .timelane-header-days{display:flex;flex-flow:row nowrap}.timelane .timelane-header .timelane-header-days .timelane-header-day-label{border-right:1px solid var(--timelane-border-color-normal);border-bottom:1px solid var(--timelane-border-color-normal);overflow:hidden;font-size:.8em;height:20px;line-height:20px;text-align:center;cursor:pointer}.timelane .timelane-header .timelane-header-days .timelane-header-day-label:hover{background:var(--timelane-hover-color)}.timelane .timelane-header .timelane-header-days .timelane-header-day-label.timelane-header-day-label-focused{background:var(--timelane-focused-color)}.timelane .timelane-header-corner{z-index:102;background:#fff;border-right:1px solid var(--timelane-border-color-normal);border-bottom:1px solid var(--timelane-border-color-normal)}.timelane .timelane-body{z-index:99;position:relative;width:fit-content}.timelane .timelane-body .timelane-swimlane{border-color:var(--timelane-border-color-normal)!important;border-top:1px solid gray;border-bottom:1px solid gray;margin-top:-1px;overflow:hidden}.timelane .timelane-body .timelane-swimlane .timelane-drop-target{position:relative;width:100%;height:100%}.timelane .timelane-body .timelane-swimlane .timelane-drop-target .timelane-item{position:absolute;cursor:pointer;border-radius:3px;-webkit-touch-callout:none;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.timelane .timelane-body .timelane-swimlane .timelane-drop-target .timelane-item.timelane-item-marked .timelane-allocation{border:2px dashed rgba(0,0,0,.5)}.timelane .timelane-body .timelane-swimlane .timelane-drop-target .timelane-item .timelane-item-drag-handle{height:100%}.timelane .timelane-body .timelane-swimlane .timelane-drop-target .timelane-item .timelane-item-resize-handle{background:#bed7dc;border-radius:5px;top:4px!important;bottom:4px!important;height:auto!important;width:6px!important;z-index:2;background:transparent!important;transition:.2s}.timelane .timelane-body .timelane-swimlane .timelane-drop-target .timelane-item .timelane-item-resize-handle:hover{background:#0000001a!important}.timelane .timelane-body .timelane-swimlane .timelane-drop-target .timelane-item .timelane-item-resize-handle.timelane-item-resize-handle-left{left:0!important;margin-left:1px}.timelane .timelane-body .timelane-swimlane .timelane-drop-target .timelane-item .timelane-item-resize-handle.timelane-item-resize-handle-right{right:0!important}.timelane .timelane-body .timelane-swimlane .timelane-drop-target .timelane-item .timelane-allocation{background:#92a8d1;border-radius:2px;border:2px solid transparent;height:calc(100% - 1px);overflow:hidden;cursor:pointer;padding:0 4px;margin-left:1px;-webkit-touch-callout:none;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;container-type:size;container-name:timelane-allocation}.timelane .timelane-body .timelane-swimlane .timelane-drop-target .timelane-item .timelane-allocation .timelane-allocation-title{font-weight:700;transform-origin:top left;line-height:30px;white-space:nowrap}@container timelane-allocation (max-height: 30px){.timelane .timelane-body .timelane-swimlane .timelane-drop-target .timelane-item .timelane-allocation .timelane-allocation-title{margin:0}}.timelane .timelane-body .timelane-swimlane .timelane-drop-target .timelane-item .timelane-allocation.timelane-allocation-selected{border:2px dashed rgba(0,0,0,.5)}.timelane .timelane-body .timelane-swimlane .timelane-drop-target .timelane-item.dragging{opacity:0}.timelane .timelane-body .timelane-swimlane .timelane-drop-target .timelane-drop-preview{background:#00f;position:absolute;border-radius:2px;color:#fff}.timelane .timelane-body .timelane-swimlane.timelane-row-focused{background:var(--timelane-focused-color)}.timelane .timelane-aside{border-right:1px solid var(--timelane-border-color-normal);width:var(--timelane-aside-width);background:#fff}.timelane .timelane-aside .timelane-aside-swimlane-header{border:1px solid var(--timelane-border-color-normal);border-right:none;border-left:none;margin-top:-1px;padding:10px;overflow:hidden;position:relative;cursor:pointer}.timelane .timelane-aside .timelane-aside-swimlane-header.timelane-aside-swimlane-header-focused{background:var(--timelane-focused-color)}.timelane .timelane-aside .timelane-aside-swimlane-header:hover .timelane-aside-resource-menu{opacity:1}.timelane .timelane-aside .timelane-aside-swimlane-header .timelane-aside-resource-menu{position:absolute;top:5px;right:5px;opacity:0;transition:.15s}.timelane .timelane-aside .timelane-aside-swimlane-header .timelane-aside-resource-menu.timelane-aside-resource-menu-open{opacity:1}.timelane .timelane-background{position:relative;width:100%;height:100%}.timelane .timelane-background .timelane-background-inner{display:flex;flex-flow:row nowrap;height:100%}.timelane .timelane-background .timelane-background-inner .timelane-background-day-label{border-right:1px solid var(--timelane-border-color-light);overflow:hidden;font-size:.8em;height:100%;z-index:-100}.timelane .timelane-background .timelane-background-inner .timelane-background-day-label.timelane-background-day-label-sunday{border-right:1px solid var(--timelane-border-color-normal)}.timelane .timelane-background .timelane-background-inner .timelane-background-day-label.timelane-background-day-label-focused{background:var(--timelane-focused-color)}.timelane .timelane-background .timelane-background-inner .timelane-background-focused-day-position{position:absolute;height:100%;background:var(--timelane-focused-color);z-index:-101}.timelane-header-tooltip,.timelane-header-day-tooltip{font-size:2em}
|