🎯 MapView v2.0 - Global Deployment Ready

 MAJOR FEATURES:
• Auto-zoom intelligence với smart bounds fitting
• Enhanced 3D GPS markers với pulsing effects
• Professional route display với 6-layer rendering
• Status-based parking icons với availability indicators
• Production-ready build optimizations

🗺️ AUTO-ZOOM FEATURES:
• Smart bounds fitting cho GPS + selected parking
• Adaptive padding (50px) cho visual balance
• Max zoom control (level 16) để tránh quá gần
• Dynamic centering khi không có selection

🎨 ENHANCED VISUALS:
• 3D GPS marker với multi-layer pulse effects
• Advanced parking icons với status colors
• Selection highlighting với animation
• Dimming system cho non-selected items

🛣️ ROUTE SYSTEM:
• OpenRouteService API integration
• Multi-layer route rendering (glow, shadow, main, animated)
• Real-time distance & duration calculation
• Visual route info trong popup

📱 PRODUCTION READY:
• SSR safe với dynamic imports
• Build errors resolved
• Global deployment via Vercel
• Optimized performance

🌍 DEPLOYMENT:
• Vercel: https://whatever-ctk2auuxr-phong12hexdockworks-projects.vercel.app
• Bundle size: 22.8 kB optimized
• Global CDN distribution
• HTTPS enabled

💾 VERSION CONTROL:
• MapView-v2.0.tsx backup created
• MAPVIEW_VERSIONS.md documentation
• Full version history tracking
This commit is contained in:
2025-07-20 19:52:16 +07:00
parent 3203463a6a
commit c65cc97a33
64624 changed files with 7199453 additions and 6462 deletions

View File

@@ -0,0 +1 @@
export {};

View File

@@ -0,0 +1,55 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
var logger_1 = require("../logger");
var chalk = require("chalk");
var jest_mock_process_1 = require("jest-mock-process");
// jest.mock("Console", () => {
// return jest.fn();
// });
describe("Logger", function () {
var mockStdout = (0, jest_mock_process_1.mockProcessStdout)();
var mockStderr = (0, jest_mock_process_1.mockProcessStderr)();
beforeEach(function () {
jest.clearAllMocks();
});
test("Can create a logger instance to process.stdout", function () {
var result = (0, logger_1.makeLogger)({
baseUrl: undefined,
colors: false,
configFile: "",
context: undefined,
extensions: [],
logInfoToStdOut: true,
logLevel: "INFO",
mainFields: [],
silent: false,
references: undefined,
}, new chalk.Instance());
expect(result).toBeDefined();
result.logInfo("Test logInfo");
result.logWarning("Test logWarning");
result.logError("Test logError");
result.log("Test external logger");
expect(mockStdout).toHaveBeenCalledTimes(2);
expect(mockStderr).toHaveBeenCalledTimes(2);
});
test("Can create a logger instance to process.stderr", function () {
var result = (0, logger_1.makeLogger)({
baseUrl: undefined,
colors: false,
configFile: "",
context: undefined,
extensions: [],
logInfoToStdOut: false,
logLevel: "INFO",
mainFields: [],
silent: false,
references: undefined,
}, new chalk.Instance());
expect(result).toBeDefined();
result.log("Test external logger");
expect(mockStderr).toHaveBeenCalledTimes(1);
expect(mockStdout).not.toHaveBeenCalled();
});
});
//# sourceMappingURL=logger.test.js.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"logger.test.js","sourceRoot":"","sources":["../../src/__tests__/logger.test.ts"],"names":[],"mappings":";;AAAA,oCAAuC;AACvC,6BAA+B;AAC/B,uDAAyE;AAEzE,+BAA+B;AAC/B,sBAAsB;AACtB,MAAM;AAEN,QAAQ,CAAC,QAAQ,EAAE;IACjB,IAAM,UAAU,GAAG,IAAA,qCAAiB,GAAE,CAAC;IACvC,IAAM,UAAU,GAAG,IAAA,qCAAiB,GAAE,CAAC;IAEvC,UAAU,CAAC;QACT,IAAI,CAAC,aAAa,EAAE,CAAC;IACvB,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,gDAAgD,EAAE;QACrD,IAAM,MAAM,GAAG,IAAA,mBAAU,EACvB;YACE,OAAO,EAAE,SAAS;YAClB,MAAM,EAAE,KAAK;YACb,UAAU,EAAE,EAAE;YACd,OAAO,EAAE,SAAS;YAClB,UAAU,EAAE,EAAE;YACd,eAAe,EAAE,IAAI;YACrB,QAAQ,EAAE,MAAM;YAChB,UAAU,EAAE,EAAE;YACd,MAAM,EAAE,KAAK;YACb,UAAU,EAAE,SAAS;SACtB,EACD,IAAI,KAAK,CAAC,QAAQ,EAAE,CACrB,CAAC;QACF,MAAM,CAAC,MAAM,CAAC,CAAC,WAAW,EAAE,CAAC;QAE7B,MAAM,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;QAC/B,MAAM,CAAC,UAAU,CAAC,iBAAiB,CAAC,CAAC;QACrC,MAAM,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC;QACjC,MAAM,CAAC,GAAG,CAAC,sBAAsB,CAAC,CAAC;QAEnC,MAAM,CAAC,UAAU,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;QAC5C,MAAM,CAAC,UAAU,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;IAC9C,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,gDAAgD,EAAE;QACrD,IAAM,MAAM,GAAG,IAAA,mBAAU,EACvB;YACE,OAAO,EAAE,SAAS;YAClB,MAAM,EAAE,KAAK;YACb,UAAU,EAAE,EAAE;YACd,OAAO,EAAE,SAAS;YAClB,UAAU,EAAE,EAAE;YACd,eAAe,EAAE,KAAK;YACtB,QAAQ,EAAE,MAAM;YAChB,UAAU,EAAE,EAAE;YACd,MAAM,EAAE,KAAK;YACb,UAAU,EAAE,SAAS;SACtB,EACD,IAAI,KAAK,CAAC,QAAQ,EAAE,CACrB,CAAC;QACF,MAAM,CAAC,MAAM,CAAC,CAAC,WAAW,EAAE,CAAC;QAE7B,MAAM,CAAC,GAAG,CAAC,sBAAsB,CAAC,CAAC;QAEnC,MAAM,CAAC,UAAU,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;QAC5C,MAAM,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAC;IAC5C,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}

