@nice2dev/ui-tools 1.0.10

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.
Files changed (158) hide show
  1. package/README.md +36 -0
  2. package/dist/access-control.d.ts +726 -0
  3. package/dist/access-control.d.ts.map +1 -0
  4. package/dist/accessibility-i18n.d.ts +1017 -0
  5. package/dist/accessibility-i18n.d.ts.map +1 -0
  6. package/dist/ai-assistant.d.ts +263 -0
  7. package/dist/ai-assistant.d.ts.map +1 -0
  8. package/dist/ai-playgrounds.d.ts +842 -0
  9. package/dist/ai-playgrounds.d.ts.map +1 -0
  10. package/dist/alerting-incidents.d.ts +558 -0
  11. package/dist/alerting-incidents.d.ts.map +1 -0
  12. package/dist/api-designer.d.ts +1568 -0
  13. package/dist/api-designer.d.ts.map +1 -0
  14. package/dist/api-testing.d.ts +1146 -0
  15. package/dist/api-testing.d.ts.map +1 -0
  16. package/dist/apm-profiling.d.ts +656 -0
  17. package/dist/apm-profiling.d.ts.map +1 -0
  18. package/dist/artifacts.d.ts +421 -0
  19. package/dist/artifacts.d.ts.map +1 -0
  20. package/dist/audit-compliance.d.ts +752 -0
  21. package/dist/audit-compliance.d.ts.map +1 -0
  22. package/dist/certificates.d.ts +256 -0
  23. package/dist/certificates.d.ts.map +1 -0
  24. package/dist/chart-builder.d.ts +1404 -0
  25. package/dist/chart-builder.d.ts.map +1 -0
  26. package/dist/cloud-instances.d.ts +169 -0
  27. package/dist/cloud-instances.d.ts.map +1 -0
  28. package/dist/config-management.d.ts +350 -0
  29. package/dist/config-management.d.ts.map +1 -0
  30. package/dist/containers.d.ts +256 -0
  31. package/dist/containers.d.ts.map +1 -0
  32. package/dist/dashboard-designer.d.ts +1238 -0
  33. package/dist/dashboard-designer.d.ts.map +1 -0
  34. package/dist/data-management.d.ts +496 -0
  35. package/dist/data-management.d.ts.map +1 -0
  36. package/dist/data-pipeline.d.ts +1105 -0
  37. package/dist/data-pipeline.d.ts.map +1 -0
  38. package/dist/data-warehouse.d.ts +1097 -0
  39. package/dist/data-warehouse.d.ts.map +1 -0
  40. package/dist/dataset-management.d.ts +782 -0
  41. package/dist/dataset-management.d.ts.map +1 -0
  42. package/dist/db-adapters.d.ts +704 -0
  43. package/dist/db-adapters.d.ts.map +1 -0
  44. package/dist/db-admin.d.ts +699 -0
  45. package/dist/db-admin.d.ts.map +1 -0
  46. package/dist/db-designer.d.ts +366 -0
  47. package/dist/db-designer.d.ts.map +1 -0
  48. package/dist/debugger.d.ts +356 -0
  49. package/dist/debugger.d.ts.map +1 -0
  50. package/dist/device-management.d.ts +871 -0
  51. package/dist/device-management.d.ts.map +1 -0
  52. package/dist/distributed-tracing.d.ts +427 -0
  53. package/dist/distributed-tracing.d.ts.map +1 -0
  54. package/dist/dns-management.d.ts +215 -0
  55. package/dist/dns-management.d.ts.map +1 -0
  56. package/dist/download-manager.d.ts +271 -0
  57. package/dist/download-manager.d.ts.map +1 -0
  58. package/dist/download-torrent.d.ts +1062 -0
  59. package/dist/download-torrent.d.ts.map +1 -0
  60. package/dist/edge-computing.d.ts +720 -0
  61. package/dist/edge-computing.d.ts.map +1 -0
  62. package/dist/education.d.ts +1135 -0
  63. package/dist/education.d.ts.map +1 -0
  64. package/dist/email-template.d.ts +1141 -0
  65. package/dist/email-template.d.ts.map +1 -0
  66. package/dist/erp-enterprise.d.ts +1270 -0
  67. package/dist/erp-enterprise.d.ts.map +1 -0
  68. package/dist/form-builder.d.ts +1117 -0
  69. package/dist/form-builder.d.ts.map +1 -0
  70. package/dist/game-engine-advanced.d.ts +1049 -0
  71. package/dist/game-engine-advanced.d.ts.map +1 -0
  72. package/dist/git.d.ts +415 -0
  73. package/dist/git.d.ts.map +1 -0
  74. package/dist/hardware-integration.d.ts +966 -0
  75. package/dist/hardware-integration.d.ts.map +1 -0
  76. package/dist/iac.d.ts +318 -0
  77. package/dist/iac.d.ts.map +1 -0
  78. package/dist/icon-tools.d.ts +1023 -0
  79. package/dist/icon-tools.d.ts.map +1 -0
  80. package/dist/ide.d.ts +322 -0
  81. package/dist/ide.d.ts.map +1 -0
  82. package/dist/index.cjs +2 -0
  83. package/dist/index.cjs.map +1 -0
  84. package/dist/index.d.ts +176 -0
  85. package/dist/index.d.ts.map +1 -0
  86. package/dist/index.mjs +1887 -0
  87. package/dist/index.mjs.map +1 -0
  88. package/dist/integration-platform.d.ts +857 -0
  89. package/dist/integration-platform.d.ts.map +1 -0
  90. package/dist/kubernetes.d.ts +278 -0
  91. package/dist/kubernetes.d.ts.map +1 -0
  92. package/dist/life-management.d.ts +1132 -0
  93. package/dist/life-management.d.ts.map +1 -0
  94. package/dist/log-management.d.ts +473 -0
  95. package/dist/log-management.d.ts.map +1 -0
  96. package/dist/mathematics.d.ts +870 -0
  97. package/dist/mathematics.d.ts.map +1 -0
  98. package/dist/message-queue.d.ts +1006 -0
  99. package/dist/message-queue.d.ts.map +1 -0
  100. package/dist/metrics-dashboard.d.ts +596 -0
  101. package/dist/metrics-dashboard.d.ts.map +1 -0
  102. package/dist/mobile-components.d.ts +766 -0
  103. package/dist/mobile-components.d.ts.map +1 -0
  104. package/dist/model-deployment.d.ts +787 -0
  105. package/dist/model-deployment.d.ts.map +1 -0
  106. package/dist/model-registry.d.ts +740 -0
  107. package/dist/model-registry.d.ts.map +1 -0
  108. package/dist/model-training.d.ts +706 -0
  109. package/dist/model-training.d.ts.map +1 -0
  110. package/dist/network-config.d.ts +334 -0
  111. package/dist/network-config.d.ts.map +1 -0
  112. package/dist/network-monitoring.d.ts +291 -0
  113. package/dist/network-monitoring.d.ts.map +1 -0
  114. package/dist/pdf-tools.d.ts +1003 -0
  115. package/dist/pdf-tools.d.ts.map +1 -0
  116. package/dist/pipelines.d.ts +250 -0
  117. package/dist/pipelines.d.ts.map +1 -0
  118. package/dist/remote-desktop.d.ts +207 -0
  119. package/dist/remote-desktop.d.ts.map +1 -0
  120. package/dist/report-designer.d.ts +1153 -0
  121. package/dist/report-designer.d.ts.map +1 -0
  122. package/dist/scada-industrial.d.ts +848 -0
  123. package/dist/scada-industrial.d.ts.map +1 -0
  124. package/dist/scientific-research.d.ts +1149 -0
  125. package/dist/scientific-research.d.ts.map +1 -0
  126. package/dist/secret-management.d.ts +617 -0
  127. package/dist/secret-management.d.ts.map +1 -0
  128. package/dist/security-scanning.d.ts +714 -0
  129. package/dist/security-scanning.d.ts.map +1 -0
  130. package/dist/self-service-analytics.d.ts +1208 -0
  131. package/dist/self-service-analytics.d.ts.map +1 -0
  132. package/dist/sensor-dashboard.d.ts +845 -0
  133. package/dist/sensor-dashboard.d.ts.map +1 -0
  134. package/dist/server-management.d.ts +331 -0
  135. package/dist/server-management.d.ts.map +1 -0
  136. package/dist/smart-home.d.ts +861 -0
  137. package/dist/smart-home.d.ts.map +1 -0
  138. package/dist/spreadsheet.d.ts +1043 -0
  139. package/dist/spreadsheet.d.ts.map +1 -0
  140. package/dist/sql-editor.d.ts +402 -0
  141. package/dist/sql-editor.d.ts.map +1 -0
  142. package/dist/terminal.d.ts +245 -0
  143. package/dist/terminal.d.ts.map +1 -0
  144. package/dist/testing-qa.d.ts +1013 -0
  145. package/dist/testing-qa.d.ts.map +1 -0
  146. package/dist/torrent-client.d.ts +298 -0
  147. package/dist/torrent-client.d.ts.map +1 -0
  148. package/dist/traceless.d.ts +759 -0
  149. package/dist/traceless.d.ts.map +1 -0
  150. package/dist/virtual-machines.d.ts +199 -0
  151. package/dist/virtual-machines.d.ts.map +1 -0
  152. package/dist/visual-scripting.d.ts +381 -0
  153. package/dist/visual-scripting.d.ts.map +1 -0
  154. package/dist/word-processor.d.ts +1124 -0
  155. package/dist/word-processor.d.ts.map +1 -0
  156. package/dist/workspace.d.ts +333 -0
  157. package/dist/workspace.d.ts.map +1 -0
  158. package/package.json +62 -0
