@react-fabric/utilities 1.0.0-beta.6 → 1.0.0-beta.60
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/_ascii.js +34 -9
- package/dist/cjs/_boundingBox.js +16 -4
- package/dist/cjs/_countries.js +39 -21
- package/dist/cjs/_debounce.js +8 -2
- package/dist/cjs/_dedupe.js +48 -2
- package/dist/cjs/_fetch.js +12 -7
- package/dist/cjs/_fileType.js +16 -0
- package/dist/cjs/_format.js +19 -7
- package/dist/cjs/_getByPath.js +16 -5
- package/dist/cjs/_hash.js +13 -7
- package/dist/cjs/_interpolate.js +18 -2
- package/dist/cjs/_isEqual.js +40 -6
- package/dist/cjs/_isType.js +126 -1
- package/dist/cjs/_lonlat.js +102 -0
- package/dist/cjs/_mergeRefs.js +11 -0
- package/dist/cjs/_tokenize.js +17 -4
- package/dist/cjs/getImageColorset.js +17 -2
- package/dist/cjs/index.js +5 -0
- package/dist/cjs/useLogger.js +9 -1
- package/dist/esm/_ascii.js +34 -9
- package/dist/esm/_boundingBox.js +16 -4
- package/dist/esm/_countries.js +39 -21
- package/dist/esm/_debounce.js +8 -2
- package/dist/esm/_dedupe.js +48 -2
- package/dist/esm/_fetch.js +12 -7
- package/dist/esm/_fileType.js +16 -0
- package/dist/esm/_format.js +19 -7
- package/dist/esm/_getByPath.js +16 -5
- package/dist/esm/_hash.js +13 -7
- package/dist/esm/_interpolate.js +18 -2
- package/dist/esm/_isEqual.js +41 -7
- package/dist/esm/_isType.js +126 -2
- package/dist/esm/_lonlat.js +100 -0
- package/dist/esm/_mergeRefs.js +11 -0
- package/dist/esm/_tokenize.js +17 -4
- package/dist/esm/getImageColorset.js +17 -2
- package/dist/esm/index.js +2 -1
- package/dist/esm/useLogger.js +9 -1
- package/dist/types/_ascii.d.ts +7 -2
- package/dist/types/_boundingBox.d.ts +16 -4
- package/dist/types/_countries.d.ts +39 -21
- package/dist/types/_debounce.d.ts +8 -2
- package/dist/types/_dedupe.d.ts +47 -4
- package/dist/types/_fetch.d.ts +12 -9
- package/dist/types/_fileType.d.ts +16 -0
- package/dist/types/_format.d.ts +84 -13
- package/dist/types/_getByPath.d.ts +15 -4
- package/dist/types/_hash.d.ts +12 -6
- package/dist/types/_interpolate.d.ts +17 -2
- package/dist/types/_isEqual.d.ts +37 -6
- package/dist/types/_isType.d.ts +112 -3
- package/dist/types/_lonlat.d.ts +48 -0
- package/dist/types/_mergeRefs.d.ts +11 -0
- package/dist/types/_tokenize.d.ts +16 -4
- package/dist/types/getImageColorset.d.ts +15 -0
- package/dist/types/index.d.ts +1 -0
- package/dist/types/useLogger.d.ts +9 -1
- package/package.json +7 -7
- package/src/_ascii.ts +10 -5
- package/src/_boundingBox.ts +16 -4
- package/src/_countries.ts +39 -21
- package/src/_debounce.ts +8 -2
- package/src/_dedupe.ts +51 -5
- package/src/_fetch.ts +12 -7
- package/src/_fileType.ts +16 -0
- package/src/_format.ts +88 -19
- package/src/_getByPath.ts +18 -7
- package/src/_hash.ts +13 -7
- package/src/_interpolate.ts +17 -2
- package/src/_isEqual.ts +41 -7
- package/src/_isType.ts +116 -2
- package/src/_lonlat.ts +135 -0
- package/src/_mergeRefs.ts +11 -0
- package/src/_tokenize.ts +16 -4
- package/src/getImageColorset.ts +17 -2
- package/src/index.ts +1 -0
- package/src/useLogger.ts +9 -1
package/dist/esm/_dedupe.js
CHANGED
|
@@ -25,6 +25,18 @@ import { isEmpty } from './_isType.js';
|
|
|
25
25
|
* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
26
26
|
*/
|
|
27
27
|
|
|
28
|
+
|
|
29
|
+
/**
|
|
30
|
+
* Remove duplicates from a list of objects based on a key or the entire object.
|
|
31
|
+
* If a key is provided, it will deduplicate based on the value of that key.
|
|
32
|
+
* If no key is provided, it will deduplicate based on the entire object.
|
|
33
|
+
* This is useful for normalizing data structures that may have nested arrays or objects.
|
|
34
|
+
*
|
|
35
|
+
* @param list
|
|
36
|
+
* @param key
|
|
37
|
+
* @typedef {T} AnyObject - A generic type representing list items.
|
|
38
|
+
* @returns {T[]} - A new array with duplicates removed.
|
|
39
|
+
*/
|
|
28
40
|
var dedupe = function dedupe(list, key) {
|
|
29
41
|
var filtered = list.filter(function (i) {
|
|
30
42
|
return !isEmpty(i);
|
|
@@ -33,20 +45,54 @@ var dedupe = function dedupe(list, key) {
|
|
|
33
45
|
return Array.from(new Set(filtered).values());
|
|
34
46
|
}
|
|
35
47
|
return Array.from(new Map(filtered.map(function (obj) {
|
|
36
|
-
|
|
37
|
-
return [(_obj$key = obj[key]) !== null && _obj$key !== void 0 ? _obj$key : obj, obj];
|
|
48
|
+
return [obj[key], obj];
|
|
38
49
|
})).values());
|
|
39
50
|
};
|
|
51
|
+
|
|
52
|
+
/**
|
|
53
|
+
* Flatten a list of objects, removing any empty objects.
|
|
54
|
+
* It will flatten up to 5 levels deep and filter out any empty objects.
|
|
55
|
+
* This is useful for normalizing data structures that may have nested arrays or objects.
|
|
56
|
+
*
|
|
57
|
+
* @param list
|
|
58
|
+
* @typedef {T} AnyObject - A generic type representing list items.
|
|
59
|
+
* @returns {T[]} - A flattened array of objects.
|
|
60
|
+
*/
|
|
40
61
|
var flatten = function flatten(list) {
|
|
41
62
|
return list.flat(5).filter(function (i) {
|
|
42
63
|
return !isEmpty(i);
|
|
43
64
|
});
|
|
44
65
|
};
|
|
66
|
+
|
|
67
|
+
/**
|
|
68
|
+
* Flatten a list of objects and remove duplicates based on a key or the entire object.
|
|
69
|
+
* If a key is provided, it will deduplicate based on the value of that key.
|
|
70
|
+
* If no key is provided, it will deduplicate based on the entire object.
|
|
71
|
+
* This is useful for normalizing data structures that may have nested arrays or objects.
|
|
72
|
+
* Flattening is done first, followed by deduplication.
|
|
73
|
+
*
|
|
74
|
+
* @param list
|
|
75
|
+
* @param key
|
|
76
|
+
* @typedef {T} AnyObject - A generic type representing list items.
|
|
77
|
+
* @returns {T[]} - A new array with duplicates removed.
|
|
78
|
+
*/
|
|
45
79
|
var flattenAndDedupe = function flattenAndDedupe() {
|
|
46
80
|
var list = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
|
|
47
81
|
var key = arguments.length > 1 ? arguments[1] : undefined;
|
|
48
82
|
return dedupe(flatten(list), key);
|
|
49
83
|
};
|
|
84
|
+
|
|
85
|
+
/**
|
|
86
|
+
* Group a list of objects by a specific property.
|
|
87
|
+
* If the property is not present in an object, it will use the `missingKey` value as the key.
|
|
88
|
+
* This is useful for organizing data into categories based on a specific property.
|
|
89
|
+
*
|
|
90
|
+
* @param list
|
|
91
|
+
* @param prop
|
|
92
|
+
* @param missingKey
|
|
93
|
+
* @typedef {T} KeyValue - A generic type representing list items with key-value pairs.
|
|
94
|
+
* @returns {KeyValue<T[]>} - An object mapping keys to arrays of items.
|
|
95
|
+
*/
|
|
50
96
|
var groupBy = function groupBy(list, prop, missingKey) {
|
|
51
97
|
return list.reduce(function (r, i) {
|
|
52
98
|
var _i$prop;
|
package/dist/esm/_fetch.js
CHANGED
|
@@ -10,13 +10,18 @@ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t =
|
|
|
10
10
|
var _signals = new Map();
|
|
11
11
|
|
|
12
12
|
/**
|
|
13
|
-
* Fetch
|
|
14
|
-
*
|
|
15
|
-
*
|
|
16
|
-
*
|
|
17
|
-
*
|
|
18
|
-
* @param
|
|
19
|
-
* @
|
|
13
|
+
* Fetch utility function to make HTTP requests.
|
|
14
|
+
* It supports GET, POST, PUT, and DELETE methods.
|
|
15
|
+
* It automatically handles JSON responses and error codes.
|
|
16
|
+
* It also supports aborting requests using an AbortController.
|
|
17
|
+
*
|
|
18
|
+
* @param method - The HTTP method to use (GET, POST, PUT, DELETE).
|
|
19
|
+
* @param url - The URL to send the request to.
|
|
20
|
+
* @param options.headers - Headers to include in the request.
|
|
21
|
+
* @param options.body - The body of the request (for POST and PUT requests).
|
|
22
|
+
* @param options.signal - An AbortSignal to cancel the request.
|
|
23
|
+
* @returns A promise that resolves to the JSON response from the server.
|
|
24
|
+
* @throws An error if the request fails or if the response contains an error code.
|
|
20
25
|
*/
|
|
21
26
|
var _fetch = /*#__PURE__*/function () {
|
|
22
27
|
var _ref2 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee2(method, url, _ref) {
|
package/dist/esm/_fileType.js
CHANGED
|
@@ -27,7 +27,20 @@ import _slicedToArray from '@babel/runtime/helpers/slicedToArray';
|
|
|
27
27
|
|
|
28
28
|
/* istanbul ignore file */
|
|
29
29
|
|
|
30
|
+
/**
|
|
31
|
+
* File type utility to get the file type from a MIME type.
|
|
32
|
+
* This utility provides a mapping of common MIME types to their human-readable names.
|
|
33
|
+
* It can be used to display file types in a user-friendly manner.
|
|
34
|
+
*/
|
|
30
35
|
var _fileType = {
|
|
36
|
+
/**
|
|
37
|
+
* Get the human-readable file type from a MIME type.
|
|
38
|
+
* This method looks up the MIME type in a predefined list
|
|
39
|
+
* and returns a user-friendly name.
|
|
40
|
+
*
|
|
41
|
+
* @param mime MIME type string, e.g. "application/pdf"
|
|
42
|
+
* @returns {string} - The human-readable file type.
|
|
43
|
+
*/
|
|
31
44
|
mime: function mime() {
|
|
32
45
|
var mime = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : "";
|
|
33
46
|
var ret = this.mimeList[mime.split(";")[0]];
|
|
@@ -40,6 +53,9 @@ var _fileType = {
|
|
|
40
53
|
}
|
|
41
54
|
return ret || "Unknown type";
|
|
42
55
|
},
|
|
56
|
+
/**
|
|
57
|
+
* List of common MIME types and their human-readable names.
|
|
58
|
+
*/
|
|
43
59
|
mimeList: {
|
|
44
60
|
"application/x-tika-msoffice": "Microsft Office File",
|
|
45
61
|
"application/x-tika-ooxml": "Open Office File",
|
package/dist/esm/_format.js
CHANGED
|
@@ -30,10 +30,12 @@ import { isEmpty, isNil } from './_isType.js';
|
|
|
30
30
|
*/
|
|
31
31
|
|
|
32
32
|
|
|
33
|
-
|
|
33
|
+
/**
|
|
34
|
+
* Format utility functions for various data types.
|
|
35
|
+
* This namespace provides methods to format phone numbers, numbers, bytes, percentages, dates, and durations.
|
|
36
|
+
*/
|
|
34
37
|
var Format;
|
|
35
38
|
(function (_Format) {
|
|
36
|
-
/** ***************** get phone number object using `libphonenumber-js` *******************/
|
|
37
39
|
var getPhone = function getPhone(value, country) {
|
|
38
40
|
var phone = value.match(/^[0+]/) != null ? value.replace(/^00/, "+") : "+".concat(value);
|
|
39
41
|
var number = parsePhoneNumberFromString(phone, country);
|
|
@@ -45,8 +47,6 @@ var Format;
|
|
|
45
47
|
}
|
|
46
48
|
};
|
|
47
49
|
};
|
|
48
|
-
|
|
49
|
-
/** ***************** common number format method using `numeral` *******************/
|
|
50
50
|
var numberFormat = function numberFormat(number) {
|
|
51
51
|
var format = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : "0,0[.]00a";
|
|
52
52
|
if (isNil(number)) {
|
|
@@ -66,7 +66,19 @@ var Format;
|
|
|
66
66
|
}
|
|
67
67
|
};
|
|
68
68
|
|
|
69
|
-
/**
|
|
69
|
+
/**
|
|
70
|
+
* Format phone number with country flag or emoji.
|
|
71
|
+
* It takes a phone number string, a country code, and a boolean to indicate whether to use CSS classes for flags.
|
|
72
|
+
* If the phone number is empty, less than 6 characters, or does not match the regex for valid phone numbers,
|
|
73
|
+
* it returns the original value.
|
|
74
|
+
* If the phone number is valid, it formats the phone number using `libphonenumber-js` and returns it with the country flag or emoji.
|
|
75
|
+
* The country flag is represented as a CSS class, and the emoji is obtained from the `Countries` module.
|
|
76
|
+
*
|
|
77
|
+
* @param {string} value - The phone number to format.
|
|
78
|
+
* @param {string} country - The country code to use for formatting.
|
|
79
|
+
* @param {boolean} useCss - Whether to use CSS classes for flags.
|
|
80
|
+
* @returns {string} The formatted phone number with country flag or emoji.
|
|
81
|
+
*/
|
|
70
82
|
_Format.phone = function (value) {
|
|
71
83
|
var _phone$country;
|
|
72
84
|
var country = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : "AE";
|
|
@@ -86,8 +98,8 @@ var Format;
|
|
|
86
98
|
return numberFormat(number, "0,0[.]00%");
|
|
87
99
|
};
|
|
88
100
|
_Format.date = function (date) {
|
|
89
|
-
var
|
|
90
|
-
return date ? format(new Date(date),
|
|
101
|
+
var format$1 = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : "d-M-y";
|
|
102
|
+
return date ? format(new Date(date), format$1) : "";
|
|
91
103
|
};
|
|
92
104
|
_Format.duration = function (number, isFraction) {
|
|
93
105
|
if (isNil(number)) {
|
package/dist/esm/_getByPath.js
CHANGED
|
@@ -36,7 +36,7 @@ var _get = function _get(hit, field) {
|
|
|
36
36
|
if (isNil(field)) {
|
|
37
37
|
return hit;
|
|
38
38
|
}
|
|
39
|
-
if (isObject(hit)) {
|
|
39
|
+
if (isObject(hit) || isArray(hit)) {
|
|
40
40
|
/** ***************** return value if object.property is not empty *******************/
|
|
41
41
|
if (!isNil(hit[field])) {
|
|
42
42
|
return hit[field];
|
|
@@ -92,8 +92,14 @@ var _get = function _get(hit, field) {
|
|
|
92
92
|
};
|
|
93
93
|
|
|
94
94
|
/**
|
|
95
|
-
*
|
|
96
|
-
*
|
|
95
|
+
* Get a value from an object by a given path.
|
|
96
|
+
* This function allows you to retrieve a value from a nested object structure using a dot-separated path.
|
|
97
|
+
* If the path does not exist or the object is empty, it returns a default value.
|
|
98
|
+
* @param {KeyValue} obj - The object from which to retrieve the value.
|
|
99
|
+
* @param {string} path - The dot-separated path to the value within the object.
|
|
100
|
+
* @param {any} defaultValue - The value to return if the path does not exist or the object is empty.
|
|
101
|
+
* @typedef {T} AnyObject - The type of the value to be returned.
|
|
102
|
+
* @returns {T} The value at the specified path, or the default value if the path does not exist.
|
|
97
103
|
*/
|
|
98
104
|
var getByPath = function getByPath(obj, path) {
|
|
99
105
|
var defaultValue = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : undefined;
|
|
@@ -109,8 +115,13 @@ var getByPath = function getByPath(obj, path) {
|
|
|
109
115
|
};
|
|
110
116
|
|
|
111
117
|
/**
|
|
112
|
-
*
|
|
113
|
-
*
|
|
118
|
+
* Get the first non-empty value from the provided arguments.
|
|
119
|
+
* This function is useful for finding a default value or fallback when multiple values are provided.
|
|
120
|
+
* It checks each argument in order and returns the first one that is not empty.
|
|
121
|
+
* If all arguments are empty, it returns `undefined`.
|
|
122
|
+
*
|
|
123
|
+
* @param {...any} args - The values to check for non-emptiness.
|
|
124
|
+
* @returns {any} The first non-empty value, or `undefined` if all are empty.
|
|
114
125
|
*/
|
|
115
126
|
var getValue = function getValue() {
|
|
116
127
|
for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
|
package/dist/esm/_hash.js
CHANGED
|
@@ -27,9 +27,11 @@ import { isEmpty } from './_isType.js';
|
|
|
27
27
|
|
|
28
28
|
|
|
29
29
|
/**
|
|
30
|
-
*
|
|
30
|
+
* Generate a hash from a string.
|
|
31
|
+
* This function computes a simple hash by iterating over each character in the string,
|
|
32
|
+
* performing bitwise operations to produce a 32-bit integer hash.
|
|
31
33
|
* @param str
|
|
32
|
-
* @
|
|
34
|
+
* @returns {number} A 32-bit integer hash of the input string.
|
|
33
35
|
*/
|
|
34
36
|
var hash = function hash(str) {
|
|
35
37
|
var hash = 0;
|
|
@@ -45,16 +47,20 @@ var hash = function hash(str) {
|
|
|
45
47
|
};
|
|
46
48
|
|
|
47
49
|
/**
|
|
48
|
-
*
|
|
49
|
-
*
|
|
50
|
+
* Generate a short hash using the current timestamp and a random number.
|
|
51
|
+
* This function creates a unique identifier by combining the current time in milliseconds
|
|
52
|
+
* with a random number, and then converting it to a base-36 string.
|
|
53
|
+
* @returns {string} A short hash string.
|
|
50
54
|
*/
|
|
51
55
|
var shortHash = function shortHash() {
|
|
52
|
-
return (new Date().getTime()
|
|
56
|
+
return (new Date().getTime() * Math.random()).toString(36);
|
|
53
57
|
};
|
|
54
58
|
|
|
55
59
|
/**
|
|
56
|
-
*
|
|
57
|
-
*
|
|
60
|
+
* Generate a UUID (Universally Unique Identifier).
|
|
61
|
+
* This function creates a version 4 UUID by generating random numbers
|
|
62
|
+
* and formatting them according to the UUID standard.
|
|
63
|
+
* @returns {string} A UUID string in the format xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx.
|
|
58
64
|
*/
|
|
59
65
|
var uuid = function uuid() {
|
|
60
66
|
return [1e7, 1e3, 4e3, 8e3, 1e11].join("-").replace(/[018]/g, function (c) {
|
package/dist/esm/_interpolate.js
CHANGED
|
@@ -27,8 +27,13 @@ import { getByPath } from './_getByPath.js';
|
|
|
27
27
|
|
|
28
28
|
|
|
29
29
|
/**
|
|
30
|
-
*
|
|
31
|
-
*
|
|
30
|
+
* Interpolate a string with values from a model.
|
|
31
|
+
* This function replaces placeholders in the format ${key} with corresponding values from the model object.
|
|
32
|
+
* If the value is not a string or number, it returns an empty string.
|
|
33
|
+
*
|
|
34
|
+
* @param {string} str - The string to interpolate.
|
|
35
|
+
* @param {KeyValue} model - The model object containing key-value pairs for interpolation.
|
|
36
|
+
* @returns {string} The interpolated string with placeholders replaced by values from the model.
|
|
32
37
|
*/
|
|
33
38
|
var interpolate = function interpolate(str, model) {
|
|
34
39
|
return str.replace(/\${([^{}]*)}/g, function (a, b) {
|
|
@@ -36,6 +41,17 @@ var interpolate = function interpolate(str, model) {
|
|
|
36
41
|
return typeof r === "string" || typeof r === "number" ? "".concat(r) : "";
|
|
37
42
|
});
|
|
38
43
|
};
|
|
44
|
+
|
|
45
|
+
/**
|
|
46
|
+
* Render a template string with values from a model.
|
|
47
|
+
* This function replaces placeholders in the format {{key}} with corresponding values from the model object.
|
|
48
|
+
* If the value is not a string or number, it returns an empty string.
|
|
49
|
+
* This is similar to the interpolate function but for handlebar templates.
|
|
50
|
+
*
|
|
51
|
+
* @param {string} str - The template string to render.
|
|
52
|
+
* @param {KeyValue} model - The model object containing key-value pairs for rendering the template.
|
|
53
|
+
* @returns {string} The rendered template string with placeholders replaced by values from the model.
|
|
54
|
+
*/
|
|
39
55
|
var renderTemplate = function renderTemplate(str, model) {
|
|
40
56
|
return str.replace(/{{([^{}]*)}}/g, function (a, b) {
|
|
41
57
|
var r = getByPath(model, b);
|
package/dist/esm/_isEqual.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
|
|
3
3
|
import { ascii } from './_ascii.js';
|
|
4
|
-
import { isString, isNumber, isBoolean, isObject } from './_isType.js';
|
|
4
|
+
import { isNil, isString, isNumber, isBoolean, isObject } from './_isType.js';
|
|
5
5
|
|
|
6
6
|
/*
|
|
7
7
|
* React Fabric
|
|
@@ -28,10 +28,23 @@ import { isString, isNumber, isBoolean, isObject } from './_isType.js';
|
|
|
28
28
|
|
|
29
29
|
|
|
30
30
|
/**
|
|
31
|
-
*
|
|
32
|
-
*
|
|
31
|
+
* Compare two objects or values for equality.
|
|
32
|
+
* This function checks if two values are equal, including nested objects and arrays.
|
|
33
|
+
* It handles various data types such as strings, numbers, booleans, arrays, and objects.
|
|
34
|
+
* If both values are `null` or `undefined`, they are considered equal.
|
|
35
|
+
* If both values are primitive types (string, number, boolean), they are compared directly.
|
|
36
|
+
* If both values are arrays, they are compared element by element.
|
|
37
|
+
* If both values are objects, they are compared by their keys and values.
|
|
38
|
+
* If the values are of different types or structures, they are considered not equal.
|
|
39
|
+
*
|
|
40
|
+
* @param {unknown} obj - The first value to compare.
|
|
41
|
+
* @param {unknown} test - The second value to compare against the first.
|
|
42
|
+
* @returns {boolean} - Returns true if the values are equal, false otherwise.
|
|
33
43
|
*/
|
|
34
44
|
var isEqual = function isEqual(obj, test) {
|
|
45
|
+
if (isNil(obj) && isNil(test)) {
|
|
46
|
+
return true;
|
|
47
|
+
}
|
|
35
48
|
if (isString(obj) || isNumber(obj) || isBoolean(obj)) {
|
|
36
49
|
return obj === test;
|
|
37
50
|
} else if (Array.isArray(obj) && Array.isArray(test)) {
|
|
@@ -65,8 +78,20 @@ var isEqual = function isEqual(obj, test) {
|
|
|
65
78
|
};
|
|
66
79
|
|
|
67
80
|
/**
|
|
68
|
-
*
|
|
69
|
-
*
|
|
81
|
+
* Match a string against another string with options for equality.
|
|
82
|
+
* This function checks if the base string starts with, includes, or is equal to the match string,
|
|
83
|
+
* based on the specified equality condition.
|
|
84
|
+
* It normalizes both strings to lowercase and ASCII format before comparison.
|
|
85
|
+
* This is useful for case-insensitive and ASCII-only comparisons,
|
|
86
|
+
* such as when filtering or searching through text data.
|
|
87
|
+
*
|
|
88
|
+
* @param {string} base - The base string to match against.
|
|
89
|
+
* @param {string} match - The string to match with the base string.
|
|
90
|
+
* @param {("start" | boolean)} equality - The type of match to perform:
|
|
91
|
+
* - "start": checks if the base string starts with the match string.
|
|
92
|
+
* - true: checks for exact equality.
|
|
93
|
+
* - false (default): checks if the base string includes the match string.
|
|
94
|
+
* @returns {boolean} - Returns true if the base string matches the conditions specified by the match string and equality.
|
|
70
95
|
*/
|
|
71
96
|
var matchString = function matchString(base, match) {
|
|
72
97
|
var equality = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
|
|
@@ -76,8 +101,17 @@ var matchString = function matchString(base, match) {
|
|
|
76
101
|
};
|
|
77
102
|
|
|
78
103
|
/**
|
|
79
|
-
*
|
|
80
|
-
*
|
|
104
|
+
* Compare two values for sorting.
|
|
105
|
+
* This function compares two values based on the specified order (ascending or descending).
|
|
106
|
+
* If a key is provided, it compares the values of that key in the objects.
|
|
107
|
+
* It handles various data types such as strings, numbers, booleans, and objects.
|
|
108
|
+
* It returns a comparison function that can be used with array sorting methods.
|
|
109
|
+
* * The comparison is done in a case-insensitive manner for strings,
|
|
110
|
+
* treating special characters as their ASCII equivalents.
|
|
111
|
+
*
|
|
112
|
+
* @param {("asc" | "desc")} order - The order of comparison, either "asc" for ascending or "desc" for descending.
|
|
113
|
+
* @param {string} key - An optional key to compare values within objects.
|
|
114
|
+
* @returns {Function} A comparison function that can be used with array sorting methods.
|
|
81
115
|
*/
|
|
82
116
|
var compareValues = function compareValues() {
|
|
83
117
|
var order = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : "asc";
|
package/dist/esm/_isType.js
CHANGED
|
@@ -25,21 +25,55 @@ import _typeof from '@babel/runtime/helpers/typeof';
|
|
|
25
25
|
* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
26
26
|
*/
|
|
27
27
|
|
|
28
|
+
/**
|
|
29
|
+
* Check if a value is undefined.
|
|
30
|
+
* @param value - The value to check.
|
|
31
|
+
* @returns true if the value is undefined, false otherwise.
|
|
32
|
+
*/
|
|
28
33
|
var isUndefined = function isUndefined(value) {
|
|
29
34
|
return value === undefined;
|
|
30
35
|
};
|
|
36
|
+
|
|
37
|
+
/**
|
|
38
|
+
* Check if a value is null.
|
|
39
|
+
* @param value - The value to check.
|
|
40
|
+
* @returns true if the value is null, false otherwise.
|
|
41
|
+
*/
|
|
31
42
|
var isNull = function isNull(value) {
|
|
32
43
|
return value === null;
|
|
33
44
|
};
|
|
45
|
+
|
|
46
|
+
/**
|
|
47
|
+
* Check if a value is either null or undefined.
|
|
48
|
+
* @param val - The value to check.
|
|
49
|
+
* @returns true if the value is null or undefined, false otherwise.
|
|
50
|
+
*/
|
|
34
51
|
var isNil = function isNil(val) {
|
|
35
52
|
return val === undefined || val === null;
|
|
36
53
|
};
|
|
54
|
+
var isDefined = function isDefined(val) {
|
|
55
|
+
return !isNil(val) && val !== "";
|
|
56
|
+
};
|
|
57
|
+
|
|
58
|
+
/**
|
|
59
|
+
* Check if a value is empty.
|
|
60
|
+
* A value is considered empty if it is:
|
|
61
|
+
* - undefined
|
|
62
|
+
* - null
|
|
63
|
+
* - an empty string
|
|
64
|
+
* - an empty array
|
|
65
|
+
* - an empty object
|
|
66
|
+
* - an empty Map or Set
|
|
67
|
+
* - a boolean, number, or bigint (not empty)
|
|
68
|
+
* @param val - The value to check.
|
|
69
|
+
* @returns true if the value is empty, false otherwise.
|
|
70
|
+
*/
|
|
37
71
|
var isEmpty = function isEmpty(val) {
|
|
38
72
|
if (val instanceof Date) return false;
|
|
39
73
|
if (isNil(val) || val === "") {
|
|
40
74
|
return true;
|
|
41
75
|
}
|
|
42
|
-
if (Array.isArray(val) && val.filter(
|
|
76
|
+
if (Array.isArray(val) && val.filter(isDefined).length === 0) {
|
|
43
77
|
return true;
|
|
44
78
|
}
|
|
45
79
|
if (val instanceof Map || val instanceof Set) return val.size === 0;
|
|
@@ -48,38 +82,128 @@ var isEmpty = function isEmpty(val) {
|
|
|
48
82
|
}
|
|
49
83
|
return !!val && _typeof(val) === "object" && Object.entries(val).length === 0;
|
|
50
84
|
};
|
|
85
|
+
|
|
86
|
+
/**
|
|
87
|
+
* Check if a value is an object.
|
|
88
|
+
* An object is considered valid if it is:
|
|
89
|
+
* - not null or undefined
|
|
90
|
+
* - not a Date instance
|
|
91
|
+
* - of type 'object'
|
|
92
|
+
* - not an array
|
|
93
|
+
* @param val - The value to check.
|
|
94
|
+
* @returns true if the value is an object, false otherwise.
|
|
95
|
+
*/
|
|
51
96
|
var isObject = function isObject(val) {
|
|
52
97
|
return !isNil(val) && !(val instanceof Date) && _typeof(val) === "object" && !Array.isArray(val);
|
|
53
98
|
};
|
|
99
|
+
|
|
100
|
+
/**
|
|
101
|
+
* Check if a value is an array.
|
|
102
|
+
* An array is considered valid if it is:
|
|
103
|
+
* - not null or undefined
|
|
104
|
+
* - an instance of Array
|
|
105
|
+
* @param val - The value to check.
|
|
106
|
+
* @returns true if the value is an array, false otherwise.
|
|
107
|
+
*/
|
|
54
108
|
var isArray = function isArray(val) {
|
|
55
109
|
return Array.isArray(val);
|
|
56
110
|
};
|
|
111
|
+
|
|
112
|
+
/**
|
|
113
|
+
* Check if a value is a string.
|
|
114
|
+
* A string is considered valid if it is:
|
|
115
|
+
* - not null or undefined
|
|
116
|
+
* - of type 'string'
|
|
117
|
+
* @param value - The value to check.
|
|
118
|
+
* @returns true if the value is a string, false otherwise.
|
|
119
|
+
*/
|
|
57
120
|
var isString = function isString(value) {
|
|
58
121
|
return typeof value === "string";
|
|
59
122
|
};
|
|
123
|
+
|
|
124
|
+
/**
|
|
125
|
+
* Check if a value is a number.
|
|
126
|
+
* A number is considered valid if it is:
|
|
127
|
+
* - not null or undefined
|
|
128
|
+
* - of type 'number'
|
|
129
|
+
* @param value - The value to check.
|
|
130
|
+
* @returns true if the value is a number, false otherwise.
|
|
131
|
+
*/
|
|
60
132
|
var isNumber = function isNumber(value) {
|
|
61
133
|
return typeof value === "number";
|
|
62
134
|
};
|
|
135
|
+
|
|
136
|
+
/**
|
|
137
|
+
* Check if a value is a boolean.
|
|
138
|
+
* A boolean is considered valid if it is:
|
|
139
|
+
* - not null or undefined
|
|
140
|
+
* - of type 'boolean'
|
|
141
|
+
*/
|
|
63
142
|
var isBoolean = function isBoolean(value) {
|
|
64
143
|
return typeof value === "boolean";
|
|
65
144
|
};
|
|
145
|
+
|
|
146
|
+
/**
|
|
147
|
+
* Check if a value is a true.
|
|
148
|
+
* A value is considered true if it is:
|
|
149
|
+
* - strictly equal to true
|
|
150
|
+
* - equal to 1
|
|
151
|
+
* - a string that is "yes" or "true" (case insensitive)
|
|
152
|
+
*/
|
|
66
153
|
var isTrue = function isTrue() {
|
|
67
154
|
var value = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : "";
|
|
68
155
|
return value === true || value === 1 || (value === null || value === void 0 ? void 0 : value.toString().toLowerCase()) === "yes" || (value === null || value === void 0 ? void 0 : value.toString().toLowerCase()) === "true";
|
|
69
156
|
};
|
|
157
|
+
|
|
158
|
+
/**
|
|
159
|
+
* Check if a value is false.
|
|
160
|
+
* A value is considered false if it is:
|
|
161
|
+
* - strictly equal to false
|
|
162
|
+
* - equal to 0
|
|
163
|
+
* - a string that is "no" or "false" (case insensitive)
|
|
164
|
+
*/
|
|
70
165
|
var isFalse = function isFalse() {
|
|
71
166
|
var value = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : "";
|
|
72
167
|
return value === false || value === 0 || (value === null || value === void 0 ? void 0 : value.toString().toLowerCase()) === "no" || (value === null || value === void 0 ? void 0 : value.toString().toLowerCase()) === "false";
|
|
73
168
|
};
|
|
169
|
+
|
|
170
|
+
/**
|
|
171
|
+
* Check if a value is a valid color.
|
|
172
|
+
* A color is considered valid if it:
|
|
173
|
+
* - starts with a '#' (hex color)
|
|
174
|
+
* - starts with 'rgb' (RGB color)
|
|
175
|
+
* - starts with 'hsl' (HSL color)
|
|
176
|
+
* - starts with 'lab' (Lab color)
|
|
177
|
+
* - is equal to 'transparent'
|
|
178
|
+
* @param color - The value to check.
|
|
179
|
+
* @returns true if the value is a valid color, false otherwise.
|
|
180
|
+
*/
|
|
74
181
|
var isColor = function isColor(color) {
|
|
75
182
|
var _color$startsWith, _color$startsWith2, _color$startsWith3, _color$startsWith4;
|
|
76
183
|
return ((_color$startsWith = color.startsWith) === null || _color$startsWith === void 0 ? void 0 : _color$startsWith.call(color, "#")) || ((_color$startsWith2 = color.startsWith) === null || _color$startsWith2 === void 0 ? void 0 : _color$startsWith2.call(color, "rgb")) || ((_color$startsWith3 = color.startsWith) === null || _color$startsWith3 === void 0 ? void 0 : _color$startsWith3.call(color, "hsl")) || ((_color$startsWith4 = color.startsWith) === null || _color$startsWith4 === void 0 ? void 0 : _color$startsWith4.call(color, "lab")) || color === "transparent";
|
|
77
184
|
};
|
|
185
|
+
|
|
186
|
+
/**
|
|
187
|
+
* Check if a value is a valid SVG path.
|
|
188
|
+
* A valid SVG path is a string that:
|
|
189
|
+
* - starts with 'M' or 'm' (move to command)
|
|
190
|
+
* - contains at least one digit or decimal point
|
|
191
|
+
* - ends with 'Z' or 'z' (close path command)
|
|
192
|
+
* @param value - The value to check.
|
|
193
|
+
* @returns true if the value is a valid SVG path, false otherwise.
|
|
194
|
+
*/
|
|
78
195
|
var isSvgPath = function isSvgPath(value) {
|
|
79
196
|
return typeof value === "string" && value.match(/^[Mm][\d.].*[\dzZ]$/) !== null;
|
|
80
197
|
};
|
|
198
|
+
|
|
199
|
+
/**
|
|
200
|
+
* Check if the document is in RTL (Right-to-Left) mode.
|
|
201
|
+
* This function checks the computed style of the document's root element
|
|
202
|
+
* to determine if the direction is set to 'rtl'.
|
|
203
|
+
* @returns true if the document is in RTL mode, false otherwise.
|
|
204
|
+
*/
|
|
81
205
|
var isRtl = function isRtl() {
|
|
82
206
|
return getComputedStyle(document.documentElement).direction === "rtl";
|
|
83
207
|
};
|
|
84
208
|
|
|
85
|
-
export { isArray, isBoolean, isColor, isEmpty, isFalse, isNil, isNull, isNumber, isObject, isRtl, isString, isSvgPath, isTrue, isUndefined };
|
|
209
|
+
export { isArray, isBoolean, isColor, isDefined, isEmpty, isFalse, isNil, isNull, isNumber, isObject, isRtl, isString, isSvgPath, isTrue, isUndefined };
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
|
|
3
|
+
import _slicedToArray from '@babel/runtime/helpers/slicedToArray';
|
|
4
|
+
import { isEmpty, isArray, isObject, isString } from './_isType.js';
|
|
5
|
+
|
|
6
|
+
var getLatitudeLongitude = function getLatitudeLongitude(lonLat) {
|
|
7
|
+
var _convertLatLng = convertLatLng(lonLat),
|
|
8
|
+
_convertLatLng2 = _slicedToArray(_convertLatLng, 2),
|
|
9
|
+
lon = _convertLatLng2[0],
|
|
10
|
+
lat = _convertLatLng2[1];
|
|
11
|
+
return {
|
|
12
|
+
latitude: lat,
|
|
13
|
+
longitude: lon
|
|
14
|
+
};
|
|
15
|
+
};
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* Convert various formats of longitude and latitude to a tuple of [lon, lat].
|
|
19
|
+
* This function supports:
|
|
20
|
+
* - Arrays with two or three elements (e.g., [lon, lat] or [lon, lat, alt])
|
|
21
|
+
* - Objects with properties `lng`, `lat`, `lon`, or `longitude` and `latitude`
|
|
22
|
+
* - Strings in the format "lat,lon"
|
|
23
|
+
* The function will return a tuple of numbers [lon, lat].
|
|
24
|
+
*
|
|
25
|
+
* @param {LngLatLike} lonLat - The input longitude and latitude in various formats.
|
|
26
|
+
* @returns { [lon: number, lat: number] } A tuple of [lon, lat] where lon and lat are numbers.
|
|
27
|
+
* @throws Error if the input is not a valid format.
|
|
28
|
+
*/
|
|
29
|
+
var convertLatLng = function convertLatLng(lonLat) {
|
|
30
|
+
if (isEmpty(lonLat)) {
|
|
31
|
+
throw Error("Invalid geo coordinates");
|
|
32
|
+
}
|
|
33
|
+
if (isArray(lonLat) && lonLat.length === 2 || isArray(lonLat) && lonLat.length === 3) {
|
|
34
|
+
return [Number(lonLat[0]), Number(lonLat[1])];
|
|
35
|
+
}
|
|
36
|
+
if (isObject(lonLat)) {
|
|
37
|
+
if ("longitude" in lonLat) {
|
|
38
|
+
return [lonLat.longitude, lonLat.latitude];
|
|
39
|
+
}
|
|
40
|
+
return ["lon" in lonLat ? lonLat.lon : lonLat.lng, lonLat.lat];
|
|
41
|
+
}
|
|
42
|
+
if (isString(lonLat)) {
|
|
43
|
+
var _lonLat$split = lonLat.split(","),
|
|
44
|
+
_lonLat$split2 = _slicedToArray(_lonLat$split, 2),
|
|
45
|
+
_lat = _lonLat$split2[0],
|
|
46
|
+
_lon = _lonLat$split2[1];
|
|
47
|
+
if (!isNaN(+_lat) && !isNaN(+_lon)) return [+_lon, +_lat];
|
|
48
|
+
}
|
|
49
|
+
throw Error("Invalid geo coordinates");
|
|
50
|
+
};
|
|
51
|
+
|
|
52
|
+
/**
|
|
53
|
+
* Convert a coordinate to Degrees, Minutes, Seconds (DMS) format.
|
|
54
|
+
* This function takes a coordinate and returns a string in the format "degrees˚minutes'seconds" with direction (N/S or E/W).
|
|
55
|
+
* It handles both latitude and longitude coordinates.
|
|
56
|
+
* This function assumes that the input coordinate is in decimal degrees format.
|
|
57
|
+
* It converts the coordinate to DMS format by calculating the degrees, minutes, and seconds,
|
|
58
|
+
* and then formatting the result as a string.
|
|
59
|
+
*
|
|
60
|
+
* @param {number} coord - The coordinate to convert.
|
|
61
|
+
* @param {boolean} isLat - Whether the coordinate is latitude (default is false for longitude).
|
|
62
|
+
* @returns {string} A string representation of the coordinate in DMS format.
|
|
63
|
+
*/
|
|
64
|
+
var convertToDMS = function convertToDMS(coord) {
|
|
65
|
+
var isLat = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
|
|
66
|
+
var degree = Math.floor(Math.abs(coord));
|
|
67
|
+
var hour = (Math.abs(coord) - degree) * 60;
|
|
68
|
+
var minute = (hour - Math.floor(hour)) * 60;
|
|
69
|
+
return "".concat(degree, "\u02DA").concat(Math.floor(hour), "'").concat(minute.toFixed(2), "\"").concat(coord < 0 ? isLat ? "S" : "W" : isLat ? "N" : "E");
|
|
70
|
+
};
|
|
71
|
+
|
|
72
|
+
/**
|
|
73
|
+
* Convert a latitude and longitude to a human-readable text format.
|
|
74
|
+
* This function takes a latitude and longitude in various formats and
|
|
75
|
+
* returns a string in the format "degrees˚minutes'seconds" with direction (N/S, E/W).
|
|
76
|
+
*
|
|
77
|
+
* This function supports:
|
|
78
|
+
*
|
|
79
|
+
* - Objects with properties `lng`, `lat`, `lon`, or `longitude` and `latitude`
|
|
80
|
+
* - Arrays with two or three elements (e.g., [lon, lat] or [lon, lat, alt])
|
|
81
|
+
* - Strings in the format "lat,lon"
|
|
82
|
+
*
|
|
83
|
+
* @param {LngLatLike} latlon - The latitude and longitude in various formats.
|
|
84
|
+
* @returns {string} A string representation of the location in DMS format.
|
|
85
|
+
*
|
|
86
|
+
* @example
|
|
87
|
+
* ```jsx
|
|
88
|
+
* const location = getLocationAsText({ lat: 40.7128, lng: -74.0060 });
|
|
89
|
+
* console.log(location); // "40˚42'51.36"N, 74˚0'21.60"W"
|
|
90
|
+
* ```
|
|
91
|
+
*/
|
|
92
|
+
var getLocationAsText = function getLocationAsText(latlon) {
|
|
93
|
+
var _convertLatLng3 = convertLatLng(latlon),
|
|
94
|
+
_convertLatLng4 = _slicedToArray(_convertLatLng3, 2),
|
|
95
|
+
lon = _convertLatLng4[0],
|
|
96
|
+
lat = _convertLatLng4[1];
|
|
97
|
+
return "".concat(convertToDMS(lat, true), ", ").concat(convertToDMS(lon));
|
|
98
|
+
};
|
|
99
|
+
|
|
100
|
+
export { convertLatLng, getLatitudeLongitude, getLocationAsText };
|