@smartnet360/svelte-components 0.0.101 → 0.0.103

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 (81) hide show
  1. package/dist/apps/antenna-pattern/index.d.ts +1 -0
  2. package/dist/apps/antenna-pattern/index.js +1 -0
  3. package/dist/apps/antenna-pattern/utils/load-static-antennas.d.ts +17 -0
  4. package/dist/apps/antenna-pattern/utils/load-static-antennas.js +83 -0
  5. package/dist/apps/site-check/SiteCheck.svelte +4 -6
  6. package/dist/core/Charts/ChartCard.svelte +122 -12
  7. package/dist/core/Charts/ChartCard.svelte.d.ts +2 -0
  8. package/dist/core/Charts/ChartComponent.svelte +8 -6
  9. package/dist/core/CoverageMap/ai/AITools.d.ts +117 -0
  10. package/dist/core/CoverageMap/ai/AITools.js +380 -0
  11. package/dist/core/CoverageMap/core/CoverageCalculator.d.ts +138 -0
  12. package/dist/core/CoverageMap/core/CoverageCalculator.js +375 -0
  13. package/dist/core/CoverageMap/core/GridCalculator.d.ts +115 -0
  14. package/dist/core/CoverageMap/core/GridCalculator.js +484 -0
  15. package/dist/core/CoverageMap/core/PathLossModels.d.ts +253 -0
  16. package/dist/core/CoverageMap/core/PathLossModels.js +380 -0
  17. package/dist/core/CoverageMap/core/SignalProcessor.d.ts +288 -0
  18. package/dist/core/CoverageMap/core/SignalProcessor.js +424 -0
  19. package/dist/core/CoverageMap/data/AntennaStore.d.ts +165 -0
  20. package/dist/core/CoverageMap/data/AntennaStore.js +327 -0
  21. package/dist/core/CoverageMap/data/SiteStore.d.ts +155 -0
  22. package/dist/core/CoverageMap/data/SiteStore.js +355 -0
  23. package/dist/core/CoverageMap/index.d.ts +74 -0
  24. package/dist/core/CoverageMap/index.js +103 -0
  25. package/dist/core/CoverageMap/types.d.ts +252 -0
  26. package/dist/core/CoverageMap/types.js +7 -0
  27. package/dist/core/CoverageMap/utils/geoUtils.d.ts +223 -0
  28. package/dist/core/CoverageMap/utils/geoUtils.js +374 -0
  29. package/dist/core/CoverageMap/utils/rfUtils.d.ts +329 -0
  30. package/dist/core/CoverageMap/utils/rfUtils.js +434 -0
  31. package/dist/core/CoverageMap/visualization/ColorSchemes.d.ts +149 -0
  32. package/dist/core/CoverageMap/visualization/ColorSchemes.js +377 -0
  33. package/dist/core/TreeView/index.d.ts +4 -4
  34. package/dist/core/TreeView/index.js +5 -5
  35. package/dist/core/TreeView/tree-utils.d.ts +12 -0
  36. package/dist/core/TreeView/tree-utils.js +115 -6
  37. package/dist/core/TreeView/tree.store.svelte.d.ts +94 -0
  38. package/dist/core/TreeView/tree.store.svelte.js +274 -0
  39. package/dist/map-v2/features/cells/controls/CellFilterControl.svelte +16 -27
  40. package/dist/map-v2/features/cells/utils/cellGeoJSON.js +1 -0
  41. package/dist/map-v2/features/repeaters/controls/RepeaterFilterControl.svelte +33 -42
  42. package/dist/map-v2/features/sites/controls/SiteFilterControl.svelte +12 -19
  43. package/dist/map-v3/core/components/Map.svelte +4 -0
  44. package/dist/map-v3/core/stores/map.store.svelte.js +2 -0
  45. package/dist/map-v3/demo/DemoMap.svelte +31 -5
  46. package/dist/map-v3/demo/demo-cells.js +51 -22
  47. package/dist/map-v3/features/cells/components/CellFilterControl.svelte +24 -30
  48. package/dist/map-v3/features/cells/layers/CellsLayer.svelte +29 -9
  49. package/dist/map-v3/features/cells/logic/geometry.js +3 -0
  50. package/dist/map-v3/features/cells/stores/cell.data.svelte.d.ts +27 -0
  51. package/dist/map-v3/features/cells/stores/cell.data.svelte.js +65 -0
  52. package/dist/map-v3/features/coverage/index.d.ts +12 -0
  53. package/dist/map-v3/features/coverage/index.js +16 -0
  54. package/dist/map-v3/features/coverage/layers/CoverageLayer.svelte +198 -0
  55. package/dist/map-v3/features/coverage/layers/CoverageLayer.svelte.d.ts +10 -0
  56. package/dist/map-v3/features/coverage/logic/coloring.d.ts +28 -0
  57. package/dist/map-v3/features/coverage/logic/coloring.js +77 -0
  58. package/dist/map-v3/features/coverage/logic/geometry.d.ts +33 -0
  59. package/dist/map-v3/features/coverage/logic/geometry.js +112 -0
  60. package/dist/map-v3/features/coverage/stores/coverage.data.svelte.d.ts +46 -0
  61. package/dist/map-v3/features/coverage/stores/coverage.data.svelte.js +95 -0
  62. package/dist/map-v3/features/coverage/stores/coverage.display.svelte.d.ts +33 -0
  63. package/dist/map-v3/features/coverage/stores/coverage.display.svelte.js +90 -0
  64. package/dist/map-v3/features/coverage/types.d.ts +52 -0
  65. package/dist/map-v3/features/coverage/types.js +7 -0
  66. package/dist/map-v3/features/repeaters/components/RepeaterFilterControl.svelte +14 -20
  67. package/dist/map-v3/features/selection/components/FeatureSelectionControl.svelte +82 -65
  68. package/dist/map-v3/features/selection/components/FeatureSelectionControl.svelte.d.ts +5 -9
  69. package/dist/map-v3/features/selection/index.d.ts +1 -2
  70. package/dist/map-v3/features/selection/index.js +0 -1
  71. package/dist/map-v3/features/selection/stores/selection.store.svelte.d.ts +44 -15
  72. package/dist/map-v3/features/selection/stores/selection.store.svelte.js +163 -40
  73. package/dist/map-v3/features/selection/types.d.ts +4 -2
  74. package/dist/map-v3/features/sites/components/SiteFilterControl.svelte +23 -33
  75. package/dist/map-v3/index.d.ts +4 -0
  76. package/dist/map-v3/index.js +5 -0
  77. package/package.json +2 -2
  78. package/dist/core/TreeView/tree.store.d.ts +0 -10
  79. package/dist/core/TreeView/tree.store.js +0 -320
  80. package/dist/map-v3/features/selection/layers/SelectionHighlightLayers.svelte +0 -209
  81. package/dist/map-v3/features/selection/layers/SelectionHighlightLayers.svelte.d.ts +0 -13
