🎯 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,91 @@
export type Asset = 'string' | AssetEntry;
export interface AssetEntry {
glob: string;
include?: string;
flat?: boolean;
exclude?: string;
outDir?: string;
watchAssets?: boolean;
}
export interface ActionOnFile {
action: 'change' | 'unlink';
item: AssetEntry;
path: string;
sourceRoot: string;
watchAssetsMode: boolean;
}
export interface SwcBuilderOptions {
swcrcPath?: string;
outDir?: string;
filenames?: string[];
sync?: boolean;
extensions?: string[];
copyFiles?: boolean;
includeDotfiles?: boolean;
quiet?: boolean;
}
export interface WebpackBuilderOptions {
configPath?: string;
}
export interface TscBuilderOptions {
configPath?: string;
}
export type BuilderVariant = 'tsc' | 'swc' | 'webpack';
export type Builder = BuilderVariant | {
type: 'webpack';
options?: WebpackBuilderOptions;
} | {
type: 'swc';
options?: SwcBuilderOptions;
} | {
type: 'tsc';
options?: TscBuilderOptions;
};
export interface CompilerOptions {
tsConfigPath?: string;
/**
* @deprecated Use `builder` instead.
*/
webpack?: boolean;
/**
* @deprecated Use `builder.options.configPath` instead.
*/
webpackConfigPath?: string;
plugins?: string[] | PluginOptions[];
assets?: string[];
deleteOutDir?: boolean;
manualRestart?: boolean;
builder?: Builder;
}
export interface PluginOptions {
name: string;
options: Record<string, any>[];
}
export interface GenerateOptions {
spec?: boolean | Record<string, boolean>;
flat?: boolean;
specFileSuffix?: string;
baseDir?: string;
}
export interface ProjectConfiguration {
type?: string;
root?: string;
entryFile?: string;
exec?: string;
sourceRoot?: string;
compilerOptions?: CompilerOptions;
}
export interface Configuration {
[key: string]: any;
language?: string;
collection?: string;
sourceRoot?: string;
entryFile?: string;
exec?: string;
monorepo?: boolean;
compilerOptions?: CompilerOptions;
generateOptions?: GenerateOptions;
projects?: {
[key: string]: ProjectConfiguration;
};
}

View File

@@ -0,0 +1,2 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });

View File

@@ -0,0 +1,4 @@
import { Configuration } from './configuration';
export interface ConfigurationLoader {
load(name?: string): Required<Configuration> | Promise<Required<Configuration>>;
}

View File

@@ -0,0 +1,2 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });

View File

@@ -0,0 +1,6 @@
import { Configuration } from './configuration';
export declare const defaultConfiguration: Required<Configuration>;
export declare const defaultTsconfigFilename: string;
export declare const defaultWebpackConfigFilename = "webpack.config.js";
export declare const defaultOutDir = "dist";
export declare const defaultGitIgnore = "# compiled output\n/dist\n/node_modules\n/build\n\n# Logs\nlogs\n*.log\nnpm-debug.log*\npnpm-debug.log*\nyarn-debug.log*\nyarn-error.log*\nlerna-debug.log*\n\n# OS\n.DS_Store\n\n# Tests\n/coverage\n/.nyc_output\n\n# IDEs and editors\n/.idea\n.project\n.classpath\n.c9/\n*.launch\n.settings/\n*.sublime-workspace\n\n# IDE - VSCode\n.vscode/*\n!.vscode/settings.json\n!.vscode/tasks.json\n!.vscode/launch.json\n!.vscode/extensions.json\n\n# dotenv environment variable files\n.env\n.env.development.local\n.env.test.local\n.env.production.local\n.env.local\n\n# temp directory\n.temp\n.tmp\n\n# Runtime data\npids\n*.pid\n*.seed\n*.pid.lock\n\n# Diagnostic reports (https://nodejs.org/api/report.html)\nreport.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json\n";

View File

