🎯 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,7 @@
/*
* This file was automatically generated.
* DO NOT MODIFY BY HAND.
* Run `yarn fix:special` to update
*/
declare const check: (options: import("../../../declarations/plugins/sharing/ConsumeSharedPlugin").ConsumeSharedPluginOptions) => boolean;
export = check;

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,120 @@
{
"definitions": {
"Consumes": {
"description": "Modules that should be consumed from share scope. When provided, property names are used to match requested modules in this compilation.",
"anyOf": [
{
"type": "array",
"items": {
"description": "Modules that should be consumed from share scope.",
"anyOf": [
{
"$ref": "#/definitions/ConsumesItem"
},
{
"$ref": "#/definitions/ConsumesObject"
}
]
}
},
{
"$ref": "#/definitions/ConsumesObject"
}
]
},
"ConsumesConfig": {
"description": "Advanced configuration for modules that should be consumed from share scope.",
"type": "object",
"additionalProperties": false,
"properties": {
"eager": {
"description": "Include the fallback module directly instead behind an async request. This allows to use fallback module in initial load too. All possible shared modules need to be eager too.",
"type": "boolean"
},
"import": {
"description": "Fallback module if no shared module is found in share scope. Defaults to the property name.",
"anyOf": [
{
"description": "No fallback module.",
"enum": [false]
},
{
"$ref": "#/definitions/ConsumesItem"
}
]
},
"packageName": {
"description": "Package name to determine required version from description file. This is only needed when package name can't be automatically determined from request.",
"type": "string",
"minLength": 1
},
"requiredVersion": {
"description": "Version requirement from module in share scope.",
"anyOf": [
{
"description": "No version requirement check.",
"enum": [false]
},
{
"description": "Version as string. Can be prefixed with '^' or '~' for minimum matches. Each part of the version should be separated by a dot '.'.",
"type": "string"
}
]
},
"shareKey": {
"description": "Module is looked up under this key from the share scope.",
"type": "string",
"minLength": 1
},
"shareScope": {
"description": "Share scope name.",
"type": "string",
"minLength": 1
},
"singleton": {
"description": "Allow only a single version of the shared module in share scope (disabled by default).",
"type": "boolean"
},
"strictVersion": {
"description": "Do not accept shared module if version is not valid (defaults to yes, if local fallback module is available and shared module is not a singleton, otherwise no, has no effect if there is no required version specified).",
"type": "boolean"
}
}
},
"ConsumesItem": {
"description": "A module that should be consumed from share scope.",
"type": "string",
"minLength": 1
},
"ConsumesObject": {
"description": "Modules that should be consumed from share scope. Property names are used to match requested modules in this compilation. Relative requests are resolved, module requests are matched unresolved, absolute paths will match resolved requests. A trailing slash will match all requests with this prefix. In this case shareKey must also have a trailing slash.",
"type": "object",
"additionalProperties": {
"description": "Modules that should be consumed from share scope.",
"anyOf": [
{
"$ref": "#/definitions/ConsumesConfig"
},
{
"$ref": "#/definitions/ConsumesItem"
}
]
}
}
},
"title": "ConsumeSharedPluginOptions",
"description": "Options for consuming shared modules.",
"type": "object",
"additionalProperties": false,
"properties": {
"consumes": {
"$ref": "#/definitions/Consumes"
},
"shareScope": {
"description": "Share scope name used for all consumed modules (defaults to 'default').",
"type": "string",
"minLength": 1
}
},
"required": ["consumes"]
}

View File

@@ -0,0 +1,7 @@
/*
* This file was automatically generated.
* DO NOT MODIFY BY HAND.
* Run `yarn fix:special` to update
*/
declare const check: (options: import("../../../declarations/plugins/sharing/ProvideSharedPlugin").ProvideSharedPluginOptions) => boolean;
export = check;

View File