@@ -0,0 +1,1238 @@
1
+ /**
2
+ * @file dashboard-designer.ts
3
+ * @module @nice2dev/ui-tools
4
+ * @description PRO-15.1 — Dashboard Designer
5
+ *
6
+ * Types for dashboard designer: drag-drop dashboard builder, widgets, data connections,
7
+ * real-time updates, filters, drill-down, themes, sharing, embedding, alerts.
8
+ */
9
+ /** Time range preset */
10
+ export type TimeRangePreset = 'today' | 'yesterday' | 'last7days' | 'last30days' | 'last90days' | 'lastMonth' | 'lastQuarter' | 'lastYear' | 'thisMonth' | 'thisQuarter' | 'thisYear' | 'custom';
11
+ /** Refresh interval */
12
+ export type RefreshInterval = 'off' | '5s' | '10s' | '30s' | '1m' | '5m' | '15m' | '30m' | '1h';
13
+ /** Dashboard layout mode */
14
+ export type LayoutMode = 'grid' | 'freeform' | 'responsive';
15
+ /** Dashboard designer configuration */
16
+ export interface DashboardDesignerConfig {
17
+ /** Initial dashboard */
18
+ dashboard?: Dashboard;
19
+ /** Editor mode */
20
+ mode?: DashboardEditorMode;
21
+ /** Theme */
22
+ theme?: DashboardTheme;
23
+ /** Locale */
24
+ locale?: string;
25
+ /** Available widgets */
26
+ widgets?: WidgetDefinition[];
27
+ /** Custom widgets */
28
+ customWidgets?: CustomWidgetDefinition[];
29
+ /** Data sources */
30
+ dataSources?: DashboardDataSource[];
31
+ /** Enable real-time updates */
32
+ realtime?: boolean;
33
+ /** Default refresh interval */
34
+ refreshInterval?: RefreshInterval;
35
+ /** Enable collaboration */
36
+ collaboration?: boolean;
37
+ /** Enable comments */
38
+ comments?: boolean;
39
+ /** Enable version history */
40
+ versionHistory?: boolean;
41
+ /** Toolbar configuration */
42
+ toolbar?: DashboardToolbarConfig;
43
+ /** Sidebar configuration */
44
+ sidebar?: DashboardSidebarConfig;
45
+ /** Layout configuration */
46
+ layout?: DashboardLayoutConfig;
47
+ /** Export options */
48
+ exportOptions?: DashboardExportOptions;
49
+ /** Embedding options */
50
+ embedOptions?: DashboardEmbedOptions;
51
+ /** Alert configuration */
52
+ alertConfig?: DashboardAlertConfig;
53
+ }
54
+ /** Dashboard editor mode */
55
+ export type DashboardEditorMode = 'edit' | 'preview' | 'view';
56
+ /** Dashboard theme */
57
+ export interface DashboardTheme {
58
+ name?: string;
59
+ primary?: string;
60
+ secondary?: string;
61
+ background?: string;
62
+ surface?: string;
63
+ text?: string;
64
+ border?: string;
65
+ grid?: string;
66
+ accent?: string;
67
+ error?: string;
68
+ warning?: string;
69
+ success?: string;
70
+ info?: string;
71
+ chart?: ChartColorPalette;
72
+ }
73
+ /** Chart color palette */
74
+ export interface ChartColorPalette {
75
+ colors: string[];
76
+ gradients?: GradientConfig[];
77
+ }
78
+ /** Gradient configuration */
79
+ export interface GradientConfig {
80
+ id: string;
81
+ type: 'linear' | 'radial';
82
+ stops: GradientStop[];
83
+ angle?: number;
84
+ }
85
+ /** Gradient stop */
86
+ export interface GradientStop {
87
+ offset: number;
88
+ color: string;
89
+ }
90
+ /** Dashboard toolbar configuration */
91
+ export interface DashboardToolbarConfig {
92
+ visible?: boolean;
93
+ items?: DashboardToolbarItem[];
94
+ customItems?: CustomToolbarItem[];
95
+ }
96
+ /** Dashboard toolbar item */
97
+ export type DashboardToolbarItem = 'save' | 'undo' | 'redo' | 'preview' | 'share' | 'export' | 'fullscreen' | 'refresh' | 'timeRange' | 'filters' | 'addWidget' | 'settings' | 'separator';
98
+ /** Custom toolbar item */
99
+ export interface CustomToolbarItem {
100
+ id: string;
101
+ label?: string;
102
+ icon?: string;
103
+ tooltip?: string;
104
+ handler: () => void;
105
+ disabled?: boolean;
106
+ position?: number;
107
+ }
108
+ /** Dashboard sidebar configuration */
109
+ export interface DashboardSidebarConfig {
110
+ visible?: boolean;
111
+ position?: 'left' | 'right';
112
+ width?: number;
113
+ tabs?: ('widgets' | 'data' | 'filters' | 'style' | 'settings')[];
114
+ }
115
+ /** Dashboard layout configuration */
116
+ export interface DashboardLayoutConfig {
117
+ mode?: LayoutMode;
118
+ columns?: number;
119
+ rowHeight?: number;
120
+ margin?: [number, number];
121
+ containerPadding?: [number, number];
122
+ compactType?: 'vertical' | 'horizontal' | null;
123
+ preventCollision?: boolean;
124
+ isDraggable?: boolean;
125
+ isResizable?: boolean;
126
+ breakpoints?: LayoutBreakpoint[];
127
+ }
128
+ /** Layout breakpoint */
129
+ export interface LayoutBreakpoint {
130
+ name: string;
131
+ width: number;
132
+ columns: number;
133
+ }
134
+ /** Dashboard export options */
135
+ export interface DashboardExportOptions {
136
+ formats?: DashboardExportFormat[];
137
+ pageSize?: PageSize;
138
+ orientation?: 'portrait' | 'landscape';
139
+ includeFilters?: boolean;
140
+ includeTimestamp?: boolean;
141
+ customHeader?: string;
142
+ customFooter?: string;
143
+ }
144
+ /** Dashboard export format */
145
+ export type DashboardExportFormat = 'pdf' | 'png' | 'svg' | 'csv' | 'xlsx' | 'json';
146
+ /** Page size */
147
+ export type PageSize = 'a4' | 'a3' | 'letter' | 'legal' | 'tabloid' | 'custom';
148
+ /** Dashboard embed options */
149
+ export interface DashboardEmbedOptions {
150
+ enabled?: boolean;
151
+ allowedDomains?: string[];
152
+ showToolbar?: boolean;
153
+ showFilters?: boolean;
154
+ interactivity?: 'full' | 'limited' | 'none';
155
+ authentication?: EmbedAuthentication;
156
+ }
157
+ /** Embed authentication */
158
+ export interface EmbedAuthentication {
159
+ type: 'token' | 'jwt' | 'apiKey' | 'none';
160
+ tokenParam?: string;
161
+ expiry?: number;
162
+ }
163
+ /** Dashboard alert configuration */
164
+ export interface DashboardAlertConfig {
165
+ enabled?: boolean;
166
+ channels?: AlertChannel[];
167
+ throttle?: number;
168
+ quietHours?: QuietHours;
169
+ }
170
+ /** Alert channel */
171
+ export interface AlertChannel {
172
+ type: 'email' | 'slack' | 'teams' | 'webhook' | 'sms' | 'push';
173
+ config: Record<string, unknown>;
174
+ enabled?: boolean;
175
+ }
176
+ /** Quiet hours */
177
+ export interface QuietHours {
178
+ enabled: boolean;
179
+ start: string;
180
+ end: string;
181
+ timezone: string;
182
+ days?: number[];
183
+ }
184
+ /** Dashboard */
185
+ export interface Dashboard {
186
+ id: string;
187
+ name: string;
188
+ description?: string;
189
+ widgets: DashboardWidget[];
190
+ layout?: DashboardLayout;
191
+ filters?: DashboardFilter[];
192
+ parameters?: DashboardParameter[];
193
+ dataSources?: DashboardDataSource[];
194
+ theme?: DashboardTheme;
195
+ settings?: DashboardSettings;
196
+ metadata?: DashboardMetadata;
197
+ version?: string;
198
+ }
199
+ /** Dashboard layout */
200
+ export interface DashboardLayout {
201
+ mode: LayoutMode;
202
+ items: LayoutItem[];
203
+ breakpoints?: LayoutBreakpointConfig[];
204
+ }
205
+ /** Layout item */
206
+ export interface LayoutItem {
207
+ widgetId: string;
208
+ x: number;
209
+ y: number;
210
+ w: number;
211
+ h: number;
212
+ minW?: number;
213
+ minH?: number;
214
+ maxW?: number;
215
+ maxH?: number;
216
+ static?: boolean;
217
+ }
218
+ /** Layout breakpoint config */
219
+ export interface LayoutBreakpointConfig {
220
+ breakpoint: string;
221
+ items: LayoutItem[];
222
+ }
223
+ /** Dashboard settings */
224
+ export interface DashboardSettings {
225
+ autoRefresh?: boolean;
226
+ refreshInterval?: RefreshInterval;
227
+ defaultTimeRange?: TimeRange;
228
+ timezone?: string;
229
+ dateFormat?: string;
230
+ numberFormat?: NumberFormat;
231
+ allowDrillDown?: boolean;
232
+ allowExport?: boolean;
233
+ allowFiltering?: boolean;
234
+ cacheEnabled?: boolean;
235
+ cacheTTL?: number;
236
+ }
237
+ /** Time range */
238
+ export interface TimeRange {
239
+ preset?: TimeRangePreset;
240
+ start?: Date | string;
241
+ end?: Date | string;
242
+ relative?: RelativeTime;
243
+ }
244
+ /** Relative time */
245
+ export interface RelativeTime {
246
+ value: number;
247
+ unit: 'minutes' | 'hours' | 'days' | 'weeks' | 'months' | 'years';
248
+ }
249
+ /** Number format */
250
+ export interface NumberFormat {
251
+ locale?: string;
252
+ notation?: 'standard' | 'scientific' | 'engineering' | 'compact';
253
+ minimumFractionDigits?: number;
254
+ maximumFractionDigits?: number;
255
+ useGrouping?: boolean;
256
+ currency?: string;
257
+ currencyDisplay?: 'symbol' | 'narrowSymbol' | 'code' | 'name';
258
+ }
259
+ /** Dashboard metadata */
260
+ export interface DashboardMetadata {
261
+ created?: Date;
262
+ createdBy?: string;
263
+ modified?: Date;
264
+ modifiedBy?: string;
265
+ published?: boolean;
266
+ publishedDate?: Date;
267
+ status?: 'draft' | 'review' | 'approved' | 'published' | 'archived';
268
+ category?: string;
269
+ tags?: string[];
270
+ folder?: string;
271
+ thumbnail?: string;
272
+ views?: number;
273
+ favorites?: number;
274
+ sharing?: DashboardSharing;
275
+ }
276
+ /** Dashboard sharing */
277
+ export interface DashboardSharing {
278
+ visibility: 'private' | 'team' | 'organization' | 'public';
279
+ sharedWith?: SharedUser[];
280
+ link?: ShareLink;
281
+ embedCode?: string;
282
+ }
283
+ /** Shared user */
284
+ export interface SharedUser {
285
+ id: string;
286
+ email?: string;
287
+ name?: string;
288
+ role: 'viewer' | 'editor' | 'admin';
289
+ addedAt?: Date;
290
+ addedBy?: string;
291
+ }
292
+ /** Share link */
293
+ export interface ShareLink {
294
+ url: string;
295
+ token?: string;
296
+ expiry?: Date;
297
+ password?: boolean;
298
+ views?: number;
299
+ maxViews?: number;
300
+ }
301
+ /** Dashboard widget */
302
+ export interface DashboardWidget {
303
+ id: string;
304
+ type: WidgetType;
305
+ title?: string;
306
+ subtitle?: string;
307
+ description?: string;
308
+ dataSource?: WidgetDataSource;
309
+ config: WidgetConfig;
310
+ style?: WidgetStyle;
311
+ interactions?: WidgetInteraction[];
312
+ alerts?: WidgetAlert[];
313
+ visible?: boolean;
314
+ locked?: boolean;
315
+ }
316
+ /** Widget type */
317
+ export type WidgetType = 'chart' | 'table' | 'kpi' | 'gauge' | 'map' | 'text' | 'image' | 'iframe' | 'filter' | 'list' | 'calendar' | 'timeline' | 'heatmap' | 'treemap' | 'sankey' | 'funnel' | 'scorecard' | 'custom';
318
+ /** Widget data source */
319
+ export interface WidgetDataSource {
320
+ type: 'query' | 'api' | 'static' | 'formula' | 'stream';
321
+ sourceId?: string;
322
+ query?: DataQuery;
323
+ apiConfig?: ApiDataConfig;
324
+ staticData?: unknown;
325
+ formula?: string;
326
+ streamConfig?: StreamConfig;
327
+ refresh?: WidgetRefreshConfig;
328
+ cache?: WidgetCacheConfig;
329
+ }
330
+ /** Data query */
331
+ export interface DataQuery {
332
+ dimensions?: QueryDimension[];
333
+ measures?: QueryMeasure[];
334
+ filters?: QueryFilter[];
335
+ sort?: QuerySort[];
336
+ limit?: number;
337
+ offset?: number;
338
+ timeDimension?: TimeDimension;
339
+ segments?: string[];
340
+ }
341
+ /** Query dimension */
342
+ export interface QueryDimension {
343
+ field: string;
344
+ alias?: string;
345
+ granularity?: 'second' | 'minute' | 'hour' | 'day' | 'week' | 'month' | 'quarter' | 'year';
346
+ }
347
+ /** Query measure */
348
+ export interface QueryMeasure {
349
+ field: string;
350
+ aggregation: AggregationType;
351
+ alias?: string;
352
+ format?: string;
353
+ }
354
+ /** Aggregation type */
355
+ export type AggregationType = 'sum' | 'count' | 'countDistinct' | 'avg' | 'min' | 'max' | 'median' | 'percentile' | 'stddev' | 'variance' | 'first' | 'last';
356
+ /** Query filter */
357
+ export interface QueryFilter {
358
+ field: string;
359
+ operator: FilterOperator;
360
+ value: unknown;
361
+ and?: QueryFilter[];
362
+ or?: QueryFilter[];
363
+ }
364
+ /** Filter operator */
365
+ export type FilterOperator = 'equals' | 'notEquals' | 'contains' | 'notContains' | 'startsWith' | 'endsWith' | 'greaterThan' | 'greaterThanOrEqual' | 'lessThan' | 'lessThanOrEqual' | 'between' | 'notBetween' | 'in' | 'notIn' | 'isNull' | 'isNotNull' | 'beforeDate' | 'afterDate' | 'inDateRange';
366
+ /** Query sort */
367
+ export interface QuerySort {
368
+ field: string;
369
+ direction: 'asc' | 'desc';
370
+ }
371
+ /** Time dimension */
372
+ export interface TimeDimension {
373
+ field: string;
374
+ granularity?: string;
375
+ dateRange?: [string, string] | string;
376
+ }
377
+ /** API data config */
378
+ export interface ApiDataConfig {
379
+ url: string;
380
+ method?: 'GET' | 'POST';
381
+ headers?: Record<string, string>;
382
+ body?: unknown;
383
+ responseMapping?: ResponseMapping;
384
+ authentication?: ApiAuthentication;
385
+ }
386
+ /** Response mapping */
387
+ export interface ResponseMapping {
388
+ dataPath?: string;
389
+ fields?: FieldMapping[];
390
+ }
391
+ /** Field mapping */
392
+ export interface FieldMapping {
393
+ source: string;
394
+ target: string;
395
+ transform?: string;
396
+ }
397
+ /** API authentication */
398
+ export interface ApiAuthentication {
399
+ type: 'none' | 'basic' | 'bearer' | 'apiKey' | 'oauth2';
400
+ credentials?: Record<string, string>;
401
+ }
402
+ /** Stream config */
403
+ export interface StreamConfig {
404
+ type: 'websocket' | 'sse' | 'polling';
405
+ url: string;
406
+ messageType?: string;
407
+ reconnect?: boolean;
408
+ reconnectInterval?: number;
409
+ }
410
+ /** Widget refresh config */
411
+ export interface WidgetRefreshConfig {
412
+ enabled?: boolean;
413
+ interval?: number;
414
+ onFilterChange?: boolean;
415
+ onTimeRangeChange?: boolean;
416
+ }
417
+ /** Widget cache config */
418
+ export interface WidgetCacheConfig {
419
+ enabled?: boolean;
420
+ ttl?: number;
421
+ key?: string;
422
+ }
423
+ /** Widget configuration */
424
+ export type WidgetConfig = ChartWidgetConfig | TableWidgetConfig | KPIWidgetConfig | GaugeWidgetConfig | MapWidgetConfig | TextWidgetConfig | ImageWidgetConfig | IframeWidgetConfig | FilterWidgetConfig | ListWidgetConfig | CalendarWidgetConfig | TimelineWidgetConfig | HeatmapWidgetConfig | TreemapWidgetConfig | SankeyWidgetConfig | FunnelWidgetConfig | ScorecardWidgetConfig | CustomWidgetConfig;
425
+ /** Chart widget config */
426
+ export interface ChartWidgetConfig {
427
+ chartType: ChartType;
428
+ series: ChartSeries[];
429
+ xAxis?: AxisConfig;
430
+ yAxis?: AxisConfig | AxisConfig[];
431
+ legend?: LegendConfig;
432
+ tooltip?: TooltipConfig;
433
+ animation?: AnimationConfig;
434
+ colors?: string[];
435
+ stacked?: boolean;
436
+ normalized?: boolean;
437
+ showDataLabels?: boolean;
438
+ }
439
+ /** Chart type */
440
+ export type ChartType = 'line' | 'area' | 'bar' | 'column' | 'pie' | 'donut' | 'scatter' | 'bubble' | 'radar' | 'polar' | 'heatmap' | 'treemap' | 'sankey' | 'funnel' | 'waterfall' | 'boxplot' | 'candlestick' | 'histogram' | 'combination';
441
+ /** Chart series */
442
+ export interface ChartSeries {
443
+ name: string;
444
+ field: string;
445
+ type?: ChartType;
446
+ color?: string;
447
+ yAxisIndex?: number;
448
+ smooth?: boolean;
449
+ showSymbol?: boolean;
450
+ areaStyle?: AreaStyle;
451
+ lineStyle?: LineStyle;
452
+ itemStyle?: ItemStyle;
453
+ }
454
+ /** Area style */
455
+ export interface AreaStyle {
456
+ opacity?: number;
457
+ color?: string | GradientConfig;
458
+ }
459
+ /** Line style */
460
+ export interface LineStyle {
461
+ width?: number;
462
+ type?: 'solid' | 'dashed' | 'dotted';
463
+ color?: string;
464
+ }
465
+ /** Item style */
466
+ export interface ItemStyle {
467
+ color?: string;
468
+ borderColor?: string;
469
+ borderWidth?: number;
470
+ borderRadius?: number;
471
+ }
472
+ /** Axis config */
473
+ export interface AxisConfig {
474
+ show?: boolean;
475
+ name?: string;
476
+ type?: 'category' | 'value' | 'time' | 'log';
477
+ position?: 'top' | 'bottom' | 'left' | 'right';
478
+ min?: number | 'auto';
479
+ max?: number | 'auto';
480
+ splitNumber?: number;
481
+ axisLine?: AxisLine;
482
+ axisTick?: AxisTick;
483
+ axisLabel?: AxisLabel;
484
+ splitLine?: SplitLine;
485
+ }
486
+ /** Axis line */
487
+ export interface AxisLine {
488
+ show?: boolean;
489
+ lineStyle?: LineStyle;
490
+ }
491
+ /** Axis tick */
492
+ export interface AxisTick {
493
+ show?: boolean;
494
+ alignWithLabel?: boolean;
495
+ }
496
+ /** Axis label */
497
+ export interface AxisLabel {
498
+ show?: boolean;
499
+ rotate?: number;
500
+ formatter?: string;
501
+ }
502
+ /** Split line */
503
+ export interface SplitLine {
504
+ show?: boolean;
505
+ lineStyle?: LineStyle;
506
+ }
507
+ /** Legend config */
508
+ export interface LegendConfig {
509
+ show?: boolean;
510
+ position?: 'top' | 'bottom' | 'left' | 'right';
511
+ orient?: 'horizontal' | 'vertical';
512
+ align?: 'left' | 'center' | 'right';
513
+ }
514
+ /** Tooltip config */
515
+ export interface TooltipConfig {
516
+ show?: boolean;
517
+ trigger?: 'item' | 'axis' | 'none';
518
+ formatter?: string;
519
+ backgroundColor?: string;
520
+ borderColor?: string;
521
+ textStyle?: TextStyle;
522
+ }
523
+ /** Text style */
524
+ export interface TextStyle {
525
+ color?: string;
526
+ fontSize?: number;
527
+ fontWeight?: string | number;
528
+ fontFamily?: string;
529
+ }
530
+ /** Animation config */
531
+ export interface AnimationConfig {
532
+ enabled?: boolean;
533
+ duration?: number;
534
+ easing?: string;
535
+ delay?: number;
536
+ }
537
+ /** Table widget config */
538
+ export interface TableWidgetConfig {
539
+ columns: TableColumn[];
540
+ pagination?: TablePagination;
541
+ sorting?: TableSorting;
542
+ filtering?: TableFiltering;
543
+ selection?: TableSelection;
544
+ rowActions?: RowAction[];
545
+ density?: 'compact' | 'standard' | 'comfortable';
546
+ striped?: boolean;
547
+ bordered?: boolean;
548
+ sticky?: 'header' | 'column' | 'both' | 'none';
549
+ expandable?: ExpandableConfig;
550
+ grouping?: GroupingConfig;
551
+ }
552
+ /** Table column */
553
+ export interface TableColumn {
554
+ field: string;
555
+ header: string;
556
+ width?: number | string;
557
+ minWidth?: number;
558
+ maxWidth?: number;
559
+ align?: 'left' | 'center' | 'right';
560
+ sortable?: boolean;
561
+ filterable?: boolean;
562
+ hidden?: boolean;
563
+ pinned?: 'left' | 'right';
564
+ format?: ColumnFormat;
565
+ cellRenderer?: string;
566
+ aggregation?: AggregationType;
567
+ }
568
+ /** Column format */
569
+ export interface ColumnFormat {
570
+ type: 'text' | 'number' | 'currency' | 'percentage' | 'date' | 'datetime' | 'boolean' | 'link' | 'image' | 'badge' | 'progress' | 'sparkline' | 'custom';
571
+ pattern?: string;
572
+ locale?: string;
573
+ currency?: string;
574
+ trueLabel?: string;
575
+ falseLabel?: string;
576
+ customFormatter?: string;
577
+ }
578
+ /** Table pagination */
579
+ export interface TablePagination {
580
+ enabled?: boolean;
581
+ pageSize?: number;
582
+ pageSizeOptions?: number[];
583
+ showTotal?: boolean;
584
+ }
585
+ /** Table sorting */
586
+ export interface TableSorting {
587
+ enabled?: boolean;
588
+ multi?: boolean;
589
+ defaultSort?: QuerySort[];
590
+ }
591
+ /** Table filtering */
592
+ export interface TableFiltering {
593
+ enabled?: boolean;
594
+ inline?: boolean;
595
+ quickFilter?: boolean;
596
+ }
597
+ /** Table selection */
598
+ export interface TableSelection {
599
+ enabled?: boolean;
600
+ mode?: 'single' | 'multiple';
601
+ checkbox?: boolean;
602
+ }
603
+ /** Row action */
604
+ export interface RowAction {
605
+ id: string;
606
+ label: string;
607
+ icon?: string;
608
+ handler?: string;
609
+ visible?: string;
610
+ disabled?: string;
611
+ }
612
+ /** Expandable config */
613
+ export interface ExpandableConfig {
614
+ enabled: boolean;
615
+ renderer?: string;
616
+ detailWidget?: string;
617
+ }
618
+ /** Grouping config */
619
+ export interface GroupingConfig {
620
+ enabled: boolean;
621
+ fields?: string[];
622
+ expanded?: boolean;
623
+ aggregations?: GroupAggregation[];
624
+ }
625
+ /** Group aggregation */
626
+ export interface GroupAggregation {
627
+ field: string;
628
+ aggregation: AggregationType;
629
+ label?: string;
630
+ }
631
+ /** KPI widget config */
632
+ export interface KPIWidgetConfig {
633
+ value: KPIValue;
634
+ comparison?: KPIComparison;
635
+ trend?: KPITrend;
636
+ sparkline?: SparklineConfig;
637
+ icon?: string;
638
+ format?: NumberFormat;
639
+ thresholds?: KPIThreshold[];
640
+ }
641
+ /** KPI value */
642
+ export interface KPIValue {
643
+ field: string;
644
+ aggregation?: AggregationType;
645
+ prefix?: string;
646
+ suffix?: string;
647
+ }
648
+ /** KPI comparison */
649
+ export interface KPIComparison {
650
+ type: 'previousPeriod' | 'previousYear' | 'target' | 'custom';
651
+ value?: number;
652
+ label?: string;
653
+ showPercentage?: boolean;
654
+ invertColors?: boolean;
655
+ }
656
+ /** KPI trend */
657
+ export interface KPITrend {
658
+ field: string;
659
+ periods?: number;
660
+ showDirection?: boolean;
661
+ }
662
+ /** Sparkline config */
663
+ export interface SparklineConfig {
664
+ type: 'line' | 'area' | 'bar';
665
+ field: string;
666
+ height?: number;
667
+ color?: string;
668
+ }
669
+ /** KPI threshold */
670
+ export interface KPIThreshold {
671
+ value: number;
672
+ color: string;
673
+ label?: string;
674
+ }
675
+ /** Gauge widget config */
676
+ export interface GaugeWidgetConfig {
677
+ value: GaugeValue;
678
+ min?: number;
679
+ max?: number;
680
+ ranges?: GaugeRange[];
681
+ format?: NumberFormat;
682
+ showValue?: boolean;
683
+ showLabels?: boolean;
684
+ animation?: boolean;
685
+ arcWidth?: number;
686
+ type?: 'semicircle' | 'full' | 'linear';
687
+ }
688
+ /** Gauge value */
689
+ export interface GaugeValue {
690
+ field: string;
691
+ aggregation?: AggregationType;
692
+ }
693
+ /** Gauge range */
694
+ export interface GaugeRange {
695
+ from: number;
696
+ to: number;
697
+ color: string;
698
+ label?: string;
699
+ }
700
+ /** Map widget config */
701
+ export interface MapWidgetConfig {
702
+ type: 'choropleth' | 'bubble' | 'heatmap' | 'marker' | 'flow';
703
+ geoField: string;
704
+ valueField?: string;
705
+ latField?: string;
706
+ lngField?: string;
707
+ sizeField?: string;
708
+ colorField?: string;
709
+ mapType?: 'world' | 'country' | 'state' | 'custom';
710
+ region?: string;
711
+ zoom?: number;
712
+ center?: [number, number];
713
+ colorScale?: string[];
714
+ legend?: LegendConfig;
715
+ tooltip?: TooltipConfig;
716
+ markerCluster?: boolean;
717
+ }
718
+ /** Text widget config */
719
+ export interface TextWidgetConfig {
720
+ content: string;
721
+ format?: 'plain' | 'markdown' | 'html';
722
+ align?: 'left' | 'center' | 'right';
723
+ verticalAlign?: 'top' | 'middle' | 'bottom';
724
+ fontSize?: number;
725
+ fontWeight?: string | number;
726
+ fontFamily?: string;
727
+ color?: string;
728
+ backgroundColor?: string;
729
+ padding?: number | string;
730
+ }
731
+ /** Image widget config */
732
+ export interface ImageWidgetConfig {
733
+ src: string;
734
+ alt?: string;
735
+ fit?: 'contain' | 'cover' | 'fill' | 'none' | 'scale-down';
736
+ position?: string;
737
+ link?: string;
738
+ caption?: string;
739
+ }
740
+ /** Iframe widget config */
741
+ export interface IframeWidgetConfig {
742
+ src: string;
743
+ sandbox?: string;
744
+ allow?: string;
745
+ loading?: 'eager' | 'lazy';
746
+ }
747
+ /** Filter widget config */
748
+ export interface FilterWidgetConfig {
749
+ filterType: 'select' | 'multiSelect' | 'dateRange' | 'slider' | 'search' | 'checkbox' | 'radio';
750
+ field: string;
751
+ label?: string;
752
+ placeholder?: string;
753
+ options?: FilterOption[];
754
+ optionsSource?: WidgetDataSource;
755
+ defaultValue?: unknown;
756
+ clearable?: boolean;
757
+ affects?: string[];
758
+ }
759
+ /** Filter option */
760
+ export interface FilterOption {
761
+ value: unknown;
762
+ label: string;
763
+ icon?: string;
764
+ color?: string;
765
+ }
766
+ /** List widget config */
767
+ export interface ListWidgetConfig {
768
+ itemTemplate: string;
769
+ emptyMessage?: string;
770
+ maxItems?: number;
771
+ showMore?: boolean;
772
+ clickAction?: DrillDownAction;
773
+ }
774
+ /** Calendar widget config */
775
+ export interface CalendarWidgetConfig {
776
+ dateField: string;
777
+ titleField?: string;
778
+ colorField?: string;
779
+ view?: 'month' | 'week' | 'day' | 'agenda';
780
+ firstDayOfWeek?: number;
781
+ showWeekNumbers?: boolean;
782
+ eventClick?: DrillDownAction;
783
+ }
784
+ /** Timeline widget config */
785
+ export interface TimelineWidgetConfig {
786
+ dateField: string;
787
+ titleField: string;
788
+ descriptionField?: string;
789
+ iconField?: string;
790
+ colorField?: string;
791
+ orientation?: 'vertical' | 'horizontal';
792
+ alternating?: boolean;
793
+ }
794
+ /** Heatmap widget config */
795
+ export interface HeatmapWidgetConfig {
796
+ xField: string;
797
+ yField: string;
798
+ valueField: string;
799
+ colorScale?: string[];
800
+ showLabels?: boolean;
801
+ tooltip?: TooltipConfig;
802
+ }
803
+ /** Treemap widget config */
804
+ export interface TreemapWidgetConfig {
805
+ hierarchyFields: string[];
806
+ valueField: string;
807
+ colorField?: string;
808
+ labelField?: string;
809
+ colorScale?: string[];
810
+ showBreadcrumb?: boolean;
811
+ drillDown?: boolean;
812
+ }
813
+ /** Sankey widget config */
814
+ export interface SankeyWidgetConfig {
815
+ sourceField: string;
816
+ targetField: string;
817
+ valueField: string;
818
+ nodeAlign?: 'left' | 'right' | 'center' | 'justify';
819
+ nodeWidth?: number;
820
+ nodePadding?: number;
821
+ linkOpacity?: number;
822
+ }
823
+ /** Funnel widget config */
824
+ export interface FunnelWidgetConfig {
825
+ labelField: string;
826
+ valueField: string;
827
+ sort?: 'descending' | 'ascending' | 'none';
828
+ labelPosition?: 'inside' | 'outside';
829
+ showConversion?: boolean;
830
+ colors?: string[];
831
+ }
832
+ /** Scorecard widget config */
833
+ export interface ScorecardWidgetConfig {
834
+ metrics: ScorecardMetric[];
835
+ layout?: 'horizontal' | 'vertical' | 'grid';
836
+ columns?: number;
837
+ }
838
+ /** Scorecard metric */
839
+ export interface ScorecardMetric {
840
+ label: string;
841
+ value: KPIValue;
842
+ comparison?: KPIComparison;
843
+ format?: NumberFormat;
844
+ icon?: string;
845
+ color?: string;
846
+ }
847
+ /** Custom widget config */
848
+ export interface CustomWidgetConfig {
849
+ customType: string;
850
+ options?: Record<string, unknown>;
851
+ }
852
+ /** Widget style */
853
+ export interface WidgetStyle {
854
+ backgroundColor?: string;
855
+ borderColor?: string;
856
+ borderWidth?: number;
857
+ borderRadius?: number;
858
+ boxShadow?: string;
859
+ padding?: number | string;
860
+ titleStyle?: TextStyle;
861
+ subtitleStyle?: TextStyle;
862
+ }
863
+ /** Widget interaction */
864
+ export interface WidgetInteraction {
865
+ type: 'click' | 'hover' | 'select' | 'doubleClick';
866
+ target?: string;
867
+ action: InteractionAction;
868
+ }
869
+ /** Interaction action */
870
+ export interface InteractionAction {
871
+ type: 'filter' | 'drillDown' | 'navigate' | 'openModal' | 'runQuery' | 'custom';
872
+ config: DrillDownAction | FilterAction | NavigateAction | ModalAction | QueryAction | CustomAction;
873
+ }
874
+ /** Drill down action */
875
+ export interface DrillDownAction {
876
+ dashboard?: string;
877
+ widget?: string;
878
+ parameters?: Record<string, string>;
879
+ newTab?: boolean;
880
+ }
881
+ /** Filter action */
882
+ export interface FilterAction {
883
+ field: string;
884
+ operator?: FilterOperator;
885
+ valueFrom?: string;
886
+ targets?: string[];
887
+ }
888
+ /** Navigate action */
889
+ export interface NavigateAction {
890
+ url: string;
891
+ parameters?: Record<string, string>;
892
+ newTab?: boolean;
893
+ }
894
+ /** Modal action */
895
+ export interface ModalAction {
896
+ title?: string;
897
+ widget?: string;
898
+ dashboard?: string;
899
+ width?: number | string;
900
+ height?: number | string;
901
+ }
902
+ /** Query action */
903
+ export interface QueryAction {
904
+ queryId: string;
905
+ parameters?: Record<string, string>;
906
+ }
907
+ /** Custom action */
908
+ export interface CustomAction {
909
+ handler: string;
910
+ parameters?: Record<string, unknown>;
911
+ }
912
+ /** Widget alert */
913
+ export interface WidgetAlert {
914
+ id: string;
915
+ name: string;
916
+ enabled: boolean;
917
+ condition: AlertCondition;
918
+ channels: string[];
919
+ message?: string;
920
+ severity?: 'info' | 'warning' | 'error' | 'critical';
921
+ cooldown?: number;
922
+ schedule?: AlertSchedule;
923
+ }
924
+ /** Alert condition */
925
+ export interface AlertCondition {
926
+ metric: string;
927
+ operator: FilterOperator;
928
+ threshold: number;
929
+ duration?: number;
930
+ aggregation?: AggregationType;
931
+ }
932
+ /** Alert schedule */
933
+ export interface AlertSchedule {
934
+ enabled: boolean;
935
+ cron?: string;
936
+ timezone?: string;
937
+ }
938
+ /** Widget definition */
939
+ export interface WidgetDefinition {
940
+ type: WidgetType;
941
+ name: string;
942
+ description?: string;
943
+ icon?: string;
944
+ category?: string;
945
+ defaultConfig: WidgetConfig;
946
+ configSchema?: WidgetConfigSchema;
947
+ thumbnail?: string;
948
+ }
949
+ /** Widget config schema */
950
+ export interface WidgetConfigSchema {
951
+ properties: ConfigProperty[];
952
+ groups?: ConfigPropertyGroup[];
953
+ }
954
+ /** Config property */
955
+ export interface ConfigProperty {
956
+ name: string;
957
+ label: string;
958
+ type: ConfigPropertyType;
959
+ defaultValue?: unknown;
960
+ required?: boolean;
961
+ options?: ConfigOption[];
962
+ min?: number;
963
+ max?: number;
964
+ group?: string;
965
+ description?: string;
966
+ advanced?: boolean;
967
+ dependsOn?: PropertyDependency;
968
+ }
969
+ /** Config property type */
970
+ export type ConfigPropertyType = 'string' | 'number' | 'boolean' | 'select' | 'multiSelect' | 'color' | 'icon' | 'field' | 'fieldList' | 'query' | 'json' | 'code';
971
+ /** Config option */
972
+ export interface ConfigOption {
973
+ value: unknown;
974
+ label: string;
975
+ icon?: string;
976
+ }
977
+ /** Config property group */
978
+ export interface ConfigPropertyGroup {
979
+ id: string;
980
+ label: string;
981
+ collapsed?: boolean;
982
+ }
983
+ /** Property dependency */
984
+ export interface PropertyDependency {
985
+ property: string;
986
+ operator: 'equals' | 'notEquals' | 'in' | 'notIn';
987
+ value: unknown;
988
+ }
989
+ /** Custom widget definition */
990
+ export interface CustomWidgetDefinition extends WidgetDefinition {
991
+ render: (props: CustomWidgetRenderProps) => unknown;
992
+ editor?: (props: CustomWidgetEditorProps) => unknown;
993
+ }
994
+ /** Custom widget render props */
995
+ export interface CustomWidgetRenderProps {
996
+ config: CustomWidgetConfig;
997
+ data: unknown;
998
+ width: number;
999
+ height: number;
1000
+ theme: DashboardTheme;
1001
+ }
1002
+ /** Custom widget editor props */
1003
+ export interface CustomWidgetEditorProps {
1004
+ config: CustomWidgetConfig;
1005
+ onChange: (config: CustomWidgetConfig) => void;
1006
+ }
1007
+ /** Dashboard filter */
1008
+ export interface DashboardFilter {
1009
+ id: string;
1010
+ field: string;
1011
+ label?: string;
1012
+ type: FilterWidgetType;
1013
+ defaultValue?: unknown;
1014
+ options?: FilterOption[];
1015
+ optionsQuery?: DataQuery;
1016
+ required?: boolean;
1017
+ multiple?: boolean;
1018
+ cascadeFrom?: string;
1019
+ affectsAll?: boolean;
1020
+ affects?: string[];
1021
+ visible?: boolean;
1022
+ }
1023
+ /** Filter widget type */
1024
+ export type FilterWidgetType = 'dropdown' | 'multiDropdown' | 'dateRange' | 'datePicker' | 'slider' | 'rangeSlider' | 'text' | 'checkbox' | 'radio' | 'toggle' | 'custom';
1025
+ /** Dashboard parameter */
1026
+ export interface DashboardParameter {
1027
+ id: string;
1028
+ name: string;
1029
+ type: 'string' | 'number' | 'boolean' | 'date' | 'array';
1030
+ defaultValue?: unknown;
1031
+ source?: 'url' | 'filter' | 'user' | 'system';
1032
+ required?: boolean;
1033
+ }
1034
+ /** Dashboard data source */
1035
+ export interface DashboardDataSource {
1036
+ id: string;
1037
+ name: string;
1038
+ type: DataSourceType;
1039
+ connection: DataSourceConnection;
1040
+ schema?: DataSourceSchema;
1041
+ cacheConfig?: DataSourceCache;
1042
+ rateLimiting?: RateLimiting;
1043
+ }
1044
+ /** Data source type */
1045
+ export type DataSourceType = 'sql' | 'rest' | 'graphql' | 'mongodb' | 'elasticsearch' | 'bigquery' | 'snowflake' | 'redshift' | 'databricks' | 'athena' | 'clickhouse' | 'timescale' | 'influxdb' | 'prometheus' | 'csv' | 'json' | 'googleSheets' | 'airtable' | 'salesforce' | 'hubspot' | 'stripe' | 'custom';
1046
+ /** Data source connection */
1047
+ export interface DataSourceConnection {
1048
+ host?: string;
1049
+ port?: number;
1050
+ database?: string;
1051
+ username?: string;
1052
+ password?: string;
1053
+ ssl?: boolean;
1054
+ url?: string;
1055
+ apiKey?: string;
1056
+ authType?: 'none' | 'basic' | 'bearer' | 'oauth2' | 'apiKey';
1057
+ credentials?: Record<string, string>;
1058
+ options?: Record<string, unknown>;
1059
+ }
1060
+ /** Data source schema */
1061
+ export interface DataSourceSchema {
1062
+ tables?: TableSchema[];
1063
+ views?: ViewSchema[];
1064
+ procedures?: ProcedureSchema[];
1065
+ }
1066
+ /** Table schema */
1067
+ export interface TableSchema {
1068
+ name: string;
1069
+ schema?: string;
1070
+ columns: ColumnSchema[];
1071
+ primaryKey?: string[];
1072
+ foreignKeys?: ForeignKey[];
1073
+ }
1074
+ /** View schema */
1075
+ export interface ViewSchema {
1076
+ name: string;
1077
+ schema?: string;
1078
+ columns: ColumnSchema[];
1079
+ query?: string;
1080
+ }
1081
+ /** Column schema */
1082
+ export interface ColumnSchema {
1083
+ name: string;
1084
+ type: string;
1085
+ nullable?: boolean;
1086
+ defaultValue?: unknown;
1087
+ description?: string;
1088
+ }
1089
+ /** Foreign key */
1090
+ export interface ForeignKey {
1091
+ columns: string[];
1092
+ referencedTable: string;
1093
+ referencedColumns: string[];
1094
+ }
1095
+ /** Procedure schema */
1096
+ export interface ProcedureSchema {
1097
+ name: string;
1098
+ schema?: string;
1099
+ parameters: ProcedureParameter[];
1100
+ returnType?: string;
1101
+ }
1102
+ /** Procedure parameter */
1103
+ export interface ProcedureParameter {
1104
+ name: string;
1105
+ type: string;
1106
+ direction: 'in' | 'out' | 'inout';
1107
+ defaultValue?: unknown;
1108
+ }
1109
+ /** Data source cache */
1110
+ export interface DataSourceCache {
1111
+ enabled: boolean;
1112
+ ttl: number;
1113
+ maxSize?: number;
1114
+ invalidateOn?: string[];
1115
+ }
1116
+ /** Rate limiting */
1117
+ export interface RateLimiting {
1118
+ enabled: boolean;
1119
+ requestsPerSecond?: number;
1120
+ requestsPerMinute?: number;
1121
+ burstSize?: number;
1122
+ }
1123
+ /** Scheduled report */
1124
+ export interface ScheduledReport {
1125
+ id: string;
1126
+ dashboardId: string;
1127
+ name: string;
1128
+ enabled: boolean;
1129
+ schedule: ReportSchedule;
1130
+ format: DashboardExportFormat;
1131
+ filters?: Record<string, unknown>;
1132
+ recipients: ReportRecipient[];
1133
+ options?: ScheduledReportOptions;
1134
+ }
1135
+ /** Report schedule */
1136
+ export interface ReportSchedule {
1137
+ type: 'cron' | 'interval' | 'once';
1138
+ cron?: string;
1139
+ interval?: number;
1140
+ runAt?: Date;
1141
+ timezone?: string;
1142
+ }
1143
+ /** Report recipient */
1144
+ export interface ReportRecipient {
1145
+ type: 'email' | 'slack' | 'teams' | 'webhook' | 's3' | 'ftp';
1146
+ destination: string;
1147
+ config?: Record<string, unknown>;
1148
+ }
1149
+ /** Scheduled report options */
1150
+ export interface ScheduledReportOptions {
1151
+ timeRange?: TimeRange;
1152
+ pageSize?: PageSize;
1153
+ orientation?: 'portrait' | 'landscape';
1154
+ includeFilters?: boolean;
1155
+ includeTimestamp?: boolean;
1156
+ password?: string;
1157
+ compress?: boolean;
1158
+ }
1159
+ /** Dashboard annotation */
1160
+ export interface DashboardAnnotation {
1161
+ id: string;
1162
+ widgetId?: string;
1163
+ type: AnnotationType;
1164
+ content: string;
1165
+ author?: string;
1166
+ created?: Date;
1167
+ modified?: Date;
1168
+ position?: AnnotationPosition;
1169
+ timeRange?: TimeRange;
1170
+ visibility?: 'private' | 'team' | 'public';
1171
+ tags?: string[];
1172
+ }
1173
+ /** Annotation type */
1174
+ export type AnnotationType = 'note' | 'highlight' | 'marker' | 'range' | 'line' | 'region';
1175
+ /** Annotation position */
1176
+ export interface AnnotationPosition {
1177
+ x?: number;
1178
+ y?: number;
1179
+ x2?: number;
1180
+ y2?: number;
1181
+ dataPoint?: unknown;
1182
+ }
1183
+ /** Dashboard version */
1184
+ export interface DashboardVersion {
1185
+ id: string;
1186
+ dashboardId: string;
1187
+ version: number;
1188
+ name?: string;
1189
+ description?: string;
1190
+ dashboard: Dashboard;
1191
+ author?: string;
1192
+ created: Date;
1193
+ changes?: VersionChange[];
1194
+ tags?: string[];
1195
+ }
1196
+ /** Version change */
1197
+ export interface VersionChange {
1198
+ type: 'add' | 'remove' | 'modify';
1199
+ path: string;
1200
+ widgetId?: string;
1201
+ before?: unknown;
1202
+ after?: unknown;
1203
+ }
1204
+ /** Dashboard collaboration session */
1205
+ export interface DashboardCollaborationSession {
1206
+ id: string;
1207
+ dashboardId: string;
1208
+ users: CollaborationUser[];
1209
+ cursors: UserCursor[];
1210
+ selections: UserSelection[];
1211
+ version: number;
1212
+ lastModified: Date;
1213
+ }
1214
+ /** Collaboration user */
1215
+ export interface CollaborationUser {
1216
+ id: string;
1217
+ name: string;
1218
+ color: string;
1219
+ avatar?: string;
1220
+ online: boolean;
1221
+ lastActivity?: Date;
1222
+ }
1223
+ /** User cursor */
1224
+ export interface UserCursor {
1225
+ userId: string;
1226
+ widgetId?: string;
1227
+ x?: number;
1228
+ y?: number;
1229
+ timestamp: Date;
1230
+ }
1231
+ /** User selection */
1232
+ export interface UserSelection {
1233
+ userId: string;
1234
+ widgetId?: string;
1235
+ type?: 'widget' | 'range' | 'cell';
1236
+ timestamp: Date;
1237
+ }
1238
+ //# sourceMappingURL=dashboard-designer.d.ts.map