sgerp-frontend-lib 0.1.4 → 0.1.5
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/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/locales/locale-server.d.ts +1 -1
- package/dist/locales/locale-server.d.ts.map +1 -1
- package/dist/locales/locale-server.js +5 -0
- package/dist/locales/locale.d.ts +1 -1
- package/dist/locales/locale.d.ts.map +1 -1
- package/dist/locales/locale.js +6 -2
- package/dist/locales/locale_en.d.ts.map +1 -1
- package/dist/locales/locale_en.js +77 -1
- package/dist/locales/locale_id.d.ts +2 -0
- package/dist/locales/locale_id.d.ts.map +1 -0
- package/dist/locales/locale_id.js +2473 -0
- package/dist/locales/locale_ja.d.ts.map +1 -1
- package/dist/locales/locale_ja.js +76 -1
- package/dist/locales/locale_ms.d.ts.map +1 -1
- package/dist/locales/locale_ms.js +60 -1
- package/dist/locales/locale_tl.d.ts +2 -0
- package/dist/locales/locale_tl.d.ts.map +1 -0
- package/dist/locales/locale_tl.js +1122 -0
- package/dist/sgerp/collection.d.ts.map +1 -1
- package/dist/sgerp/collection.js +18 -4
- package/dist/sgerp/domains.d.ts +16 -2
- package/dist/sgerp/domains.d.ts.map +1 -1
- package/dist/sgerp/domains.js +47 -1
- package/dist/sgerp/hooks/use-selection-state.d.ts +37 -0
- package/dist/sgerp/hooks/use-selection-state.d.ts.map +1 -0
- package/dist/sgerp/hooks/use-selection-state.js +121 -0
- package/dist/sgerp/hooks/use-simulation-data.d.ts +105 -0
- package/dist/sgerp/hooks/use-simulation-data.d.ts.map +1 -0
- package/dist/sgerp/hooks/use-simulation-data.js +146 -0
- package/dist/sgerp/hooks/use-simulation-state.d.ts +80 -0
- package/dist/sgerp/hooks/use-simulation-state.d.ts.map +1 -0
- package/dist/sgerp/hooks/use-simulation-state.js +161 -0
- package/dist/sgerp/index.d.ts +10 -3
- package/dist/sgerp/index.d.ts.map +1 -1
- package/dist/sgerp/index.js +24 -2
- package/dist/sgerp/simulation-logic/fetchUtils.d.ts.map +1 -1
- package/dist/sgerp/simulation-logic/fetchUtils.js +2 -0
- package/dist/sgerp/simulation-logic/index.d.ts +3 -1
- package/dist/sgerp/simulation-logic/index.d.ts.map +1 -1
- package/dist/sgerp/simulation-logic/index.js +10 -1
- package/dist/sgerp/simulation-logic/liveUpdates.d.ts +102 -0
- package/dist/sgerp/simulation-logic/liveUpdates.d.ts.map +1 -0
- package/dist/sgerp/simulation-logic/liveUpdates.js +87 -0
- package/dist/sgerp/simulation-logic/prepareSimulationData.d.ts +36 -0
- package/dist/sgerp/simulation-logic/prepareSimulationData.d.ts.map +1 -0
- package/dist/sgerp/simulation-logic/prepareSimulationData.js +34 -0
- package/dist/sgerp/simulation-logic/routeCalculationUtils.d.ts +7 -1
- package/dist/sgerp/simulation-logic/routeCalculationUtils.d.ts.map +1 -1
- package/dist/sgerp/simulation-logic/routeCalculationUtils.js +81 -0
- package/dist/vrptoolbox/collection.d.ts +16 -0
- package/dist/vrptoolbox/collection.d.ts.map +1 -0
- package/dist/vrptoolbox/collection.js +62 -0
- package/dist/vrptoolbox/index.d.ts +6 -0
- package/dist/vrptoolbox/index.d.ts.map +1 -0
- package/dist/vrptoolbox/index.js +8 -0
- package/dist/vrptoolbox/types/job.d.ts +46 -0
- package/dist/vrptoolbox/types/job.d.ts.map +1 -0
- package/dist/vrptoolbox/types/job.js +5 -0
- package/package.json +7 -4
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import type { Vehicle } from '../types/simulation/vehicle';
|
|
2
|
-
import type { RouteNode } from '../utils/routeUtils';
|
|
2
|
+
import type { RouteNode, Waypoint } from '../utils/routeUtils';
|
|
3
3
|
import { Route } from '../routing';
|
|
4
|
+
import type { Connection } from '../types/config';
|
|
4
5
|
/**
|
|
5
6
|
* Calculate OSRM route for a vehicle based on its assigned nodes
|
|
6
7
|
*/
|
|
@@ -9,4 +10,9 @@ export declare function calculateVehicleRoute(vehicle: Vehicle, sortedNodes: Rou
|
|
|
9
10
|
* Check if a vehicle's route has changed by comparing node IDs
|
|
10
11
|
*/
|
|
11
12
|
export declare function hasRouteChanged(existingNodes: RouteNode[] | undefined, newNodes: RouteNode[]): boolean;
|
|
13
|
+
/**
|
|
14
|
+
* Recalculate route for a vehicle when waypoints change
|
|
15
|
+
* Handles route calculation and scheduled timestamp updates
|
|
16
|
+
*/
|
|
17
|
+
export declare function recalculateVehicleRoute(vehicle: Vehicle, updatedWaypoints: Waypoint[], activeConnection: Connection | null): Promise<Route | null>;
|
|
12
18
|
//# sourceMappingURL=routeCalculationUtils.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"routeCalculationUtils.d.ts","sourceRoot":"","sources":["../../../sgerplib/sgerp/simulation-logic/routeCalculationUtils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,6BAA6B,CAAC;
|
|
1
|
+
{"version":3,"file":"routeCalculationUtils.d.ts","sourceRoot":"","sources":["../../../sgerplib/sgerp/simulation-logic/routeCalculationUtils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,6BAA6B,CAAC;AAE3D,OAAO,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAC/D,OAAO,EAAiB,KAAK,EAAE,MAAM,YAAY,CAAC;AAClD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAGlD;;GAEG;AACH,wBAAsB,qBAAqB,CACzC,OAAO,EAAE,OAAO,EAChB,WAAW,EAAE,SAAS,EAAE,EACxB,cAAc,EAAE,MAAM,GACrB,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC,CAuCvB;AAED;;GAEG;AACH,wBAAgB,eAAe,CAC7B,aAAa,EAAE,SAAS,EAAE,GAAG,SAAS,EACtC,QAAQ,EAAE,SAAS,EAAE,GACpB,OAAO,CAIT;AAED;;;GAGG;AACH,wBAAsB,uBAAuB,CAC3C,OAAO,EAAE,OAAO,EAChB,gBAAgB,EAAE,QAAQ,EAAE,EAC5B,gBAAgB,EAAE,UAAU,GAAG,IAAI,GAClC,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC,CAgHvB"}
|
|
@@ -2,7 +2,9 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.calculateVehicleRoute = calculateVehicleRoute;
|
|
4
4
|
exports.hasRouteChanged = hasRouteChanged;
|
|
5
|
+
exports.recalculateVehicleRoute = recalculateVehicleRoute;
|
|
5
6
|
const routing_1 = require("../routing");
|
|
7
|
+
const domains_1 = require("../domains");
|
|
6
8
|
/**
|
|
7
9
|
* Calculate OSRM route for a vehicle based on its assigned nodes
|
|
8
10
|
*/
|
|
@@ -41,3 +43,82 @@ function hasRouteChanged(existingNodes, newNodes) {
|
|
|
41
43
|
const newNodeIds = newNodes.map(n => n.id).join(',');
|
|
42
44
|
return existingNodeIds !== newNodeIds;
|
|
43
45
|
}
|
|
46
|
+
/**
|
|
47
|
+
* Recalculate route for a vehicle when waypoints change
|
|
48
|
+
* Handles route calculation and scheduled timestamp updates
|
|
49
|
+
*/
|
|
50
|
+
async function recalculateVehicleRoute(vehicle, updatedWaypoints, activeConnection) {
|
|
51
|
+
// console.log('Recalculating route for vehicle', vehicle.id, 'with', updatedWaypoints.length, 'waypoints')
|
|
52
|
+
// Extract all nodes from updated waypoints and flatten
|
|
53
|
+
const updatedNodes = [];
|
|
54
|
+
updatedWaypoints.forEach((waypoint) => {
|
|
55
|
+
waypoint.nodes.forEach((node) => {
|
|
56
|
+
updatedNodes.push(node);
|
|
57
|
+
});
|
|
58
|
+
});
|
|
59
|
+
// Sort nodes by sequence (they should already be in order from waypoints)
|
|
60
|
+
const sortedNodes = updatedNodes.filter((n) => n.lat && n.lon);
|
|
61
|
+
let calculatedRoute = null;
|
|
62
|
+
// Calculate OSRM route if we have enough waypoints
|
|
63
|
+
if (sortedNodes.length >= 2) {
|
|
64
|
+
const coordinates = sortedNodes.map((node) => [node.lat, node.lon]);
|
|
65
|
+
// Get routing engine settings from vehicle or use defaults
|
|
66
|
+
const settings = vehicle.routing_engine_settings || {};
|
|
67
|
+
const routingEngineName = settings.routing_engine_name || "osrm";
|
|
68
|
+
const url = settings.url || "http://mapbox-osrm-proxy";
|
|
69
|
+
const roadNetwork = settings.road_network || "van";
|
|
70
|
+
const key = settings.key || "dmVyeSBzZWNyZXQga2V5";
|
|
71
|
+
const curb = settings.curb !== undefined ? settings.curb : false;
|
|
72
|
+
// Determine backend from active connection
|
|
73
|
+
let defaultBackend = "production"; // default
|
|
74
|
+
if (activeConnection === null || activeConnection === void 0 ? void 0 : activeConnection.baseUrl) {
|
|
75
|
+
defaultBackend = (0, domains_1.detectBackendFromUrl)(activeConnection.baseUrl);
|
|
76
|
+
}
|
|
77
|
+
// Create routing engine with vehicle-specific settings
|
|
78
|
+
const routingEngine = new routing_1.RoutingEngine(routingEngineName, url, roadNetwork, key, defaultBackend, settings.speed ? { speed: settings.speed } : null);
|
|
79
|
+
await new Promise((resolve) => {
|
|
80
|
+
routingEngine.route(coordinates, curb, (result, status, message) => {
|
|
81
|
+
if (status === "ok" && (result === null || result === void 0 ? void 0 : result.osrmRoute)) {
|
|
82
|
+
calculatedRoute = result.osrmRoute;
|
|
83
|
+
// console.log('Route calculated successfully', result.osrmRoute)
|
|
84
|
+
}
|
|
85
|
+
else {
|
|
86
|
+
console.error(`Failed to recalculate route for vehicle ${vehicle.id}:`, message);
|
|
87
|
+
}
|
|
88
|
+
resolve();
|
|
89
|
+
});
|
|
90
|
+
});
|
|
91
|
+
}
|
|
92
|
+
// Recalculate scheduled_ts for all nodes based on route legs
|
|
93
|
+
if (calculatedRoute &&
|
|
94
|
+
calculatedRoute.legs) {
|
|
95
|
+
const route = calculatedRoute;
|
|
96
|
+
if (sortedNodes.length > 0 && sortedNodes[0].scheduled_ts) {
|
|
97
|
+
let cumulativeDurationSeconds = 0;
|
|
98
|
+
const startTime = new Date(sortedNodes[0].scheduled_ts).getTime();
|
|
99
|
+
sortedNodes.forEach((node, index) => {
|
|
100
|
+
if (index === 0) {
|
|
101
|
+
// Keep first node's scheduled_ts as is (it's the starting point)
|
|
102
|
+
return;
|
|
103
|
+
}
|
|
104
|
+
// Add duration from previous leg
|
|
105
|
+
if (route.legs[index - 1]) {
|
|
106
|
+
cumulativeDurationSeconds += route.legs[index - 1].duration || 0;
|
|
107
|
+
}
|
|
108
|
+
// Calculate new scheduled_ts
|
|
109
|
+
const newScheduledTime = new Date(startTime + cumulativeDurationSeconds * 1000);
|
|
110
|
+
node.scheduled_ts = newScheduledTime.toISOString();
|
|
111
|
+
});
|
|
112
|
+
// Update waypoints with new scheduled_ts
|
|
113
|
+
updatedWaypoints.forEach((waypoint) => {
|
|
114
|
+
waypoint.nodes.forEach((waypointNode) => {
|
|
115
|
+
const updatedNode = sortedNodes.find((n) => n.id === waypointNode.id);
|
|
116
|
+
if (updatedNode && updatedNode.scheduled_ts) {
|
|
117
|
+
waypointNode.scheduled_ts = updatedNode.scheduled_ts;
|
|
118
|
+
}
|
|
119
|
+
});
|
|
120
|
+
});
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
return calculatedRoute;
|
|
124
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { OptimizationJob } from './types/job';
|
|
2
|
+
import { Collection } from '../sgerp/collection';
|
|
3
|
+
/**
|
|
4
|
+
* Collection class for VRP Toolbox Optimization Jobs
|
|
5
|
+
*/
|
|
6
|
+
export declare class OptimizationJobCollection extends Collection<OptimizationJob> {
|
|
7
|
+
private baseUrl;
|
|
8
|
+
private username?;
|
|
9
|
+
private password?;
|
|
10
|
+
constructor(baseUrl: string, username?: string, password?: string);
|
|
11
|
+
/**
|
|
12
|
+
* Set authentication credentials
|
|
13
|
+
*/
|
|
14
|
+
setCredentials(username: string, password: string): void;
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=collection.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"collection.d.ts","sourceRoot":"","sources":["../../sgerplib/vrptoolbox/collection.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAA0B,MAAM,aAAa,CAAC;AAE3E,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAqBjD;;GAEG;AACH,qBAAa,yBAA0B,SAAQ,UAAU,CAAC,eAAe,CAAC;IACxE,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,QAAQ,CAAC,CAAS;IAC1B,OAAO,CAAC,QAAQ,CAAC,CAAS;gBAEd,OAAO,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM;IAqCjE;;OAEG;IACH,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI;CAIzD"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.OptimizationJobCollection = void 0;
|
|
4
|
+
const collection_1 = require("../sgerp/collection");
|
|
5
|
+
/**
|
|
6
|
+
* Adapter to convert VRP Toolbox response to SGERP format
|
|
7
|
+
*/
|
|
8
|
+
function adaptVRPToolboxResponse(vrpResponse) {
|
|
9
|
+
const { meta, objects } = vrpResponse;
|
|
10
|
+
// Convert VRP Toolbox meta to SGERP meta
|
|
11
|
+
const sgerpMeta = {
|
|
12
|
+
has_more: !!meta.next,
|
|
13
|
+
next: meta.next || null,
|
|
14
|
+
next_offset: meta.next || null,
|
|
15
|
+
};
|
|
16
|
+
return {
|
|
17
|
+
meta: sgerpMeta,
|
|
18
|
+
objects,
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Collection class for VRP Toolbox Optimization Jobs
|
|
23
|
+
*/
|
|
24
|
+
class OptimizationJobCollection extends collection_1.Collection {
|
|
25
|
+
constructor(baseUrl, username, password) {
|
|
26
|
+
// Create fetch function that adapts VRP Toolbox API to SGERP format
|
|
27
|
+
const fetchFn = async (params) => {
|
|
28
|
+
const searchParams = new URLSearchParams();
|
|
29
|
+
if (params && typeof params === 'object') {
|
|
30
|
+
Object.entries(params).forEach(([key, value]) => {
|
|
31
|
+
if (value !== undefined && value !== null) {
|
|
32
|
+
searchParams.append(key, String(value));
|
|
33
|
+
}
|
|
34
|
+
});
|
|
35
|
+
}
|
|
36
|
+
const url = `${baseUrl}/jobs/list/?${searchParams.toString()}`;
|
|
37
|
+
const headers = {};
|
|
38
|
+
if (username && password) {
|
|
39
|
+
const credentials = btoa(`${username}:${password}`);
|
|
40
|
+
headers['Authorization'] = `Basic ${credentials}`;
|
|
41
|
+
}
|
|
42
|
+
const response = await fetch(url, { headers });
|
|
43
|
+
if (!response.ok) {
|
|
44
|
+
throw new Error(`Failed to fetch jobs: ${response.status} ${response.statusText}`);
|
|
45
|
+
}
|
|
46
|
+
const vrpResponse = await response.json();
|
|
47
|
+
return adaptVRPToolboxResponse(vrpResponse);
|
|
48
|
+
};
|
|
49
|
+
super(fetchFn);
|
|
50
|
+
this.baseUrl = baseUrl;
|
|
51
|
+
this.username = username;
|
|
52
|
+
this.password = password;
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Set authentication credentials
|
|
56
|
+
*/
|
|
57
|
+
setCredentials(username, password) {
|
|
58
|
+
this.username = username;
|
|
59
|
+
this.password = password;
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
exports.OptimizationJobCollection = OptimizationJobCollection;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../sgerplib/vrptoolbox/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,yBAAyB,EAAE,MAAM,cAAc,CAAC;AACzD,YAAY,EACV,eAAe,EACf,sBAAsB,EACtB,cAAc,GACf,MAAM,aAAa,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* VRP Toolbox library exports
|
|
4
|
+
*/
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.OptimizationJobCollection = void 0;
|
|
7
|
+
var collection_1 = require("./collection");
|
|
8
|
+
Object.defineProperty(exports, "OptimizationJobCollection", { enumerable: true, get: function () { return collection_1.OptimizationJobCollection; } });
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* VRP Toolbox Optimization Task/Job types
|
|
3
|
+
*/
|
|
4
|
+
export interface OptimizationJob {
|
|
5
|
+
id: string;
|
|
6
|
+
status: string;
|
|
7
|
+
type: string;
|
|
8
|
+
created_at: string;
|
|
9
|
+
modified_at?: string;
|
|
10
|
+
processing_started_at?: string;
|
|
11
|
+
processing_completed_at?: string;
|
|
12
|
+
created_by_id?: number;
|
|
13
|
+
creator_username?: string;
|
|
14
|
+
auth_backend?: string;
|
|
15
|
+
executor?: string;
|
|
16
|
+
label?: string;
|
|
17
|
+
project_id?: number;
|
|
18
|
+
error?: string;
|
|
19
|
+
vehicles_count?: number;
|
|
20
|
+
nodes_count?: number;
|
|
21
|
+
solver_parameters_time_limit_ms?: number;
|
|
22
|
+
solver_parameters_first_solution_strategy?: number;
|
|
23
|
+
solver_parameters_use_local_search_metaheuristic?: boolean;
|
|
24
|
+
calculation_parameters_scheduling_mode?: string;
|
|
25
|
+
status_uri?: string;
|
|
26
|
+
result_uri?: string;
|
|
27
|
+
payload_uri?: string;
|
|
28
|
+
result_with_payload_uri?: string;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* VRP Toolbox meta (Tastypie-style pagination)
|
|
32
|
+
*/
|
|
33
|
+
export interface VRPToolboxMeta {
|
|
34
|
+
limit: number;
|
|
35
|
+
offset: number;
|
|
36
|
+
next?: string | null;
|
|
37
|
+
previous?: string | null;
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* VRP Toolbox list response (Tastypie format)
|
|
41
|
+
*/
|
|
42
|
+
export interface VRPToolboxListResponse<T> {
|
|
43
|
+
meta: VRPToolboxMeta;
|
|
44
|
+
objects: T[];
|
|
45
|
+
}
|
|
46
|
+
//# sourceMappingURL=job.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"job.d.ts","sourceRoot":"","sources":["../../../sgerplib/vrptoolbox/types/job.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,uBAAuB,CAAC,EAAE,MAAM,CAAC;IACjC,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,+BAA+B,CAAC,EAAE,MAAM,CAAC;IACzC,yCAAyC,CAAC,EAAE,MAAM,CAAC;IACnD,gDAAgD,CAAC,EAAE,OAAO,CAAC;IAC3D,sCAAsC,CAAC,EAAE,MAAM,CAAC;IAChD,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,uBAAuB,CAAC,EAAE,MAAM,CAAC;CAClC;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC1B;AAED;;GAEG;AACH,MAAM,WAAW,sBAAsB,CAAC,CAAC;IACvC,IAAI,EAAE,cAAc,CAAC;IACrB,OAAO,EAAE,CAAC,EAAE,CAAC;CACd"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "sgerp-frontend-lib",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.5",
|
|
4
4
|
"description": "TypeScript/React library for interacting with the SGERP API, providing client SDK, Backbone.js-style Collections, and pre-built React components",
|
|
5
5
|
"main": "./dist/index.js",
|
|
6
6
|
"module": "./dist/index.js",
|
|
@@ -52,6 +52,7 @@
|
|
|
52
52
|
"test:e2e:transitstopsets": "playwright test e2e/ptapp/transitstopsets.spec.ts",
|
|
53
53
|
"test:all": "./run-tests.sh",
|
|
54
54
|
"test:all:open": "./run-tests.sh --open-coverage",
|
|
55
|
+
"translate": "tsx scripts/translate-locales.ts",
|
|
55
56
|
"prepare": "husky"
|
|
56
57
|
},
|
|
57
58
|
"dependencies": {
|
|
@@ -77,6 +78,7 @@
|
|
|
77
78
|
"@radix-ui/react-toggle": "^1.1.10",
|
|
78
79
|
"@radix-ui/react-toggle-group": "^1.1.11",
|
|
79
80
|
"@radix-ui/react-tooltip": "^1.2.8",
|
|
81
|
+
"@tanstack/react-virtual": "^3.13.12",
|
|
80
82
|
"class-variance-authority": "^0.7.1",
|
|
81
83
|
"clsx": "^2.1.1",
|
|
82
84
|
"cmdk": "^1.1.1",
|
|
@@ -86,12 +88,12 @@
|
|
|
86
88
|
"lucide-react": "^0.545.0",
|
|
87
89
|
"mapbox-gl": "^3.16.0",
|
|
88
90
|
"moment-timezone": "^0.6.0",
|
|
89
|
-
"next": "15.5.
|
|
91
|
+
"next": "^15.5.7",
|
|
90
92
|
"next-themes": "^0.4.6",
|
|
91
93
|
"nuqs": "^2.7.2",
|
|
92
|
-
"react": "^19.1
|
|
94
|
+
"react": "^19.0.1",
|
|
93
95
|
"react-day-picker": "^9.11.1",
|
|
94
|
-
"react-dom": "19.1
|
|
96
|
+
"react-dom": "^19.0.1",
|
|
95
97
|
"react-markdown": "^10.1.0",
|
|
96
98
|
"rehype-highlight": "^7.0.2",
|
|
97
99
|
"rehype-slug": "^6.0.0",
|
|
@@ -119,6 +121,7 @@
|
|
|
119
121
|
"husky": "^9.1.7",
|
|
120
122
|
"jsdom": "^27.0.1",
|
|
121
123
|
"tailwindcss": "^4",
|
|
124
|
+
"tsx": "^4.21.0",
|
|
122
125
|
"tw-animate-css": "^1.4.0",
|
|
123
126
|
"typescript": "^5",
|
|
124
127
|
"vitest": "^3.2.4"
|