@smartnet360/svelte-components 0.0.133 → 0.0.135
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.
- package/dist/core/CellHistory/CellHistoryPanel.svelte +178 -0
- package/dist/core/CellHistory/CellHistoryPanel.svelte.d.ts +4 -0
- package/dist/core/CellHistory/column-config.d.ts +26 -0
- package/dist/core/CellHistory/column-config.js +120 -0
- package/dist/core/CellHistory/index.d.ts +9 -0
- package/dist/core/CellHistory/index.js +10 -0
- package/dist/core/CellHistory/transformers.d.ts +16 -0
- package/dist/core/CellHistory/transformers.js +76 -0
- package/dist/core/CellHistory/types.d.ts +54 -0
- package/dist/core/CellHistory/types.js +6 -0
- package/dist/core/CellTable/CellHistoryDemo.svelte +1 -0
- package/dist/core/CellTable/CellTable.svelte +7 -5
- package/dist/core/CellTable/CellTablePanel.svelte +82 -14
- package/dist/core/CellTable/CellTablePanel.svelte.d.ts +2 -0
- package/dist/core/CellTable/column-config.js +46 -58
- package/dist/core/CellTableV2/CellTable.svelte +601 -0
- package/dist/core/CellTableV2/CellTable.svelte.d.ts +43 -0
- package/dist/core/CellTableV2/CellTablePanel.svelte +685 -0
- package/dist/core/CellTableV2/CellTablePanel.svelte.d.ts +98 -0
- package/dist/core/CellTableV2/CellTableToolbar.svelte +322 -0
- package/dist/core/CellTableV2/CellTableToolbar.svelte.d.ts +59 -0
- package/dist/core/CellTableV2/ColumnPicker.svelte +214 -0
- package/dist/core/CellTableV2/ColumnPicker.svelte.d.ts +26 -0
- package/dist/core/CellTableV2/column-config.d.ts +120 -0
- package/dist/core/CellTableV2/column-config.js +671 -0
- package/dist/core/CellTableV2/composables/index.d.ts +12 -0
- package/dist/core/CellTableV2/composables/index.js +9 -0
- package/dist/core/CellTableV2/composables/useColumnVisibility.svelte.d.ts +45 -0
- package/dist/core/CellTableV2/composables/useColumnVisibility.svelte.js +98 -0
- package/dist/core/CellTableV2/composables/usePersistence.svelte.d.ts +28 -0
- package/dist/core/CellTableV2/composables/usePersistence.svelte.js +101 -0
- package/dist/core/CellTableV2/composables/useScrollSpy.svelte.d.ts +44 -0
- package/dist/core/CellTableV2/composables/useScrollSpy.svelte.js +91 -0
- package/dist/core/CellTableV2/index.d.ts +12 -0
- package/dist/core/CellTableV2/index.js +14 -0
- package/dist/core/CellTableV2/types.d.ts +172 -0
- package/dist/core/CellTableV2/types.js +6 -0
- package/dist/core/index.d.ts +2 -0
- package/dist/core/index.js +5 -0
- package/package.json +1 -1
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* useColumnVisibility - Column visibility management composable
|
|
3
|
+
*
|
|
4
|
+
* Manages column preset selection and per-preset column visibility customization.
|
|
5
|
+
* Uses Svelte 5 runes for reactive state.
|
|
6
|
+
*/
|
|
7
|
+
import type { ColumnPreset } from '../types';
|
|
8
|
+
import type { ColumnMeta } from '../column-config';
|
|
9
|
+
export interface UseColumnVisibilityOptions {
|
|
10
|
+
/** Base storage key for persistence */
|
|
11
|
+
storageKey: string;
|
|
12
|
+
/** Column metadata for the column picker */
|
|
13
|
+
columnMeta: ColumnMeta[];
|
|
14
|
+
/** Initial column preset */
|
|
15
|
+
initialPreset?: ColumnPreset;
|
|
16
|
+
/** Whether to persist settings to localStorage */
|
|
17
|
+
persistSettings?: boolean;
|
|
18
|
+
}
|
|
19
|
+
export interface UseColumnVisibilityReturn {
|
|
20
|
+
/** Current column preset (reactive) */
|
|
21
|
+
readonly columnPreset: ColumnPreset;
|
|
22
|
+
/** Currently visible column fields (reactive) */
|
|
23
|
+
readonly visibleColumns: string[];
|
|
24
|
+
/** Column metadata */
|
|
25
|
+
readonly columnMeta: ColumnMeta[];
|
|
26
|
+
/** Load saved columns for a preset (or default if none saved) */
|
|
27
|
+
loadColumnsForPreset: (preset: ColumnPreset) => string[];
|
|
28
|
+
/** Set the column preset and load its columns */
|
|
29
|
+
setPreset: (preset: ColumnPreset) => void;
|
|
30
|
+
/** Toggle a single column's visibility */
|
|
31
|
+
toggleColumn: (field: string, visible: boolean) => void;
|
|
32
|
+
/** Reset current preset to its default columns */
|
|
33
|
+
resetToDefaults: () => void;
|
|
34
|
+
/** Apply column visibility to a CellTable instance */
|
|
35
|
+
applyToTable: (table: {
|
|
36
|
+
showColumn: (f: string) => void;
|
|
37
|
+
hideColumn: (f: string) => void;
|
|
38
|
+
} | undefined) => void;
|
|
39
|
+
/** Save current visibility state */
|
|
40
|
+
saveVisibility: () => void;
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Create column visibility management for a cell table
|
|
44
|
+
*/
|
|
45
|
+
export declare function useColumnVisibility(options: UseColumnVisibilityOptions): UseColumnVisibilityReturn;
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* useColumnVisibility - Column visibility management composable
|
|
3
|
+
*
|
|
4
|
+
* Manages column preset selection and per-preset column visibility customization.
|
|
5
|
+
* Uses Svelte 5 runes for reactive state.
|
|
6
|
+
*/
|
|
7
|
+
import { getPresetVisibleFields } from '../column-config';
|
|
8
|
+
import { usePersistence } from './usePersistence.svelte';
|
|
9
|
+
/**
|
|
10
|
+
* Create column visibility management for a cell table
|
|
11
|
+
*/
|
|
12
|
+
export function useColumnVisibility(options) {
|
|
13
|
+
const { storageKey, columnMeta, initialPreset = 'default', persistSettings = true } = options;
|
|
14
|
+
// Persistence utilities
|
|
15
|
+
const persistence = usePersistence({ storageKey, enabled: persistSettings });
|
|
16
|
+
// Storage key for per-preset column visibility
|
|
17
|
+
function getColumnsKey(preset) {
|
|
18
|
+
return `visibleColumns-${preset}`;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Load saved columns for a preset (or default if none saved)
|
|
22
|
+
*/
|
|
23
|
+
function loadColumnsForPreset(preset) {
|
|
24
|
+
const saved = persistence.load(getColumnsKey(preset), null);
|
|
25
|
+
if (saved && Array.isArray(saved)) {
|
|
26
|
+
return saved;
|
|
27
|
+
}
|
|
28
|
+
return getPresetVisibleFields(preset);
|
|
29
|
+
}
|
|
30
|
+
// Load initial preset from storage
|
|
31
|
+
const savedPreset = persistence.loadString('columnPreset', initialPreset);
|
|
32
|
+
// Reactive state
|
|
33
|
+
let _columnPreset = $state(savedPreset);
|
|
34
|
+
let _visibleColumns = $state(loadColumnsForPreset(savedPreset));
|
|
35
|
+
/**
|
|
36
|
+
* Save current column visibility for current preset
|
|
37
|
+
*/
|
|
38
|
+
function saveVisibility() {
|
|
39
|
+
persistence.save(getColumnsKey(_columnPreset), _visibleColumns);
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Set the column preset and load its saved columns
|
|
43
|
+
*/
|
|
44
|
+
function setPreset(preset) {
|
|
45
|
+
_columnPreset = preset;
|
|
46
|
+
_visibleColumns = loadColumnsForPreset(preset);
|
|
47
|
+
persistence.saveString('columnPreset', preset);
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Toggle a single column's visibility
|
|
51
|
+
*/
|
|
52
|
+
function toggleColumn(field, visible) {
|
|
53
|
+
if (visible) {
|
|
54
|
+
if (!_visibleColumns.includes(field)) {
|
|
55
|
+
_visibleColumns = [..._visibleColumns, field];
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
else {
|
|
59
|
+
_visibleColumns = _visibleColumns.filter(f => f !== field);
|
|
60
|
+
}
|
|
61
|
+
saveVisibility();
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Reset current preset to its default columns
|
|
65
|
+
*/
|
|
66
|
+
function resetToDefaults() {
|
|
67
|
+
_visibleColumns = getPresetVisibleFields(_columnPreset);
|
|
68
|
+
// Remove saved customization
|
|
69
|
+
persistence.remove(getColumnsKey(_columnPreset));
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Apply column visibility to a CellTable instance
|
|
73
|
+
*/
|
|
74
|
+
function applyToTable(table) {
|
|
75
|
+
if (!table)
|
|
76
|
+
return;
|
|
77
|
+
columnMeta.forEach(col => {
|
|
78
|
+
if (_visibleColumns.includes(col.field)) {
|
|
79
|
+
table.showColumn(col.field);
|
|
80
|
+
}
|
|
81
|
+
else {
|
|
82
|
+
table.hideColumn(col.field);
|
|
83
|
+
}
|
|
84
|
+
});
|
|
85
|
+
}
|
|
86
|
+
// Return with getters for reactivity
|
|
87
|
+
return {
|
|
88
|
+
get columnPreset() { return _columnPreset; },
|
|
89
|
+
get visibleColumns() { return _visibleColumns; },
|
|
90
|
+
columnMeta,
|
|
91
|
+
loadColumnsForPreset,
|
|
92
|
+
setPreset,
|
|
93
|
+
toggleColumn,
|
|
94
|
+
resetToDefaults,
|
|
95
|
+
applyToTable,
|
|
96
|
+
saveVisibility
|
|
97
|
+
};
|
|
98
|
+
}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* usePersistence - localStorage persistence utility
|
|
3
|
+
*
|
|
4
|
+
* Provides namespaced read/write/remove functions for persisting UI state.
|
|
5
|
+
* Does not use reactive state - just utility functions.
|
|
6
|
+
*/
|
|
7
|
+
export interface UsePersistenceOptions {
|
|
8
|
+
/** Base storage key prefix for namespacing */
|
|
9
|
+
storageKey: string;
|
|
10
|
+
/** Whether persistence is enabled */
|
|
11
|
+
enabled?: boolean;
|
|
12
|
+
}
|
|
13
|
+
export interface UsePersistenceReturn {
|
|
14
|
+
/** Load a value from localStorage */
|
|
15
|
+
load: <T>(key: string, defaultValue: T) => T;
|
|
16
|
+
/** Save a value to localStorage */
|
|
17
|
+
save: <T>(key: string, value: T) => void;
|
|
18
|
+
/** Remove a value from localStorage */
|
|
19
|
+
remove: (key: string) => void;
|
|
20
|
+
/** Load a string value (no JSON parsing) */
|
|
21
|
+
loadString: (key: string, defaultValue: string) => string;
|
|
22
|
+
/** Save a string value (no JSON stringifying) */
|
|
23
|
+
saveString: (key: string, value: string) => void;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Create persistence utilities for a given storage namespace
|
|
27
|
+
*/
|
|
28
|
+
export declare function usePersistence(options: UsePersistenceOptions): UsePersistenceReturn;
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* usePersistence - localStorage persistence utility
|
|
3
|
+
*
|
|
4
|
+
* Provides namespaced read/write/remove functions for persisting UI state.
|
|
5
|
+
* Does not use reactive state - just utility functions.
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* Create persistence utilities for a given storage namespace
|
|
9
|
+
*/
|
|
10
|
+
export function usePersistence(options) {
|
|
11
|
+
const { storageKey, enabled = true } = options;
|
|
12
|
+
/**
|
|
13
|
+
* Get full storage key with namespace
|
|
14
|
+
*/
|
|
15
|
+
function getKey(key) {
|
|
16
|
+
return `${storageKey}-${key}`;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Load a JSON value from localStorage
|
|
20
|
+
*/
|
|
21
|
+
function load(key, defaultValue) {
|
|
22
|
+
if (!enabled || typeof localStorage === 'undefined') {
|
|
23
|
+
return defaultValue;
|
|
24
|
+
}
|
|
25
|
+
try {
|
|
26
|
+
const saved = localStorage.getItem(getKey(key));
|
|
27
|
+
if (saved !== null) {
|
|
28
|
+
return JSON.parse(saved);
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
catch (e) {
|
|
32
|
+
console.warn(`Failed to load ${key}:`, e);
|
|
33
|
+
}
|
|
34
|
+
return defaultValue;
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Save a JSON value to localStorage
|
|
38
|
+
*/
|
|
39
|
+
function save(key, value) {
|
|
40
|
+
if (!enabled || typeof localStorage === 'undefined') {
|
|
41
|
+
return;
|
|
42
|
+
}
|
|
43
|
+
try {
|
|
44
|
+
localStorage.setItem(getKey(key), JSON.stringify(value));
|
|
45
|
+
}
|
|
46
|
+
catch (e) {
|
|
47
|
+
console.warn(`Failed to save ${key}:`, e);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Remove a value from localStorage
|
|
52
|
+
*/
|
|
53
|
+
function remove(key) {
|
|
54
|
+
if (!enabled || typeof localStorage === 'undefined') {
|
|
55
|
+
return;
|
|
56
|
+
}
|
|
57
|
+
try {
|
|
58
|
+
localStorage.removeItem(getKey(key));
|
|
59
|
+
}
|
|
60
|
+
catch (e) {
|
|
61
|
+
console.warn(`Failed to remove ${key}:`, e);
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Load a string value (no JSON parsing)
|
|
66
|
+
*/
|
|
67
|
+
function loadString(key, defaultValue) {
|
|
68
|
+
if (!enabled || typeof localStorage === 'undefined') {
|
|
69
|
+
return defaultValue;
|
|
70
|
+
}
|
|
71
|
+
try {
|
|
72
|
+
const saved = localStorage.getItem(getKey(key));
|
|
73
|
+
return saved ?? defaultValue;
|
|
74
|
+
}
|
|
75
|
+
catch (e) {
|
|
76
|
+
console.warn(`Failed to load string ${key}:`, e);
|
|
77
|
+
return defaultValue;
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Save a string value (no JSON stringifying)
|
|
82
|
+
*/
|
|
83
|
+
function saveString(key, value) {
|
|
84
|
+
if (!enabled || typeof localStorage === 'undefined') {
|
|
85
|
+
return;
|
|
86
|
+
}
|
|
87
|
+
try {
|
|
88
|
+
localStorage.setItem(getKey(key), value);
|
|
89
|
+
}
|
|
90
|
+
catch (e) {
|
|
91
|
+
console.warn(`Failed to save string ${key}:`, e);
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
return {
|
|
95
|
+
load,
|
|
96
|
+
save,
|
|
97
|
+
remove,
|
|
98
|
+
loadString,
|
|
99
|
+
saveString
|
|
100
|
+
};
|
|
101
|
+
}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* useScrollSpy - ScrollSpy navigation composable
|
|
3
|
+
*
|
|
4
|
+
* Manages group-based scroll navigation for grouped tables.
|
|
5
|
+
* Uses Svelte 5 runes for reactive state.
|
|
6
|
+
*/
|
|
7
|
+
export interface ScrollSpyGroup {
|
|
8
|
+
key: string;
|
|
9
|
+
count: number;
|
|
10
|
+
}
|
|
11
|
+
export interface CellTableRef {
|
|
12
|
+
getGroups: () => ScrollSpyGroup[];
|
|
13
|
+
scrollToGroup: (key: string) => void;
|
|
14
|
+
}
|
|
15
|
+
export interface UseScrollSpyOptions {
|
|
16
|
+
/** Base storage key for persistence */
|
|
17
|
+
storageKey: string;
|
|
18
|
+
/** Initial enabled state */
|
|
19
|
+
initialEnabled?: boolean;
|
|
20
|
+
/** Whether to persist settings */
|
|
21
|
+
persistSettings?: boolean;
|
|
22
|
+
}
|
|
23
|
+
export interface UseScrollSpyReturn {
|
|
24
|
+
/** ScrollSpy groups (reactive) */
|
|
25
|
+
readonly groups: ScrollSpyGroup[];
|
|
26
|
+
/** Whether scrollspy is enabled (reactive) */
|
|
27
|
+
readonly enabled: boolean;
|
|
28
|
+
/** Toggle scrollspy on/off */
|
|
29
|
+
toggle: () => void;
|
|
30
|
+
/** Enable scrollspy */
|
|
31
|
+
enable: () => void;
|
|
32
|
+
/** Disable scrollspy */
|
|
33
|
+
disable: () => void;
|
|
34
|
+
/** Update groups from table data */
|
|
35
|
+
updateGroups: (table: CellTableRef | undefined) => void;
|
|
36
|
+
/** Scroll to a specific group */
|
|
37
|
+
scrollToGroup: (table: CellTableRef | undefined, key: string) => void;
|
|
38
|
+
/** Clear groups */
|
|
39
|
+
clearGroups: () => void;
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Create scrollspy navigation for a grouped table
|
|
43
|
+
*/
|
|
44
|
+
export declare function useScrollSpy(options: UseScrollSpyOptions): UseScrollSpyReturn;
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* useScrollSpy - ScrollSpy navigation composable
|
|
3
|
+
*
|
|
4
|
+
* Manages group-based scroll navigation for grouped tables.
|
|
5
|
+
* Uses Svelte 5 runes for reactive state.
|
|
6
|
+
*/
|
|
7
|
+
import { usePersistence } from './usePersistence.svelte';
|
|
8
|
+
/**
|
|
9
|
+
* Create scrollspy navigation for a grouped table
|
|
10
|
+
*/
|
|
11
|
+
export function useScrollSpy(options) {
|
|
12
|
+
const { storageKey, initialEnabled = false, persistSettings = true } = options;
|
|
13
|
+
// Persistence utilities
|
|
14
|
+
const persistence = usePersistence({ storageKey, enabled: persistSettings });
|
|
15
|
+
// Load initial state
|
|
16
|
+
const savedEnabled = persistence.loadString('scrollSpyEnabled', String(initialEnabled)) === 'true';
|
|
17
|
+
// Reactive state
|
|
18
|
+
let _groups = $state([]);
|
|
19
|
+
let _enabled = $state(savedEnabled);
|
|
20
|
+
/**
|
|
21
|
+
* Toggle scrollspy on/off
|
|
22
|
+
*/
|
|
23
|
+
function toggle() {
|
|
24
|
+
_enabled = !_enabled;
|
|
25
|
+
persistence.saveString('scrollSpyEnabled', String(_enabled));
|
|
26
|
+
if (!_enabled) {
|
|
27
|
+
_groups = [];
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Enable scrollspy
|
|
32
|
+
*/
|
|
33
|
+
function enable() {
|
|
34
|
+
_enabled = true;
|
|
35
|
+
persistence.saveString('scrollSpyEnabled', 'true');
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Disable scrollspy
|
|
39
|
+
*/
|
|
40
|
+
function disable() {
|
|
41
|
+
_enabled = false;
|
|
42
|
+
persistence.saveString('scrollSpyEnabled', 'false');
|
|
43
|
+
_groups = [];
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Update groups from table data
|
|
47
|
+
*/
|
|
48
|
+
function updateGroups(table) {
|
|
49
|
+
if (!table || !_enabled) {
|
|
50
|
+
_groups = [];
|
|
51
|
+
return;
|
|
52
|
+
}
|
|
53
|
+
try {
|
|
54
|
+
_groups = table.getGroups();
|
|
55
|
+
}
|
|
56
|
+
catch (e) {
|
|
57
|
+
console.warn('Failed to get groups:', e);
|
|
58
|
+
_groups = [];
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Scroll to a specific group
|
|
63
|
+
*/
|
|
64
|
+
function scrollToGroup(table, key) {
|
|
65
|
+
if (!table)
|
|
66
|
+
return;
|
|
67
|
+
try {
|
|
68
|
+
table.scrollToGroup(key);
|
|
69
|
+
}
|
|
70
|
+
catch (e) {
|
|
71
|
+
console.warn('Failed to scroll to group:', e);
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Clear groups
|
|
76
|
+
*/
|
|
77
|
+
function clearGroups() {
|
|
78
|
+
_groups = [];
|
|
79
|
+
}
|
|
80
|
+
// Return with getters for reactivity
|
|
81
|
+
return {
|
|
82
|
+
get groups() { return _groups; },
|
|
83
|
+
get enabled() { return _enabled; },
|
|
84
|
+
toggle,
|
|
85
|
+
enable,
|
|
86
|
+
disable,
|
|
87
|
+
updateGroups,
|
|
88
|
+
scrollToGroup,
|
|
89
|
+
clearGroups
|
|
90
|
+
};
|
|
91
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CellTableV2 - Main Exports
|
|
3
|
+
*
|
|
4
|
+
* Composable-based cell table components with reusable logic hooks.
|
|
5
|
+
*/
|
|
6
|
+
export { default as CellTable } from './CellTable.svelte';
|
|
7
|
+
export { default as CellTablePanel } from './CellTablePanel.svelte';
|
|
8
|
+
export { default as CellTableToolbar } from './CellTableToolbar.svelte';
|
|
9
|
+
export { default as ColumnPicker } from './ColumnPicker.svelte';
|
|
10
|
+
export * from './composables';
|
|
11
|
+
export { DEFAULT_TECH_COLORS, DEFAULT_STATUS_COLORS, FBAND_COLORS, COLUMN_GROUPS, getColumnMetadata, getColumnsForPreset, getPresetVisibleFields, getAllColumns, } from './column-config';
|
|
12
|
+
export type { CellData, CellTableColumn, CellTableGroupField, CellTableProps, ColumnPreset, GroupOption, RowSelectionEvent, RowClickEvent, RowDblClickEvent, RowContextMenuEvent, DataChangeEvent, TechColorMap, StatusColorMap, } from './types';
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CellTableV2 - Main Exports
|
|
3
|
+
*
|
|
4
|
+
* Composable-based cell table components with reusable logic hooks.
|
|
5
|
+
*/
|
|
6
|
+
// Core components
|
|
7
|
+
export { default as CellTable } from './CellTable.svelte';
|
|
8
|
+
export { default as CellTablePanel } from './CellTablePanel.svelte';
|
|
9
|
+
export { default as CellTableToolbar } from './CellTableToolbar.svelte';
|
|
10
|
+
export { default as ColumnPicker } from './ColumnPicker.svelte';
|
|
11
|
+
// Composables
|
|
12
|
+
export * from './composables';
|
|
13
|
+
// Column configuration
|
|
14
|
+
export { DEFAULT_TECH_COLORS, DEFAULT_STATUS_COLORS, FBAND_COLORS, COLUMN_GROUPS, getColumnMetadata, getColumnsForPreset, getPresetVisibleFields, getAllColumns, } from './column-config';
|
|
@@ -0,0 +1,172 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CellTable Component - Type Definitions
|
|
3
|
+
*
|
|
4
|
+
* Types for the Tabulator-based cell data table component
|
|
5
|
+
*/
|
|
6
|
+
import type { ColumnDefinition, Options } from 'tabulator-tables';
|
|
7
|
+
import type { Cell, CellGroupingField } from '../../shared/demo';
|
|
8
|
+
/**
|
|
9
|
+
* Cell data model - re-exported from shared for convenience
|
|
10
|
+
*/
|
|
11
|
+
export type CellData = Cell;
|
|
12
|
+
/**
|
|
13
|
+
* Available grouping fields for the table - extends shared type with 'none' option
|
|
14
|
+
*/
|
|
15
|
+
export type CellTableGroupField = CellGroupingField | 'none';
|
|
16
|
+
/**
|
|
17
|
+
* Column preset configurations
|
|
18
|
+
* Note: 'history' and 'kpi' presets moved to separate modules (CellHistory, CellKPI)
|
|
19
|
+
*/
|
|
20
|
+
export type ColumnPreset = 'default' | 'compact' | 'full' | 'physical' | 'network' | 'planning' | 'compare';
|
|
21
|
+
/**
|
|
22
|
+
* Column visibility configuration
|
|
23
|
+
*/
|
|
24
|
+
export interface ColumnVisibility {
|
|
25
|
+
[key: string]: boolean;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Grouping option for toolbar dropdown
|
|
29
|
+
*/
|
|
30
|
+
export interface GroupOption {
|
|
31
|
+
/** Field name to group by (or 'none') */
|
|
32
|
+
value: string;
|
|
33
|
+
/** Display label in dropdown */
|
|
34
|
+
label: string;
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Technology color mapping
|
|
38
|
+
*/
|
|
39
|
+
export interface TechColorMap {
|
|
40
|
+
[tech: string]: string;
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Status color mapping
|
|
44
|
+
*/
|
|
45
|
+
export interface StatusColorMap {
|
|
46
|
+
[status: string]: string;
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* CellTable component props
|
|
50
|
+
*/
|
|
51
|
+
export interface CellTableProps {
|
|
52
|
+
/** Cell data array to display */
|
|
53
|
+
cells: CellData[];
|
|
54
|
+
/** Field to group rows by */
|
|
55
|
+
groupBy?: CellTableGroupField;
|
|
56
|
+
/** Initial column preset */
|
|
57
|
+
columnPreset?: ColumnPreset;
|
|
58
|
+
/** Custom column visibility overrides */
|
|
59
|
+
columnVisibility?: ColumnVisibility;
|
|
60
|
+
/** Enable row selection */
|
|
61
|
+
selectable?: boolean;
|
|
62
|
+
/** Enable multi-row selection */
|
|
63
|
+
multiSelect?: boolean;
|
|
64
|
+
/** Table height (CSS value) */
|
|
65
|
+
height?: string;
|
|
66
|
+
/** Enable virtual DOM for large datasets */
|
|
67
|
+
virtualDom?: boolean;
|
|
68
|
+
/** Custom Tabulator options override */
|
|
69
|
+
tabulatorOptions?: Partial<Options>;
|
|
70
|
+
/** Technology color mapping */
|
|
71
|
+
techColors?: TechColorMap;
|
|
72
|
+
/** Status color mapping */
|
|
73
|
+
statusColors?: StatusColorMap;
|
|
74
|
+
/** Enable header filters */
|
|
75
|
+
headerFilters?: boolean;
|
|
76
|
+
/** Enable column resizing */
|
|
77
|
+
resizableColumns?: boolean;
|
|
78
|
+
/** Enable movable columns */
|
|
79
|
+
movableColumns?: boolean;
|
|
80
|
+
/** Persist column layout to localStorage */
|
|
81
|
+
persistLayout?: boolean;
|
|
82
|
+
/** Storage key for persisted layout */
|
|
83
|
+
storageKey?: string;
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Row selection event data
|
|
87
|
+
*/
|
|
88
|
+
export interface RowSelectionEvent {
|
|
89
|
+
rows: CellData[];
|
|
90
|
+
ids: string[];
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Row click event data
|
|
94
|
+
*/
|
|
95
|
+
export interface RowClickEvent {
|
|
96
|
+
row: CellData;
|
|
97
|
+
event: MouseEvent;
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* Row double-click event data
|
|
101
|
+
*/
|
|
102
|
+
export interface RowDblClickEvent {
|
|
103
|
+
row: CellData;
|
|
104
|
+
event: MouseEvent;
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* Row context menu (right-click) event data
|
|
108
|
+
*/
|
|
109
|
+
export interface RowContextMenuEvent {
|
|
110
|
+
row: CellData;
|
|
111
|
+
event: MouseEvent;
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* Data change event data
|
|
115
|
+
*/
|
|
116
|
+
export interface DataChangeEvent {
|
|
117
|
+
type: 'load' | 'update' | 'filter' | 'sort' | 'group';
|
|
118
|
+
rowCount: number;
|
|
119
|
+
filteredCount: number;
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* Column definition with Bootstrap styling helpers
|
|
123
|
+
*/
|
|
124
|
+
export interface CellTableColumn extends ColumnDefinition {
|
|
125
|
+
/** Bootstrap badge variant for cell rendering */
|
|
126
|
+
badgeVariant?: 'primary' | 'secondary' | 'success' | 'danger' | 'warning' | 'info' | 'light' | 'dark';
|
|
127
|
+
/** Use technology-based coloring */
|
|
128
|
+
techColored?: boolean;
|
|
129
|
+
/** Use status-based coloring */
|
|
130
|
+
statusColored?: boolean;
|
|
131
|
+
}
|
|
132
|
+
/**
|
|
133
|
+
* Predefined column groups for presets
|
|
134
|
+
* Note: 'kpi' and 'history' groups moved to separate modules
|
|
135
|
+
*/
|
|
136
|
+
export interface ColumnGroups {
|
|
137
|
+
core: string[];
|
|
138
|
+
physical: string[];
|
|
139
|
+
network: string[];
|
|
140
|
+
planning: string[];
|
|
141
|
+
atoll: string[];
|
|
142
|
+
position: string[];
|
|
143
|
+
compare: string[];
|
|
144
|
+
}
|
|
145
|
+
/**
|
|
146
|
+
* Cell configuration history record
|
|
147
|
+
* Each record represents a point in time where a cell's configuration changed
|
|
148
|
+
*/
|
|
149
|
+
export interface CellHistoryData {
|
|
150
|
+
/** Cell name identifier */
|
|
151
|
+
CELLNAME: string;
|
|
152
|
+
/** Frequency in MHz (e.g., 1800, 2100, 3500) */
|
|
153
|
+
FREQUENCY: number;
|
|
154
|
+
/** Date of configuration change (ISO 8601 format) */
|
|
155
|
+
CONFIG_DATE: string;
|
|
156
|
+
/** Current antenna type at this config date */
|
|
157
|
+
ANTENNA_TYPE: string;
|
|
158
|
+
/** Previous antenna type before this change */
|
|
159
|
+
PREV_ANTENNA_TYPE: string;
|
|
160
|
+
/** Current antenna output power (dBm) */
|
|
161
|
+
ANTOUTPUTPWR: number;
|
|
162
|
+
/** Previous antenna output power */
|
|
163
|
+
PREV_ANTOUTPUTPWR: number;
|
|
164
|
+
/** Current mechanical tilt (degrees) */
|
|
165
|
+
MECHANIC_TILT: number;
|
|
166
|
+
/** Previous mechanical tilt */
|
|
167
|
+
PREV_MECHANIC_TILT: number;
|
|
168
|
+
/** Current electrical tilt (degrees) */
|
|
169
|
+
ELECTRONIC_TILT: number;
|
|
170
|
+
/** Previous electrical tilt */
|
|
171
|
+
PREV_ELECTRONIC_TILT: number;
|
|
172
|
+
}
|
package/dist/core/index.d.ts
CHANGED
|
@@ -4,6 +4,8 @@ export * from './TreeView/index.js';
|
|
|
4
4
|
export * from './Settings/index.js';
|
|
5
5
|
export * from './logger/index.js';
|
|
6
6
|
export * from './CellTable/index.js';
|
|
7
|
+
export * as CellTableV2 from './CellTableV2/index.js';
|
|
8
|
+
export * from './CellHistory/index.js';
|
|
7
9
|
export * from './FeatureRegistry/index.js';
|
|
8
10
|
export * from './Benchmark/index.js';
|
|
9
11
|
export * from './Auth/index.js';
|
package/dist/core/index.js
CHANGED
|
@@ -12,6 +12,11 @@ export * from './Settings/index.js';
|
|
|
12
12
|
export * from './logger/index.js';
|
|
13
13
|
// CellTable - Tabulator-based cell data table with Bootstrap theming
|
|
14
14
|
export * from './CellTable/index.js';
|
|
15
|
+
// CellTableV2 - Refactored with composables architecture
|
|
16
|
+
// Use namespaced import to avoid conflicts with V1: import { CellTableV2 } from './'
|
|
17
|
+
export * as CellTableV2 from './CellTableV2/index.js';
|
|
18
|
+
// CellHistory - Cell configuration history feature (uses CellTableV2)
|
|
19
|
+
export * from './CellHistory/index.js';
|
|
15
20
|
// Map component - Mapbox GL + Deck.GL integration
|
|
16
21
|
// TODO: Moved to top-level src/lib/map module
|
|
17
22
|
// export * from './Map/index.js';
|