@smartnet360/svelte-components 0.0.113 → 0.0.115

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.
@@ -20,6 +20,13 @@
20
20
  cellDataSorter
21
21
  } from './column-config';
22
22
 
23
+ // Type for Tabulator group component (not exported from tabulator-tables)
24
+ interface TabulatorGroup {
25
+ getKey(): string | number | boolean;
26
+ getRows(): RowComponent[];
27
+ scrollTo(): Promise<void>;
28
+ }
29
+
23
30
  interface Props extends CellTableProps {
24
31
  /** Row selection change event */
25
32
  onselectionchange?: (event: RowSelectionEvent) => void;
@@ -335,6 +342,34 @@
335
342
  .map(col => col.getField())
336
343
  .filter((field): field is string => !!field);
337
344
  }
345
+
346
+ /** Get all group keys (when grouping is active) */
347
+ export function getGroups(): { key: string; count: number }[] {
348
+ if (!table || groupBy === 'none') return [];
349
+ try {
350
+ const groups = table.getGroups() as TabulatorGroup[];
351
+ return groups.map(g => ({
352
+ key: String(g.getKey()),
353
+ count: g.getRows().length
354
+ }));
355
+ } catch {
356
+ return [];
357
+ }
358
+ }
359
+
360
+ /** Scroll to a specific group by key */
361
+ export function scrollToGroup(key: string): void {
362
+ if (!table || groupBy === 'none') return;
363
+ try {
364
+ const groups = table.getGroups() as TabulatorGroup[];
365
+ const group = groups.find(g => String(g.getKey()) === key);
366
+ if (group) {
367
+ group.scrollTo();
368
+ }
369
+ } catch (e) {
370
+ console.warn('Failed to scroll to group:', e);
371
+ }
372
+ }
338
373
  </script>
339
374
 
340
375
  <div class="cell-table-container">
@@ -28,6 +28,11 @@ declare const CellTable: import("svelte").Component<Props, {
28
28
  showColumn: (field: string) => void;
29
29
  hideColumn: (field: string) => void;
30
30
  getVisibleColumns: () => string[];
31
+ getGroups: () => {
32
+ key: string;
33
+ count: number;
34
+ }[];
35
+ scrollToGroup: (key: string) => void;
31
36
  }, "">;
32
37
  type CellTable = ReturnType<typeof CellTable>;
33
38
  export default CellTable;
@@ -160,6 +160,7 @@
160
160
  headerFilters={true}
161
161
  showDetailsSidebar={true}
162
162
  sidebarWidth={320}
163
+ showScrollSpy={true}
163
164
  title="Cell Data"
164
165
  onselectionchange={handleSelectionChange}
165
166
  >
@@ -32,6 +32,8 @@
32
32
  showToolbar?: boolean;
33
33
  /** Show export buttons */
34
34
  showExport?: boolean;
35
+ /** Show JSON export button (requires showExport=true) */
36
+ showJsonExport?: boolean;
35
37
  /** Technology color mapping */
36
38
  techColors?: TechColorMap;
37
39
  /** Status color mapping */
@@ -48,6 +50,8 @@
48
50
  persistSettings?: boolean;
49
51
  /** Storage key prefix for persisted settings */
50
52
  storageKey?: string;
53
+ /** Show scrollspy navigation bar for quick group navigation */
54
+ showScrollSpy?: boolean;
51
55
  /** Bindable reference to table methods */
52
56
  tableRef?: { redraw: () => void } | null;
53
57
  /** Row selection change event */
@@ -75,6 +79,7 @@
75
79
  height = '100%',
76
80
  showToolbar = true,
77
81
  showExport = true,
82
+ showJsonExport = false,
78
83
  techColors,
79
84
  statusColors,
80
85
  headerFilters = true,
@@ -83,6 +88,7 @@
83
88
  sidebarWidth = 320,
84
89
  persistSettings = true,
