✨ 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
170 lines
5.1 KiB
JavaScript
170 lines
5.1 KiB
JavaScript
"use strict";
|
|
|
|
exports.__esModule = true;
|
|
exports["default"] = void 0;
|
|
var _parser = _interopRequireDefault(require("./parser"));
|
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
|
|
var Processor = /*#__PURE__*/function () {
|
|
function Processor(func, options) {
|
|
this.func = func || function noop() {};
|
|
this.funcRes = null;
|
|
this.options = options;
|
|
}
|
|
var _proto = Processor.prototype;
|
|
_proto._shouldUpdateSelector = function _shouldUpdateSelector(rule, options) {
|
|
if (options === void 0) {
|
|
options = {};
|
|
}
|
|
var merged = Object.assign({}, this.options, options);
|
|
if (merged.updateSelector === false) {
|
|
return false;
|
|
} else {
|
|
return typeof rule !== "string";
|
|
}
|
|
};
|
|
_proto._isLossy = function _isLossy(options) {
|
|
if (options === void 0) {
|
|
options = {};
|
|
}
|
|
var merged = Object.assign({}, this.options, options);
|
|
if (merged.lossless === false) {
|
|
return true;
|
|
} else {
|
|
return false;
|
|
}
|
|
};
|
|
_proto._root = function _root(rule, options) {
|
|
if (options === void 0) {
|
|
options = {};
|
|
}
|
|
var parser = new _parser["default"](rule, this._parseOptions(options));
|
|
return parser.root;
|
|
};
|
|
_proto._parseOptions = function _parseOptions(options) {
|
|
return {
|
|
lossy: this._isLossy(options)
|
|
};
|
|
};
|
|
_proto._run = function _run(rule, options) {
|
|
var _this = this;
|
|
if (options === void 0) {
|
|
options = {};
|
|
}
|
|
return new Promise(function (resolve, reject) {
|
|
try {
|
|
var root = _this._root(rule, options);
|
|
Promise.resolve(_this.func(root)).then(function (transform) {
|
|
var string = undefined;
|
|
if (_this._shouldUpdateSelector(rule, options)) {
|
|
string = root.toString();
|
|
rule.selector = string;
|
|
}
|
|
return {
|
|
transform: transform,
|
|
root: root,
|
|
string: string
|
|
};
|
|
}).then(resolve, reject);
|
|
} catch (e) {
|
|
reject(e);
|
|
return;
|
|
}
|
|
});
|
|
};
|
|
_proto._runSync = function _runSync(rule, options) {
|
|
if (options === void 0) {
|
|
options = {};
|
|
}
|
|
var root = this._root(rule, options);
|
|
var transform = this.func(root);
|
|
if (transform && typeof transform.then === "function") {
|
|
throw new Error("Selector processor returned a promise to a synchronous call.");
|
|
}
|
|
var string = undefined;
|
|
if (options.updateSelector && typeof rule !== "string") {
|
|
string = root.toString();
|
|
rule.selector = string;
|
|
}
|
|
return {
|
|
transform: transform,
|
|
root: root,
|
|
string: string
|
|
};
|
|
}
|
|
|
|
/**
|
|
* Process rule into a selector AST.
|
|
*
|
|
* @param rule {postcss.Rule | string} The css selector to be processed
|
|
* @param options The options for processing
|
|
* @returns {Promise<parser.Root>} The AST of the selector after processing it.
|
|
*/;
|
|
_proto.ast = function ast(rule, options) {
|
|
return this._run(rule, options).then(function (result) {
|
|
return result.root;
|
|
});
|
|
}
|
|
|
|
/**
|
|
* Process rule into a selector AST synchronously.
|
|
*
|
|
* @param rule {postcss.Rule | string} The css selector to be processed
|
|
* @param options The options for processing
|
|
* @returns {parser.Root} The AST of the selector after processing it.
|
|
*/;
|
|
_proto.astSync = function astSync(rule, options) {
|
|
return this._runSync(rule, options).root;
|
|
}
|
|
|
|
/**
|
|
* Process a selector into a transformed value asynchronously
|
|
*
|
|
* @param rule {postcss.Rule | string} The css selector to be processed
|
|
* @param options The options for processing
|
|
* @returns {Promise<any>} The value returned by the processor.
|
|
*/;
|
|
_proto.transform = function transform(rule, options) {
|
|
return this._run(rule, options).then(function (result) {
|
|
return result.transform;
|
|
});
|
|
}
|
|
|
|
/**
|
|
* Process a selector into a transformed value synchronously.
|
|
*
|
|
* @param rule {postcss.Rule | string} The css selector to be processed
|
|
* @param options The options for processing
|
|
* @returns {any} The value returned by the processor.
|
|
*/;
|
|
_proto.transformSync = function transformSync(rule, options) {
|
|
return this._runSync(rule, options).transform;
|
|
}
|
|
|
|
/**
|
|
* Process a selector into a new selector string asynchronously.
|
|
*
|
|
* @param rule {postcss.Rule | string} The css selector to be processed
|
|
* @param options The options for processing
|
|
* @returns {string} the selector after processing.
|
|
*/;
|
|
_proto.process = function process(rule, options) {
|
|
return this._run(rule, options).then(function (result) {
|
|
return result.string || result.root.toString();
|
|
});
|
|
}
|
|
|
|
/**
|
|
* Process a selector into a new selector string synchronously.
|
|
*
|
|
* @param rule {postcss.Rule | string} The css selector to be processed
|
|
* @param options The options for processing
|
|
* @returns {string} the selector after processing.
|
|
*/;
|
|
_proto.processSync = function processSync(rule, options) {
|
|
var result = this._runSync(rule, options);
|
|
return result.string || result.root.toString();
|
|
};
|
|
return Processor;
|
|
}();
|
|
exports["default"] = Processor;
|
|
module.exports = exports.default; |