🎯 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,2 @@
export {};
//# sourceMappingURL=class-constructor.type.js.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"class-constructor.type.js","sourceRoot":"","sources":["../../../src/interfaces/class-constructor.type.ts"],"names":[],"mappings":"","sourcesContent":["export type ClassConstructor<T> = {\n new (...args: any[]): T;\n};\n"]}

View File

@@ -0,0 +1,2 @@
export {};
//# sourceMappingURL=class-transformer-options.interface.js.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"class-transformer-options.interface.js","sourceRoot":"","sources":["../../../src/interfaces/class-transformer-options.interface.ts"],"names":[],"mappings":"","sourcesContent":["import { TargetMap } from './target-map.interface';\n\n/**\n * Options to be passed during transformation.\n */\nexport interface ClassTransformOptions {\n /**\n * Exclusion strategy. By default exposeAll is used, which means that it will expose all properties are transformed\n * by default.\n */\n strategy?: 'excludeAll' | 'exposeAll';\n\n /**\n * Indicates if extraneous properties should be excluded from the value when converting a plain value to a class.\n *\n * This option requires that each property on the target class has at least one `@Expose` or `@Exclude` decorator\n * assigned from this library.\n */\n excludeExtraneousValues?: boolean;\n\n /**\n * Only properties with given groups gonna be transformed.\n */\n groups?: string[];\n\n /**\n * Only properties with \"since\" > version < \"until\" gonna be transformed.\n */\n version?: number;\n\n /**\n * Excludes properties with the given prefixes. For example, if you mark your private properties with \"_\" and \"__\"\n * you can set this option's value to [\"_\", \"__\"] and all private properties will be skipped.\n * This works only for \"exposeAll\" strategy.\n */\n excludePrefixes?: string[];\n\n /**\n * If set to true then class transformer will ignore the effect of all @Expose and @Exclude decorators.\n * This option is useful if you want to kinda clone your object but do not apply decorators affects.\n *\n * __NOTE:__ You may still have to add the decorators to make other options work.\n */\n ignoreDecorators?: boolean;\n\n /**\n * Target maps allows to set a Types of the transforming object without using @Type decorator.\n * This is useful when you are transforming external classes, or if you already have type metadata for\n * objects and you don't want to set it up again.\n */\n targetMaps?: TargetMap[];\n\n /**\n * If set to true then class transformer will perform a circular check. (circular check is turned off by default)\n * This option is useful when you know for sure that your types might have a circular dependency.\n */\n enableCircularCheck?: boolean;\n\n /**\n * If set to true then class transformer will try to convert properties implicitly to their target type based on their typing information.\n *\n * DEFAULT: `false`\n */\n enableImplicitConversion?: boolean;\n\n /**\n * If set to true then class transformer will take default values for unprovided fields.\n * This is useful when you convert a plain object to a class and have an optional field with a default value.\n */\n exposeDefaultValues?: boolean;\n\n /**\n * When set to true, fields with `undefined` as value will be included in class to plain transformation. Otherwise\n * those fields will be omitted from the result.\n *\n * DEFAULT: `true`\n */\n exposeUnsetFields?: boolean;\n}\n"]}

View File

@@ -0,0 +1,2 @@
export {};
//# sourceMappingURL=exclude-options.interface.js.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"exclude-options.interface.js","sourceRoot":"","sources":["../../../../src/interfaces/decorator-options/exclude-options.interface.ts"],"names":[],"mappings":"","sourcesContent":["/**\n * Possible transformation options for the @Exclude decorator.\n */\nexport interface ExcludeOptions {\n /**\n * Expose this property only when transforming from plain to class instance.\n */\n toClassOnly?: boolean;\n\n /**\n * Expose this property only when transforming from class instance to plain object.\n */\n toPlainOnly?: boolean;\n}\n"]}

View File