85
90
  storageKey = 'cell-table',
91
+ showScrollSpy = false,
86
92
  tableRef = $bindable(null),
87
93
  onselectionchange,
88
94
  onrowclick,
@@ -97,13 +103,15 @@
97
103
  const STORAGE_KEY_GROUP = `${storageKey}-groupBy`;
98
104
  const STORAGE_KEY_COLUMNS = `${storageKey}-visibleColumns`;
99
105
  const STORAGE_KEY_FILTERS = `${storageKey}-filtersVisible`;
106
+ const STORAGE_KEY_SCROLLSPY = `${storageKey}-scrollSpyEnabled`;
100
107
 
101
108
  // Load persisted settings
102
109
  function loadPersistedSettings() {
103
- if (!persistSettings || typeof localStorage === 'undefined') return { columns: null, filtersVisible: true };
110
+ if (!persistSettings || typeof localStorage === 'undefined') return { columns: null, filtersVisible: true, scrollSpyEnabled: showScrollSpy };
104
111
 
105
112
  let columns: string[] | null = null;
106
113
  let filters = true;
114
+ let scrollSpy = showScrollSpy;
107
115
 
108
116
  try {
109
117
  const savedGroup = localStorage.getItem(STORAGE_KEY_GROUP);
@@ -120,10 +128,15 @@
120
128
  if (savedFilters !== null) {
121
129
  filters = savedFilters === 'true';
122
130
  }
131
+
132
+ const savedScrollSpy = localStorage.getItem(STORAGE_KEY_SCROLLSPY);
133
+ if (savedScrollSpy !== null) {
134
+ scrollSpy = savedScrollSpy === 'true';
135
+ }
123
136
  } catch (e) {
124
137
  console.warn('Failed to load CellTable settings:', e);
125
138
  }
126
- return { columns, filtersVisible: filters };
139
+ return { columns, filtersVisible: filters, scrollSpyEnabled: scrollSpy };
127
140
  }
128
141
 
129
142
  // Save group setting
@@ -156,6 +169,16 @@
156
169
  }
157
170
  }
158
171
 
172
+ // Save scrollspy state
173
+ function saveScrollSpyState(enabled: boolean) {
174
+ if (!persistSettings || typeof localStorage === 'undefined') return;
175
+ try {
176
+ localStorage.setItem(STORAGE_KEY_SCROLLSPY, String(enabled));
177
+ } catch (e) {
178
+ console.warn('Failed to save scrollspy state:', e);
179
+ }
180
+ }
181
+
159
182
  let cellTable: CellTable;
160
183
  let selectedCount = $state(0);
161
184
  let selectedRows = $state<CellData[]>([]);
@@ -171,6 +194,10 @@
171
194
  const persistedSettings = loadPersistedSettings();
172
195
  let filtersVisible = $state(persistedSettings.filtersVisible);
173
196
  let visibleColumns = $state<string[]>(persistedSettings.columns ?? getPresetVisibleFields(columnPreset));
197
+
198
+ // ScrollSpy state - initialize from persisted settings
199
+ let scrollSpyGroups = $state<{ key: string; count: number }[]>([]);
200
+ let scrollSpyEnabled = $state(persistedSettings.scrollSpyEnabled);
174
201
 
175
202
  // Update visible columns when preset changes (but not from storage load)