View File

@@ -0,0 +1 @@
export {};

View File

@@ -0,0 +1,148 @@
"use strict";
var __assign = (this && this.__assign) || function () {
__assign = Object.assign || function(t) {
for (var s, i = 1, n = arguments.length; i < n; i++) {
s = arguments[i];
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
t[p] = s[p];
}
return t;
};
return __assign.apply(this, arguments);
};
Object.defineProperty(exports, "__esModule", { value: true });
var webpack = require("webpack");
var path = require("path");
var plugin_1 = require("../plugin");
describe("TsconfigPathsPlugin", function () {
var SETTINGS = {
mode: "development",
context: path.resolve(__dirname, "src"),
entry: "".concat(__dirname, "/../../examples/example/src/index.ts"),
output: {
path: path.join(__dirname, "../../temp"),
filename: "bundle.js",
},
module: {
rules: [
{
test: /\\.tsx?$/,
exclude: /^node_modules/,
loader: "ts-loader",
options: {
configFile: "./example/tsconfig.json",
},
},
],
},
resolve: {
extensions: [".ts", ".tsx", ".js"],
},
};
it("Can initialize the plugin", function (done) {
var testPlugin = new plugin_1.TsconfigPathsPlugin({
configFile: "".concat(__dirname, "/../../examples/example/tsconfig.json"),
logLevel: "INFO",
extensions: [".ts", ".tsx"],
mainFields: ["browser", "main"],
});
expect(testPlugin).toBeInstanceOf(plugin_1.TsconfigPathsPlugin);
var testSettings = __assign(__assign({}, SETTINGS), { resolve: {
extensions: [".ts", ".tsx", ".js"],
plugins: [testPlugin],
} });
var compiler = webpack(testSettings);
compiler.run(function (err, stats) {
if (err) {
done(err);
return;
}
expect(stats).toBeDefined();
var details = stats === null || stats === void 0 ? void 0 : stats.toJson();
expect(details === null || details === void 0 ? void 0 : details.errorsCount).toEqual(0);
// TODO There should probably be a test that verifies the stats match what is expected
done();
});
});
it("Test to ensure Apply exists and is working", function (done) {
var _a, _b, _c;
var webpackSettings = {
entry: "".concat(__dirname, "/../../examples/example/src/index.ts"),
target: "web",
output: {
path: path.join(__dirname, "../../temp"),
filename: "[name].js",
},
mode: "development",
resolve: {
extensions: [
".ts",
".tsx",
".js",
".jsx",
"ttf",
"eot",
"otf",
"svg",
"png",
"woff",
"woff2",
],
plugins: [
new plugin_1.TsconfigPathsPlugin({
configFile: "".concat(__dirname, "/../../examples/example/tsconfig.json"),
}),
],
},
module: {
rules: [],
},
};
// Build compiler
var compiler = webpack(webpackSettings);
var pluginInstance = (_c = (_b = (_a = compiler === null || compiler === void 0 ? void 0 : compiler.options) === null || _a === void 0 ? void 0 : _a.resolve) === null || _b === void 0 ? void 0 : _b.plugins) === null || _c === void 0 ? void 0 : _c.find(function (plugin) { return plugin instanceof plugin_1.TsconfigPathsPlugin; });
if (!pluginInstance) {
return done("TsconfigPathsPlugin not loaded in webpack settings");
}
expect(pluginInstance instanceof plugin_1.TsconfigPathsPlugin).toBeTruthy();
expect(pluginInstance.apply).toBeDefined();
// Run compiler
compiler.run(function (err, stats) {
if (err) {
done(err);
return;
}
expect(stats).toBeDefined();
var details = stats === null || stats === void 0 ? void 0 : stats.toJson();
expect(details === null || details === void 0 ? void 0 : details.errorsCount).toEqual(0);
done();
});
});
it("Resolves project references", function (done) {
var testPlugin = new plugin_1.TsconfigPathsPlugin({
configFile: "".concat(__dirname, "/../../examples/referenceExample/tsconfig.json"),
logLevel: "INFO",
extensions: [".ts", ".tsx"],
mainFields: ["browser", "main"],
references: ["".concat(__dirname, "/../../examples/example/tsconfig.json")],
});
expect(testPlugin).toBeInstanceOf(plugin_1.TsconfigPathsPlugin);
var testSettings = __assign(__assign({}, SETTINGS), { resolve: {
extensions: [".ts", ".tsx", ".js"],
plugins: [testPlugin],
} });
var compiler = webpack(testSettings);
compiler.run(function (err, stats) {
if (err) {
done(err);
return;
}
expect(stats).toBeDefined();
var details = stats === null || stats === void 0 ? void 0 : stats.toJson();
expect(details === null || details === void 0 ? void 0 : details.errorsCount).toEqual(0);
// TODO There should probably be a test that verifies the stats match what is expected
done();
});
});
});
//# sourceMappingURL=plugins.test.js.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"plugins.test.js","sourceRoot":"","sources":["../../src/__tests__/plugins.test.ts"],"names":[],"mappings":"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"}