@@ -0,0 +1,2 @@
export {};
//# sourceMappingURL=expose-options.interface.js.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"expose-options.interface.js","sourceRoot":"","sources":["../../../../src/interfaces/decorator-options/expose-options.interface.ts"],"names":[],"mappings":"","sourcesContent":["/**\n * Possible transformation options for the @Expose decorator.\n */\nexport interface ExposeOptions {\n /**\n * Name of property on the target object to expose the value of this property.\n */\n name?: string;\n\n /**\n * First version where this property should be exposed.\n *\n * Example:\n * ```ts\n * instanceToPlain(payload, { version: 1.0 });\n * ```\n */\n since?: number;\n\n /**\n * Last version where this property should be exposed.\n *\n * Example:\n * ```ts\n * instanceToPlain(payload, { version: 1.0 });\n * ```\n */\n until?: number;\n\n /**\n * List of transformation groups this property belongs to. When set,\n * the property will be exposed only when transform is called with\n * one of the groups specified.\n *\n * Example:\n * ```ts\n * instanceToPlain(payload, { groups: ['user'] });\n * ```\n */\n groups?: string[];\n\n /**\n * Expose this property only when transforming from plain to class instance.\n */\n toClassOnly?: boolean;\n\n /**\n * Expose this property only when transforming from class instance to plain object.\n */\n toPlainOnly?: boolean;\n}\n"]}

View File

@@ -0,0 +1,2 @@
export {};
//# sourceMappingURL=transform-options.interface.js.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"transform-options.interface.js","sourceRoot":"","sources":["../../../../src/interfaces/decorator-options/transform-options.interface.ts"],"names":[],"mappings":"","sourcesContent":["/**\n * Possible transformation options for the @Transform decorator.\n */\nexport interface TransformOptions {\n /**\n * First version where this property should be exposed.\n *\n * Example:\n * ```ts\n * instanceToPlain(payload, { version: 1.0 });\n * ```\n */\n since?: number;\n\n /**\n * Last version where this property should be exposed.\n *\n * Example:\n * ```ts\n * instanceToPlain(payload, { version: 1.0 });\n * ```\n */\n until?: number;\n\n /**\n * List of transformation groups this property belongs to. When set,\n * the property will be exposed only when transform is called with\n * one of the groups specified.\n *\n * Example:\n * ```ts\n * instanceToPlain(payload, { groups: ['user'] });\n * ```\n */\n groups?: string[];\n\n /**\n * Expose this property only when transforming from plain to class instance.\n */\n toClassOnly?: boolean;\n\n /**\n * Expose this property only when transforming from class instance to plain object.\n */\n toPlainOnly?: boolean;\n}\n"]}

View File

@@ -0,0 +1,2 @@
export {};
//# sourceMappingURL=type-discriminator-descriptor.interface.js.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"type-discriminator-descriptor.interface.js","sourceRoot":"","sources":["../../../../src/interfaces/decorator-options/type-discriminator-descriptor.interface.ts"],"names":[],"mappings":"","sourcesContent":["import { ClassConstructor } from '..';\n\n/**\n * Discriminator object containing the type information to select a proper type\n * during transformation when a discriminator property is provided.\n */\nexport interface DiscriminatorDescriptor {\n /**\n * The name of the property which holds the type information in the received object.\n */\n property: string;\n /**\n * List of the available types. The transformer will try to lookup the object\n * with the same key as the value received in the defined discriminator property\n * and create an instance of the defined class.\n */\n subTypes: {\n /**\n * Name of the type.\n */\n name: string;\n\n /**\n * A class constructor which can be used to create the object.\n */\n value: ClassConstructor<any>;\n }[];\n}\n"]}

View File