176
203
  $effect(() => {
@@ -208,11 +235,42 @@
208
235
 
209
236
  function handleDataChange(event: DataChangeEvent) {
210
237
  filteredCount = event.filteredCount;
238
+ // Update scrollspy groups when data changes
239
+ updateScrollSpyGroups();
240
+ }
241
+
242
+ function updateScrollSpyGroups() {
243
+ if (scrollSpyEnabled && groupBy !== 'none') {
244
+ // Small delay to ensure table has updated
245
+ setTimeout(() => {
246
+ scrollSpyGroups = cellTable?.getGroups() ?? [];
247
+ }, 50);
248
+ } else {
249
+ scrollSpyGroups = [];
250
+ }
251
+ }
252
+
253
+ function handleScrollToGroup(key: string) {
254
+ cellTable?.scrollToGroup(key);
255
+ }
256
+
257
+ function handleToggleScrollSpy() {
258
+ scrollSpyEnabled = !scrollSpyEnabled;
259
+ saveScrollSpyState(scrollSpyEnabled);
260
+ if (scrollSpyEnabled && groupBy !== 'none') {
261
+ updateScrollSpyGroups();
262
+ } else {
263
+ scrollSpyGroups = [];
264
+ }
211
265
  }
212
266
 
213
267
  function handleGroupChange(group: CellTableGroupField) {
214
268
  groupBy = group;
215
269
  saveGroupSetting(group);
270
+ // Update scrollspy groups after grouping changes
271
+ if (scrollSpyEnabled) {
272
+ setTimeout(() => updateScrollSpyGroups(), 100);
273
+ }
216
274
  }
217
275
 
218
276
  function handlePresetChange(preset: ColumnPreset) {
@@ -353,6 +411,7 @@
353
411
  {filteredCount}
354
412
  {selectedCount}
355
413
  {showExport}
414
+ {showJsonExport}
356
415
  ongroupchange={handleGroupChange}
357
416
  onpresetchange={handlePresetChange}
358
417
  onexportcsv={handleExportCSV}
@@ -366,9 +425,40 @@
366
425
  {visibleColumns}
367
426
  oncolumnvisibilitychange={handleColumnVisibilityChange}
368
427
  onresetcolumns={handleResetColumns}
428
+ {scrollSpyEnabled}
429
+ showScrollSpyToggle={showScrollSpy}
430
+ ontogglescrollspy={handleToggleScrollSpy}
369
431
  />
370
432
  {/if}
371
433
 
434
+ <!-- ScrollSpy Navigation Bar -->
435
+ {#if scrollSpyEnabled && groupBy !== 'none' && scrollSpyGroups.length > 0}
436
+ <div class="scrollspy-bar d-flex align-items-center gap-2 px-3 py-2 bg-body-tertiary border-bottom overflow-auto">
437
+ <span class="text-muted small me-1">
438
+ <i class="bi bi-signpost-split"></i> Jump to:
439
+ </span>
440
+ {#each scrollSpyGroups as group (group.key)}
441
+ {@const bgColor = groupBy === 'tech'
442
+ ? (techColors?.[group.key] ?? DEFAULT_TECH_COLORS[group.key] ?? '#6c757d')
443
+ : groupBy === 'fband'
444
+ ? (FBAND_COLORS[group.key] ?? '#6c757d')
445
+ : groupBy === 'status'
446
+ ? (statusColors?.[group.key] ?? DEFAULT_STATUS_COLORS[group.key] ?? '#6c757d')
447
+ : '#6c757d'}
448
+ <button
449
+ type="button"
450
+ class="btn btn-sm scrollspy-badge"
451
+ style="background-color: {bgColor}; border-color: {bgColor}; color: white;"
452
+ onclick={() => handleScrollToGroup(group.key)}
453
+ title="Scroll to {group.key} ({group.count} cells)"
454
+ >
455
+ <span class="badge rounded-pill bg-light text-dark me-1">{group.count}</span>
456
+ {group.key}
457
+ </button>
458
+ {/each}
459
+ </div>
460
+ {/if}
461
+
372
462
  <!-- Main content with optional sidebar -->
373
463
  <div class="content-area d-flex flex-grow-1 overflow-hidden">
374
464
  <!-- Table -->
@@ -571,4 +661,37 @@
571
661
  .panel-footer {
572
662
  min-height: 48px;
573
663
  }
664
+
665
+ /* ScrollSpy bar styling */
666
+ .scrollspy-bar {
667
+ min-height: 40px;
668
+ flex-wrap: nowrap;
669
+ scrollbar-width: thin;
670
+ }
671
+
672
+ .scrollspy-bar::-webkit-scrollbar {
673
+ height: 4px;
674
+ }
675
+
676
+ .scrollspy-bar::-webkit-scrollbar-thumb {
677
+ background: var(--bs-secondary-color, #6c757d);
678
+ border-radius: 2px;
679
+ }
680
+
681
+ .scrollspy-badge {
682
+ white-space: nowrap;
683
+ font-size: 0.75rem;
684
+ padding: 0.25rem 0.5rem;
685
+ transition: transform 0.15s ease, box-shadow 0.15s ease;
686
+ }
687
+
688
+ .scrollspy-badge:hover {
689
+ transform: translateY(-1px);
690
+ box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2);
691
+ filter: brightness(1.1);
692
+ }
693
+
694
+ .scrollspy-badge:active {
695
+ transform: translateY(0);
696
+ }
574
697
  </style>
@@ -17,6 +17,8 @@ interface Props {
17
17
  showToolbar?: boolean;
18
18
  /** Show export buttons */
19
19
  showExport?: boolean;
20
+ /** Show JSON export button (requires showExport=true) */
21
+ showJsonExport?: boolean;
20
22
  /** Technology color mapping */
21
23
  techColors?: TechColorMap;
22
24
  /** Status color mapping */
@@ -33,6 +35,8 @@ interface Props {
33
35
  persistSettings?: boolean;
34
36
  /** Storage key prefix for persisted settings */
35
37
  storageKey?: string;
38
+ /** Show scrollspy navigation bar for quick group navigation */
39
+ showScrollSpy?: boolean;
36
40
  /** Bindable reference to table methods */
37
41
  tableRef?: {
38
42
  redraw: () => void;
@@ -16,6 +16,8 @@
16
16
  selectedCount?: number;
17
17
  /** Show export buttons */
18
18
  showExport?: boolean;
19
+ /** Show JSON export button (requires showExport=true) */
20
+ showJsonExport?: boolean;
19
21
  /** Show grouping dropdown */
20
22
  showGrouping?: boolean;
21
23
  /** Show preset dropdown */
@@ -46,6 +48,12 @@
46
48
  oncolumnvisibilitychange?: (field: string, visible: boolean) => void;
47
49
  /** Reset columns to preset default */
48
50
  onresetcolumns?: () => void;
51
+ /** Whether scrollspy is enabled */
52
+ scrollSpyEnabled?: boolean;
53
+ /** Show scrollspy toggle button */
54
+ showScrollSpyToggle?: boolean;
55
+ /** Toggle scrollspy event */
56
+ ontogglescrollspy?: () => void;
49
57
  }
50
58
 
51
59
  let {
@@ -55,6 +63,7 @@
55
63
  filteredCount = 0,
56
64
  selectedCount = 0,
57
65
  showExport = true,
66
+ showJsonExport = false,
58
67
  showGrouping = true,
59
68
  showPresets = true,
60
69
  ongroupchange,
@@ -69,7 +78,10 @@
69
78
  columnMeta = [],
70
79
  visibleColumns = [],
71
80
  oncolumnvisibilitychange,
72
- onresetcolumns
81
+ onresetcolumns,
82
+ scrollSpyEnabled = false,
83
+ showScrollSpyToggle = false,
84
+ ontogglescrollspy
73
85
  }: Props = $props();
74
86
 
75
87
  const groupOptions: { value: CellTableGroupField; label: string }[] = [
@@ -192,6 +204,19 @@
192
204
 
193
205
  <!-- Actions -->
194
206
  <div class="toolbar-actions d-flex align-items-center gap-2">
207
+ {#if showScrollSpyToggle}
208
+ <button
209
+ type="button"
210
+ class="btn btn-sm"
211
+ class:btn-outline-secondary={!scrollSpyEnabled}
212
+ class:btn-secondary={scrollSpyEnabled}
213
+ onclick={ontogglescrollspy}
214
+ title={scrollSpyEnabled ? 'Hide quick navigation' : 'Show quick navigation'}
215
+ aria-label={scrollSpyEnabled ? 'Hide quick navigation' : 'Show quick navigation'}
216
+ >
217
+ <i class="bi bi-signpost-split"></i>
218
+ </button>
219
+ {/if}
195
220
  {#if ontogglefilters}
196
221
  <button
197
222
  type="button"
@@ -228,15 +253,17 @@
228
253
  <i class="bi bi-filetype-csv"></i>
229
254
  <span class="d-none d-md-inline ms-1">CSV</span>
230
255
  </button>
231
- <button
232
- type="button"
233
- class="btn btn-sm btn-outline-primary"
234
- onclick={onexportjson}
235
- title="Export to JSON"
236
- >
237
- <i class="bi bi-filetype-json"></i>
238
- <span class="d-none d-md-inline ms-1">JSON</span>
239
- </button>
256
+ {#if showJsonExport}
257
+ <button
258
+ type="button"
259
+ class="btn btn-sm btn-outline-primary"
260
+ onclick={onexportjson}
261
+ title="Export to JSON"
262
+ >
263
+ <i class="bi bi-filetype-json"></i>
264
+ <span class="d-none d-md-inline ms-1">JSON</span>
265
+ </button>
266
+ {/if}
240
267
  </div>
241
268
  {/if}
242
269
  </div>
@@ -13,6 +13,8 @@ interface Props {
13
13
  selectedCount?: number;
14
14
  /** Show export buttons */
15
15
  showExport?: boolean;
16
+ /** Show JSON export button (requires showExport=true) */
17
+ showJsonExport?: boolean;
16
18
  /** Show grouping dropdown */
17
19
  showGrouping?: boolean;
18
20
  /** Show preset dropdown */
@@ -43,6 +45,12 @@ interface Props {
43
45
  oncolumnvisibilitychange?: (field: string, visible: boolean) => void;
44
46
  /** Reset columns to preset default */
45
47
  onresetcolumns?: () => void;
48
+ /** Whether scrollspy is enabled */
49
+ scrollSpyEnabled?: boolean;
50
+ /** Show scrollspy toggle button */
51
+ showScrollSpyToggle?: boolean;
52
+ /** Toggle scrollspy event */
53
+ ontogglescrollspy?: () => void;
46
54
  }
47
55
  declare const CellTableToolbar: import("svelte").Component<Props, {}, "">;
48
56
  type CellTableToolbar = ReturnType<typeof CellTableToolbar>;
@@ -55,7 +55,7 @@ export const FBAND_COLORS = {
55
55
  export const COLUMN_GROUPS = {
56
56
  core: ['siteId', 'txId', 'cellName', 'tech', 'fband', 'status'],
57
57
  physical: ['antenna', 'azimuth', 'height', 'electricalTilt', 'beamwidth'],
58
- network: ['dlEarfn', 'bcch', 'pci1', 'cellId3', 'nwtET', 'nwtPW', 'nwtRS', 'nwtBW'],
58
+ network: ['dlEarfn', 'bcch', 'pci1', 'cellId3', 'nwET', 'nwPW', 'nwRS', 'nwBW'],
59
59
  planning: ['planner', 'comment', 'onAirDate', 'type'],
60
60
  atoll: ['atollET', 'atollPW', 'atollRS', 'atollBW'],
61
61
  position: ['latitude', 'longitude', 'siteLatitude', 'siteLongitude', 'dx', 'dy'],
@@ -363,28 +363,28 @@ export function getAllColumns(techColors = DEFAULT_TECH_COLORS, statusColors = D
363
363
  },
364
364
  {
365
365
  title: 'NWT P1',
366
- field: 'nwtP1',
366
+ field: 'nwP1',
367
367
  width: 80,
368
368
  hozAlign: 'right',
369
369
  ...headerFilterParams,
370
370
  },
371
371
  {
372
372
  title: 'NWT P2',
373
- field: 'nwtP2',
373
+ field: 'nwP2',
374
374
  width: 80,
375
375
  hozAlign: 'right',
376
376
  ...headerFilterParams,
377
377
  },
378
378
  {
379
- title: 'NWT RS',
380
- field: 'nwtRS',
379
+ title: 'NW RS',
380
+ field: 'nwRS',
381
381
  width: 80,
382
382
  hozAlign: 'right',
383
383
  ...headerFilterParams,
384
384
  },
385
385
  {
386
- title: 'NWT BW',
387
- field: 'nwtBW',
386
+ title: 'NW BW',
387
+ field: 'nwBW',
388
388
  width: 80,
389
389
  hozAlign: 'right',
390
390
  ...headerFilterParams,
@@ -428,7 +428,7 @@ export function getAllColumns(techColors = DEFAULT_TECH_COLORS, statusColors = D
428
428
  field: 'compareET',
429
429
  width: 110,
430
430
  hozAlign: 'center',
431
- formatter: createCompareFormatter('atollET', 'nwtET'),
431
+ formatter: createCompareFormatter('atollET', 'nwET'),
432
432
  headerTooltip: 'Atoll ET | Network ET',
433
433
  },
434
434
  {
@@ -436,7 +436,7 @@ export function getAllColumns(techColors = DEFAULT_TECH_COLORS, statusColors = D
436
436
  field: 'comparePW',
437
437
  width: 110,
438
438
  hozAlign: 'center',
439
- formatter: createCompareFormatter('atollPW', 'nwtPW'),
439
+ formatter: createCompareFormatter('atollPW', 'nwPW'),
440
440
  headerTooltip: 'Atoll PW | Network PW',
441
441
  },
442
442
  {
@@ -444,7 +444,7 @@ export function getAllColumns(techColors = DEFAULT_TECH_COLORS, statusColors = D
444
444
  field: 'compareRS',
445
445
  width: 110,
446
446
  hozAlign: 'center',
447
- formatter: createCompareFormatter('atollRS', 'nwtRS'),
447
+ formatter: createCompareFormatter('atollRS', 'nwRS'),
448
448
  headerTooltip: 'Atoll RS | Network RS',
449
449
  },
450
450
  {
@@ -452,7 +452,7 @@ export function getAllColumns(techColors = DEFAULT_TECH_COLORS, statusColors = D
452
452
  field: 'compareBW',
453
453
  width: 110,
454
454
  hozAlign: 'center',
455
- formatter: createCompareFormatter('atollBW', 'nwtBW'),
455
+ formatter: createCompareFormatter('atollBW', 'nwBW'),
456
456
  headerTooltip: 'Atoll BW | Network BW',
457
457
  },
458
458
  // Position columns
@@ -607,10 +607,10 @@ export function getColumnMetadata() {
607
607
  { field: 'cellID', title: 'Cell ID', group: 'Network' },
608
608
  { field: 'cellId2G', title: 'Cell ID 2G', group: 'Network' },
609
609
  { field: 'ctrlid', title: 'Ctrl ID', group: 'Network' },
610
- { field: 'nwtET', title: 'NWT ET', group: 'Network' },
611
- { field: 'nwtPW', title: 'NWT PW', group: 'Network' },
612
- { field: 'nwtRS', title: 'NWT RS', group: 'Network' },
613
- { field: 'nwtBW', title: 'NWT BW', group: 'Network' },
610
+ { field: 'nwET', title: 'NW ET', group: 'Network' },
611
+ { field: 'nwPW', title: 'NW PW', group: 'Network' },
612
+ { field: 'nwRS', title: 'NW RS', group: 'Network' },
613
+ { field: 'nwBW', title: 'NW BW', group: 'Network' },
614
614
  // Atoll
615
615
  { field: 'atollET', title: 'Atoll ET', group: 'Atoll' },
616
616
  { field: 'atollPW', title: 'Atoll PW', group: 'Atoll' },
@@ -116,8 +116,8 @@ export class SiteStore {
116
116
  availableTilts: ['0']
117
117
  };
118
118
  }
119
- // Determine TX power (priority: atollPW > nwtPW > default)
120
- const txPower = cell.atollPW || cell.nwtPW || 43; // Default to 43 dBm (20W)
119
+ // Determine TX power (priority: atollPW > nwPW > default)
120
+ const txPower = cell.atollPW || cell.nwPW || 43; // Default to 43 dBm (20W)
121
121
  // Determine frequency from band
122
122
  const frequency = antennaPattern.frequency || this.parseFrequency(cell.fband);
123
123
  // Get mechanical tilt (might need to parse from string)
@@ -195,11 +195,11 @@ for (let attempt = 0; attempt < NUM_SITES * 3 && actualSiteIndex < NUM_SITES; at
195
195
  atollBW: parseFloat(techBand.band) / 100, // Simplified bandwidth
196
196
  // Network properties
197
197
  cellId3: `${cellId}-3G`,
198
- nwtP1: 20,
199
- nwtP2: 40,
198
+ nwP1: 20,
199
+ nwP2: 40,
200
200
  pci1: (cellCounter % 504), // Physical Cell ID for LTE
201
- nwtRS: 450.0,
202
- nwtBW: 10.0,
201
+ nwRS: 450.0,
202
+ nwBW: 10.0,
203
203
  // Other
204
204
  other: {
205
205
  demoCell: true,
@@ -40,11 +40,11 @@ export interface Cell {
40
40
  atollRS: number;
41
41
  atollBW: number;
42
42
  cellId3: string;
43
- nwtP1: number;
44
- nwtP2: number;
43
+ nwP1: number;
44
+ nwP2: number;
45
45
  pci1: number;
46
- nwtRS: number;
47
- nwtBW: number;
46
+ nwRS: number;
47
+ nwBW: number;
48
48
  other?: Record<string, any>;
49
49
  customSubgroup: string;
50
50
  }
@@ -206,11 +206,11 @@ export function generateCells(config) {
206
206
  atollRS: 500.0 + (techBand.band === '700' ? 200 : 0),
207
207
  atollBW: parseFloat(techBand.band) / 100,
208
208
  rru: `RRU-${siteId}-${sector.sectorNum}`,
209
- nwtET: 40.0,
210
- nwtPW: 20,
209
+ nwET: 40.0,
210
+ nwPW: 20,
211
211
  pci: cellCounter % 504,
212
- nwtRS: 450.0,
213
- nwtBW: 10.0,
212
+ nwRS: 450.0,
213
+ nwBW: 10.0,
214
214
  other: {
215
215
  city: ['Tehran', 'Shiraz', 'Isfahan', 'Mashhad', 'Tabriz'][siteNum % 5],
216
216
  bcc: bandIndex % 8,
@@ -39,10 +39,10 @@ export interface Cell {
39
39
  atollPW?: number;
40
40
  atollRS?: number;
41
41
  atollBW?: number;
42
- nwtET?: number;
43
- nwtPW?: number;
44
- nwtRS?: number;
45
- nwtBW?: number;
42
+ nwET?: number;
43
+ nwPW?: number;
44
+ nwRS?: number;
45
+ nwBW?: number;
46
46
  pci?: number;
47
47
  rru: string;
48
48
  other?: Record<string, unknown>;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@smartnet360/svelte-components",
3
- "version": "0.0.113",
3
+ "version": "0.0.115",
4
4
  "scripts": {
5
5
  "dev": "vite dev",
6
6
  "build": "vite build && npm run prepack",