@@ -0,0 +1,6 @@
/*
* This file was automatically generated.
* DO NOT MODIFY BY HAND.
* Run `yarn fix:special` to update
*/
"use strict";function r(t,{instancePath:e="",parentData:s,parentDataProperty:n,rootData:a=t}={}){let o=null,l=0;if(0===l){if(!t||"object"!=typeof t||Array.isArray(t))return r.errors=[{params:{type:"object"}}],!1;for(const e in t){let s=t[e];const n=l,a=l;let f=!1;const u=l;if(l==l)if(s&&"object"==typeof s&&!Array.isArray(s)){const r=l;for(const r in s)if("eager"!==r&&"shareKey"!==r&&"shareScope"!==r&&"version"!==r){const t={params:{additionalProperty:r}};null===o?o=[t]:o.push(t),l++;break}if(r===l){if(void 0!==s.eager){const r=l;if("boolean"!=typeof s.eager){const r={params:{type:"boolean"}};null===o?o=[r]:o.push(r),l++}var i=r===l}else i=!0;if(i){if(void 0!==s.shareKey){let r=s.shareKey;const t=l;if(l===t)if("string"==typeof r){if(r.length<1){const r={params:{}};null===o?o=[r]:o.push(r),l++}}else{const r={params:{type:"string"}};null===o?o=[r]:o.push(r),l++}i=t===l}else i=!0;if(i){if(void 0!==s.shareScope){let r=s.shareScope;const t=l;if(l===t)if("string"==typeof r){if(r.length<1){const r={params:{}};null===o?o=[r]:o.push(r),l++}}else{const r={params:{type:"string"}};null===o?o=[r]:o.push(r),l++}i=t===l}else i=!0;if(i)if(void 0!==s.version){let r=s.version;const t=l,e=l;let n=!1;const a=l;if(!1!==r){const r={params:{}};null===o?o=[r]:o.push(r),l++}var p=a===l;if(n=n||p,!n){const t=l;if("string"!=typeof r){const r={params:{type:"string"}};null===o?o=[r]:o.push(r),l++}p=t===l,n=n||p}if(n)l=e,null!==o&&(e?o.length=e:o=null);else{const r={params:{}};null===o?o=[r]:o.push(r),l++}i=t===l}else i=!0}}}}else{const r={params:{type:"object"}};null===o?o=[r]:o.push(r),l++}var c=u===l;if(f=f||c,!f){const r=l;if(l==l)if("string"==typeof s){if(s.length<1){const r={params:{}};null===o?o=[r]:o.push(r),l++}}else{const r={params:{type:"string"}};null===o?o=[r]:o.push(r),l++}c=r===l,f=f||c}if(!f){const t={params:{}};return null===o?o=[t]:o.push(t),l++,r.errors=o,!1}if(l=a,null!==o&&(a?o.length=a:o=null),n!==l)break}}return r.errors=o,0===l}function t(e,{instancePath:s="",parentData:n,parentDataProperty:a,rootData:o=e}={}){let l=null,i=0;const p=i;let c=!1;const f=i;if(i===f)if(Array.isArray(e)){const t=e.length;for(let n=0;n<t;n++){let t=e[n];const a=i,p=i;let c=!1;const f=i;if(i==i)if("string"==typeof t){if(t.length<1){const r={params:{}};null===l?l=[r]:l.push(r),i++}}else{const r={params:{type:"string"}};null===l?l=[r]:l.push(r),i++}var u=f===i;if(c=c||u,!c){const a=i;r(t,{instancePath:s+"/"+n,parentData:e,parentDataProperty:n,rootData:o})||(l=null===l?r.errors:l.concat(r.errors),i=l.length),u=a===i,c=c||u}if(c)i=p,null!==l&&(p?l.length=p:l=null);else{const r={params:{}};null===l?l=[r]:l.push(r),i++}if(a!==i)break}}else{const r={params:{type:"array"}};null===l?l=[r]:l.push(r),i++}var h=f===i;if(c=c||h,!c){const t=i;r(e,{instancePath:s,parentData:n,parentDataProperty:a,rootData:o})||(l=null===l?r.errors:l.concat(r.errors),i=l.length),h=t===i,c=c||h}if(!c){const r={params:{}};return null===l?l=[r]:l.push(r),i++,t.errors=l,!1}return i=p,null!==l&&(p?l.length=p:l=null),t.errors=l,0===i}function e(r,{instancePath:s="",parentData:n,parentDataProperty:a,rootData:o=r}={}){let l=null,i=0;if(0===i){if(!r||"object"!=typeof r||Array.isArray(r))return e.errors=[{params:{type:"object"}}],!1;{let n;if(void 0===r.provides&&(n="provides"))return e.errors=[{params:{missingProperty:n}}],!1;{const n=i;for(const t in r)if("provides"!==t&&"shareScope"!==t)return e.errors=[{params:{additionalProperty:t}}],!1;if(n===i){if(void 0!==r.provides){const e=i;t(r.provides,{instancePath:s+"/provides",parentData:r,parentDataProperty:"provides",rootData:o})||(l=null===l?t.errors:l.concat(t.errors),i=l.length);var p=e===i}else p=!0;if(p)if(void 0!==r.shareScope){let t=r.shareScope;const s=i;if(i===s){if("string"!=typeof t)return e.errors=[{params:{type:"string"}}],!1;if(t.length<1)return e.errors=[{params:{}}],!1}p=s===i}else p=!0}}}}return e.errors=l,0===i}module.exports=e,module.exports.default=e;

View File

