gantt-source_management
Version:
Gantt, Schedule,
708 lines • 19.1 kB
TypeScript
/**
* Gantt-Schedule-Timeline-Calendar component
*
* @header --gstc--header--
*/
import Vido from '@neuronet.io/vido';
import type { vido } from '@neuronet.io/vido';
import { StyleInfo, ComponentInstance, lithtml } from '@neuronet.io/vido';
import { Api } from './api/api';
import { Dayjs } from 'dayjs';
import DeepState from 'deep-state-observer';
export type Vido = vido<DeepState, Api>;
export interface RowDataPosition {
top: number;
bottom: number;
}
export interface RowData {
id: string;
parentId: string | undefined;
actualHeight: number;
outerHeight: number;
position: RowDataPosition;
parents: string[];
children: string[];
allChildren: string[];
items: string[];
itemsOrder: string[];
inView: boolean;
parentsExpanded: boolean;
}
export interface RowsData {
[key: string]: RowData;
}
export interface Row {
id: string;
parentId?: string;
expanded?: boolean;
height?: number;
gap?: RowGap;
style?: StyleInfo;
classNames?: string[] | classNamesFn;
[key: string]: any;
}
export type classNamesFn = ({ row, vido }: {
row: Row;
vido: Vido;
}) => string[];
export interface Rows {
[id: string]: Row;
}
export interface ItemTime {
start: number;
end: number;
}
export interface ItemDataTime {
startDate: Dayjs;
endDate: Dayjs;
}
export interface ItemDataPosition {
left: number;
actualLeft: number;
right: number;
actualRight: number;
rowTop: number;
top: number;
actualRowTop: number;
viewTop: number;
}
export interface ItemDataIutOfView {
left: boolean;
right: boolean;
whole: boolean;
}
export interface ItemData {
id: string;
time: ItemDataTime;
actualHeight: number;
outerHeight: number;
position: ItemDataPosition;
outOfView: ItemDataIutOfView;
width: number;
actualWidth: number;
timeWidth: number;
detached: boolean;
linkedWith?: string[];
dependant?: string[];
dependsOn?: string[];
visible?: boolean;
inView?: boolean;
selected?: boolean;
selecting?: boolean;
}
export interface ItemDataUpdate {
time?: ItemDataTime;
actualHeight?: number;
outerHeight?: number;
position?: ItemDataPosition;
width?: number;
actualWidth?: number;
timeWidth?: number;
detached?: boolean;
linkedWith?: string[];
dependant?: string[];
}
export type ItemLabelFunction = ({ item, vido }: {
item: Item;
vido: Vido;
}) => lithtml.TemplateResult | string;
export interface Item {
id: string;
rowId: string;
time: ItemTime;
label: string | ItemLabelFunction;
height?: number;
top?: number;
gap?: ItemGap;
minWidth?: number;
style?: StyleInfo;
classNames?: string[] | (({ item, vido }: {
item: Item;
vido: Vido;
}) => string[]);
isHTML?: boolean;
linkedWith?: string[];
selected?: boolean;
overlap?: boolean;
[key: string]: any;
}
export interface Items {
[id: string]: Item;
}
export interface GridCell {
id: string;
time: ChartTimeDate;
top: number;
row: Row;
rowData: RowData;
content: null | string | htmlResult;
[key: string]: any;
}
export interface GridCells {
[id: string]: GridCell;
}
export interface GridRow {
row: Row;
rowData: RowData;
cells: string[];
top: number;
}
export interface GridRows {
[rowId: string]: GridRow;
}
export type VoidFunction = () => void;
export type PluginInitialization = (vido: Vido) => void | VoidFunction;
export type Plugin = <T>(options: T) => PluginInitialization;
export type htmlResult = lithtml.TemplateResult | lithtml.TemplateResult[] | lithtml.SVGTemplateResult | lithtml.SVGTemplateResult[] | string | Element | undefined | null;
export type RenderFunction = (templateProps: unknown) => htmlResult;
export type Component = (vido: unknown, props: unknown) => RenderFunction;
export interface Components {
[name: string]: Component;
}
export type SlotName = 'main' | 'scroll-bar' | 'list' | 'list-column' | 'list-column-headers' | 'list-column-header' | 'list-column-header-resizer' | 'list-column-rows' | 'list-column-row' | 'list-column-row-expander' | 'list-column-row-expander-toggle' | 'list-toggle' | 'chart' | 'chart-calendar' | 'chart-calendar-date' | 'chart-timeline' | 'chart-timeline-grid' | 'chart-timeline-grid-row' | 'chart-timeline-grid-row-cell' | 'chart-timeline-items' | 'chart-timeline-items-row' | 'chart-timeline-items-row-item';
export type SlotPlacement = 'outer' | 'inner' | 'container-outer' | 'container-inner' | 'content';
export type Slot = {
[placement in SlotPlacement]?: Component[];
};
export type Slots = {
[name in SlotName]?: Slot;
};
export interface ColumnResizer {
width?: number;
inRealTime?: boolean;
dots?: number;
}
export type ColumnDataFunction = ({ row, vido }: {
row: Row;
vido: Vido;
}) => string | number;
export type ColumnDataFunctionString = ({ row, vido }: {
row: Row;
vido: Vido;
}) => string;
export type ColumnDataFunctionTemplate = ({ row, vido }: {
row: Row;
vido: Vido;
}) => htmlResult;
export type ColumnDataHeaderContent = string | (({ column, vido }: {
column: ColumnData;
vido: Vido;
}) => htmlResult);
export interface ColumnDataHeader {
html?: htmlResult;
content?: ColumnDataHeaderContent;
}
export type Sortable = string | ColumnDataFunction;
export interface ColumnData {
id: string;
data: string | ColumnDataFunctionString | ColumnDataFunctionTemplate;
width: number;
header: ColumnDataHeader;
isHTML?: boolean;
expander?: boolean;
resizer?: boolean;
sortable?: Sortable;
minWidth?: number;
hidden?: boolean;
position?: number;
}
export interface ColumnsData {
[id: string]: ColumnData;
}
export interface Columns {
percent?: number;
resizer?: ColumnResizer;
minWidth?: number;
data?: ColumnsData;
}
export interface ExpanderIcon {
width?: number;
height?: number;
}
export interface ExpanderIcons {
child?: string;
open?: string;
closed?: string;
}
export interface Expander {
padding?: number;
size?: number;
icon?: ExpanderIcon;
icons?: ExpanderIcons;
}
export interface ListToggleIcons {
open?: string;
close?: string;
}
export interface ListToggle {
display?: boolean;
icons?: ListToggleIcons;
}
export interface RowGap {
top?: number;
bottom?: number;
}
export interface ListRow {
height?: number;
gap?: RowGap;
}
export interface SortIcons {
up?: string;
down?: string;
}
export interface Sort {
icons?: SortIcons;
compare?: null | ((column: ColumnData) => (a: Row, b: Row) => number);
activeColumnId?: string | null;
asc?: boolean;
}
export interface List {
rows?: Rows;
row?: ListRow;
columns?: Columns;
expander?: Expander;
toggle?: ListToggle;
sort?: Sort;
}
export interface ScrollType {
width?: number;
minInnerSize?: number;
precise?: boolean;
multiplier?: number;
byPixels?: boolean;
}
export interface ScrollTypeHorizontal extends ScrollType {
data?: ChartTimeDate;
}
export interface ScrollTypeVertical extends ScrollType {
data?: Row;
}
export interface Scroll {
bodyClassName?: string;
horizontal?: ScrollTypeHorizontal;
vertical?: ScrollTypeVertical;
}
export interface DataScrollValues {
lastPageSize: number;
lastPageCount: number;
absolutePosPx: number;
preciseOffset: number;
handlePosPx: number;
maxHandlePosPx: number;
absoluteSizeWithoutLastPage?: number;
absoluteSize: number;
scrollSize: number;
innerHandleSize: number;
dataIndex: number;
dataId: string;
visible: boolean;
percent: number;
}
export interface DataScrollHorizontal extends DataScrollValues {
data: ChartTimeDate;
}
export interface DataScrollVertical extends DataScrollValues {
data: Row;
}
export interface DataScroll {
horizontal: DataScrollHorizontal;
vertical: DataScrollVertical;
}
export interface ChartTimeDate extends DataChartTimeLevelDate {
}
export type ChartTimeDates = ChartTimeDate[];
export type ChartTimeOnLevelDatesArg = {
dates: DataChartTimeLevel;
time: DataChartTime;
format: ChartCalendarLevelFormat;
level: ChartCalendarLevel;
levelIndex: number;
};
export type ChartTimeOnLevelDates = (arg: ChartTimeOnLevelDatesArg) => DataChartTimeLevel;
export type ChartTimeOnDateArg = {
date: ChartTimeDate;
time: DataChartTime;
format: ChartCalendarLevelFormat;
level: ChartCalendarLevel;
levelIndex: number;
};
export type ChartTimeOnDate = (arg: ChartTimeOnDateArg) => ChartTimeDate | null;
export interface ChartTime {
period?: Period;
from?: number;
readonly fromDate?: Dayjs;
to?: number;
readonly toDate?: Dayjs;
zoom?: number;
level?: number;
leftGlobal?: number;
readonly leftGlobalDate?: Dayjs;
centerGlobal?: number;
readonly centerGlobalDate?: Dayjs;
rightGlobal?: number;
readonly rightGlobalDate?: Dayjs;
format?: ChartCalendarLevelFormat;
calculatedZoomMode?: boolean;
onLevelDates?: ChartTimeOnLevelDates[];
onCurrentViewLevelDates?: ChartTimeOnLevelDates[];
onDate?: ChartTimeOnDate[];
readonly allDates?: ChartTimeDates[];
readonly forceUpdate?: boolean;
autoExpandTimeFromItems?: boolean;
alignLevelsToMain?: boolean;
readonly timePerPixel?: number;
checkCurrentDateInterval?: number;
readonly datesCache?: DataChartTimeDatesCache;
}
export interface DataChartTimeLevelDateCurrentView {
leftPx: number;
rightPx: number;
width: number;
leftGlobalDate: Dayjs;
rightGlobalDate: Dayjs;
durationMs: number;
}
export interface DataChartTimeLevelDateDST {
diffMs: number;
afterDate: Dayjs;
afterTime: number;
}
export interface DataChartTimeLevelDate {
id: string;
leftGlobal: number;
leftGlobalDate: Dayjs;
rightGlobal: number;
rightGlobalDate: Dayjs;
width: number;
leftPx: number;
rightPx: number;
period: Period;
formatted: string | htmlResult;
current: boolean;
next: boolean;
previous: boolean;
currentView?: DataChartTimeLevelDateCurrentView;
periodIncrementedBy: number;
DST: DataChartTimeLevelDateDST;
}
export type DataChartTimeLevel = DataChartTimeLevelDate[];
export type DataChartTimeLevels = DataChartTimeLevel[];
export type DataChartTimeDatesCacheDate = DataChartTimeLevelDate;
export interface DataChartTimeDatesCacheLevel {
leftTime: number;
rightTime: number;
dates: DataChartTimeDatesCacheDate[];
}
export interface DataChartTimeDatesCache {
timePerPixel: number;
levels: DataChartTimeDatesCacheLevel[];
}
export interface DataChartTime extends ChartTime {
period: Period;
leftGlobal: number;
leftGlobalDate: Dayjs | undefined;
centerGlobal: number;
centerGlobalDate: Dayjs | undefined;
rightGlobal: number;
rightGlobalDate: Dayjs | undefined;
timePerPixel: number;
from: number;
fromDate: Dayjs | undefined;
to: number;
toDate: Dayjs | undefined;
totalViewDurationMs: number;
totalViewDurationPx: number;
leftPx: number;
rightPx: number;
width?: number;
zoom: number;
format: ChartCalendarLevelFormat;
level: number;
levels: DataChartTimeLevels;
currentZoomLevelFormatting: ChartCalendarLevelFormat[];
calculatedZoomMode?: boolean;
onLevelDates?: ChartTimeOnLevelDates[];
onCurrentViewLevelDates?: ChartTimeOnLevelDates[];
allDates?: ChartTimeDates[];
forceUpdate?: boolean;
recalculateTimesLastReason?: string;
datesCache: DataChartTimeDatesCache;
}
export interface ChartCalendarFormatArguments {
timeStart: Dayjs;
timeEnd: Dayjs;
className: string;
props: any;
vido: any;
}
export type Period = 'year' | 'month' | 'week' | 'day' | 'hour' | 'minute' | 'second' | 'millisecond';
export type CharCalendarLevelFormatFunction = ({ currentDates, date, leftDate, rightDate, period, level, levelIndex, time, vido, api, }: {
currentDates: DataChartTimeLevelDate[];
date: Dayjs;
leftDate: Dayjs;
rightDate: Dayjs;
period: Period;
level: ChartCalendarLevel;
levelIndex: number;
time: DataChartTime;
vido: Vido;
api: Api;
}) => number;
export interface ChartCalendarLevelFormat {
zoomTo: number;
period: Period;
periodIncrement?: number | CharCalendarLevelFormatFunction;
main?: boolean;
classNames?: string[];
format: (args: ChartCalendarFormatArguments) => string | htmlResult;
}
export type ChartCalendarLevel = ChartCalendarLevelFormat[];
export interface GridCellOnCreateArgument extends GridCell {
vido: Vido;
}
export type GridCellOnCreate = (cell: GridCellOnCreateArgument) => string | htmlResult;
export interface ChartGridCell {
onCreate: GridCellOnCreate[];
}
export interface ChartGrid {
cell?: ChartGridCell;
}
export interface ItemGap {
top?: number;
bottom?: number;
}
export interface CutIcons {
left?: string;
right?: string;
}
export interface DefaultItem {
gap?: ItemGap;
height?: number;
rowTop?: number;
minWidth?: number;
cutIcons?: CutIcons;
overlap?: boolean;
}
export interface ChartSpacing {
left?: number;
right?: number;
}
export interface Chart {
time?: ChartTime;
calendarLevels?: ChartCalendarLevel[];
grid?: ChartGrid;
items?: Items;
item?: DefaultItem;
spacing?: number | ChartSpacing;
}
export interface ActionFunctionResult {
update?: (element: HTMLElement, data: unknown) => void;
destroy?: (element: HTMLElement, data: unknown) => void;
}
export interface ActionData {
componentName: SlotName;
[key: string]: any;
}
export type Action = (element: HTMLElement, data: ActionData) => ActionFunctionResult | void;
export type Actions = {
[name in SlotName]?: Action[];
};
export interface Locale {
name: string;
weekdays?: string[];
months?: string[];
weekStart?: number;
weekdaysShort?: string[];
monthsShort?: string[];
weekdaysMin?: string[];
ordinal?: (n: number) => number | string;
formats: Partial<{
LT: string;
LTS: string;
L: string;
LL: string;
LLL: string;
LLLL: string;
}>;
relativeTime: Partial<{
future: string;
past: string;
s: string;
m: string;
mm: string;
h: string;
hh: string;
d: string;
dd: string;
M: string;
MM: string;
y: string;
yy: string;
}>;
}
export interface TemplateVariables {
[key: string]: any;
}
export type Template = (variables: TemplateVariables) => htmlResult;
export type Templates = {
[name in SlotName]?: Template;
};
export interface LicenseType {
text: 'Trial' | 'Free' | 'Regular' | 'Ultimate';
value: 'trial' | 'free' | 'regular' | 'ultimate';
}
export interface ValidUntil {
text: string;
value: number;
}
export interface License {
type: LicenseType;
registeredDomains: string[];
validUntil: ValidUntil;
for: string;
}
export interface AdditionalSpace {
top: number;
bottom: number;
}
export interface Config {
licenseKey: string;
debug?: boolean | string;
plugins?: PluginInitialization[];
plugin?: unknown;
innerHeight?: number;
autoInnerHeight?: boolean;
initialWidth?: number;
headerHeight?: number;
additionalSpace?: AdditionalSpace;
components?: Components;
slots?: Slots;
list?: List;
scroll?: Scroll;
chart?: Chart;
actions?: Actions;
templates?: Templates;
locale?: Locale;
utcMode?: boolean;
merge?: (target: object, source: object) => object;
useLast?: boolean;
Promise?: Promise<unknown> | any;
mute?: string[];
readonly version?: string;
}
export interface TreeMapNode {
id: string;
children: string[];
allChildren: string[];
parents: string[];
parentId: string | undefined;
}
export interface TreeMap {
[rowId: string]: TreeMapNode;
}
export interface DataList {
width: number;
visibleRows: string[];
visibleRowsHeight: number;
rowsWithParentsExpanded: string[];
rowsHeight: number;
rowsIds: string[];
rows: RowsData;
}
export interface Dimensions {
width: number;
height: number;
}
export interface DataChartDimensions extends Dimensions {
/**
* config.innerHeight (whole height - calendar height) minus scroll bar height
*/
heightWithoutScrollBar: number;
/**
* From config.innerHeight
*/
innerHeight: number;
widthWithoutScrollBar: number;
}
export interface DataGrid {
cells: GridCells;
rows: GridRows;
}
export interface DataItems {
[id: string]: ItemData;
}
export interface DataChart {
grid: DataGrid;
items: DataItems;
dimensions: DataChartDimensions;
visibleItems: string[];
time: DataChartTime;
allItemsOnTheLeftOrRight: boolean;
}
export interface DataElements {
[key: string]: HTMLElement;
}
export interface ItemRowMap {
[itemId: string]: string;
}
export interface Data {
treeMap: TreeMap;
itemRowMap: ItemRowMap;
list: DataList;
dimensions: Dimensions;
chart: DataChart;
scroll: DataScroll;
elements: DataElements;
initializedPlugins: Set<string>;
}
export interface GSTCState {
config: Config;
$data: Data;
license: License;
}
export interface Reason {
name: string;
oldValue?: unknown;
newValue?: unknown;
from?: number;
to?: number;
}
export interface GSTCOptions {
state: DeepState;
element: HTMLElement;
debug?: boolean;
}
export interface GSTCResult {
state: DeepState;
api: Api;
component: ComponentInstance;
destroy: () => void;
reload: () => void;
lithtml: typeof lithtml;
Vido: typeof Vido;
}
declare function GSTC(options: GSTCOptions): GSTCResult;
declare namespace GSTC {
var api: {
name: string;
GSTCID: (originalId: string) => string;
isGSTCID: (id: string) => boolean;
sourceID: (id: string) => string;
fromArray(array: any): Record<string, any>;
stateFromConfig: typeof import("./api/public").stateFromConfig;
wasmStateFromConfig: typeof import("./api/public").wasmStateFromConfig;
merge: typeof import("@neuronet.io/vido/types/helpers").mergeDeep;
mergeDeep: typeof import("@neuronet.io/vido/types/helpers").mergeDeep;
clone: (object: object) => unknown;
lithtml: typeof import("lit-html");
html: typeof import("lit-html");
vido: typeof import("@neuronet.io/vido");
date(time?: any, utcMode?: boolean, localeConfig?: Locale): Dayjs;
setPeriod(period: Period): number;
dayjs: typeof import("dayjs");
};
var lithtml: typeof import("lit-html");
var Vido: typeof import("@neuronet.io/vido").default;
}
export default GSTC;
//# sourceMappingURL=gstc.d.ts.map