@bsol-oss/react-datatable5 13.0.1-beta.32 → 13.0.1-beta.33

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.
@@ -0,0 +1,227 @@
1
+ import dayjs from 'dayjs';
2
+ import { type ReactNode } from 'react';
3
+ type TimeInput = Date | string | number;
4
+ export interface ViewableTimeRange {
5
+ start: TimeInput;
6
+ end: TimeInput;
7
+ }
8
+ export interface TimeRangeZoomLabels {
9
+ zoomIn?: string;
10
+ zoomOut?: string;
11
+ reset?: string;
12
+ visibleRange?: string;
13
+ duration?: string;
14
+ daysShort?: string;
15
+ hoursShort?: string;
16
+ minutesShort?: string;
17
+ secondsShort?: string;
18
+ invalidRange?: string;
19
+ dateTimeFormat?: string;
20
+ }
21
+ export interface TimeRangeZoomProps {
22
+ range: ViewableTimeRange;
23
+ onRangeChange: (range: {
24
+ start: Date;
25
+ end: Date;
26
+ }) => void;
27
+ minDurationMs?: number;
28
+ maxDurationMs?: number;
29
+ zoomFactor?: number;
30
+ resetDurationMs?: number;
31
+ showResetButton?: boolean;
32
+ disabled?: boolean;
33
+ labels?: TimeRangeZoomLabels;
34
+ }
35
+ export interface TimeViewportBlockProps {
36
+ start: TimeInput;
37
+ end: TimeInput;
38
+ viewportStart?: TimeInput;
39
+ viewportEnd?: TimeInput;
40
+ height?: string | number;
41
+ minWidthPx?: number;
42
+ borderRadius?: string | number;
43
+ colorPalette?: string;
44
+ background?: string;
45
+ label?: string;
46
+ showLabel?: boolean;
47
+ hideWhenOutOfView?: boolean;
48
+ onClick?: () => void;
49
+ }
50
+ export interface TimeViewportBlockItem {
51
+ id: string;
52
+ start?: TimeInput;
53
+ end?: TimeInput;
54
+ label?: string;
55
+ colorPalette?: string;
56
+ background?: string;
57
+ track?: string | number;
58
+ children?: TimeViewportBlockItem[];
59
+ onClick?: (block: TimeViewportBlockItem) => void;
60
+ }
61
+ export interface TimeViewportMarkerLineProps {
62
+ timestamp: TimeInput;
63
+ viewportStart?: TimeInput;
64
+ viewportEnd?: TimeInput;
65
+ height?: string | number;
66
+ colorPalette?: string;
67
+ color?: string;
68
+ lineWidthPx?: number;
69
+ label?: string;
70
+ showLabel?: boolean;
71
+ hideWhenOutOfView?: boolean;
72
+ }
73
+ export interface TimeViewportHeaderProps {
74
+ viewportStart?: TimeInput;
75
+ viewportEnd?: TimeInput;
76
+ tickCount?: number;
77
+ tickStrategy?: 'count' | 'timeUnit';
78
+ tickUnit?: 'minute' | 'hour' | 'day';
79
+ tickStep?: number;
80
+ format?: string;
81
+ height?: string | number;
82
+ color?: string;
83
+ borderColor?: string;
84
+ showBottomBorder?: boolean;
85
+ animationDurationMs?: number;
86
+ animationEasing?: string;
87
+ }
88
+ export interface TimeViewportHeaderTick {
89
+ index: number;
90
+ percent: number;
91
+ label: string;
92
+ }
93
+ export interface UseTimeViewportTicksResult {
94
+ isValidViewport: boolean;
95
+ getTicksByCount: (tickCount?: number) => TimeViewportHeaderTick[];
96
+ getTicksByTimeUnit: (tickUnit?: TimeViewportHeaderProps['tickUnit'], tickStep?: number) => TimeViewportHeaderTick[];
97
+ getTicks: (options?: {
98
+ tickStrategy?: TimeViewportHeaderProps['tickStrategy'];
99
+ tickCount?: number;
100
+ tickUnit?: TimeViewportHeaderProps['tickUnit'];
101
+ tickStep?: number;
102
+ }) => TimeViewportHeaderTick[];
103
+ }
104
+ export interface TimeViewportGridProps {
105
+ viewportStart?: TimeInput;
106
+ viewportEnd?: TimeInput;
107
+ tickCount?: number;
108
+ minorDivisions?: number;
109
+ majorLineColor?: string;
110
+ minorLineColor?: string;
111
+ showMinorLines?: boolean;
112
+ zIndex?: number;
113
+ animationDurationMs?: number;
114
+ animationEasing?: string;
115
+ }
116
+ export interface TimeViewportBlocksProps {
117
+ blocks: TimeViewportBlockItem[];
118
+ viewportStart?: TimeInput;
119
+ viewportEnd?: TimeInput;
120
+ height?: string | number;
121
+ minWidthPx?: number;
122
+ borderRadius?: string | number;
123
+ defaultColorPalette?: string;
124
+ showLabel?: boolean;
125
+ hideWhenOutOfView?: boolean;
126
+ hideEmptyTracks?: boolean;
127
+ gap?: number;
128
+ allowOverlap?: boolean;
129
+ overlapOpacity?: number;
130
+ renderTrackPrefix?: (args: {
131
+ trackIndex: number;
132
+ trackBlocks: TimeViewportBlockItem[];
133
+ trackKey?: string | number;
134
+ }) => ReactNode;
135
+ renderTrackSuffix?: (args: {
136
+ trackIndex: number;
137
+ trackBlocks: TimeViewportBlockItem[];
138
+ trackKey?: string | number;
139
+ }) => ReactNode;
140
+ onBlockClick?: (block: TimeViewportBlockItem) => void;
141
+ }
142
+ export interface TimeViewportRootProps {
143
+ viewportStart: TimeInput;
144
+ viewportEnd: TimeInput;
145
+ children: ReactNode;
146
+ onViewportChange?: (range: {
147
+ start: Date;
148
+ end: Date;
149
+ }) => void;
150
+ enableDragPan?: boolean;
151
+ enableCtrlWheelZoom?: boolean;
152
+ wheelZoomFactor?: number;
153
+ minDurationMs?: number;
154
+ maxDurationMs?: number;
155
+ }
156
+ export declare function TimeViewportRoot({ viewportStart, viewportEnd, children, onViewportChange, enableDragPan, enableCtrlWheelZoom, wheelZoomFactor, minDurationMs, maxDurationMs, }: TimeViewportRootProps): import("react/jsx-runtime").JSX.Element;
157
+ export interface UseTimeRangeZoomResult {
158
+ labels: Required<TimeRangeZoomLabels>;
159
+ start: dayjs.Dayjs;
160
+ end: dayjs.Dayjs;
161
+ durationMs: number;
162
+ canZoomIn: boolean;
163
+ canZoomOut: boolean;
164
+ hasValidDisplayRange: boolean;
165
+ visibleRangeText: string;
166
+ durationText: string;
167
+ zoomIn: () => void;
168
+ zoomOut: () => void;
169
+ reset: () => void;
170
+ }
171
+ export interface UseTimeViewportBlockGeometryResult {
172
+ hasValidViewport: boolean;
173
+ getGeometry: (start?: TimeInput, end?: TimeInput) => {
174
+ valid: boolean;
175
+ leftPercent: number;
176
+ widthPercent: number;
177
+ };
178
+ toTimeMs: (value?: TimeInput) => number | null;
179
+ }
180
+ export interface UseTimeViewportDerivedResult {
181
+ isValidViewport: boolean;
182
+ toTimeMs: (value?: TimeInput) => number | null;
183
+ getGeometry: (start?: TimeInput, end?: TimeInput) => {
184
+ valid: boolean;
185
+ leftPercent: number;
186
+ widthPercent: number;
187
+ };
188
+ getTimestampPercent: (timestamp?: TimeInput) => {
189
+ valid: boolean;
190
+ percent: number;
191
+ inView: boolean;
192
+ };
193
+ getTicksByCount: (tickCount?: number) => TimeViewportHeaderTick[];
194
+ getTicksByTimeUnit: (tickUnit?: TimeViewportHeaderProps['tickUnit'], tickStep?: number) => TimeViewportHeaderTick[];
195
+ getTicks: (options?: {
196
+ tickStrategy?: TimeViewportHeaderProps['tickStrategy'];
197
+ tickCount?: number;
198
+ tickUnit?: TimeViewportHeaderProps['tickUnit'];
199
+ tickStep?: number;
200
+ }) => TimeViewportHeaderTick[];
201
+ }
202
+ export declare function useTimeViewport(viewportStart?: TimeInput, viewportEnd?: TimeInput, format?: string): UseTimeViewportDerivedResult;
203
+ export declare function useTimeViewportBlockGeometry(viewportStart?: TimeInput, viewportEnd?: TimeInput): UseTimeViewportBlockGeometryResult;
204
+ export declare function useTimeViewportTicks({ viewportStart, viewportEnd, format, }: Pick<TimeViewportHeaderProps, 'viewportStart' | 'viewportEnd' | 'format'>): UseTimeViewportTicksResult;
205
+ export declare const useTimeViewportHeader: typeof useTimeViewportTicks;
206
+ /**
207
+ * A resizable timeline block based on block time range and viewport time range.
208
+ * Width and offset are automatically derived from datetime overlap.
209
+ */
210
+ export declare function TimeViewportBlock({ start, end, viewportStart, viewportEnd, height, minWidthPx, borderRadius, colorPalette, background, label, showLabel, hideWhenOutOfView, onClick, }: TimeViewportBlockProps): import("react/jsx-runtime").JSX.Element | null;
211
+ /**
212
+ * Vertical marker line for a timestamp in the current viewport.
213
+ */
214
+ export declare function TimeViewportMarkerLine({ timestamp, viewportStart, viewportEnd, height, colorPalette, color, lineWidthPx, label, showLabel, hideWhenOutOfView, }: TimeViewportMarkerLineProps): import("react/jsx-runtime").JSX.Element | null;
215
+ /**
216
+ * Header labels for timeline viewport time scale.
217
+ */
218
+ export declare function TimeViewportHeader({ viewportStart, viewportEnd, tickCount, tickStrategy, tickUnit, tickStep, format, height, color, borderColor, showBottomBorder, animationDurationMs, animationEasing, }: TimeViewportHeaderProps): import("react/jsx-runtime").JSX.Element | null;
219
+ /**
220
+ * Vertical grid lines for measuring block positions in the viewport.
221
+ * Render inside a relative container that also contains blocks.
222
+ */
223
+ export declare function TimeViewportGrid({ viewportStart, viewportEnd, tickCount, minorDivisions, majorLineColor, minorLineColor, showMinorLines, zIndex, animationDurationMs, animationEasing, }: TimeViewportGridProps): import("react/jsx-runtime").JSX.Element | null;
224
+ export declare function TimeViewportBlocks({ blocks, viewportStart, viewportEnd, height, minWidthPx, borderRadius, defaultColorPalette, showLabel, hideWhenOutOfView, hideEmptyTracks, gap, allowOverlap, overlapOpacity, renderTrackPrefix, renderTrackSuffix, onBlockClick, }: TimeViewportBlocksProps): import("react/jsx-runtime").JSX.Element;
225
+ export declare function TimeRangeZoom({ range, onRangeChange, minDurationMs, maxDurationMs, zoomFactor, resetDurationMs, showResetButton, disabled, labels, }: TimeRangeZoomProps): import("react/jsx-runtime").JSX.Element;
226
+ export declare function useTimeRangeZoom({ range, onRangeChange, minDurationMs, maxDurationMs, zoomFactor, resetDurationMs, disabled, labels, }: TimeRangeZoomProps): UseTimeRangeZoomResult;
227
+ export {};
@@ -2,6 +2,8 @@ export { default as DatePicker } from './DatePicker';
2
2
  export { TimePicker } from '../TimePicker/TimePicker';
