UNPKG

gantt-source_management

Version:

Gantt, Schedule,

708 lines 19.1 kB
/** * 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