@@ -0,0 +1,94 @@
{
"definitions": {
"Provides": {
"description": "Modules that should be provided as shared modules to the share scope. When provided, property name is used to match modules, otherwise this is automatically inferred from share key.",
"anyOf": [
{
"type": "array",
"items": {
"description": "Modules that should be provided as shared modules to the share scope.",
"anyOf": [
{
"$ref": "#/definitions/ProvidesItem"
},
{
"$ref": "#/definitions/ProvidesObject"
}
]
}
},
{
"$ref": "#/definitions/ProvidesObject"
}
]
},
"ProvidesConfig": {
"description": "Advanced configuration for modules that should be provided as shared modules to the share scope.",
"type": "object",
"additionalProperties": false,
"properties": {
"eager": {
"description": "Include the provided module directly instead behind an async request. This allows to use this shared module in initial load too. All possible shared modules need to be eager too.",
"type": "boolean"
},
"shareKey": {
"description": "Key in the share scope under which the shared modules should be stored.",
"type": "string",
"minLength": 1
},
"shareScope": {
"description": "Share scope name.",
"type": "string",
"minLength": 1
},
"version": {
"description": "Version of the provided module. Will replace lower matching versions, but not higher.",
"anyOf": [
{
"description": "Don't provide a version.",
"enum": [false]
},
{
"description": "Version as string. Each part of the version should be separated by a dot '.'.",
"type": "string"
}
]
}
}
},
"ProvidesItem": {
"description": "Request to a module that should be provided as shared module to the share scope (will be resolved when relative).",
"type": "string",
"minLength": 1
},
"ProvidesObject": {
"description": "Modules that should be provided as shared modules to the share scope. Property names are used as share keys.",
"type": "object",
"additionalProperties": {
"description": "Modules that should be provided as shared modules to the share scope.",
"anyOf": [
{
"$ref": "#/definitions/ProvidesConfig"
},
{
"$ref": "#/definitions/ProvidesItem"
}
]
}
}
},
"title": "ProvideSharedPluginOptions",
"type": "object",
"additionalProperties": false,
"properties": {
"provides": {
"$ref": "#/definitions/Provides"
},
"shareScope": {
"description": "Share scope name used for all provided modules (defaults to 'default').",
"type": "string",
"minLength": 1
}
},
"required": ["provides"]
}

View File

@@ -0,0 +1,7 @@
/*
* This file was automatically generated.
* DO NOT MODIFY BY HAND.
* Run `yarn fix:special` to update
*/
declare const check: (options: import("../../../declarations/plugins/sharing/SharePlugin").SharePluginOptions) => boolean;
export = check;

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,133 @@
{
"definitions": {
"Shared": {
"description": "Modules that should be shared in the share scope. When provided, property names are used to match requested modules in this compilation.",
"anyOf": [
{
"type": "array",
"items": {
"description": "Modules that should be shared in the share scope.",
"anyOf": [
{
"$ref": "#/definitions/SharedItem"
},
{
"$ref": "#/definitions/SharedObject"
}
]
}
},
{
"$ref": "#/definitions/SharedObject"
}
]
},
"SharedConfig": {
"description": "Advanced configuration for modules that should be shared in the share scope.",
"type": "object",
"additionalProperties": false,
"properties": {
"eager": {
"description": "Include the provided and fallback module directly instead behind an async request. This allows to use this shared module in initial load too. All possible shared modules need to be eager too.",
"type": "boolean"
},
"import": {
"description": "Provided module that should be provided to share scope. Also acts as fallback module if no shared module is found in share scope or version isn't valid. Defaults to the property name.",
"anyOf": [
{
"description": "No provided or fallback module.",
"enum": [false]
},
{
"$ref": "#/definitions/SharedItem"
}
]
},
"packageName": {
"description": "Package name to determine required version from description file. This is only needed when package name can't be automatically determined from request.",
"type": "string",
"minLength": 1
},
"requiredVersion": {
"description": "Version requirement from module in share scope.",
"anyOf": [
{
"description": "No version requirement check.",
"enum": [false]
},
{
"description": "Version as string. Can be prefixed with '^' or '~' for minimum matches. Each part of the version should be separated by a dot '.'.",
"type": "string"
}
]
},
"shareKey": {
"description": "Module is looked up under this key from the share scope.",
"type": "string",
"minLength": 1
},
"shareScope": {
"description": "Share scope name.",
"type": "string",
"minLength": 1
},
"singleton": {
"description": "Allow only a single version of the shared module in share scope (disabled by default).",
"type": "boolean"
},
"strictVersion": {
"description": "Do not accept shared module if version is not valid (defaults to yes, if local fallback module is available and shared module is not a singleton, otherwise no, has no effect if there is no required version specified).",
"type": "boolean"
},
"version": {
"description": "Version of the provided module. Will replace lower matching versions, but not higher.",
"anyOf": [
{
"description": "Don't provide a version.",
"enum": [false]
},
{
"description": "Version as string. Each part of the version should be separated by a dot '.'.",
"type": "string"
}
]
}
}
},
"SharedItem": {
"description": "A module that should be shared in the share scope.",
"type": "string",
"minLength": 1
},
"SharedObject": {
"description": "Modules that should be shared in the share scope. Property names are used to match requested modules in this compilation. Relative requests are resolved, module requests are matched unresolved, absolute paths will match resolved requests. A trailing slash will match all requests with this prefix. In this case shareKey must also have a trailing slash.",
"type": "object",
"additionalProperties": {
"description": "Modules that should be shared in the share scope.",
"anyOf": [
{
"$ref": "#/definitions/SharedConfig"
},
{
"$ref": "#/definitions/SharedItem"
}
]
}
}
},
"title": "SharePluginOptions",
"description": "Options for shared modules.",
"type": "object",
"additionalProperties": false,
"properties": {
"shareScope": {
"description": "Share scope name used for all shared modules (defaults to 'default').",
"type": "string",
"minLength": 1
},
"shared": {
"$ref": "#/definitions/Shared"
}
},
"required": ["shared"]
}