3
3
  export { DateTimePicker } from './DateTimePicker';
4
4
  export { DurationPicker } from './DurationPicker';
5
+ export { TimeRangeZoom, TimeViewportRoot, TimeViewportBlock, TimeViewportBlocks, TimeViewportGrid, TimeViewportHeader, TimeViewportMarkerLine, } from './TimeRangeZoom';
5
6
  export { UniversalPicker } from './UniversalPicker';
6
7
  export { DatePickerInput } from './DatePicker';
7
8
  export type { DatePickerProps, CalendarProps, GetDateColorProps, GetVariantProps, } from './DatePicker';
9
+ export type { ViewableTimeRange, TimeRangeZoomLabels, TimeRangeZoomProps, TimeViewportRootProps, TimeViewportBlockProps, TimeViewportBlockItem, TimeViewportBlocksProps, TimeViewportGridProps, TimeViewportHeaderProps, TimeViewportMarkerLineProps, } from './TimeRangeZoom';
@@ -134,6 +134,7 @@ export * from './components/DatePicker/DatePicker';
134
134
  export * from './components/DatePicker/getMultiDates';
135
135
  export * from './components/DatePicker/getRangeDates';
136
136
  export * from './components/DatePicker/RangeDatePicker';
137
+ export * from './components/DatePicker/TimeRangeZoom';
137
138
  export * from './components/DataTable/display/RecordDisplay';
138
139
  export * from './components/DataTable/display/TableDataDisplay';
139
140
  export * from './components/DataTable/DefaultTable';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@bsol-oss/react-datatable5",
3
- "version": "13.0.1-beta.32",
3
+ "version": "13.0.1-beta.33",
4
4
  "type": "module",
5
5
  "main": "dist/index.js",
6
6
  "module": "dist/index.mjs",