@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,1208 @@
1
+ /**
2
+ * @file self-service-analytics.ts
3
+ * @module @nice2dev/ui-tools
4
+ * @description PRO-15.5 — Self-Service Analytics
5
+ *
6
+ * Types for no-code analytics: natural language query, auto-visualization,
7
+ * data storytelling, explorations, metrics catalog, collaboration.
8
+ */
9
+ /** Analytics capability */
10
+ export type AnalyticsCapability = 'naturalLanguage' | 'autoVisualization' | 'dataStorytelling' | 'explorations' | 'metrics' | 'glossary' | 'collaboration' | 'certification';
11
+ /** Visualization mode */
12
+ export type VisualizationMode = 'auto' | 'manual' | 'guided' | 'assistant';
13
+ /** Data granularity */
14
+ export type DataGranularity = 'second' | 'minute' | 'hour' | 'day' | 'week' | 'month' | 'quarter' | 'year' | 'custom';
15
+ /** Sharing level */
16
+ export type SharingLevel = 'private' | 'team' | 'organization' | 'public';
17
+ /** Self-service analytics configuration */
18
+ export interface SelfServiceAnalyticsConfig {
19
+ /** Enabled capabilities */
20
+ capabilities?: AnalyticsCapability[];
21
+ /** Data sources */
22
+ dataSources?: AnalyticsDataSource[];
23
+ /** Theme */
24
+ theme?: AnalyticsTheme;
25
+ /** Locale */
26
+ locale?: string;
27
+ /** Natural language config */
28
+ nlQuery?: NaturalLanguageConfig;
29
+ /** Auto-visualization config */
30
+ autoViz?: AutoVisualizationConfig;
31
+ /** Storytelling config */
32
+ storytelling?: StorytellingConfig;
33
+ /** Glossary config */
34
+ glossary?: GlossaryConfig;
35
+ /** Metrics config */
36
+ metricsConfig?: MetricsConfig;
37
+ /** Collaboration config */
38
+ collaboration?: AnalyticsCollaborationConfig;
39
+ }
40
+ /** Analytics data source */
41
+ export interface AnalyticsDataSource {
42
+ id: string;
43
+ name: string;
44
+ type: DataSourceType;
45
+ connection?: AnalyticsConnection;
46
+ schema?: DataSchema;
47
+ permissions?: DataSourcePermission[];
48
+ certified?: boolean;
49
+ owner?: string;
50
+ description?: string;
51
+ tags?: string[];
52
+ }
53
+ /** Data source type */
54
+ export type DataSourceType = 'database' | 'warehouse' | 'spreadsheet' | 'api' | 'file' | 'stream' | 'semantic' | 'cube';
55
+ /** Analytics connection */
56
+ export interface AnalyticsConnection {
57
+ type: string;
58
+ host?: string;
59
+ port?: number;
60
+ database?: string;
61
+ schema?: string;
62
+ username?: string;
63
+ credentials?: CredentialReference;
64
+ options?: Record<string, unknown>;
65
+ }
66
+ /** Credential reference */
67
+ export interface CredentialReference {
68
+ type: 'stored' | 'oauth' | 'serviceAccount' | 'environment';
69
+ id?: string;
70
+ provider?: string;
71
+ }
72
+ /** Data schema */
73
+ export interface DataSchema {
74
+ tables: AnalyticsTable[];
75
+ relationships?: TableRelationship[];
76
+ metrics?: MetricDefinition[];
77
+ dimensions?: DimensionDefinition[];
78
+ }
79
+ /** Analytics table */
80
+ export interface AnalyticsTable {
81
+ id: string;
82
+ name: string;
83
+ displayName?: string;
84
+ description?: string;
85
+ columns: AnalyticsColumn[];
86
+ rowCount?: number;
87
+ certified?: boolean;
88
+ tags?: string[];
89
+ }
90
+ /** Analytics column */
91
+ export interface AnalyticsColumn {
92
+ id: string;
93
+ name: string;
94
+ displayName?: string;
95
+ description?: string;
96
+ dataType: AnalyticsDataType;
97
+ semanticType?: SemanticType;
98
+ format?: ColumnFormat;
99
+ nullable?: boolean;
100
+ unique?: boolean;
101
+ primaryKey?: boolean;
102
+ foreignKey?: ForeignKeyReference;
103
+ aggregation?: AggregationType;
104
+ certified?: boolean;
105
+ hidden?: boolean;
106
+ synonyms?: string[];
107
+ }
108
+ /** Analytics data type */
109
+ export type AnalyticsDataType = 'string' | 'number' | 'integer' | 'decimal' | 'boolean' | 'date' | 'datetime' | 'time' | 'timestamp' | 'json' | 'array' | 'geography' | 'binary';
110
+ /** Semantic type */
111
+ export type SemanticType = 'id' | 'name' | 'description' | 'email' | 'phone' | 'url' | 'address' | 'city' | 'state' | 'country' | 'postalCode' | 'latitude' | 'longitude' | 'currency' | 'percentage' | 'quantity' | 'price' | 'revenue' | 'cost' | 'date' | 'datetime' | 'duration' | 'status' | 'category' | 'tag' | 'image' | 'custom';
112
+ /** Column format */
113
+ export interface ColumnFormat {
114
+ type?: string;
115
+ pattern?: string;
116
+ locale?: string;
117
+ currency?: string;
118
+ decimals?: number;
119
+ prefix?: string;
120
+ suffix?: string;
121
+ }
122
+ /** Foreign key reference */
123
+ export interface ForeignKeyReference {
124
+ table: string;
125
+ column: string;
126
+ }
127
+ /** Aggregation type */
128
+ export type AggregationType = 'sum' | 'avg' | 'min' | 'max' | 'count' | 'countDistinct' | 'first' | 'last' | 'median' | 'mode' | 'stddev' | 'variance' | 'percentile' | 'custom';
129
+ /** Table relationship */
130
+ export interface TableRelationship {
131
+ id: string;
132
+ name?: string;
133
+ sourceTable: string;
134
+ sourceColumn: string;
135
+ targetTable: string;
136
+ targetColumn: string;
137
+ type: RelationshipType;
138
+ active?: boolean;
139
+ }
140
+ /** Relationship type */
141
+ export type RelationshipType = 'oneToOne' | 'oneToMany' | 'manyToOne' | 'manyToMany';
142
+ /** Data source permission */
143
+ export interface DataSourcePermission {
144
+ principal: string;
145
+ principalType: 'user' | 'group' | 'role';
146
+ level: 'read' | 'write' | 'admin';
147
+ columns?: string[];
148
+ rowFilter?: string;
149
+ }
150
+ /** Analytics theme */
151
+ export interface AnalyticsTheme {
152
+ name?: string;
153
+ colors?: ThemeColors;
154
+ fonts?: ThemeFonts;
155
+ spacing?: ThemeSpacing;
156
+ charts?: ChartTheme;
157
+ }
158
+ /** Theme colors */
159
+ export interface ThemeColors {
160
+ primary?: string;
161
+ secondary?: string;
162
+ background?: string;
163
+ surface?: string;
164
+ text?: string;
165
+ border?: string;
166
+ success?: string;
167
+ warning?: string;
168
+ error?: string;
169
+ info?: string;
170
+ palette?: string[];
171
+ }
172
+ /** Theme fonts */
173
+ export interface ThemeFonts {
174
+ heading?: string;
175
+ body?: string;
176
+ mono?: string;
177
+ sizes?: Record<string, string>;
178
+ }
179
+ /** Theme spacing */
180
+ export interface ThemeSpacing {
181
+ unit?: number;
182
+ scale?: number[];
183
+ }
184
+ /** Chart theme */
185
+ export interface ChartTheme {
186
+ colorPalette?: string[];
187
+ backgroundColor?: string;
188
+ gridColor?: string;
189
+ axisColor?: string;
190
+ labelColor?: string;
191
+ fontFamily?: string;
192
+ }
193
+ /** Natural language configuration */
194
+ export interface NaturalLanguageConfig {
195
+ enabled?: boolean;
196
+ model?: NLQModel;
197
+ training?: NLQTraining;
198
+ suggestions?: NLQSuggestions;
199
+ feedback?: NLQFeedback;
200
+ limits?: NLQLimits;
201
+ }
202
+ /** NLQ model */
203
+ export interface NLQModel {
204
+ provider: 'openai' | 'anthropic' | 'azure' | 'vertexai' | 'local';
205
+ modelId?: string;
206
+ apiKey?: string;
207
+ endpoint?: string;
208
+ temperature?: number;
209
+ maxTokens?: number;
210
+ }
211
+ /** NLQ training */
212
+ export interface NLQTraining {
213
+ examples?: NLQExample[];
214
+ synonyms?: SynonymMapping[];
215
+ customTerms?: CustomTerm[];
216
+ domainContext?: string;
217
+ }
218
+ /** NLQ example */
219
+ export interface NLQExample {
220
+ question: string;
221
+ query: string;
222
+ tables?: string[];
223
+ metrics?: string[];
224
+ }
225
+ /** Synonym mapping */
226
+ export interface SynonymMapping {
227
+ term: string;
228
+ synonyms: string[];
229
+ type: 'table' | 'column' | 'metric' | 'dimension' | 'value';
230
+ object?: string;
231
+ }
232
+ /** Custom term */
233
+ export interface CustomTerm {
234
+ term: string;
235
+ definition: string;
236
+ expression?: string;
237
+ type: 'measure' | 'calculation' | 'filter' | 'concept';
238
+ }
239
+ /** NLQ suggestions */
240
+ export interface NLQSuggestions {
241
+ enabled?: boolean;
242
+ maxSuggestions?: number;
243
+ includeExamples?: boolean;
244
+ includePopular?: boolean;
245
+ }
246
+ /** NLQ feedback */
247
+ export interface NLQFeedback {
248
+ enabled?: boolean;
249
+ collectExamples?: boolean;
250
+ improvementLoop?: boolean;
251
+ }
252
+ /** NLQ limits */
253
+ export interface NLQLimits {
254
+ maxQuestionLength?: number;
255
+ maxResultRows?: number;
256
+ timeout?: number;
257
+ dailyQueries?: number;
258
+ }
259
+ /** Natural language query request */
260
+ export interface NLQueryRequest {
261
+ question: string;
262
+ context?: NLQueryContext;
263
+ options?: NLQueryOptions;
264
+ }
265
+ /** NL query context */
266
+ export interface NLQueryContext {
267
+ dataSource?: string;
268
+ tables?: string[];
269
+ previousQueries?: string[];
270
+ filters?: Record<string, unknown>;
271
+ timeRange?: TimeRange;
272
+ }
273
+ /** Time range */
274
+ export interface TimeRange {
275
+ start?: Date;
276
+ end?: Date;
277
+ period?: string;
278
+ granularity?: DataGranularity;
279
+ }
280
+ /** NL query options */
281
+ export interface NLQueryOptions {
282
+ explain?: boolean;
283
+ suggestAlternatives?: boolean;
284
+ autoCorrect?: boolean;
285
+ limit?: number;
286
+ }
287
+ /** Natural language query response */
288
+ export interface NLQueryResponse {
289
+ success: boolean;
290
+ question: string;
291
+ interpretation?: QueryInterpretation;
292
+ query?: GeneratedQuery;
293
+ results?: QueryResults;
294
+ visualization?: SuggestedVisualization;
295
+ alternatives?: AlternativeQuery[];
296
+ clarifications?: Clarification[];
297
+ error?: NLQueryError;
298
+ }
299
+ /** Query interpretation */
300
+ export interface QueryInterpretation {
301
+ intent: QueryIntent;
302
+ entities: ExtractedEntity[];
303
+ confidence: number;
304
+ explanation?: string;
305
+ }
306
+ /** Query intent */
307
+ export interface QueryIntent {
308
+ type: 'aggregate' | 'filter' | 'compare' | 'trend' | 'breakdown' | 'list' | 'lookup';
309
+ metrics?: string[];
310
+ dimensions?: string[];
311
+ filters?: string[];
312
+ timeRange?: boolean;
313
+ groupBy?: boolean;
314
+ orderBy?: boolean;
315
+ }
316
+ /** Extracted entity */
317
+ export interface ExtractedEntity {
318
+ text: string;
319
+ type: EntityType;
320
+ value?: unknown;
321
+ table?: string;
322
+ column?: string;
323
+ confidence: number;
324
+ }
325
+ /** Entity type */
326
+ export type EntityType = 'metric' | 'dimension' | 'filter' | 'timeExpression' | 'aggregation' | 'comparison' | 'limit' | 'sort' | 'value' | 'operator';
327
+ /** Generated query */
328
+ export interface GeneratedQuery {
329
+ sql: string;
330
+ dataSource: string;
331
+ tables: string[];
332
+ columns: string[];
333
+ confidence: number;
334
+ }
335
+ /** Query results */
336
+ export interface QueryResults {
337
+ columns: ResultColumnInfo[];
338
+ rows: unknown[][];
339
+ rowCount: number;
340
+ truncated?: boolean;
341
+ executionTime?: number;
342
+ }
343
+ /** Result column info */
344
+ export interface ResultColumnInfo {
345
+ name: string;
346
+ displayName?: string;
347
+ dataType: AnalyticsDataType;
348
+ semanticType?: SemanticType;
349
+ format?: ColumnFormat;
350
+ aggregation?: AggregationType;
351
+ }
352
+ /** Suggested visualization */
353
+ export interface SuggestedVisualization {
354
+ type: VisualizationType;
355
+ config: VisualizationConfig;
356
+ alternatives?: VisualizationType[];
357
+ reasoning?: string;
358
+ }
359
+ /** Visualization type */
360
+ export type VisualizationType = 'table' | 'bar' | 'line' | 'area' | 'pie' | 'donut' | 'scatter' | 'bubble' | 'heatmap' | 'treemap' | 'funnel' | 'gauge' | 'kpi' | 'map' | 'sankey' | 'waterfall' | 'boxplot' | 'histogram' | 'radar' | 'combo';
361
+ /** Visualization config */
362
+ export interface VisualizationConfig {
363
+ type: VisualizationType;
364
+ title?: string;
365
+ xAxis?: AxisConfig;
366
+ yAxis?: AxisConfig;
367
+ series?: SeriesConfig[];
368
+ legend?: LegendConfig;
369
+ colors?: string[];
370
+ options?: Record<string, unknown>;
371
+ }
372
+ /** Axis config */
373
+ export interface AxisConfig {
374
+ field?: string;
375
+ label?: string;
376
+ type?: 'category' | 'value' | 'time' | 'log';
377
+ format?: string;
378
+ min?: number;
379
+ max?: number;
380
+ }
381
+ /** Series config */
382
+ export interface SeriesConfig {
383
+ field: string;
384
+ name?: string;
385
+ type?: string;
386
+ color?: string;
387
+ aggregation?: AggregationType;
388
+ }
389
+ /** Legend config */
390
+ export interface LegendConfig {
391
+ show?: boolean;
392
+ position?: 'top' | 'bottom' | 'left' | 'right';
393
+ orientation?: 'horizontal' | 'vertical';
394
+ }
395
+ /** Alternative query */
396
+ export interface AlternativeQuery {
397
+ question: string;
398
+ query: string;
399
+ explanation?: string;
400
+ }
401
+ /** Clarification */
402
+ export interface Clarification {
403
+ type: 'ambiguous' | 'missing' | 'suggestion';
404
+ message: string;
405
+ options?: ClarificationOption[];
406
+ }
407
+ /** Clarification option */
408
+ export interface ClarificationOption {
409
+ label: string;
410
+ value: string;
411
+ description?: string;
412
+ }
413
+ /** NL query error */
414
+ export interface NLQueryError {
415
+ code: string;
416
+ message: string;
417
+ suggestion?: string;
418
+ details?: Record<string, unknown>;
419
+ }
420
+ /** Auto-visualization configuration */
421
+ export interface AutoVisualizationConfig {
422
+ enabled?: boolean;
423
+ rules?: VisualizationRule[];
424
+ preferences?: VisualizationPreferences;
425
+ recommendations?: RecommendationConfig;
426
+ }
427
+ /** Visualization rule */
428
+ export interface VisualizationRule {
429
+ id: string;
430
+ name: string;
431
+ priority: number;
432
+ conditions: RuleCondition[];
433
+ visualization: VisualizationType;
434
+ config?: Partial<VisualizationConfig>;
435
+ }
436
+ /** Rule condition */
437
+ export interface RuleCondition {
438
+ type: ConditionType;
439
+ field?: string;
440
+ operator: ConditionOperator;
441
+ value?: unknown;
442
+ }
443
+ /** Condition type */
444
+ export type ConditionType = 'columnCount' | 'rowCount' | 'dataType' | 'cardinality' | 'semanticType' | 'aggregation' | 'hasTime' | 'hasGeo';
445
+ /** Condition operator */
446
+ export type ConditionOperator = 'equals' | 'notEquals' | 'greaterThan' | 'lessThan' | 'between' | 'contains' | 'startsWith' | 'in';
447
+ /** Visualization preferences */
448
+ export interface VisualizationPreferences {
449
+ defaultChartType?: VisualizationType;
450
+ colorPalette?: string[];
451
+ showDataLabels?: boolean;
452
+ showLegend?: boolean;
453
+ showTooltips?: boolean;
454
+ animations?: boolean;
455
+ responsive?: boolean;
456
+ }
457
+ /** Recommendation config */
458
+ export interface RecommendationConfig {
459
+ maxRecommendations?: number;
460
+ includeExplanations?: boolean;
461
+ learnFromUsage?: boolean;
462
+ }
463
+ /** Visualization recommendation */
464
+ export interface VisualizationRecommendation {
465
+ type: VisualizationType;
466
+ score: number;
467
+ reasoning: string;
468
+ config: VisualizationConfig;
469
+ insights?: DataInsight[];
470
+ }
471
+ /** Data insight */
472
+ export interface DataInsight {
473
+ type: InsightType;
474
+ message: string;
475
+ importance: 'low' | 'medium' | 'high';
476
+ data?: Record<string, unknown>;
477
+ }
478
+ /** Insight type */
479
+ export type InsightType = 'trend' | 'anomaly' | 'correlation' | 'outlier' | 'distribution' | 'seasonality' | 'comparison' | 'summary';
480
+ /** Storytelling configuration */
481
+ export interface StorytellingConfig {
482
+ enabled?: boolean;
483
+ templates?: StoryTemplate[];
484
+ narration?: NarrationConfig;
485
+ animations?: AnimationConfig;
486
+ export?: StoryExportConfig;
487
+ }
488
+ /** Story template */
489
+ export interface StoryTemplate {
490
+ id: string;
491
+ name: string;
492
+ description?: string;
493
+ thumbnail?: string;
494
+ layout: StoryLayout;
495
+ placeholders: TemplatePlaceholder[];
496
+ theme?: StoryTheme;
497
+ }
498
+ /** Story layout */
499
+ export interface StoryLayout {
500
+ type: 'scroll' | 'slideshow' | 'dashboard' | 'infographic';
501
+ sections: LayoutSection[];
502
+ }
503
+ /** Layout section */
504
+ export interface LayoutSection {
505
+ id: string;
506
+ type: SectionType;
507
+ position?: Position;
508
+ size?: Size;
509
+ children?: string[];
510
+ }
511
+ /** Section type */
512
+ export type SectionType = 'hero' | 'text' | 'chart' | 'kpi' | 'table' | 'image' | 'video' | 'comparison' | 'timeline' | 'callout';
513
+ /** Position */
514
+ export interface Position {
515
+ x: number;
516
+ y: number;
517
+ }
518
+ /** Size */
519
+ export interface Size {
520
+ width: number;
521
+ height: number;
522
+ }
523
+ /** Template placeholder */
524
+ export interface TemplatePlaceholder {
525
+ id: string;
526
+ type: 'data' | 'text' | 'visualization' | 'media';
527
+ label: string;
528
+ required?: boolean;
529
+ defaultValue?: unknown;
530
+ constraints?: PlaceholderConstraint;
531
+ }
532
+ /** Placeholder constraint */
533
+ export interface PlaceholderConstraint {
534
+ dataTypes?: AnalyticsDataType[];
535
+ visualizationTypes?: VisualizationType[];
536
+ minRows?: number;
537
+ maxRows?: number;
538
+ minColumns?: number;
539
+ maxColumns?: number;
540
+ }
541
+ /** Story theme */
542
+ export interface StoryTheme {
543
+ name?: string;
544
+ fonts?: ThemeFonts;
545
+ colors?: ThemeColors;
546
+ backgrounds?: BackgroundStyle[];
547
+ transitions?: TransitionStyle[];
548
+ }
549
+ /** Background style */
550
+ export interface BackgroundStyle {
551
+ type: 'solid' | 'gradient' | 'image' | 'pattern';
552
+ value: string;
553
+ opacity?: number;
554
+ }
555
+ /** Transition style */
556
+ export interface TransitionStyle {
557
+ type: 'fade' | 'slide' | 'zoom' | 'flip' | 'none';
558
+ duration?: number;
559
+ easing?: string;
560
+ }
561
+ /** Narration configuration */
562
+ export interface NarrationConfig {
563
+ enabled?: boolean;
564
+ autoGenerate?: boolean;
565
+ voice?: VoiceConfig;
566
+ style?: NarrationStyle;
567
+ }
568
+ /** Voice config */
569
+ export interface VoiceConfig {
570
+ provider?: 'browser' | 'azure' | 'aws' | 'google';
571
+ language?: string;
572
+ voice?: string;
573
+ rate?: number;
574
+ pitch?: number;
575
+ }
576
+ /** Narration style */
577
+ export type NarrationStyle = 'formal' | 'conversational' | 'technical' | 'executive';
578
+ /** Animation configuration */
579
+ export interface AnimationConfig {
580
+ enabled?: boolean;
581
+ chartAnimations?: boolean;
582
+ transitionAnimations?: boolean;
583
+ scrollAnimations?: boolean;
584
+ speed?: 'slow' | 'normal' | 'fast';
585
+ }
586
+ /** Story export configuration */
587
+ export interface StoryExportConfig {
588
+ formats?: ('pdf' | 'pptx' | 'png' | 'gif' | 'video' | 'html')[];
589
+ quality?: 'low' | 'medium' | 'high';
590
+ includeInteractive?: boolean;
591
+ }
592
+ /** Data story */
593
+ export interface DataStory {
594
+ id: string;
595
+ title: string;
596
+ description?: string;
597
+ thumbnail?: string;
598
+ template?: string;
599
+ sections: StorySection[];
600
+ theme?: StoryTheme;
601
+ narration?: StoryNarration;
602
+ metadata?: StoryMetadata;
603
+ }
604
+ /** Story section */
605
+ export interface StorySection {
606
+ id: string;
607
+ type: SectionType;
608
+ title?: string;
609
+ content?: SectionContent;
610
+ data?: SectionData;
611
+ visualization?: SectionVisualization;
612
+ narration?: string;
613
+ animation?: SectionAnimation;
614
+ duration?: number;
615
+ }
616
+ /** Section content */
617
+ export interface SectionContent {
618
+ text?: string;
619
+ markdown?: string;
620
+ html?: string;
621
+ image?: MediaReference;
622
+ video?: MediaReference;
623
+ }
624
+ /** Media reference */
625
+ export interface MediaReference {
626
+ url: string;
627
+ alt?: string;
628
+ caption?: string;
629
+ }
630
+ /** Section data */
631
+ export interface SectionData {
632
+ query?: string;
633
+ dataSource?: string;
634
+ filters?: Record<string, unknown>;
635
+ results?: QueryResults;
636
+ }
637
+ /** Section visualization */
638
+ export interface SectionVisualization {
639
+ type: VisualizationType;
640
+ config: VisualizationConfig;
641
+ highlights?: VisualizationHighlight[];
642
+ annotations?: VisualizationAnnotation[];
643
+ }
644
+ /** Visualization highlight */
645
+ export interface VisualizationHighlight {
646
+ type: 'point' | 'range' | 'series';
647
+ target: unknown;
648
+ style?: HighlightStyle;
649
+ annotation?: string;
650
+ }
651
+ /** Highlight style */
652
+ export interface HighlightStyle {
653
+ color?: string;
654
+ opacity?: number;
655
+ strokeWidth?: number;
656
+ pulse?: boolean;
657
+ }
658
+ /** Visualization annotation */
659
+ export interface VisualizationAnnotation {
660
+ type: 'text' | 'arrow' | 'line' | 'area';
661
+ position: Position;
662
+ content?: string;
663
+ style?: AnnotationStyle;
664
+ }
665
+ /** Annotation style */
666
+ export interface AnnotationStyle {
667
+ color?: string;
668
+ fontSize?: number;
669
+ fontWeight?: string;
670
+ background?: string;
671
+ }
672
+ /** Section animation */
673
+ export interface SectionAnimation {
674
+ enter?: TransitionStyle;
675
+ exit?: TransitionStyle;
676
+ dataAnimation?: DataAnimation;
677
+ }
678
+ /** Data animation */
679
+ export interface DataAnimation {
680
+ type: 'reveal' | 'grow' | 'morph' | 'highlight';
681
+ sequence?: 'all' | 'series' | 'point';
682
+ duration?: number;
683
+ delay?: number;
684
+ }
685
+ /** Story narration */
686
+ export interface StoryNarration {
687
+ generated?: boolean;
688
+ voice?: VoiceConfig;
689
+ sections: NarrationSection[];
690
+ }
691
+ /** Narration section */
692
+ export interface NarrationSection {
693
+ sectionId: string;
694
+ text: string;
695
+ timing?: NarrationTiming;
696
+ audio?: AudioReference;
697
+ }
698
+ /** Narration timing */
699
+ export interface NarrationTiming {
700
+ start: number;
701
+ duration: number;
702
+ }
703
+ /** Audio reference */
704
+ export interface AudioReference {
705
+ url: string;
706
+ duration: number;
707
+ format: string;
708
+ }
709
+ /** Story metadata */
710
+ export interface StoryMetadata {
711
+ created?: Date;
712
+ createdBy?: string;
713
+ modified?: Date;
714
+ modifiedBy?: string;
715
+ version?: number;
716
+ tags?: string[];
717
+ sharing?: SharingLevel;
718
+ views?: number;
719
+ likes?: number;
720
+ comments?: number;
721
+ }
722
+ /** Exploration */
723
+ export interface Exploration {
724
+ id: string;
725
+ name: string;
726
+ description?: string;
727
+ dataSource: string;
728
+ query: ExplorationQuery;
729
+ visualization?: VisualizationConfig;
730
+ filters?: ExplorationFilter[];
731
+ calculations?: Calculation[];
732
+ insights?: DataInsight[];
733
+ metadata?: ExplorationMetadata;
734
+ }
735
+ /** Exploration query */
736
+ export interface ExplorationQuery {
737
+ table?: string;
738
+ tables?: string[];
739
+ columns?: ExplorationColumn[];
740
+ metrics?: string[];
741
+ dimensions?: string[];
742
+ filters?: FilterExpression[];
743
+ groupBy?: string[];
744
+ orderBy?: OrderByExpression[];
745
+ limit?: number;
746
+ sql?: string;
747
+ }
748
+ /** Exploration column */
749
+ export interface ExplorationColumn {
750
+ field: string;
751
+ alias?: string;
752
+ aggregation?: AggregationType;
753
+ format?: ColumnFormat;
754
+ hidden?: boolean;
755
+ }
756
+ /** Filter expression */
757
+ export interface FilterExpression {
758
+ field: string;
759
+ operator: FilterOperator;
760
+ value?: unknown;
761
+ values?: unknown[];
762
+ }
763
+ /** Filter operator */
764
+ export type FilterOperator = 'equals' | 'notEquals' | 'greaterThan' | 'greaterThanOrEquals' | 'lessThan' | 'lessThanOrEquals' | 'between' | 'notBetween' | 'in' | 'notIn' | 'contains' | 'notContains' | 'startsWith' | 'endsWith' | 'isNull' | 'isNotNull' | 'isEmpty' | 'isNotEmpty' | 'regex';
765
+ /** Order by expression */
766
+ export interface OrderByExpression {
767
+ field: string;
768
+ direction: 'asc' | 'desc';
769
+ nulls?: 'first' | 'last';
770
+ }
771
+ /** Exploration filter */
772
+ export interface ExplorationFilter {
773
+ id: string;
774
+ name: string;
775
+ field: string;
776
+ type: FilterType;
777
+ operator?: FilterOperator;
778
+ value?: unknown;
779
+ values?: unknown[];
780
+ options?: FilterOption[];
781
+ multiple?: boolean;
782
+ required?: boolean;
783
+ }
784
+ /** Filter type */
785
+ export type FilterType = 'text' | 'number' | 'date' | 'dateRange' | 'select' | 'multiSelect' | 'slider' | 'checkbox' | 'radio' | 'search';
786
+ /** Filter option */
787
+ export interface FilterOption {
788
+ label: string;
789
+ value: unknown;
790
+ count?: number;
791
+ }
792
+ /** Calculation */
793
+ export interface Calculation {
794
+ id: string;
795
+ name: string;
796
+ expression: string;
797
+ dataType?: AnalyticsDataType;
798
+ format?: ColumnFormat;
799
+ description?: string;
800
+ }
801
+ /** Exploration metadata */
802
+ export interface ExplorationMetadata {
803
+ created?: Date;
804
+ createdBy?: string;
805
+ modified?: Date;
806
+ modifiedBy?: string;
807
+ version?: number;
808
+ folder?: string;
809
+ tags?: string[];
810
+ sharing?: SharingLevel;
811
+ starred?: boolean;
812
+ runCount?: number;
813
+ lastRun?: Date;
814
+ }
815
+ /** Metrics configuration */
816
+ export interface MetricsConfig {
817
+ enabled?: boolean;
818
+ catalog?: MetricsCatalog;
819
+ governance?: MetricsGovernance;
820
+ lineage?: boolean;
821
+ }
822
+ /** Metrics catalog */
823
+ export interface MetricsCatalog {
824
+ id: string;
825
+ name: string;
826
+ description?: string;
827
+ metrics: MetricDefinition[];
828
+ dimensions: DimensionDefinition[];
829
+ categories: MetricCategory[];
830
+ }
831
+ /** Metric definition */
832
+ export interface MetricDefinition {
833
+ id: string;
834
+ name: string;
835
+ displayName?: string;
836
+ description?: string;
837
+ expression: string;
838
+ dataType: 'number' | 'integer' | 'decimal' | 'currency' | 'percentage';
839
+ format?: ColumnFormat;
840
+ aggregation: AggregationType;
841
+ table?: string;
842
+ column?: string;
843
+ dimensions?: string[];
844
+ filters?: FilterExpression[];
845
+ certified?: boolean;
846
+ owner?: string;
847
+ category?: string;
848
+ tags?: string[];
849
+ synonyms?: string[];
850
+ relatedMetrics?: string[];
851
+ timeDimension?: string;
852
+ defaultGranularity?: DataGranularity;
853
+ targets?: MetricTarget[];
854
+ thresholds?: MetricThreshold[];
855
+ }
856
+ /** Metric target */
857
+ export interface MetricTarget {
858
+ name: string;
859
+ value: number;
860
+ period?: string;
861
+ comparison?: 'above' | 'below' | 'at';
862
+ }
863
+ /** Metric threshold */
864
+ export interface MetricThreshold {
865
+ name: string;
866
+ operator: 'greaterThan' | 'lessThan' | 'between';
867
+ value?: number;
868
+ minValue?: number;
869
+ maxValue?: number;
870
+ severity: 'info' | 'warning' | 'critical';
871
+ color?: string;
872
+ }
873
+ /** Dimension definition */
874
+ export interface DimensionDefinition {
875
+ id: string;
876
+ name: string;
877
+ displayName?: string;
878
+ description?: string;
879
+ table?: string;
880
+ column?: string;
881
+ expression?: string;
882
+ dataType: AnalyticsDataType;
883
+ semanticType?: SemanticType;
884
+ hierarchy?: DimensionHierarchy;
885
+ certified?: boolean;
886
+ owner?: string;
887
+ category?: string;
888
+ tags?: string[];
889
+ synonyms?: string[];
890
+ }
891
+ /** Dimension hierarchy */
892
+ export interface DimensionHierarchy {
893
+ name: string;
894
+ levels: HierarchyLevel[];
895
+ }
896
+ /** Hierarchy level */
897
+ export interface HierarchyLevel {
898
+ name: string;
899
+ column: string;
900
+ ordinal: number;
901
+ cardinality?: number;
902
+ }
903
+ /** Metric category */
904
+ export interface MetricCategory {
905
+ id: string;
906
+ name: string;
907
+ description?: string;
908
+ parent?: string;
909
+ icon?: string;
910
+ color?: string;
911
+ }
912
+ /** Metrics governance */
913
+ export interface MetricsGovernance {
914
+ certificationRequired?: boolean;
915
+ approvalWorkflow?: ApprovalWorkflow;
916
+ changeTracking?: boolean;
917
+ auditLog?: boolean;
918
+ }
919
+ /** Approval workflow */
920
+ export interface ApprovalWorkflow {
921
+ enabled?: boolean;
922
+ approvers?: string[];
923
+ requireAllApprovers?: boolean;
924
+ autoApproveOwner?: boolean;
925
+ }
926
+ /** Glossary configuration */
927
+ export interface GlossaryConfig {
928
+ enabled?: boolean;
929
+ categories?: GlossaryCategory[];
930
+ governance?: GlossaryGovernance;
931
+ }
932
+ /** Glossary */
933
+ export interface Glossary {
934
+ id: string;
935
+ name: string;
936
+ description?: string;
937
+ terms: GlossaryTerm[];
938
+ categories: GlossaryCategory[];
939
+ }
940
+ /** Glossary term */
941
+ export interface GlossaryTerm {
942
+ id: string;
943
+ name: string;
944
+ displayName?: string;
945
+ definition: string;
946
+ description?: string;
947
+ category?: string;
948
+ synonyms?: string[];
949
+ relatedTerms?: string[];
950
+ linkedObjects?: LinkedObject[];
951
+ owner?: string;
952
+ steward?: string;
953
+ status: 'draft' | 'review' | 'approved' | 'deprecated';
954
+ certified?: boolean;
955
+ created?: Date;
956
+ createdBy?: string;
957
+ modified?: Date;
958
+ modifiedBy?: string;
959
+ tags?: string[];
960
+ }
961
+ /** Linked object */
962
+ export interface LinkedObject {
963
+ type: 'table' | 'column' | 'metric' | 'dimension' | 'report' | 'dashboard';
964
+ id: string;
965
+ name: string;
966
+ dataSource?: string;
967
+ }
968
+ /** Glossary category */
969
+ export interface GlossaryCategory {
970
+ id: string;
971
+ name: string;
972
+ description?: string;
973
+ parent?: string;
974
+ icon?: string;
975
+ color?: string;
976
+ }
977
+ /** Glossary governance */
978
+ export interface GlossaryGovernance {
979
+ approvalRequired?: boolean;
980
+ workflow?: ApprovalWorkflow;
981
+ changeTracking?: boolean;
982
+ }
983
+ /** Analytics collaboration configuration */
984
+ export interface AnalyticsCollaborationConfig {
985
+ enabled?: boolean;
986
+ comments?: CommentConfig;
987
+ sharing?: AnalyticsSharingConfig;
988
+ notifications?: NotificationConfig;
989
+ activity?: ActivityConfig;
990
+ }
991
+ /** Comment config */
992
+ export interface CommentConfig {
993
+ enabled?: boolean;
994
+ mentions?: boolean;
995
+ reactions?: boolean;
996
+ threads?: boolean;
997
+ attachments?: boolean;
998
+ }
999
+ /** Analytics sharing config */
1000
+ export interface AnalyticsSharingConfig {
1001
+ enabled?: boolean;
1002
+ levels?: SharingLevel[];
1003
+ externalSharing?: boolean;
1004
+ linkSharing?: boolean;
1005
+ embedding?: boolean;
1006
+ }
1007
+ /** Notification config */
1008
+ export interface NotificationConfig {
1009
+ enabled?: boolean;
1010
+ email?: boolean;
1011
+ inApp?: boolean;
1012
+ slack?: boolean;
1013
+ teams?: boolean;
1014
+ }
1015
+ /** Activity config */
1016
+ export interface ActivityConfig {
1017
+ enabled?: boolean;
1018
+ tracking?: boolean;
1019
+ history?: boolean;
1020
+ retentionDays?: number;
1021
+ }
1022
+ /** Collaboration session */
1023
+ export interface AnalyticsCollaborationSession {
1024
+ id: string;
1025
+ objectType: 'exploration' | 'story' | 'dashboard' | 'metric';
1026
+ objectId: string;
1027
+ participants: SessionParticipant[];
1028
+ comments: Comment[];
1029
+ activity: ActivityEntry[];
1030
+ started?: Date;
1031
+ ended?: Date;
1032
+ }
1033
+ /** Session participant */
1034
+ export interface SessionParticipant {
1035
+ userId: string;
1036
+ name: string;
1037
+ avatar?: string;
1038
+ role: 'owner' | 'editor' | 'viewer';
1039
+ cursor?: CursorPosition;
1040
+ selection?: SelectionRange;
1041
+ online?: boolean;
1042
+ lastActive?: Date;
1043
+ }
1044
+ /** Cursor position */
1045
+ export interface CursorPosition {
1046
+ x: number;
1047
+ y: number;
1048
+ element?: string;
1049
+ }
1050
+ /** Selection range */
1051
+ export interface SelectionRange {
1052
+ start: Position;
1053
+ end: Position;
1054
+ element?: string;
1055
+ }
1056
+ /** Comment */
1057
+ export interface Comment {
1058
+ id: string;
1059
+ text: string;
1060
+ author: string;
1061
+ authorName?: string;
1062
+ created: Date;
1063
+ modified?: Date;
1064
+ resolved?: boolean;
1065
+ resolvedBy?: string;
1066
+ resolvedAt?: Date;
1067
+ parentId?: string;
1068
+ replies?: Comment[];
1069
+ mentions?: string[];
1070
+ reactions?: Reaction[];
1071
+ position?: CommentPosition;
1072
+ attachments?: Attachment[];
1073
+ }
1074
+ /** Reaction */
1075
+ export interface Reaction {
1076
+ type: string;
1077
+ users: string[];
1078
+ count: number;
1079
+ }
1080
+ /** Comment position */
1081
+ export interface CommentPosition {
1082
+ type: 'element' | 'coordinates' | 'range';
1083
+ target?: string;
1084
+ x?: number;
1085
+ y?: number;
1086
+ start?: number;
1087
+ end?: number;
1088
+ }
1089
+ /** Attachment */
1090
+ export interface Attachment {
1091
+ id: string;
1092
+ name: string;
1093
+ type: string;
1094
+ size: number;
1095
+ url: string;
1096
+ }
1097
+ /** Activity entry */
1098
+ export interface ActivityEntry {
1099
+ id: string;
1100
+ type: ActivityType;
1101
+ user: string;
1102
+ userName?: string;
1103
+ timestamp: Date;
1104
+ details?: Record<string, unknown>;
1105
+ changes?: ChangeRecord[];
1106
+ }
1107
+ /** Activity type */
1108
+ export type ActivityType = 'created' | 'modified' | 'deleted' | 'shared' | 'viewed' | 'commented' | 'resolved' | 'exported' | 'scheduled' | 'executed';
1109
+ /** Change record */
1110
+ export interface ChangeRecord {
1111
+ field: string;
1112
+ oldValue?: unknown;
1113
+ newValue?: unknown;
1114
+ }
1115
+ /** Usage analytics */
1116
+ export interface UsageAnalytics {
1117
+ period: TimeRange;
1118
+ summary: UsageSummary;
1119
+ topUsers?: UserUsage[];
1120
+ topContent?: ContentUsage[];
1121
+ topQueries?: QueryUsage[];
1122
+ trends?: UsageTrend[];
1123
+ }
1124
+ /** Usage summary */
1125
+ export interface UsageSummary {
1126
+ totalUsers: number;
1127
+ activeUsers: number;
1128
+ totalQueries: number;
1129
+ totalViews: number;
1130
+ totalExports: number;
1131
+ avgQueryTime: number;
1132
+ dataProcessed: number;
1133
+ }
1134
+ /** User usage */
1135
+ export interface UserUsage {
1136
+ userId: string;
1137
+ userName?: string;
1138
+ queries: number;
1139
+ views: number;
1140
+ exports: number;
1141
+ lastActive: Date;
1142
+ }
1143
+ /** Content usage */
1144
+ export interface ContentUsage {
1145
+ id: string;
1146
+ name: string;
1147
+ type: 'exploration' | 'story' | 'dashboard' | 'metric';
1148
+ views: number;
1149
+ uniqueUsers: number;
1150
+ avgTimeSpent: number;
1151
+ lastViewed: Date;
1152
+ }
1153
+ /** Query usage */
1154
+ export interface QueryUsage {
1155
+ queryHash: string;
1156
+ queryPattern?: string;
1157
+ executionCount: number;
1158
+ uniqueUsers: number;
1159
+ avgDuration: number;
1160
+ totalBytesScanned: number;
1161
+ }
1162
+ /** Usage trend */
1163
+ export interface UsageTrend {
1164
+ date: Date;
1165
+ users: number;
1166
+ queries: number;
1167
+ views: number;
1168
+ dataProcessed: number;
1169
+ }
1170
+ /** Data certification */
1171
+ export interface DataCertification {
1172
+ id: string;
1173
+ objectType: 'table' | 'column' | 'metric' | 'dimension' | 'dataSource';
1174
+ objectId: string;
1175
+ objectName: string;
1176
+ status: CertificationStatus;
1177
+ level?: CertificationLevel;
1178
+ certifiedBy?: string;
1179
+ certifiedAt?: Date;
1180
+ expiresAt?: Date;
1181
+ notes?: string;
1182
+ criteria?: CertificationCriterion[];
1183
+ history?: CertificationHistory[];
1184
+ }
1185
+ /** Certification status */
1186
+ export type CertificationStatus = 'uncertified' | 'pending' | 'certified' | 'expired' | 'revoked';
1187
+ /** Certification level */
1188
+ export type CertificationLevel = 'bronze' | 'silver' | 'gold' | 'platinum';
1189
+ /** Certification criterion */
1190
+ export interface CertificationCriterion {
1191
+ id: string;
1192
+ name: string;
1193
+ description?: string;
1194
+ required: boolean;
1195
+ passed: boolean;
1196
+ checkedAt?: Date;
1197
+ checkedBy?: string;
1198
+ notes?: string;
1199
+ }
1200
+ /** Certification history */
1201
+ export interface CertificationHistory {
1202
+ action: 'submitted' | 'approved' | 'rejected' | 'expired' | 'revoked';
1203
+ timestamp: Date;
1204
+ user: string;
1205
+ notes?: string;
1206
+ previousStatus?: CertificationStatus;
1207
+ }
1208
+ //# sourceMappingURL=self-service-analytics.d.ts.map