@@ -0,0 +1,380 @@
1
+ /**
2
+ * AI Integration Layer - Tool-Callable Functions
3
+ *
4
+ * This module provides functions designed to be called by AI assistants
5
+ * (e.g., ChatGPT) for coverage analysis and recommendations.
6
+ *
7
+ * Design principles:
8
+ * - Functions are stateless and pure where possible
9
+ * - Inputs and outputs are JSON-serializable
10
+ * - Each function has clear purpose and documentation
11
+ * - Error handling returns structured error objects
12
+ *
13
+ * Phase 2 Implementation Note:
14
+ * These functions will be exposed via a tool registry that ChatGPT
15
+ * can call through function calling / tool use APIs.
16
+ */
17
+ // ============================================================================
18
+ // AI TOOL FUNCTIONS
19
+ // ============================================================================
20
+ /**
21
+ * Analyze coverage quality and generate recommendations
22
+ *
23
+ * This function takes coverage calculation results and generates
24
+ * structured analysis suitable for AI interpretation.
25
+ *
26
+ * In Phase 2, ChatGPT will call this with coverage data and receive
27
+ * structured metrics that it can analyze and explain in natural language.
28
+ *
29
+ * @param result - Coverage calculation result
30
+ * @returns Structured analysis data
31
+ *
32
+ * @example
33
+ * // AI will call:
34
+ * const analysis = analyzeCoverageQuality(coverageResult);
35
+ *
36
+ * // AI receives:
37
+ * {
38
+ * overallQuality: "good",
39
+ * coveragePercent: 78.5,
40
+ * avgSignal: -82.3,
41
+ * issues: ["excessive_range", "weak_avg_signal"],
42
+ * metrics: { ... }
43
+ * }
44
+ *
45
+ * // AI interprets and responds:
46
+ * "Your coverage is good overall at 78.5%. However, I notice two issues:
47
+ * 1. Excessive range detected - consider adding downtilt to reduce interference
48
+ * 2. Average signal is weak at -82.3 dBm - most users will experience medium throughput"
49
+ */
50
+ export function analyzeCoverageQuality(result) {
51
+ const stats = result.grid.stats;
52
+ const metrics = result.summary.metrics;
53
+ // Determine overall quality
54
+ let overallQuality;
55
+ if (stats.coveragePercentage >= 90 && metrics.excellentPercent >= 50) {
56
+ overallQuality = 'excellent';
57
+ }
58
+ else if (stats.coveragePercentage >= 70 && metrics.goodPercent + metrics.excellentPercent >= 60) {
59
+ overallQuality = 'good';
60
+ }
61
+ else if (stats.coveragePercentage >= 50) {
62
+ overallQuality = 'fair';
63
+ }
64
+ else {
65
+ overallQuality = 'poor';
66
+ }
67
+ // Extract issues
68
+ const issues = [];
69
+ if (stats.coveragePercentage < 60) {
70
+ issues.push('low_coverage');
71
+ }
72
+ if (metrics.poorPercent + metrics.fairPercent > 70) {
73
+ issues.push('weak_signal_dominance');
74
+ }
75
+ if (metrics.maxRange > 15) {
76
+ issues.push('excessive_range');
77
+ }
78
+ if (metrics.maxRange < 1) {
79
+ issues.push('undershooting');
80
+ }
81
+ if (metrics.avgSignal < -90) {
82
+ issues.push('weak_avg_signal');
83
+ }
84
+ if (metrics.excellentPercent < 10) {
85
+ issues.push('minimal_excellent_coverage');
86
+ }
87
+ // Sector breakdown
88
+ const sectorBreakdown = Object.entries(stats.sectorStats || {}).map(([id, stat]) => ({
89
+ sectorId: id,
90
+ maxRangeKm: stat.maxRangeKm,
91
+ avgSignalDbm: stat.avgSignalDbm,
92
+ coverageAreaKm2: stat.coverageAreaKm2
93
+ }));
94
+ return {
95
+ overallQuality,
96
+ coveragePercent: stats.coveragePercentage,
97
+ avgSignal: metrics.avgSignal,
98
+ maxRange: metrics.maxRange,
99
+ issues,
100
+ metrics,
101
+ sectorBreakdown
102
+ };
103
+ }
104
+ /**
105
+ * Generate optimization suggestions
106
+ *
107
+ * Based on coverage analysis, generates specific parameter adjustment
108
+ * recommendations that can be presented to the user.
109
+ *
110
+ * In Phase 2, AI will use this to generate specific, actionable recommendations.
111
+ *
112
+ * @param result - Coverage result
113
+ * @returns Array of recommendations
114
+ */
115
+ export function generateOptimizationSuggestions(result) {
116
+ const analysis = analyzeCoverageQuality(result);
117
+ const recommendations = [];
118
+ const config = result.config;
119
+ // Check each issue and generate recommendations
120
+ for (const issue of analysis.issues) {
121
+ switch (issue) {
122
+ case 'excessive_range':
123
+ // Recommend increasing downtilt
124
+ for (const sector of config.site.sectors) {
125
+ if (sector.enabled) {
126
+ const currentTilt = sector.mechanicalTilt + sector.electricalTilt;
127
+ recommendations.push({
128
+ sectorId: sector.sectorId,
129
+ parameter: 'tilt',
130
+ currentValue: currentTilt,
131
+ suggestedValue: currentTilt + 3,
132
+ reasoning: 'Range exceeds 15km which may cause interference to neighboring sites. ' +
133
+ 'Increasing downtilt will focus energy closer to the site.',
134
+ expectedImprovement: 'Reduced interference, better signal quality nearby',
135
+ priority: 'high'
136
+ });
137
+ }
138
+ }
139
+ break;
140
+ case 'weak_signal_dominance':
141
+ // Recommend increasing power or reducing tilt
142
+ for (const sector of config.site.sectors) {
143
+ if (sector.enabled && sector.txPower < 46) {
144
+ recommendations.push({
145
+ sectorId: sector.sectorId,
146
+ parameter: 'power',
147
+ currentValue: sector.txPower,
148
+ suggestedValue: Math.min(sector.txPower + 3, 46),
149
+ reasoning: 'Over 70% of coverage has weak signal. Increasing power will improve signal strength.',
150
+ expectedImprovement: '+3dB signal strength across coverage area',
151
+ priority: 'high'
152
+ });
153
+ }
154
+ }
155
+ break;
156
+ case 'undershooting':
157
+ // Recommend reducing tilt or increasing power
158
+ for (const sector of config.site.sectors) {
159
+ if (sector.enabled) {
160
+ const currentTilt = sector.mechanicalTilt + sector.electricalTilt;
161
+ if (currentTilt > 3) {
162
+ recommendations.push({
163
+ sectorId: sector.sectorId,
164
+ parameter: 'tilt',
165
+ currentValue: currentTilt,
166
+ suggestedValue: Math.max(currentTilt - 3, 0),
167
+ reasoning: 'Coverage range is very short (< 1km). Reducing tilt will extend coverage.',
168
+ expectedImprovement: 'Extended coverage range',
169
+ priority: 'high'
170
+ });
171
+ }
172
+ }
173
+ }
174
+ break;
175
+ case 'low_coverage':
176
+ // Recommend antenna height or power increase
177
+ for (const sector of config.site.sectors) {
178
+ if (sector.enabled) {
179
+ recommendations.push({
180
+ sectorId: sector.sectorId,
181
+ parameter: 'height',
182
+ currentValue: sector.position.height,
183
+ suggestedValue: sector.position.height + 10,
184
+ reasoning: 'Overall coverage is low. Increasing antenna height will extend coverage.',
185
+ expectedImprovement: 'Wider coverage area',
186
+ priority: 'medium'
187
+ });
188
+ }
189
+ }
190
+ break;
191
+ }
192
+ }
193
+ return recommendations;
194
+ }
195
+ /**
196
+ * Compare two coverage scenarios
197
+ *
198
+ * Useful for before/after analysis when user changes parameters.
199
+ *
200
+ * @param before - Coverage before changes
201
+ * @param after - Coverage after changes
202
+ * @returns Comparison analysis
203
+ */
204
+ export function compareCoverageScenarios(before, after) {
205
+ const beforeAnalysis = analyzeCoverageQuality(before);
206
+ const afterAnalysis = analyzeCoverageQuality(after);
207
+ const coverageChange = afterAnalysis.coveragePercent - beforeAnalysis.coveragePercent;
208
+ const signalChange = afterAnalysis.avgSignal - beforeAnalysis.avgSignal;
209
+ const rangeChange = afterAnalysis.maxRange - beforeAnalysis.maxRange;
210
+ const improvements = [];
211
+ const degradations = [];
212
+ if (coverageChange > 5)
213
+ improvements.push(`Coverage increased by ${coverageChange.toFixed(1)}%`);
214
+ if (coverageChange < -5)
215
+ degradations.push(`Coverage decreased by ${Math.abs(coverageChange).toFixed(1)}%`);
216
+ if (signalChange > 3)
217
+ improvements.push(`Average signal improved by ${signalChange.toFixed(1)} dB`);
218
+ if (signalChange < -3)
219
+ degradations.push(`Average signal degraded by ${Math.abs(signalChange).toFixed(1)} dB`);
220
+ // Range change is contextual
221
+ if (Math.abs(rangeChange) > 1) {
222
+ if (beforeAnalysis.maxRange > 15 && rangeChange < 0) {
223
+ improvements.push(`Range reduced from ${beforeAnalysis.maxRange.toFixed(1)}km to ${afterAnalysis.maxRange.toFixed(1)}km (reduces interference)`);
224
+ }
225
+ else if (beforeAnalysis.maxRange < 5 && rangeChange > 0) {
226
+ improvements.push(`Range increased from ${beforeAnalysis.maxRange.toFixed(1)}km to ${afterAnalysis.maxRange.toFixed(1)}km (extends coverage)`);
227
+ }
228
+ }
229
+ // Generate summary
230
+ let summary;
231
+ if (improvements.length > degradations.length) {
232
+ summary = 'Overall improvement';
233
+ }
234
+ else if (degradations.length > improvements.length) {
235
+ summary = 'Overall degradation';
236
+ }
237
+ else {
238
+ summary = 'Mixed results - some improvements, some trade-offs';
239
+ }
240
+ return {
241
+ coverageChange,
242
+ signalChange,
243
+ rangeChange,
244
+ improvements,
245
+ degradations,
246
+ summary
247
+ };
248
+ }
249
+ /**
250
+ * Extract key metrics for AI analysis
251
+ *
252
+ * Flattens coverage result into simple key-value pairs
253
+ * that are easy for AI to interpret.
254
+ *
255
+ * @param result - Coverage result
256
+ * @returns Flat metrics object
257
+ */
258
+ export function extractAIMetrics(result) {
259
+ const stats = result.grid.stats;
260
+ const config = result.config;
261
+ return {
262
+ // Coverage metrics
263
+ coverage_percent: stats.coveragePercentage,
264
+ coverage_area_km2: stats.coveredAreaKm2,
265
+ total_area_km2: stats.totalAreaKm2,
266
+ // Quality distribution
267
+ excellent_percent: (stats.excellentAreaKm2 / stats.totalAreaKm2) * 100,
268
+ good_percent: (stats.goodAreaKm2 / stats.totalAreaKm2) * 100,
269
+ fair_percent: (stats.fairAreaKm2 / stats.totalAreaKm2) * 100,
270
+ poor_percent: (stats.poorAreaKm2 / stats.totalAreaKm2) * 100,
271
+ // Configuration
272
+ cell_size_m: config.gridSettings.cellSizeMeters,
273
+ max_radius_km: config.gridSettings.maxRadiusKm,
274
+ path_loss_model: config.gridSettings.pathLossModel,
275
+ // Performance
276
+ calculation_time_s: result.calculationTimeMs / 1000,
277
+ grid_cells: result.grid.rows * result.grid.cols,
278
+ // Site info
279
+ site_name: config.site.siteName,
280
+ sector_count: config.site.sectors.filter((s) => s.enabled).length
281
+ };
282
+ }
283
+ // ============================================================================
284
+ // AI TOOL REGISTRY
285
+ // ============================================================================
286
+ /**
287
+ * Registry of all AI-callable tools
288
+ *
289
+ * In Phase 2, this will be used to expose functions to ChatGPT.
290
+ * Each entry describes the function, its parameters, and its purpose.
291
+ */
292
+ export const AI_TOOLS = [
293
+ {
294
+ name: 'analyze_coverage_quality',
295
+ description: 'Analyze coverage calculation results and return structured quality assessment with issues and metrics',
296
+ parameters: {
297
+ type: 'object',
298
+ properties: {
299
+ coverageResult: {
300
+ type: 'object',
301
+ description: 'Complete coverage calculation result object'
302
+ }
303
+ },
304
+ required: ['coverageResult']
305
+ },
306
+ execute: async (params) => analyzeCoverageQuality(params.coverageResult)
307
+ },
308
+ {
309
+ name: 'generate_optimization_suggestions',
310
+ description: 'Generate specific parameter adjustment recommendations to improve coverage',
311
+ parameters: {
312
+ type: 'object',
313
+ properties: {
314
+ coverageResult: {
315
+ type: 'object',
316
+ description: 'Coverage result to analyze'
317
+ }
318
+ },
319
+ required: ['coverageResult']
320
+ },
321
+ execute: async (params) => generateOptimizationSuggestions(params.coverageResult)
322
+ },
323
+ {
324
+ name: 'compare_coverage_scenarios',
325
+ description: 'Compare two coverage scenarios (before/after) and identify improvements or degradations',
326
+ parameters: {
327
+ type: 'object',
328
+ properties: {
329
+ before: {
330
+ type: 'object',
331
+ description: 'Coverage result before changes'
332
+ },
333
+ after: {
334
+ type: 'object',
335
+ description: 'Coverage result after changes'
336
+ }
337
+ },
338
+ required: ['before', 'after']
339
+ },
340
+ execute: async (params) => compareCoverageScenarios(params.before, params.after)
341
+ },
342
+ {
343
+ name: 'extract_ai_metrics',
344
+ description: 'Extract flat key-value metrics from coverage result for easy AI interpretation',
345
+ parameters: {
346
+ type: 'object',
347
+ properties: {
348
+ coverageResult: {
349
+ type: 'object',
350
+ description: 'Coverage result to extract metrics from'
351
+ }
352
+ },
353
+ required: ['coverageResult']
354
+ },
355
+ execute: async (params) => extractAIMetrics(params.coverageResult)
356
+ }
357
+ ];
358
+ /**
359
+ * Get AI tool by name
360
+ *
361
+ * @param name - Tool name
362
+ * @returns Tool function or undefined
363
+ */
364
+ export function getAITool(name) {
365
+ return AI_TOOLS.find((tool) => tool.name === name);
366
+ }
367
+ /**
368
+ * Execute AI tool by name
369
+ *
370
+ * @param name - Tool name
371
+ * @param params - Tool parameters
372
+ * @returns Tool result
373
+ */
374
+ export async function executeAITool(name, params) {
375
+ const tool = getAITool(name);
376
+ if (!tool) {
377
+ throw new Error(`AI tool not found: ${name}`);
378
+ }
379
+ return tool.execute(params);
380
+ }
@@ -0,0 +1,138 @@
1
+ /**
2
+ * Coverage Calculator - Main Orchestrator
3
+ *
4
+ * This is the main entry point for coverage calculations.
5
+ * It orchestrates all components and provides a clean API for:
6
+ * - Single sector coverage calculation
7
+ * - Multi-sector site coverage
8
+ * - Progress reporting
9
+ * - AI-ready result formatting
10
+ *
11
+ * Usage:
12
+ * const calculator = new CoverageCalculator();
13
+ * const result = await calculator.calculate(config, progressCallback);
14
+ * // Result includes grid, statistics, and AI-ready summary
15
+ */
16
+ import type { CoverageConfig, CoverageResult, ProgressCallback, SiteConfiguration } from '../types';
17
+ /**
18
+ * Main Coverage Calculator
19
+ *
20
+ * Provides high-level API for coverage calculations with:
21
+ * - Configuration validation
22
+ * - Progress reporting
23
+ * - Error handling
24
+ * - Result formatting
25
+ * - AI-ready summaries
26
+ */
27
+ export declare class CoverageCalculator {
28
+ /**
29
+ * Calculate coverage for a site configuration
30
+ *
31
+ * This is the main calculation method. It:
32
+ * 1. Validates configuration
33
+ * 2. Determines if single or multi-sector
34
+ * 3. Performs calculation
35
+ * 4. Generates statistics and summary
36
+ * 5. Formats result for consumption (including AI)
37
+ *
38
+ * @param config - Complete coverage configuration
39
+ * @param onProgress - Optional progress callback
40
+ * @returns Promise resolving to complete coverage result
41
+ *
42
+ * @example
43
+ * const calculator = new CoverageCalculator();
44
+ * const result = await calculator.calculate({
45
+ * site: siteConfig,
46
+ * gridSettings: { cellSizeMeters: 50, maxRadiusKm: 10, ... },
47
+ * signalThresholds: { excellent: -70, good: -85, ... },
48
+ * calculateInterference: true
49
+ * }, (progress) => {
50
+ * console.log(`Progress: ${progress.progress}% - ${progress.message}`);
51
+ * });
52
+ *
53
+ * // Access results
54
+ * console.log(`Coverage: ${result.grid.stats.coveragePercentage}%`);
55
+ * console.log(`Summary: ${result.summary.description}`);
56
+ * // Pass to AI for analysis
57
+ * const aiAnalysis = await analyzeWithAI(result);
58
+ */
59
+ calculate(config: CoverageConfig, onProgress?: ProgressCallback): Promise<CoverageResult>;
60
+ /**
61
+ * Validate configuration before calculation
62
+ *
63
+ * Checks for common configuration errors:
64
+ * - Invalid distances (negative, zero, too large)
65
+ * - Invalid frequencies (outside valid ranges)
66
+ * - Invalid antenna heights
67
+ * - Missing required data
68
+ *
69
+ * Throws descriptive errors if validation fails.
70
+ *
71
+ * @param config - Configuration to validate
72
+ * @throws Error if configuration is invalid
73
+ */
74
+ private validateConfiguration;
75
+ /**
76
+ * Generate human-readable and AI-ready summary
77
+ *
78
+ * Creates a comprehensive summary of coverage results including:
79
+ * - Description: Human-readable text summary
80
+ * - Issues: List of detected problems/warnings
81
+ * - Metrics: Key numerical metrics for AI analysis
82
+ *
83
+ * This summary is designed to be consumed by:
84
+ * 1. Human users (description text)
85
+ * 2. UI components (structured data)
86
+ * 3. AI analysis tools (metrics + issues)
87
+ *
88
+ * @param config - Original configuration
89
+ * @param grid - Calculation results
90
+ * @param sectorCount - Number of sectors calculated
91
+ * @returns Summary object
92
+ */
93
+ private generateSummary;
94
+ /**
95
+ * Create human-readable description
96
+ */
97
+ private createDescription;
98
+ /**
99
+ * Detect common issues and warnings
100
+ */
101
+ private detectIssues;
102
+ }
103
+ /**
104
+ * Quick coverage calculation (simplified API)
105
+ *
106
+ * For simple use cases where you don't need full configuration control.
107
+ * Uses sensible defaults for most parameters.
108
+ *
109
+ * @param site - Site configuration
110
+ * @param options - Optional overrides
111
+ * @returns Coverage result
112
+ *
113
+ * @example
114
+ * const result = await quickCalculate(mySite, {
115
+ * cellSizeMeters: 100, // Faster calculation
116
+ * maxRadiusKm: 5 // Smaller area
117
+ * });
118
+ */
119
+ export declare function quickCalculate(site: SiteConfiguration, options?: {
120
+ cellSizeMeters?: number;
121
+ maxRadiusKm?: number;
122
+ pathLossModel?: 'free-space' | 'hata-urban' | 'hata-suburban' | 'cost231';
123
+ }): Promise<CoverageResult>;
124
+ /**
125
+ * Calculate coverage and export for AI analysis
126
+ *
127
+ * Convenience function that calculates coverage and formats
128
+ * the result specifically for AI consumption.
129
+ *
130
+ * @param config - Coverage configuration
131
+ * @returns AI-ready analysis object
132
+ */
133
+ export declare function calculateForAI(config: CoverageConfig): Promise<{
134
+ summary: string;
135
+ metrics: Record<string, number>;
136
+ issues: string[];
137
+ sectorData: any[];
138
+ }>;