@@ -0,0 +1,2 @@
export {};
//# sourceMappingURL=type-options.interface.js.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"type-options.interface.js","sourceRoot":"","sources":["../../../../src/interfaces/decorator-options/type-options.interface.ts"],"names":[],"mappings":"","sourcesContent":["import { DiscriminatorDescriptor } from './type-discriminator-descriptor.interface';\n\n/**\n * Possible transformation options for the @Type decorator.\n */\nexport interface TypeOptions {\n /**\n * Optional discriminator object, when provided the property value will be\n * initialized according to the specified object.\n */\n discriminator?: DiscriminatorDescriptor;\n\n /**\n * Indicates whether to keep the discriminator property on the\n * transformed object or not. Disabled by default.\n *\n * @default false\n */\n keepDiscriminatorProperty?: boolean;\n}\n"]}

View File

@@ -0,0 +1,15 @@
export * from './decorator-options/expose-options.interface';
export * from './decorator-options/exclude-options.interface';
export * from './decorator-options/transform-options.interface';
export * from './decorator-options/type-discriminator-descriptor.interface';
export * from './decorator-options/type-options.interface';
export * from './metadata/exclude-metadata.interface';
export * from './metadata/expose-metadata.interface';
export * from './metadata/transform-metadata.interface';
export * from './metadata/transform-fn-params.interface';
export * from './metadata/type-metadata.interface';
export * from './class-constructor.type';
export * from './class-transformer-options.interface';
export * from './target-map.interface';
export * from './type-help-options.interface';
//# sourceMappingURL=index.js.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/interfaces/index.ts"],"names":[],"mappings":"AAAA,cAAc,8CAA8C,CAAC;AAC7D,cAAc,+CAA+C,CAAC;AAC9D,cAAc,iDAAiD,CAAC;AAChE,cAAc,6DAA6D,CAAC;AAC5E,cAAc,4CAA4C,CAAC;AAC3D,cAAc,uCAAuC,CAAC;AACtD,cAAc,sCAAsC,CAAC;AACrD,cAAc,yCAAyC,CAAC;AACxD,cAAc,0CAA0C,CAAC;AACzD,cAAc,oCAAoC,CAAC;AACnD,cAAc,0BAA0B,CAAC;AACzC,cAAc,uCAAuC,CAAC;AACtD,cAAc,wBAAwB,CAAC;AACvC,cAAc,+BAA+B,CAAC","sourcesContent":["export * from './decorator-options/expose-options.interface';\nexport * from './decorator-options/exclude-options.interface';\nexport * from './decorator-options/transform-options.interface';\nexport * from './decorator-options/type-discriminator-descriptor.interface';\nexport * from './decorator-options/type-options.interface';\nexport * from './metadata/exclude-metadata.interface';\nexport * from './metadata/expose-metadata.interface';\nexport * from './metadata/transform-metadata.interface';\nexport * from './metadata/transform-fn-params.interface';\nexport * from './metadata/type-metadata.interface';\nexport * from './class-constructor.type';\nexport * from './class-transformer-options.interface';\nexport * from './target-map.interface';\nexport * from './type-help-options.interface';\n"]}

View File

@@ -0,0 +1,2 @@
export {};
//# sourceMappingURL=exclude-metadata.interface.js.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"exclude-metadata.interface.js","sourceRoot":"","sources":["../../../../src/interfaces/metadata/exclude-metadata.interface.ts"],"names":[],"mappings":"","sourcesContent":["import { ExcludeOptions } from '..';\n\n/**\n * This object represents metadata assigned to a property via the @Exclude decorator.\n */\nexport interface ExcludeMetadata {\n target: Function;\n\n /**\n * The property name this metadata belongs to on the target (class or property).\n *\n * Note: If the decorator is applied to a class the propertyName will be undefined.\n */\n propertyName: string | undefined;\n\n /**\n * Options passed to the @Exclude operator for this property.\n */\n options: ExcludeOptions;\n}\n"]}

View File

@@ -0,0 +1,2 @@
export {};
//# sourceMappingURL=expose-metadata.interface.js.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"expose-metadata.interface.js","sourceRoot":"","sources":["../../../../src/interfaces/metadata/expose-metadata.interface.ts"],"names":[],"mappings":"","sourcesContent":["import { ExposeOptions } from '..';\n\n/**\n * This object represents metadata assigned to a property via the @Expose decorator.\n */\nexport interface ExposeMetadata {\n target: Function;\n\n /**\n * The property name this metadata belongs to on the target (class or property).\n *\n * Note: If the decorator is applied to a class the propertyName will be undefined.\n */\n propertyName: string | undefined;\n\n /**\n * Options passed to the @Expose operator for this property.\n */\n options: ExposeOptions;\n}\n"]}