@@ -0,0 +1,86 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.defaultGitIgnore = exports.defaultOutDir = exports.defaultWebpackConfigFilename = exports.defaultTsconfigFilename = exports.defaultConfiguration = void 0;
const get_default_tsconfig_path_1 = require("../utils/get-default-tsconfig-path");
exports.defaultConfiguration = {
language: 'ts',
sourceRoot: 'src',
collection: '@nestjs/schematics',
entryFile: 'main',
exec: 'node',
projects: {},
monorepo: false,
compilerOptions: {
builder: {
type: 'tsc',
options: {
configPath: (0, get_default_tsconfig_path_1.getDefaultTsconfigPath)(),
},
},
webpack: false,
plugins: [],
assets: [],
manualRestart: false,
},
generateOptions: {},
};
exports.defaultTsconfigFilename = (0, get_default_tsconfig_path_1.getDefaultTsconfigPath)();
exports.defaultWebpackConfigFilename = 'webpack.config.js';
exports.defaultOutDir = 'dist';
exports.defaultGitIgnore = `# compiled output
/dist
/node_modules
/build
# Logs
logs
*.log
npm-debug.log*
pnpm-debug.log*
yarn-debug.log*
yarn-error.log*
lerna-debug.log*
# OS
.DS_Store
# Tests
/coverage
/.nyc_output
# IDEs and editors
/.idea
.project
.classpath
.c9/
*.launch
.settings/
*.sublime-workspace
# IDE - VSCode
.vscode/*
!.vscode/settings.json
!.vscode/tasks.json
!.vscode/launch.json
!.vscode/extensions.json
# dotenv environment variable files
.env
.env.development.local
.env.test.local
.env.production.local
.env.local
# temp directory
.temp
.tmp
# Runtime data
pids
*.pid
*.seed
*.pid.lock
# Diagnostic reports (https://nodejs.org/api/report.html)
report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json
`;

View File

@@ -0,0 +1,3 @@
export * from './configuration.loader';
export * from './nest-configuration.loader';
export * from './configuration';

View File

@@ -0,0 +1,19 @@
"use strict";
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
var desc = Object.getOwnPropertyDescriptor(m, k);
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
desc = { enumerable: true, get: function() { return m[k]; } };
}
Object.defineProperty(o, k2, desc);
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __exportStar = (this && this.__exportStar) || function(m, exports) {
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
};
Object.defineProperty(exports, "__esModule", { value: true });
__exportStar(require("./configuration.loader"), exports);
__exportStar(require("./nest-configuration.loader"), exports);
__exportStar(require("./configuration"), exports);

View File

@@ -0,0 +1,8 @@
import { Reader } from '../readers';
import { Configuration } from './configuration';
import { ConfigurationLoader } from './configuration.loader';
export declare class NestConfigurationLoader implements ConfigurationLoader {
private readonly reader;
constructor(reader: Reader);
load(name?: string): Required<Configuration>;
}

View File

@@ -0,0 +1,63 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.NestConfigurationLoader = void 0;
const readers_1 = require("../readers");
const defaults_1 = require("./defaults");
/**
* A cache table that maps some reader (by its name along with the config path)
* to a loaded configuration.
* This was added because several commands relies on the app's config in order
* to generate some dynanmic content prior running the command itself.
*/
const loadedConfigsCache = new Map();
class NestConfigurationLoader {
constructor(reader) {
this.reader = reader;
}
load(name) {
const cacheEntryKey = `${this.reader.constructor.name}:${name}`;
const cachedConfig = loadedConfigsCache.get(cacheEntryKey);
if (cachedConfig) {
return cachedConfig;
}
let loadedConfig;
const contentOrError = name
? this.reader.read(name)
: this.reader.readAnyOf([
'nest-cli.json',
'.nestcli.json',
'.nest-cli.json',
'nest.json',
]);
if (contentOrError) {
const isMissingPermissionsError = contentOrError instanceof readers_1.ReaderFileLackPermissionsError;
if (isMissingPermissionsError) {
console.error(contentOrError.message);
process.exit(1);
}
const fileConfig = JSON.parse(contentOrError);
if (fileConfig.compilerOptions) {
loadedConfig = {
...defaults_1.defaultConfiguration,
...fileConfig,
compilerOptions: {
...defaults_1.defaultConfiguration.compilerOptions,
...fileConfig.compilerOptions,
},
};
}
else {
loadedConfig = {
...defaults_1.defaultConfiguration,
...fileConfig,
};
}
}
else {
loadedConfig = defaults_1.defaultConfiguration;
}
loadedConfigsCache.set(cacheEntryKey, loadedConfig);
return loadedConfig;
}
}
exports.NestConfigurationLoader = NestConfigurationLoader;