View File

@@ -0,0 +1,2 @@
export {};
//# sourceMappingURL=transform-fn-params.interface.js.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"transform-fn-params.interface.js","sourceRoot":"","sources":["../../../../src/interfaces/metadata/transform-fn-params.interface.ts"],"names":[],"mappings":"","sourcesContent":["import { TransformationType } from '../../enums';\nimport { ClassTransformOptions } from '../class-transformer-options.interface';\n\nexport interface TransformFnParams {\n value: any;\n key: string;\n obj: any;\n type: TransformationType;\n options: ClassTransformOptions;\n}\n"]}

View File

@@ -0,0 +1,2 @@
export {};
//# sourceMappingURL=transform-metadata.interface.js.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"transform-metadata.interface.js","sourceRoot":"","sources":["../../../../src/interfaces/metadata/transform-metadata.interface.ts"],"names":[],"mappings":"","sourcesContent":["import { TransformOptions } from '..';\nimport { TransformFnParams } from './transform-fn-params.interface';\n\n/**\n * This object represents metadata assigned to a property via the @Transform decorator.\n */\nexport interface TransformMetadata {\n target: Function;\n\n /**\n * The property name this metadata belongs to on the target (property only).\n */\n propertyName: string;\n\n /**\n * The custom transformation function provided by the user in the @Transform decorator.\n */\n transformFn: (params: TransformFnParams) => any;\n\n /**\n * Options passed to the @Transform operator for this property.\n */\n options: TransformOptions;\n}\n"]}

View File

@@ -0,0 +1,2 @@
export {};
//# sourceMappingURL=type-metadata.interface.js.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"type-metadata.interface.js","sourceRoot":"","sources":["../../../../src/interfaces/metadata/type-metadata.interface.ts"],"names":[],"mappings":"","sourcesContent":["import { TypeHelpOptions, TypeOptions } from '..';\n\n/**\n * This object represents metadata assigned to a property via the @Type decorator.\n */\nexport interface TypeMetadata {\n target: Function;\n\n /**\n * The property name this metadata belongs to on the target (property only).\n */\n propertyName: string;\n\n /**\n * The type guessed from assigned Reflect metadata ('design:type')\n */\n reflectedType: any;\n\n /**\n * The custom function provided by the user in the @Type decorator which\n * returns the target type for the transformation.\n */\n typeFunction: (options?: TypeHelpOptions) => Function;\n\n /**\n * Options passed to the @Type operator for this property.\n */\n options: TypeOptions;\n}\n"]}

View File

@@ -0,0 +1,2 @@
export {};
//# sourceMappingURL=target-map.interface.js.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"target-map.interface.js","sourceRoot":"","sources":["../../../src/interfaces/target-map.interface.ts"],"names":[],"mappings":"","sourcesContent":["/**\n * Allows to specify a map of Types in the object without using @Type decorator.\n * This is useful when you have external classes.\n */\nexport interface TargetMap {\n /**\n * Target which Types are being specified.\n */\n target: Function;\n\n /**\n * List of properties and their Types.\n */\n properties: { [key: string]: Function };\n}\n"]}

View File

@@ -0,0 +1,2 @@
export {};
//# sourceMappingURL=type-help-options.interface.js.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"type-help-options.interface.js","sourceRoot":"","sources":["../../../src/interfaces/type-help-options.interface.ts"],"names":[],"mappings":"","sourcesContent":["// TODO: Document this interface. What does each property means?\nexport interface TypeHelpOptions {\n newObject: any;\n object: Record<string, any>;\n property: string;\n}\n"]}