@evergis/react 3.0.25 → 3.1.1
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/core/attributes/index.d.ts +1 -2
- package/dist/core/attributes/types.d.ts +2 -5
- package/dist/core/index.d.ts +1 -1
- package/dist/hooks/index.d.ts +1 -3
- package/dist/index.d.ts +3 -11
- package/dist/react.cjs.development.js +9 -264
- package/dist/react.cjs.development.js.map +1 -1
- package/dist/react.cjs.production.min.js +1 -1
- package/dist/react.cjs.production.min.js.map +1 -1
- package/dist/react.esm.js +10 -244
- package/dist/react.esm.js.map +1 -1
- package/dist/utils/index.d.ts +3 -0
- package/package.json +4 -6
- package/dist/core/attributes/format.d.ts +0 -2
- package/dist/core/attributes/utils.d.ts +0 -3
- package/dist/hooks/useMount.d.ts +0 -6
- package/dist/hooks/useNode.d.ts +0 -2
- package/dist/i18n/index.d.ts +0 -7
- package/dist/utils/color.d.ts +0 -1
- package/dist/utils/format.d.ts +0 -1
- package/dist/utils/math.d.ts +0 -1
- package/dist/utils/metersToPixels.d.ts +0 -8
- package/dist/utils/polygonCircleFromPoint.d.ts +0 -2
- package/dist/utils/url.d.ts +0 -13
|
@@ -1,2 +1 @@
|
|
|
1
|
-
export * from
|
|
2
|
-
export * from './format';
|
|
1
|
+
export * from "./types";
|
|
@@ -1,9 +1,6 @@
|
|
|
1
|
-
import { ReactNode } from
|
|
2
|
-
import { AttributeDefinitionDc } from
|
|
1
|
+
import { ReactNode } from "react";
|
|
2
|
+
import { AttributeDefinitionDc } from "@evergis/api";
|
|
3
3
|
export declare type FeatureAttributeValue = string | number | Date | null;
|
|
4
|
-
export declare type ClassificationAttribute = {
|
|
5
|
-
name: string;
|
|
6
|
-
} & AttributeDefinitionDc;
|
|
7
4
|
export declare type LayerAttribute = {
|
|
8
5
|
name?: string;
|
|
9
6
|
} & AttributeDefinitionDc;
|
package/dist/core/index.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export * from
|
|
1
|
+
export * from "./attributes";
|
package/dist/hooks/index.d.ts
CHANGED
package/dist/index.d.ts
CHANGED
|
@@ -1,11 +1,3 @@
|
|
|
1
|
-
export * from
|
|
2
|
-
export * from
|
|
3
|
-
export * from
|
|
4
|
-
export * from './utils/date';
|
|
5
|
-
export * from './utils/format';
|
|
6
|
-
export * from './utils/isNumeric';
|
|
7
|
-
export * from './utils/isObject';
|
|
8
|
-
export * from './utils/math';
|
|
9
|
-
export * from './utils/metersToPixels';
|
|
10
|
-
export * from './utils/polygonCircleFromPoint';
|
|
11
|
-
export * from './utils/url';
|
|
1
|
+
export * from "./core";
|
|
2
|
+
export * from "./hooks";
|
|
3
|
+
export * from "./utils";
|
|
@@ -2,13 +2,16 @@
|
|
|
2
2
|
|
|
3
3
|
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
4
|
|
|
5
|
-
var dateFns = require('date-fns');
|
|
6
5
|
var react = require('react');
|
|
7
|
-
var
|
|
8
|
-
var Crs = require('@evergis/sgis/es/Crs');
|
|
9
|
-
var geotools = require('@evergis/sgis/es/geotools');
|
|
6
|
+
var dateFns = require('date-fns');
|
|
10
7
|
|
|
11
|
-
const
|
|
8
|
+
const useToggle = initial => {
|
|
9
|
+
const [state, setState] = react.useState(initial !== undefined ? initial : false);
|
|
10
|
+
const toggle = react.useCallback(() => setState(!state), [state]);
|
|
11
|
+
return [state, toggle, setState];
|
|
12
|
+
};
|
|
13
|
+
|
|
14
|
+
const NO_CONTENT_VALUE = "—";
|
|
12
15
|
|
|
13
16
|
(function (DateFormat) {
|
|
14
17
|
DateFormat["ClientDefaultFormat"] = "dd.MM.yyyy HH:mm";
|
|
@@ -50,274 +53,16 @@ const formatDate = function formatDate(date, _temp) {
|
|
|
50
53
|
return defaultValue.toString();
|
|
51
54
|
};
|
|
52
55
|
|
|
53
|
-
function numberWithSpaces(x, fractionDigits, delim) {
|
|
54
|
-
if (fractionDigits === void 0) {
|
|
55
|
-
fractionDigits = 2;
|
|
56
|
-
}
|
|
57
|
-
|
|
58
|
-
if (delim === void 0) {
|
|
59
|
-
delim = ',';
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
const [num, frac] = x.toFixed(fractionDigits).split('.');
|
|
63
|
-
const numWithSpaces = num.replace(/\B(?=(\d{3})+(?!\d))/g, ' ');
|
|
64
|
-
return [numWithSpaces, frac].join(delim);
|
|
65
|
-
}
|
|
66
|
-
|
|
67
|
-
function matchPhone(value) {
|
|
68
|
-
const phoneRegexp = /((8|\+7)[- ]?)?(\(?\d{3,4}\)?[- ]?)?[\d\- ]{7,10}/g;
|
|
69
|
-
return !isStringAsInn(value) && value.match(phoneRegexp);
|
|
70
|
-
}
|
|
71
|
-
function isStringAsInn(value) {
|
|
72
|
-
const innRegexp = /^(([0-9]{12})|([0-9]{10}))$/;
|
|
73
|
-
return innRegexp.test(value);
|
|
74
|
-
}
|
|
75
|
-
function isStringAsKpp(value) {
|
|
76
|
-
const kppRegexp = /^(([0-9]{9}))$/;
|
|
77
|
-
return kppRegexp.test(value);
|
|
78
|
-
}
|
|
79
|
-
function isStringAsOgrn(value) {
|
|
80
|
-
const ogrnRegexp = /^([0-9]{13})?$/;
|
|
81
|
-
return ogrnRegexp.test((+value).toString());
|
|
82
|
-
}
|
|
83
|
-
function isStringContainsDate(value) {
|
|
84
|
-
const dateRegexp = /\d{4}(-|\/)\d{2}(-|\/)\d{2}/g;
|
|
85
|
-
return dateRegexp.test(value);
|
|
86
|
-
}
|
|
87
|
-
function isRequisiteNumbers(value) {
|
|
88
|
-
return isStringAsInn(value) || isStringAsKpp(value) || isStringAsOgrn(value);
|
|
89
|
-
}
|
|
90
|
-
function isStringAsPhone(value) {
|
|
91
|
-
const phoneRegexp = /^((8|\+7)[- ]?)?(\(?\d{3,4}\)?[- ]?)?[\d\- ]{7,10}/;
|
|
92
|
-
return !isRequisiteNumbers(value) && !isStringContainsDate(value) && phoneRegexp.test(value);
|
|
93
|
-
}
|
|
94
|
-
function isStringAsMail(value) {
|
|
95
|
-
return isStringAsUrl(value) && value.includes('@');
|
|
96
|
-
}
|
|
97
|
-
function isStringAsUrl(value) {
|
|
98
|
-
if (isValidUrl(value)) {
|
|
99
|
-
return true;
|
|
100
|
-
}
|
|
101
|
-
|
|
102
|
-
const urlRegexp = /(http(s)?:\/\/.)?(www\.)?[-a-zA-Z0-9@:%._+~#=]{2,256}\.[a-z]{2,6}\b([-a-zA-Z0-9@:%_+.~#?&//=]*)/g;
|
|
103
|
-
const urlKind = value.match(urlRegexp);
|
|
104
|
-
return urlKind !== null;
|
|
105
|
-
}
|
|
106
|
-
function isValidUrl(value) {
|
|
107
|
-
try {
|
|
108
|
-
new URL(value);
|
|
109
|
-
} catch (_) {
|
|
110
|
-
return false;
|
|
111
|
-
}
|
|
112
|
-
|
|
113
|
-
return true;
|
|
114
|
-
}
|
|
115
|
-
const mailHref = mail => "mailto:" + mail;
|
|
116
|
-
const phoneHref = mail => "tel:" + mail;
|
|
117
|
-
const urlHref = url => isValidUrl(url) ? url : "//" + url;
|
|
118
|
-
|
|
119
|
-
const stringAttribute = value => ({
|
|
120
|
-
type: 0
|
|
121
|
-
/* String */
|
|
122
|
-
,
|
|
123
|
-
value
|
|
124
|
-
});
|
|
125
|
-
|
|
126
|
-
const urlAttribute = value => ({
|
|
127
|
-
type: 2
|
|
128
|
-
/* Url */
|
|
129
|
-
,
|
|
130
|
-
value
|
|
131
|
-
});
|
|
132
|
-
|
|
133
|
-
const mailAttribute = value => ({
|
|
134
|
-
type: 3
|
|
135
|
-
/* Mail */
|
|
136
|
-
,
|
|
137
|
-
value
|
|
138
|
-
});
|
|
139
|
-
|
|
140
|
-
const phoneAttribute = value => ({
|
|
141
|
-
type: 1
|
|
142
|
-
/* Phone */
|
|
143
|
-
,
|
|
144
|
-
value
|
|
145
|
-
});
|
|
146
|
-
|
|
147
|
-
const convertStringAttribute = value => {
|
|
148
|
-
if (isStringAsMail(value)) {
|
|
149
|
-
return mailAttribute(value);
|
|
150
|
-
}
|
|
151
|
-
|
|
152
|
-
if (isStringAsUrl(value)) {
|
|
153
|
-
return urlAttribute(value);
|
|
154
|
-
}
|
|
155
|
-
|
|
156
|
-
if (isStringAsPhone(value)) {
|
|
157
|
-
return phoneAttribute(value);
|
|
158
|
-
}
|
|
159
|
-
|
|
160
|
-
return stringAttribute(value);
|
|
161
|
-
};
|
|
162
|
-
|
|
163
|
-
const formatStringAttribute = value => {
|
|
164
|
-
const phones = matchPhone(value);
|
|
165
|
-
|
|
166
|
-
if (!isRequisiteNumbers(value) && !isStringContainsDate(value) && phones && phones.length) {
|
|
167
|
-
return phones.map(phoneAttribute);
|
|
168
|
-
}
|
|
169
|
-
|
|
170
|
-
const attributeValues = value.split(/[\s|]/).map(convertStringAttribute);
|
|
171
|
-
|
|
172
|
-
if (attributeValues.every((_ref) => {
|
|
173
|
-
let {
|
|
174
|
-
type
|
|
175
|
-
} = _ref;
|
|
176
|
-
return type === 0;
|
|
177
|
-
}
|
|
178
|
-
/* String */
|
|
179
|
-
)) {
|
|
180
|
-
return [stringAttribute(attributeValues.map((_ref2) => {
|
|
181
|
-
let {
|
|
182
|
-
value
|
|
183
|
-
} = _ref2;
|
|
184
|
-
return isNaN(+value) || isRequisiteNumbers(value) ? isStringAsOgrn(value) ? +value : value : numberWithSpaces(+value, 0, '');
|
|
185
|
-
}).join(' '))];
|
|
186
|
-
}
|
|
187
|
-
|
|
188
|
-
return attributeValues;
|
|
189
|
-
};
|
|
190
|
-
|
|
191
|
-
const formatDateTimeAttribute = value => stringAttribute(value.toString());
|
|
192
|
-
|
|
193
|
-
const formatIntAttribute = value => stringAttribute(numberWithSpaces(value, 0, ''));
|
|
194
|
-
|
|
195
|
-
const DOUBLE_FRACTIONS = 2;
|
|
196
|
-
|
|
197
|
-
const formatDoubleAttribute = value => stringAttribute(numberWithSpaces(value, DOUBLE_FRACTIONS, '.'));
|
|
198
|
-
|
|
199
|
-
const isNullOrUndefined = value => value === null || value === undefined;
|
|
200
|
-
|
|
201
|
-
const NO_CONTENT_ATTRIBUTE = {
|
|
202
|
-
type: 0
|
|
203
|
-
/* String */
|
|
204
|
-
,
|
|
205
|
-
value: NO_CONTENT_VALUE
|
|
206
|
-
};
|
|
207
|
-
const formatAttributeValue = attribute => {
|
|
208
|
-
if (isNullOrUndefined(attribute.value)) {
|
|
209
|
-
return [NO_CONTENT_ATTRIBUTE];
|
|
210
|
-
}
|
|
211
|
-
|
|
212
|
-
switch (attribute.type) {
|
|
213
|
-
case 'String':
|
|
214
|
-
return formatStringAttribute(attribute.value);
|
|
215
|
-
|
|
216
|
-
case 'DateTime':
|
|
217
|
-
return [formatDateTimeAttribute(attribute.value)];
|
|
218
|
-
|
|
219
|
-
case 'Int32':
|
|
220
|
-
case 'Int64':
|
|
221
|
-
return [formatIntAttribute(attribute.value)];
|
|
222
|
-
|
|
223
|
-
case 'Double':
|
|
224
|
-
return [formatDoubleAttribute(attribute.value)];
|
|
225
|
-
|
|
226
|
-
default:
|
|
227
|
-
return [NO_CONTENT_ATTRIBUTE];
|
|
228
|
-
}
|
|
229
|
-
};
|
|
230
|
-
|
|
231
|
-
function useMount(_ref) {
|
|
232
|
-
let {
|
|
233
|
-
onMount,
|
|
234
|
-
onUnmount
|
|
235
|
-
} = _ref;
|
|
236
|
-
react.useEffect(() => {
|
|
237
|
-
onMount && onMount();
|
|
238
|
-
return onUnmount; // eslint-disable-next-line react-hooks/exhaustive-deps
|
|
239
|
-
}, []);
|
|
240
|
-
}
|
|
241
|
-
|
|
242
|
-
function useNode() {
|
|
243
|
-
const [node, onSetNode] = react.useState(null);
|
|
244
|
-
const ref = react.useCallback(onSetNode, [onSetNode]);
|
|
245
|
-
return [ref, node];
|
|
246
|
-
}
|
|
247
|
-
|
|
248
|
-
const useToggle = initial => {
|
|
249
|
-
const [state, setState] = react.useState(initial !== undefined ? initial : false);
|
|
250
|
-
const toggle = react.useCallback(() => setState(!state), [state]);
|
|
251
|
-
return [state, toggle, setState];
|
|
252
|
-
};
|
|
253
|
-
|
|
254
|
-
const getHexColor = colorString => colorString ? new color.Color(colorString).toString('hex') : undefined;
|
|
255
|
-
|
|
256
56
|
const isNumeric = number => !isNaN(parseFloat(number)) && isFinite(number);
|
|
257
57
|
|
|
258
58
|
function isObject(value) {
|
|
259
|
-
return typeof value ===
|
|
59
|
+
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
260
60
|
}
|
|
261
61
|
|
|
262
|
-
function clamp(num, min, max) {
|
|
263
|
-
return Math.min(Math.max(num, min), max);
|
|
264
|
-
}
|
|
265
|
-
|
|
266
|
-
const metersToPixels = (meters, _ref) => {
|
|
267
|
-
let {
|
|
268
|
-
painter,
|
|
269
|
-
crs = Crs.geo
|
|
270
|
-
} = _ref;
|
|
271
|
-
const {
|
|
272
|
-
width
|
|
273
|
-
} = painter;
|
|
274
|
-
const zeroPoint = painter.getPointFromPxPosition(0, 0).projectTo(crs);
|
|
275
|
-
const maxWidthPoint = painter.getPointFromPxPosition(width, 0).projectTo(crs);
|
|
276
|
-
const widthDistance = geotools.distance(zeroPoint, maxWidthPoint);
|
|
277
|
-
const pxK = width / (widthDistance || 1);
|
|
278
|
-
return Math.round(meters * pxK);
|
|
279
|
-
};
|
|
280
|
-
|
|
281
|
-
const polygonCircleFromPoint = (center, diameter) => {
|
|
282
|
-
const coordinates = [];
|
|
283
|
-
const radius = diameter / 2;
|
|
284
|
-
const endAngle = Math.PI * 2;
|
|
285
|
-
const step = Math.max(Math.PI / 2 / radius, endAngle / 128);
|
|
286
|
-
let start = 0;
|
|
287
|
-
let end = endAngle;
|
|
288
|
-
|
|
289
|
-
for (let ang = start; ang < end; ang += step) {
|
|
290
|
-
coordinates.push([Math.cos(ang) * radius + center[0], Math.sin(ang) * radius + center[1]]);
|
|
291
|
-
}
|
|
292
|
-
|
|
293
|
-
return [coordinates];
|
|
294
|
-
};
|
|
295
|
-
|
|
296
62
|
exports.NO_CONTENT_VALUE = NO_CONTENT_VALUE;
|
|
297
|
-
exports.clamp = clamp;
|
|
298
|
-
exports.formatAttributeValue = formatAttributeValue;
|
|
299
63
|
exports.formatDate = formatDate;
|
|
300
64
|
exports.getDate = getDate;
|
|
301
|
-
exports.getHexColor = getHexColor;
|
|
302
65
|
exports.isNumeric = isNumeric;
|
|
303
66
|
exports.isObject = isObject;
|
|
304
|
-
exports.isRequisiteNumbers = isRequisiteNumbers;
|
|
305
|
-
exports.isStringAsInn = isStringAsInn;
|
|
306
|
-
exports.isStringAsKpp = isStringAsKpp;
|
|
307
|
-
exports.isStringAsMail = isStringAsMail;
|
|
308
|
-
exports.isStringAsOgrn = isStringAsOgrn;
|
|
309
|
-
exports.isStringAsPhone = isStringAsPhone;
|
|
310
|
-
exports.isStringAsUrl = isStringAsUrl;
|
|
311
|
-
exports.isStringContainsDate = isStringContainsDate;
|
|
312
|
-
exports.isValidUrl = isValidUrl;
|
|
313
|
-
exports.mailHref = mailHref;
|
|
314
|
-
exports.matchPhone = matchPhone;
|
|
315
|
-
exports.metersToPixels = metersToPixels;
|
|
316
|
-
exports.numberWithSpaces = numberWithSpaces;
|
|
317
|
-
exports.phoneHref = phoneHref;
|
|
318
|
-
exports.polygonCircleFromPoint = polygonCircleFromPoint;
|
|
319
|
-
exports.urlHref = urlHref;
|
|
320
|
-
exports.useMount = useMount;
|
|
321
|
-
exports.useNode = useNode;
|
|
322
67
|
exports.useToggle = useToggle;
|
|
323
68
|
//# sourceMappingURL=react.cjs.development.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"react.cjs.development.js","sources":["../src/utils/date.ts","../src/utils/format.ts","../src/utils/url.ts","../src/core/attributes/format.ts","../src/hooks/useMount.ts","../src/hooks/useNode.ts","../src/hooks/useToggle.ts","../src/utils/color.ts","../src/utils/isNumeric.ts","../src/utils/isObject.ts","../src/utils/math.ts","../src/utils/metersToPixels.ts","../src/utils/polygonCircleFromPoint.ts"],"sourcesContent":["import { parseJSON, parseISO, isValid, format, toDate } from \"date-fns\";\n\nexport const NO_CONTENT_VALUE = '—';\n\nexport type DateType = number | Date;\nexport type RawDateType = string | DateType;\n\nexport enum DateFormat {\n ClientDefaultFormat = \"dd.MM.yyyy HH:mm\",\n DateTime = \"dd.MM.yyyy HH:mm:ss\",\n UTC = \"yyyy-MM-dd'T'HH:mm:ss.sssxxx\",\n AxisTooltip = \"d MMMM yyyy\",\n}\n\ninterface FormatDateOptions {\n dateFormat?: DateFormat;\n defaultValue?: RawDateType;\n}\n\nconst stringDateParsers: ((date: string) => DateType)[] = [parseJSON, parseISO, rawDate => new Date(rawDate)];\n\nexport const getDate = (rawDate?: RawDateType | null): Date | null => {\n if (!rawDate) return null;\n\n if (typeof rawDate === \"string\") {\n for (const parser of stringDateParsers) {\n const date = parser(rawDate);\n\n if (isValid(date)) {\n return toDate(date);\n }\n }\n\n return null;\n }\n\n const parsedDate = toDate(rawDate);\n\n return isValid(parsedDate) ? parsedDate : null;\n};\n\nexport const formatDate = (\n date?: RawDateType,\n { dateFormat = DateFormat.ClientDefaultFormat, defaultValue = NO_CONTENT_VALUE }: FormatDateOptions = {},\n): string => {\n const dateValue = date ? getDate(date) : null;\n\n if (isValid(dateValue)) {\n return format(dateValue as Date, dateFormat);\n }\n\n return defaultValue.toString();\n};\n","export function numberWithSpaces(\n x: number,\n fractionDigits = 2,\n delim: ',' | '.' | '' = ','\n): string {\n const [num, frac] = x.toFixed(fractionDigits).split('.');\n const numWithSpaces = num.replace(/\\B(?=(\\d{3})+(?!\\d))/g, ' ');\n\n return [numWithSpaces, frac].join(delim);\n}\n","export function matchPhone(value: string) {\n const phoneRegexp = /((8|\\+7)[- ]?)?(\\(?\\d{3,4}\\)?[- ]?)?[\\d\\- ]{7,10}/g;\n\n return !isStringAsInn(value) && value.match(phoneRegexp);\n}\n\nexport function isStringAsInn(value: string) {\n const innRegexp = /^(([0-9]{12})|([0-9]{10}))$/;\n\n return innRegexp.test(value);\n}\n\nexport function isStringAsKpp(value: string) {\n const kppRegexp = /^(([0-9]{9}))$/;\n\n return kppRegexp.test(value);\n}\n\nexport function isStringAsOgrn(value: string) {\n const ogrnRegexp = /^([0-9]{13})?$/;\n\n return ogrnRegexp.test((+value).toString());\n}\n\nexport function isStringContainsDate(value: string) {\n const dateRegexp = /\\d{4}(-|\\/)\\d{2}(-|\\/)\\d{2}/g;\n return dateRegexp.test(value);\n}\n\nexport function isRequisiteNumbers(value: string) {\n return isStringAsInn(value) || isStringAsKpp(value) || isStringAsOgrn(value);\n}\n\nexport function isStringAsPhone(value: string) {\n const phoneRegexp = /^((8|\\+7)[- ]?)?(\\(?\\d{3,4}\\)?[- ]?)?[\\d\\- ]{7,10}/;\n\n return (\n !isRequisiteNumbers(value) &&\n !isStringContainsDate(value) &&\n phoneRegexp.test(value)\n );\n}\n\nexport function isStringAsMail(value: string) {\n return isStringAsUrl(value) && value.includes('@');\n}\n\nexport function isStringAsUrl(value: string) {\n if (isValidUrl(value)) {\n return true;\n }\n\n const urlRegexp = /(http(s)?:\\/\\/.)?(www\\.)?[-a-zA-Z0-9@:%._+~#=]{2,256}\\.[a-z]{2,6}\\b([-a-zA-Z0-9@:%_+.~#?&//=]*)/g;\n\n const urlKind = value.match(urlRegexp);\n\n return urlKind !== null;\n}\n\nexport function isValidUrl(value: string) {\n try {\n new URL(value);\n } catch (_) {\n return false;\n }\n\n return true;\n}\n\nexport const mailHref = (mail: string) => `mailto:${mail}`;\n\nexport const phoneHref = (mail: string) => `tel:${mail}`;\n\nexport const urlHref = (url: string) => (isValidUrl(url) ? url : `//${url}`);\n","import { AttributeValue, AttributeValueType, FeatureAttribute } from './types';\n\nimport { NO_CONTENT_VALUE } from \"../../utils/date\";\nimport { numberWithSpaces } from '../../utils/format';\nimport {\n isStringAsMail,\n isStringAsPhone,\n isStringAsUrl,\n matchPhone,\n isRequisiteNumbers,\n isStringAsOgrn,\n isStringContainsDate,\n} from '../../utils/url';\n\nconst stringAttribute = (value: string) => ({\n type: AttributeValueType.String,\n value,\n});\n\nconst urlAttribute = (value: string) => ({\n type: AttributeValueType.Url,\n value,\n});\n\nconst mailAttribute = (value: string) => ({\n type: AttributeValueType.Mail,\n value,\n});\n\nconst phoneAttribute = (value: string) => ({\n type: AttributeValueType.Phone,\n value,\n});\n\nconst convertStringAttribute = (value: string) => {\n if (isStringAsMail(value)) {\n return mailAttribute(value);\n }\n\n if (isStringAsUrl(value)) {\n return urlAttribute(value);\n }\n\n if (isStringAsPhone(value)) {\n return phoneAttribute(value);\n }\n\n return stringAttribute(value);\n};\n\nconst formatStringAttribute = (value: string): AttributeValue[] => {\n const phones = matchPhone(value);\n\n if (\n !isRequisiteNumbers(value) &&\n !isStringContainsDate(value) &&\n phones &&\n phones.length\n ) {\n return phones.map(phoneAttribute);\n }\n\n const attributeValues = value.split(/[\\s|]/).map(convertStringAttribute);\n\n if (attributeValues.every(({ type }) => type === AttributeValueType.String)) {\n return [\n stringAttribute(\n attributeValues\n .map(({ value }) =>\n isNaN(+value) || isRequisiteNumbers(value)\n ? isStringAsOgrn(value)\n ? +value\n : value\n : numberWithSpaces(+value, 0, '')\n )\n .join(' ')\n ),\n ];\n }\n\n return attributeValues;\n};\n\nconst formatDateTimeAttribute = (value: Date): AttributeValue =>\n stringAttribute(value.toString());\n\nconst formatIntAttribute = (value: number): AttributeValue =>\n stringAttribute(numberWithSpaces(value, 0, ''));\n\nconst DOUBLE_FRACTIONS = 2;\n\nconst formatDoubleAttribute = (value: number): AttributeValue =>\n stringAttribute(numberWithSpaces(value, DOUBLE_FRACTIONS, '.'));\n\nconst isNullOrUndefined = <Value>(\n value: Value | null | undefined\n): value is null | undefined => value === null || value === undefined;\n\nconst NO_CONTENT_ATTRIBUTE = {\n type: AttributeValueType.String,\n value: NO_CONTENT_VALUE,\n};\n\nexport const formatAttributeValue = (\n attribute: FeatureAttribute\n): AttributeValue[] => {\n if (isNullOrUndefined(attribute.value)) {\n return [NO_CONTENT_ATTRIBUTE];\n }\n\n switch (attribute.type) {\n case 'String':\n return formatStringAttribute(attribute.value as string);\n case 'DateTime':\n return [formatDateTimeAttribute(attribute.value as Date)];\n case 'Int32':\n case 'Int64':\n return [formatIntAttribute(attribute.value as number)];\n case 'Double':\n return [formatDoubleAttribute(attribute.value as number)];\n default:\n return [NO_CONTENT_ATTRIBUTE];\n }\n};\n","import { useEffect } from 'react';\n\nexport function useMount({ onMount, onUnmount }: UseMountOptions) {\n useEffect(() => {\n onMount && onMount();\n return onUnmount;\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n}\n\ntype UseMountOptions = {\n onMount?: () => void;\n onUnmount?: () => void;\n};\n","import { PropsWithRef, useCallback, useState } from 'react';\n\nexport function useNode(): [PropsWithRef<any>, HTMLElement | null] {\n const [node, onSetNode] = useState<HTMLElement | null>(null);\n\n const ref = useCallback(onSetNode, [onSetNode]);\n\n return [ref, node];\n}\n","import { useCallback, useState } from \"react\";\n\nexport const useToggle = (initial?: boolean): [boolean, VoidFunction, (value: boolean) => void] => {\n const [state, setState] = useState(initial !== undefined ? initial : false);\n const toggle = useCallback(() => setState(!state), [state]);\n\n return [state, toggle, setState];\n};\n","import { Color } from '@evergis/color';\n\nexport const getHexColor = (colorString: string): string | undefined =>\n colorString ? new Color(colorString).toString('hex') : undefined;\n","export const isNumeric = (number: string | number): boolean =>\n !isNaN(parseFloat(number as string)) && isFinite(number as number);\n","export function isObject<T>(value: T | object): value is object {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n}\n","export function clamp(num: number, min: number, max: number): number {\n return Math.min(Math.max(num, min), max);\n}\n","import { Crs, geo } from '@evergis/sgis/es/Crs';\nimport { distance } from '@evergis/sgis/es/geotools';\nimport { DomPainter } from '@evergis/sgis/es/painters/DomPainter/DomPainter';\n\ntype ConvertionContext = {\n painter: DomPainter;\n crs?: Crs;\n};\n\nexport const metersToPixels = (\n meters: number,\n { painter, crs = geo }: ConvertionContext\n): number => {\n const { width } = painter;\n const zeroPoint = painter.getPointFromPxPosition(0, 0).projectTo(crs);\n const maxWidthPoint = painter.getPointFromPxPosition(width, 0).projectTo(crs);\n const widthDistance: number = distance(zeroPoint, maxWidthPoint);\n const pxK = width / (widthDistance || 1);\n\n return Math.round(meters * pxK);\n};\n","import { Coordinates } from '@evergis/sgis/es/baseTypes';\n\nexport const polygonCircleFromPoint = (\n center: Coordinates,\n diameter: number\n): Coordinates[][] => {\n const coordinates: Coordinates[] = [];\n const radius = diameter / 2;\n const endAngle = Math.PI * 2;\n const step = Math.max(Math.PI / 2 / radius, endAngle / 128);\n let start = 0;\n let end = endAngle;\n\n for (let ang = start; ang < end; ang += step) {\n coordinates.push([\n Math.cos(ang) * radius + center[0],\n Math.sin(ang) * radius + center[1],\n ]);\n }\n\n return [coordinates];\n};\n"],"names":["NO_CONTENT_VALUE","DateFormat","stringDateParsers","parseJSON","parseISO","rawDate","Date","getDate","parser","date","isValid","toDate","parsedDate","formatDate","dateFormat","ClientDefaultFormat","defaultValue","dateValue","format","toString","numberWithSpaces","x","fractionDigits","delim","num","frac","toFixed","split","numWithSpaces","replace","join","matchPhone","value","phoneRegexp","isStringAsInn","match","innRegexp","test","isStringAsKpp","kppRegexp","isStringAsOgrn","ogrnRegexp","isStringContainsDate","dateRegexp","isRequisiteNumbers","isStringAsPhone","isStringAsMail","isStringAsUrl","includes","isValidUrl","urlRegexp","urlKind","URL","_","mailHref","mail","phoneHref","urlHref","url","stringAttribute","type","urlAttribute","mailAttribute","phoneAttribute","convertStringAttribute","formatStringAttribute","phones","length","map","attributeValues","every","isNaN","formatDateTimeAttribute","formatIntAttribute","DOUBLE_FRACTIONS","formatDoubleAttribute","isNullOrUndefined","undefined","NO_CONTENT_ATTRIBUTE","formatAttributeValue","attribute","useMount","onMount","onUnmount","useEffect","useNode","node","onSetNode","useState","ref","useCallback","useToggle","initial","state","setState","toggle","getHexColor","colorString","Color","isNumeric","number","parseFloat","isFinite","isObject","Array","isArray","clamp","min","max","Math","metersToPixels","meters","painter","crs","geo","width","zeroPoint","getPointFromPxPosition","projectTo","maxWidthPoint","widthDistance","distance","pxK","round","polygonCircleFromPoint","center","diameter","coordinates","radius","endAngle","PI","step","start","end","ang","push","cos","sin"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"react.cjs.development.js","sources":["../src/hooks/useToggle.ts","../src/utils/date.ts","../src/utils/isNumeric.ts","../src/utils/isObject.ts"],"sourcesContent":["import { useCallback, useState } from \"react\";\n\nexport const useToggle = (initial?: boolean): [boolean, VoidFunction, (value: boolean) => void] => {\n const [state, setState] = useState(initial !== undefined ? initial : false);\n\n const toggle = useCallback(() => setState(!state), [state]);\n\n return [state, toggle, setState];\n};\n","import { parseJSON, parseISO, isValid, format, toDate } from \"date-fns\";\n\nexport const NO_CONTENT_VALUE = \"—\";\n\nexport type DateType = number | Date;\nexport type RawDateType = string | DateType;\n\nexport enum DateFormat {\n ClientDefaultFormat = \"dd.MM.yyyy HH:mm\",\n DateTime = \"dd.MM.yyyy HH:mm:ss\",\n UTC = \"yyyy-MM-dd'T'HH:mm:ss.sssxxx\",\n AxisTooltip = \"d MMMM yyyy\",\n}\n\ninterface FormatDateOptions {\n dateFormat?: DateFormat;\n defaultValue?: RawDateType;\n}\n\nconst stringDateParsers: ((date: string) => DateType)[] = [parseJSON, parseISO, rawDate => new Date(rawDate)];\n\nexport const getDate = (rawDate?: RawDateType | null): Date | null => {\n if (!rawDate) return null;\n\n if (typeof rawDate === \"string\") {\n for (const parser of stringDateParsers) {\n const date = parser(rawDate);\n\n if (isValid(date)) {\n return toDate(date);\n }\n }\n\n return null;\n }\n\n const parsedDate = toDate(rawDate);\n\n return isValid(parsedDate) ? parsedDate : null;\n};\n\nexport const formatDate = (\n date?: RawDateType,\n { dateFormat = DateFormat.ClientDefaultFormat, defaultValue = NO_CONTENT_VALUE }: FormatDateOptions = {},\n): string => {\n const dateValue = date ? getDate(date) : null;\n\n if (isValid(dateValue)) {\n return format(dateValue as Date, dateFormat);\n }\n\n return defaultValue.toString();\n};\n","export const isNumeric = (number: string | number): boolean =>\n !isNaN(parseFloat(number as string)) && isFinite(number as number);\n","export function isObject<T>(value: T | object): value is object {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n"],"names":["useToggle","initial","state","setState","useState","undefined","toggle","useCallback","NO_CONTENT_VALUE","DateFormat","stringDateParsers","parseJSON","parseISO","rawDate","Date","getDate","parser","date","isValid","toDate","parsedDate","formatDate","dateFormat","ClientDefaultFormat","defaultValue","dateValue","format","toString","isNumeric","number","isNaN","parseFloat","isFinite","isObject","value","Array","isArray"],"mappings":";;;;;;;MAEaA,SAAS,GAAIC,OAAD;AACvB,QAAM,CAACC,KAAD,EAAQC,QAAR,IAAoBC,cAAQ,CAACH,OAAO,KAAKI,SAAZ,GAAwBJ,OAAxB,GAAkC,KAAnC,CAAlC;AAEA,QAAMK,MAAM,GAAGC,iBAAW,CAAC,MAAMJ,QAAQ,CAAC,CAACD,KAAF,CAAf,EAAyB,CAACA,KAAD,CAAzB,CAA1B;AAEA,SAAO,CAACA,KAAD,EAAQI,MAAR,EAAgBH,QAAhB,CAAP;AACD;;MCNYK,gBAAgB,GAAG,GAAzB;AAKP;AAAA,WAAYC;AACVA,EAAAA,iCAAA,qBAAA;AACAA,EAAAA,sBAAA,wBAAA;AACAA,EAAAA,iBAAA,iCAAA;AACAA,EAAAA,yBAAA,gBAAA;AACD,CALD,EAAYA,kBAAU,KAAVA,kBAAU,KAAA,CAAtB;;AAYA,MAAMC,iBAAiB,GAAmC,CAACC,iBAAD,EAAYC,gBAAZ,EAAsBC,OAAO,IAAI,IAAIC,IAAJ,CAASD,OAAT,CAAjC,CAA1D;AAEA,MAAaE,OAAO,GAAIF,OAAD;AACrB,MAAI,CAACA,OAAL,EAAc,OAAO,IAAP;;AAEd,MAAI,OAAOA,OAAP,KAAmB,QAAvB,EAAiC;AAC/B,SAAK,MAAMG,MAAX,IAAqBN,iBAArB,EAAwC;AACtC,YAAMO,IAAI,GAAGD,MAAM,CAACH,OAAD,CAAnB;;AAEA,UAAIK,eAAO,CAACD,IAAD,CAAX,EAAmB;AACjB,eAAOE,cAAM,CAACF,IAAD,CAAb;AACD;AACF;;AAED,WAAO,IAAP;AACD;;AAED,QAAMG,UAAU,GAAGD,cAAM,CAACN,OAAD,CAAzB;AAEA,SAAOK,eAAO,CAACE,UAAD,CAAP,GAAsBA,UAAtB,GAAmC,IAA1C;AACD,CAlBM;AAoBP,MAAaC,UAAU,GAAG,SAAbA,UAAa,CACxBJ,IADwB;MAExB;AAAEK,IAAAA,UAAU,GAAGb,kBAAU,CAACc,mBAA1B;AAA+CC,IAAAA,YAAY,GAAGhB;AAA9D,yBAAsG;AAEtG,QAAMiB,SAAS,GAAGR,IAAI,GAAGF,OAAO,CAACE,IAAD,CAAV,GAAmB,IAAzC;;AAEA,MAAIC,eAAO,CAACO,SAAD,CAAX,EAAwB;AACtB,WAAOC,cAAM,CAACD,SAAD,EAAoBH,UAApB,CAAb;AACD;;AAED,SAAOE,YAAY,CAACG,QAAb,EAAP;AACD,CAXM;;MCzCMC,SAAS,GAAIC,MAAD,IACvB,CAACC,KAAK,CAACC,UAAU,CAACF,MAAD,CAAX,CAAN,IAAwCG,QAAQ,CAACH,MAAD,CAD3C;;SCASI,SAAYC;AAC1B,SAAO,OAAOA,KAAP,KAAiB,QAAjB,IAA6BA,KAAK,KAAK,IAAvC,IAA+C,CAACC,KAAK,CAACC,OAAN,CAAcF,KAAd,CAAvD;AACD;;;;;;;;;"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var t=require("
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var t=require("react"),e=require("date-fns");const r="—";var s;(s=exports.DateFormat||(exports.DateFormat={})).ClientDefaultFormat="dd.MM.yyyy HH:mm",s.DateTime="dd.MM.yyyy HH:mm:ss",s.UTC="yyyy-MM-dd'T'HH:mm:ss.sssxxx",s.AxisTooltip="d MMMM yyyy";const o=[e.parseJSON,e.parseISO,t=>new Date(t)],a=t=>{if(!t)return null;if("string"==typeof t){for(const r of o){const s=r(t);if(e.isValid(s))return e.toDate(s)}return null}const r=e.toDate(t);return e.isValid(r)?r:null};exports.NO_CONTENT_VALUE=r,exports.formatDate=function(t,s){let{dateFormat:o=exports.DateFormat.ClientDefaultFormat,defaultValue:i=r}=void 0===s?{}:s;const n=t?a(t):null;return e.isValid(n)?e.format(n,o):i.toString()},exports.getDate=a,exports.isNumeric=t=>!isNaN(parseFloat(t))&&isFinite(t),exports.isObject=function(t){return"object"==typeof t&&null!==t&&!Array.isArray(t)},exports.useToggle=e=>{const[r,s]=t.useState(void 0!==e&&e),o=t.useCallback(()=>s(!r),[r]);return[r,o,s]};
|
|
2
2
|
//# sourceMappingURL=react.cjs.production.min.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"react.cjs.production.min.js","sources":["../src/utils/date.ts","../src/utils/format.ts","../src/utils/url.ts","../src/core/attributes/format.ts","../src/utils/math.ts","../src/utils/color.ts","../src/utils/isNumeric.ts","../src/utils/isObject.ts","../src/utils/metersToPixels.ts","../src/utils/polygonCircleFromPoint.ts","../src/hooks/useMount.ts","../src/hooks/useNode.ts","../src/hooks/useToggle.ts"],"sourcesContent":["import { parseJSON, parseISO, isValid, format, toDate } from \"date-fns\";\n\nexport const NO_CONTENT_VALUE = '—';\n\nexport type DateType = number | Date;\nexport type RawDateType = string | DateType;\n\nexport enum DateFormat {\n ClientDefaultFormat = \"dd.MM.yyyy HH:mm\",\n DateTime = \"dd.MM.yyyy HH:mm:ss\",\n UTC = \"yyyy-MM-dd'T'HH:mm:ss.sssxxx\",\n AxisTooltip = \"d MMMM yyyy\",\n}\n\ninterface FormatDateOptions {\n dateFormat?: DateFormat;\n defaultValue?: RawDateType;\n}\n\nconst stringDateParsers: ((date: string) => DateType)[] = [parseJSON, parseISO, rawDate => new Date(rawDate)];\n\nexport const getDate = (rawDate?: RawDateType | null): Date | null => {\n if (!rawDate) return null;\n\n if (typeof rawDate === \"string\") {\n for (const parser of stringDateParsers) {\n const date = parser(rawDate);\n\n if (isValid(date)) {\n return toDate(date);\n }\n }\n\n return null;\n }\n\n const parsedDate = toDate(rawDate);\n\n return isValid(parsedDate) ? parsedDate : null;\n};\n\nexport const formatDate = (\n date?: RawDateType,\n { dateFormat = DateFormat.ClientDefaultFormat, defaultValue = NO_CONTENT_VALUE }: FormatDateOptions = {},\n): string => {\n const dateValue = date ? getDate(date) : null;\n\n if (isValid(dateValue)) {\n return format(dateValue as Date, dateFormat);\n }\n\n return defaultValue.toString();\n};\n","export function numberWithSpaces(\n x: number,\n fractionDigits = 2,\n delim: ',' | '.' | '' = ','\n): string {\n const [num, frac] = x.toFixed(fractionDigits).split('.');\n const numWithSpaces = num.replace(/\\B(?=(\\d{3})+(?!\\d))/g, ' ');\n\n return [numWithSpaces, frac].join(delim);\n}\n","export function matchPhone(value: string) {\n const phoneRegexp = /((8|\\+7)[- ]?)?(\\(?\\d{3,4}\\)?[- ]?)?[\\d\\- ]{7,10}/g;\n\n return !isStringAsInn(value) && value.match(phoneRegexp);\n}\n\nexport function isStringAsInn(value: string) {\n const innRegexp = /^(([0-9]{12})|([0-9]{10}))$/;\n\n return innRegexp.test(value);\n}\n\nexport function isStringAsKpp(value: string) {\n const kppRegexp = /^(([0-9]{9}))$/;\n\n return kppRegexp.test(value);\n}\n\nexport function isStringAsOgrn(value: string) {\n const ogrnRegexp = /^([0-9]{13})?$/;\n\n return ogrnRegexp.test((+value).toString());\n}\n\nexport function isStringContainsDate(value: string) {\n const dateRegexp = /\\d{4}(-|\\/)\\d{2}(-|\\/)\\d{2}/g;\n return dateRegexp.test(value);\n}\n\nexport function isRequisiteNumbers(value: string) {\n return isStringAsInn(value) || isStringAsKpp(value) || isStringAsOgrn(value);\n}\n\nexport function isStringAsPhone(value: string) {\n const phoneRegexp = /^((8|\\+7)[- ]?)?(\\(?\\d{3,4}\\)?[- ]?)?[\\d\\- ]{7,10}/;\n\n return (\n !isRequisiteNumbers(value) &&\n !isStringContainsDate(value) &&\n phoneRegexp.test(value)\n );\n}\n\nexport function isStringAsMail(value: string) {\n return isStringAsUrl(value) && value.includes('@');\n}\n\nexport function isStringAsUrl(value: string) {\n if (isValidUrl(value)) {\n return true;\n }\n\n const urlRegexp = /(http(s)?:\\/\\/.)?(www\\.)?[-a-zA-Z0-9@:%._+~#=]{2,256}\\.[a-z]{2,6}\\b([-a-zA-Z0-9@:%_+.~#?&//=]*)/g;\n\n const urlKind = value.match(urlRegexp);\n\n return urlKind !== null;\n}\n\nexport function isValidUrl(value: string) {\n try {\n new URL(value);\n } catch (_) {\n return false;\n }\n\n return true;\n}\n\nexport const mailHref = (mail: string) => `mailto:${mail}`;\n\nexport const phoneHref = (mail: string) => `tel:${mail}`;\n\nexport const urlHref = (url: string) => (isValidUrl(url) ? url : `//${url}`);\n","import { AttributeValue, AttributeValueType, FeatureAttribute } from './types';\n\nimport { NO_CONTENT_VALUE } from \"../../utils/date\";\nimport { numberWithSpaces } from '../../utils/format';\nimport {\n isStringAsMail,\n isStringAsPhone,\n isStringAsUrl,\n matchPhone,\n isRequisiteNumbers,\n isStringAsOgrn,\n isStringContainsDate,\n} from '../../utils/url';\n\nconst stringAttribute = (value: string) => ({\n type: AttributeValueType.String,\n value,\n});\n\nconst urlAttribute = (value: string) => ({\n type: AttributeValueType.Url,\n value,\n});\n\nconst mailAttribute = (value: string) => ({\n type: AttributeValueType.Mail,\n value,\n});\n\nconst phoneAttribute = (value: string) => ({\n type: AttributeValueType.Phone,\n value,\n});\n\nconst convertStringAttribute = (value: string) => {\n if (isStringAsMail(value)) {\n return mailAttribute(value);\n }\n\n if (isStringAsUrl(value)) {\n return urlAttribute(value);\n }\n\n if (isStringAsPhone(value)) {\n return phoneAttribute(value);\n }\n\n return stringAttribute(value);\n};\n\nconst formatStringAttribute = (value: string): AttributeValue[] => {\n const phones = matchPhone(value);\n\n if (\n !isRequisiteNumbers(value) &&\n !isStringContainsDate(value) &&\n phones &&\n phones.length\n ) {\n return phones.map(phoneAttribute);\n }\n\n const attributeValues = value.split(/[\\s|]/).map(convertStringAttribute);\n\n if (attributeValues.every(({ type }) => type === AttributeValueType.String)) {\n return [\n stringAttribute(\n attributeValues\n .map(({ value }) =>\n isNaN(+value) || isRequisiteNumbers(value)\n ? isStringAsOgrn(value)\n ? +value\n : value\n : numberWithSpaces(+value, 0, '')\n )\n .join(' ')\n ),\n ];\n }\n\n return attributeValues;\n};\n\nconst formatDateTimeAttribute = (value: Date): AttributeValue =>\n stringAttribute(value.toString());\n\nconst formatIntAttribute = (value: number): AttributeValue =>\n stringAttribute(numberWithSpaces(value, 0, ''));\n\nconst DOUBLE_FRACTIONS = 2;\n\nconst formatDoubleAttribute = (value: number): AttributeValue =>\n stringAttribute(numberWithSpaces(value, DOUBLE_FRACTIONS, '.'));\n\nconst isNullOrUndefined = <Value>(\n value: Value | null | undefined\n): value is null | undefined => value === null || value === undefined;\n\nconst NO_CONTENT_ATTRIBUTE = {\n type: AttributeValueType.String,\n value: NO_CONTENT_VALUE,\n};\n\nexport const formatAttributeValue = (\n attribute: FeatureAttribute\n): AttributeValue[] => {\n if (isNullOrUndefined(attribute.value)) {\n return [NO_CONTENT_ATTRIBUTE];\n }\n\n switch (attribute.type) {\n case 'String':\n return formatStringAttribute(attribute.value as string);\n case 'DateTime':\n return [formatDateTimeAttribute(attribute.value as Date)];\n case 'Int32':\n case 'Int64':\n return [formatIntAttribute(attribute.value as number)];\n case 'Double':\n return [formatDoubleAttribute(attribute.value as number)];\n default:\n return [NO_CONTENT_ATTRIBUTE];\n }\n};\n","export function clamp(num: number, min: number, max: number): number {\n return Math.min(Math.max(num, min), max);\n}\n","import { Color } from '@evergis/color';\n\nexport const getHexColor = (colorString: string): string | undefined =>\n colorString ? new Color(colorString).toString('hex') : undefined;\n","export const isNumeric = (number: string | number): boolean =>\n !isNaN(parseFloat(number as string)) && isFinite(number as number);\n","export function isObject<T>(value: T | object): value is object {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n}\n","import { Crs, geo } from '@evergis/sgis/es/Crs';\nimport { distance } from '@evergis/sgis/es/geotools';\nimport { DomPainter } from '@evergis/sgis/es/painters/DomPainter/DomPainter';\n\ntype ConvertionContext = {\n painter: DomPainter;\n crs?: Crs;\n};\n\nexport const metersToPixels = (\n meters: number,\n { painter, crs = geo }: ConvertionContext\n): number => {\n const { width } = painter;\n const zeroPoint = painter.getPointFromPxPosition(0, 0).projectTo(crs);\n const maxWidthPoint = painter.getPointFromPxPosition(width, 0).projectTo(crs);\n const widthDistance: number = distance(zeroPoint, maxWidthPoint);\n const pxK = width / (widthDistance || 1);\n\n return Math.round(meters * pxK);\n};\n","import { Coordinates } from '@evergis/sgis/es/baseTypes';\n\nexport const polygonCircleFromPoint = (\n center: Coordinates,\n diameter: number\n): Coordinates[][] => {\n const coordinates: Coordinates[] = [];\n const radius = diameter / 2;\n const endAngle = Math.PI * 2;\n const step = Math.max(Math.PI / 2 / radius, endAngle / 128);\n let start = 0;\n let end = endAngle;\n\n for (let ang = start; ang < end; ang += step) {\n coordinates.push([\n Math.cos(ang) * radius + center[0],\n Math.sin(ang) * radius + center[1],\n ]);\n }\n\n return [coordinates];\n};\n","import { useEffect } from 'react';\n\nexport function useMount({ onMount, onUnmount }: UseMountOptions) {\n useEffect(() => {\n onMount && onMount();\n return onUnmount;\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n}\n\ntype UseMountOptions = {\n onMount?: () => void;\n onUnmount?: () => void;\n};\n","import { PropsWithRef, useCallback, useState } from 'react';\n\nexport function useNode(): [PropsWithRef<any>, HTMLElement | null] {\n const [node, onSetNode] = useState<HTMLElement | null>(null);\n\n const ref = useCallback(onSetNode, [onSetNode]);\n\n return [ref, node];\n}\n","import { useCallback, useState } from \"react\";\n\nexport const useToggle = (initial?: boolean): [boolean, VoidFunction, (value: boolean) => void] => {\n const [state, setState] = useState(initial !== undefined ? initial : false);\n const toggle = useCallback(() => setState(!state), [state]);\n\n return [state, toggle, setState];\n};\n"],"names":["NO_CONTENT_VALUE","DateFormat","stringDateParsers","parseJSON","parseISO","rawDate","Date","getDate","parser","date","isValid","toDate","parsedDate","numberWithSpaces","x","fractionDigits","delim","num","frac","toFixed","split","replace","join","matchPhone","value","isStringAsInn","match","test","isStringAsKpp","isStringAsOgrn","toString","isStringContainsDate","isRequisiteNumbers","isStringAsPhone","isStringAsMail","isStringAsUrl","includes","isValidUrl","URL","_","stringAttribute","type","phoneAttribute","convertStringAttribute","mailAttribute","urlAttribute","formatDateTimeAttribute","formatIntAttribute","formatDoubleAttribute","NO_CONTENT_ATTRIBUTE","min","max","Math","attribute","phones","length","map","attributeValues","every","isNaN","formatStringAttribute","dateFormat","ClientDefaultFormat","defaultValue","dateValue","format","colorString","Color","undefined","number","parseFloat","isFinite","Array","isArray","mail","meters","painter","crs","geo","width","zeroPoint","getPointFromPxPosition","projectTo","maxWidthPoint","widthDistance","distance","round","center","diameter","coordinates","radius","endAngle","PI","step","end","ang","push","cos","sin","url","onMount","onUnmount","useEffect","node","onSetNode","useState","useCallback","initial","state","setState","toggle"],"mappings":"4NAEaA,EAAmB,IAKhC,IAAYC,GAAAA,EAAAA,qBAAAA,+DAEVA,iCACAA,qCACAA,4BAQF,MAAMC,EAAoD,CAACC,YAAWC,WAAUC,GAAW,IAAIC,KAAKD,IAEvFE,EAAWF,QACjBA,EAAS,OAAO,QAEE,iBAAZA,EAAsB,KAC1B,MAAMG,KAAUN,EAAmB,OAChCO,EAAOD,EAAOH,MAEhBK,UAAQD,UACHE,SAAOF,UAIX,WAGHG,EAAaD,SAAON,UAEnBK,UAAQE,GAAcA,EAAa,eCtC5BC,EACdC,EACAC,EACAC,YADAD,IAAAA,EAAiB,YACjBC,IAAAA,EAAwB,WAEjBC,EAAKC,GAAQJ,EAAEK,QAAQJ,GAAgBK,MAAM,WAG7C,CAFeH,EAAII,QAAQ,wBAAyB,KAEpCH,GAAMI,KAAKN,YCRpBO,EAAWC,UAGjBC,EAAcD,IAAUA,EAAME,MAFlB,+DAKND,EAAcD,SACV,8BAEDG,KAAKH,YAGRI,EAAcJ,SACV,iBAEDG,KAAKH,YAGRK,EAAeL,SACV,iBAEDG,OAAOH,GAAOM,qBAGlBC,EAAqBP,SAChB,+BACDG,KAAKH,YAGTQ,EAAmBR,UAC1BC,EAAcD,IAAUI,EAAcJ,IAAUK,EAAeL,YAGxDS,EAAgBT,UAI3BQ,EAAmBR,KACnBO,EAAqBP,IAJJ,qDAKNG,KAAKH,YAILU,EAAeV,UACtBW,EAAcX,IAAUA,EAAMY,SAAS,cAGhCD,EAAcX,WACxBa,EAAWb,IAQI,OAFHA,EAAME,MAFJ,6GAOJW,EAAWb,WAEnBc,IAAId,GACR,MAAOe,UACA,SAGF,EAGT,MCvDMC,EAAmBhB,KACvBiB,OACAjB,MAAAA,IAaIkB,EAAkBlB,KACtBiB,OACAjB,MAAAA,IAGImB,EAA0BnB,GAC1BU,EAAeV,GAXEA,CAAAA,KACrBiB,OACAjB,MAAAA,IAUSoB,CAAcpB,GAGnBW,EAAcX,GApBEA,CAAAA,KACpBiB,OACAjB,MAAAA,IAmBSqB,CAAarB,GAGlBS,EAAgBT,GACXkB,EAAelB,GAGjBgB,EAAgBhB,GAoCnBsB,EAA2BtB,GAC/BgB,EAAgBhB,EAAMM,YAElBiB,EAAsBvB,GAC1BgB,EAAgB3B,EAAiBW,EAAO,EAAG,KAIvCwB,EAAyBxB,GAC7BgB,EAAgB3B,EAAiBW,EAHV,EAGmC,MAMtDyB,EAAuB,CAC3BR,OACAjB,MAAOxB,qDCpGaiB,EAAaiC,EAAaC,UACvCC,KAAKF,IAAIE,KAAKD,IAAIlC,EAAKiC,GAAMC,iCDuGpCE,OAR8B7B,MAUR6B,EAAU7B,YACvB,CAACyB,UAGFI,EAAUZ,UACX,eA7DsBjB,CAAAA,UACvB8B,EAAS/B,EAAWC,OAGvBQ,EAAmBR,KACnBO,EAAqBP,IACtB8B,GACAA,EAAOC,cAEAD,EAAOE,IAAId,SAGde,EAAkBjC,EAAMJ,MAAM,SAASoC,IAAIb,UAE7Cc,EAAgBC,cAAOjB,KAAEA,gBAAWA,IAC/B,CACLD,EACEiB,EACGD,YAAKhC,MAAEA,YACNmC,OAAOnC,IAAUQ,EAAmBR,GAChCK,EAAeL,IACZA,EACDA,EACFX,GAAkBW,EAAO,EAAG,MAEjCF,KAAK,OAKPmC,GAgCIG,CAAsBP,EAAU7B,WACpC,iBACI,CAACsB,EAAwBO,EAAU7B,YACvC,YACA,cACI,CAACuB,EAAmBM,EAAU7B,YAClC,eACI,CAACwB,EAAsBK,EAAU7B,sBAEjC,CAACyB,wBHhFY,SACxBxC,SACAoD,WAAEA,EAAa5D,mBAAW6D,oBAA1BC,aAA+CA,EAAe/D,cAAwC,WAEhGgE,EAAYvD,EAAOF,EAAQE,GAAQ,YAErCC,UAAQsD,GACHC,SAAOD,EAAmBH,GAG5BE,EAAajC,kDKjDMoC,GAC1BA,EAAc,IAAIC,QAAMD,GAAapC,SAAS,YAASsC,oBCH/BC,IACvBV,MAAMW,WAAWD,KAAsBE,SAASF,6BCDvB7C,SACF,iBAAVA,GAAgC,OAAVA,IAAmBgD,MAAMC,QAAQjD,0PLoE9CkD,aAA2BA,8CM5DtB,CAC5BC,WACAC,QAAEA,EAAFC,IAAWA,EAAMC,eAEXC,MAAEA,GAAUH,EACZI,EAAYJ,EAAQK,uBAAuB,EAAG,GAAGC,UAAUL,GAC3DM,EAAgBP,EAAQK,uBAAuBF,EAAO,GAAGG,UAAUL,GACnEO,EAAwBC,WAASL,EAAWG,UAG3C/B,KAAKkC,MAAMX,GAFNI,GAASK,GAAiB,mDNsDdV,UAAwBA,iCOrEZ,CACpCa,EACAC,WAEMC,EAA6B,GAC7BC,EAASF,EAAW,EACpBG,EAAqB,EAAVvC,KAAKwC,GAChBC,EAAOzC,KAAKD,IAAIC,KAAKwC,GAAK,EAAIF,EAAQC,EAAW,SAEnDG,EAAMH,MAEL,IAAII,EAHG,EAGUA,EAAMD,EAAKC,GAAOF,EACtCJ,EAAYO,KAAK,CACf5C,KAAK6C,IAAIF,GAAOL,EAASH,EAAO,GAChCnC,KAAK8C,IAAIH,GAAOL,EAASH,EAAO,WAI7B,CAACE,oBPqDcU,GAAiB9D,EAAW8D,GAAOA,OAAWA,mCQvE7CC,QAAEA,EAAFC,UAAWA,KAClCC,YAAU,KACRF,GAAWA,IACJC,GAEN,sCCJIE,EAAMC,GAAaC,WAA6B,YAIhD,CAFKC,cAAYF,EAAW,CAACA,IAEvBD,sBCLWI,UACjBC,EAAOC,GAAYJ,gBAAqBrC,IAAZuC,GAAwBA,GACrDG,EAASJ,cAAY,IAAMG,GAAUD,GAAQ,CAACA,UAE7C,CAACA,EAAOE,EAAQD"}
|
|
1
|
+
{"version":3,"file":"react.cjs.production.min.js","sources":["../src/utils/date.ts","../src/utils/isNumeric.ts","../src/utils/isObject.ts","../src/hooks/useToggle.ts"],"sourcesContent":["import { parseJSON, parseISO, isValid, format, toDate } from \"date-fns\";\n\nexport const NO_CONTENT_VALUE = \"—\";\n\nexport type DateType = number | Date;\nexport type RawDateType = string | DateType;\n\nexport enum DateFormat {\n ClientDefaultFormat = \"dd.MM.yyyy HH:mm\",\n DateTime = \"dd.MM.yyyy HH:mm:ss\",\n UTC = \"yyyy-MM-dd'T'HH:mm:ss.sssxxx\",\n AxisTooltip = \"d MMMM yyyy\",\n}\n\ninterface FormatDateOptions {\n dateFormat?: DateFormat;\n defaultValue?: RawDateType;\n}\n\nconst stringDateParsers: ((date: string) => DateType)[] = [parseJSON, parseISO, rawDate => new Date(rawDate)];\n\nexport const getDate = (rawDate?: RawDateType | null): Date | null => {\n if (!rawDate) return null;\n\n if (typeof rawDate === \"string\") {\n for (const parser of stringDateParsers) {\n const date = parser(rawDate);\n\n if (isValid(date)) {\n return toDate(date);\n }\n }\n\n return null;\n }\n\n const parsedDate = toDate(rawDate);\n\n return isValid(parsedDate) ? parsedDate : null;\n};\n\nexport const formatDate = (\n date?: RawDateType,\n { dateFormat = DateFormat.ClientDefaultFormat, defaultValue = NO_CONTENT_VALUE }: FormatDateOptions = {},\n): string => {\n const dateValue = date ? getDate(date) : null;\n\n if (isValid(dateValue)) {\n return format(dateValue as Date, dateFormat);\n }\n\n return defaultValue.toString();\n};\n","export const isNumeric = (number: string | number): boolean =>\n !isNaN(parseFloat(number as string)) && isFinite(number as number);\n","export function isObject<T>(value: T | object): value is object {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n","import { useCallback, useState } from \"react\";\n\nexport const useToggle = (initial?: boolean): [boolean, VoidFunction, (value: boolean) => void] => {\n const [state, setState] = useState(initial !== undefined ? initial : false);\n\n const toggle = useCallback(() => setState(!state), [state]);\n\n return [state, toggle, setState];\n};\n"],"names":["NO_CONTENT_VALUE","DateFormat","stringDateParsers","parseJSON","parseISO","rawDate","Date","getDate","parser","date","isValid","toDate","parsedDate","dateFormat","ClientDefaultFormat","defaultValue","dateValue","format","toString","number","isNaN","parseFloat","isFinite","value","Array","isArray","initial","state","setState","useState","undefined","toggle","useCallback"],"mappings":"uHAEaA,EAAmB,IAKhC,IAAYC,GAAAA,EAAAA,qBAAAA,+DAEVA,iCACAA,qCACAA,4BAQF,MAAMC,EAAoD,CAACC,YAAWC,WAAUC,GAAW,IAAIC,KAAKD,IAEvFE,EAAWF,QACjBA,EAAS,OAAO,QAEE,iBAAZA,EAAsB,KAC1B,MAAMG,KAAUN,EAAmB,OAChCO,EAAOD,EAAOH,MAEhBK,UAAQD,UACHE,SAAOF,UAIX,WAGHG,EAAaD,SAAON,UAEnBK,UAAQE,GAAcA,EAAa,oDAGlB,SACxBH,SACAI,WAAEA,EAAaZ,mBAAWa,oBAA1BC,aAA+CA,EAAef,cAAwC,WAEhGgB,EAAYP,EAAOF,EAAQE,GAAQ,YAErCC,UAAQM,GACHC,SAAOD,EAAmBH,GAG5BE,EAAaG,gDCnDIC,IACvBC,MAAMC,WAAWF,KAAsBG,SAASH,6BCDvBI,SACF,iBAAVA,GAAgC,OAAVA,IAAmBC,MAAMC,QAAQF,sBCC7CG,UACjBC,EAAOC,GAAYC,gBAAqBC,IAAZJ,GAAwBA,GAErDK,EAASC,cAAY,IAAMJ,GAAUD,GAAQ,CAACA,UAE7C,CAACA,EAAOI,EAAQH"}
|
package/dist/react.esm.js
CHANGED
|
@@ -1,10 +1,13 @@
|
|
|
1
|
+
import { useState, useCallback } from 'react';
|
|
1
2
|
import { isValid, toDate, format, parseJSON, parseISO } from 'date-fns';
|
|
2
|
-
import { useEffect, useState, useCallback } from 'react';
|
|
3
|
-
import { Color } from '@evergis/color';
|
|
4
|
-
import { geo } from '@evergis/sgis/es/Crs';
|
|
5
|
-
import { distance } from '@evergis/sgis/es/geotools';
|
|
6
3
|
|
|
7
|
-
const
|
|
4
|
+
const useToggle = initial => {
|
|
5
|
+
const [state, setState] = useState(initial !== undefined ? initial : false);
|
|
6
|
+
const toggle = useCallback(() => setState(!state), [state]);
|
|
7
|
+
return [state, toggle, setState];
|
|
8
|
+
};
|
|
9
|
+
|
|
10
|
+
const NO_CONTENT_VALUE = "—";
|
|
8
11
|
var DateFormat;
|
|
9
12
|
|
|
10
13
|
(function (DateFormat) {
|
|
@@ -47,248 +50,11 @@ const formatDate = function formatDate(date, _temp) {
|
|
|
47
50
|
return defaultValue.toString();
|
|
48
51
|
};
|
|
49
52
|
|
|
50
|
-
function numberWithSpaces(x, fractionDigits, delim) {
|
|
51
|
-
if (fractionDigits === void 0) {
|
|
52
|
-
fractionDigits = 2;
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
if (delim === void 0) {
|
|
56
|
-
delim = ',';
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
const [num, frac] = x.toFixed(fractionDigits).split('.');
|
|
60
|
-
const numWithSpaces = num.replace(/\B(?=(\d{3})+(?!\d))/g, ' ');
|
|
61
|
-
return [numWithSpaces, frac].join(delim);
|
|
62
|
-
}
|
|
63
|
-
|
|
64
|
-
function matchPhone(value) {
|
|
65
|
-
const phoneRegexp = /((8|\+7)[- ]?)?(\(?\d{3,4}\)?[- ]?)?[\d\- ]{7,10}/g;
|
|
66
|
-
return !isStringAsInn(value) && value.match(phoneRegexp);
|
|
67
|
-
}
|
|
68
|
-
function isStringAsInn(value) {
|
|
69
|
-
const innRegexp = /^(([0-9]{12})|([0-9]{10}))$/;
|
|
70
|
-
return innRegexp.test(value);
|
|
71
|
-
}
|
|
72
|
-
function isStringAsKpp(value) {
|
|
73
|
-
const kppRegexp = /^(([0-9]{9}))$/;
|
|
74
|
-
return kppRegexp.test(value);
|
|
75
|
-
}
|
|
76
|
-
function isStringAsOgrn(value) {
|
|
77
|
-
const ogrnRegexp = /^([0-9]{13})?$/;
|
|
78
|
-
return ogrnRegexp.test((+value).toString());
|
|
79
|
-
}
|
|
80
|
-
function isStringContainsDate(value) {
|
|
81
|
-
const dateRegexp = /\d{4}(-|\/)\d{2}(-|\/)\d{2}/g;
|
|
82
|
-
return dateRegexp.test(value);
|
|
83
|
-
}
|
|
84
|
-
function isRequisiteNumbers(value) {
|
|
85
|
-
return isStringAsInn(value) || isStringAsKpp(value) || isStringAsOgrn(value);
|
|
86
|
-
}
|
|
87
|
-
function isStringAsPhone(value) {
|
|
88
|
-
const phoneRegexp = /^((8|\+7)[- ]?)?(\(?\d{3,4}\)?[- ]?)?[\d\- ]{7,10}/;
|
|
89
|
-
return !isRequisiteNumbers(value) && !isStringContainsDate(value) && phoneRegexp.test(value);
|
|
90
|
-
}
|
|
91
|
-
function isStringAsMail(value) {
|
|
92
|
-
return isStringAsUrl(value) && value.includes('@');
|
|
93
|
-
}
|
|
94
|
-
function isStringAsUrl(value) {
|
|
95
|
-
if (isValidUrl(value)) {
|
|
96
|
-
return true;
|
|
97
|
-
}
|
|
98
|
-
|
|
99
|
-
const urlRegexp = /(http(s)?:\/\/.)?(www\.)?[-a-zA-Z0-9@:%._+~#=]{2,256}\.[a-z]{2,6}\b([-a-zA-Z0-9@:%_+.~#?&//=]*)/g;
|
|
100
|
-
const urlKind = value.match(urlRegexp);
|
|
101
|
-
return urlKind !== null;
|
|
102
|
-
}
|
|
103
|
-
function isValidUrl(value) {
|
|
104
|
-
try {
|
|
105
|
-
new URL(value);
|
|
106
|
-
} catch (_) {
|
|
107
|
-
return false;
|
|
108
|
-
}
|
|
109
|
-
|
|
110
|
-
return true;
|
|
111
|
-
}
|
|
112
|
-
const mailHref = mail => "mailto:" + mail;
|
|
113
|
-
const phoneHref = mail => "tel:" + mail;
|
|
114
|
-
const urlHref = url => isValidUrl(url) ? url : "//" + url;
|
|
115
|
-
|
|
116
|
-
const stringAttribute = value => ({
|
|
117
|
-
type: 0
|
|
118
|
-
/* String */
|
|
119
|
-
,
|
|
120
|
-
value
|
|
121
|
-
});
|
|
122
|
-
|
|
123
|
-
const urlAttribute = value => ({
|
|
124
|
-
type: 2
|
|
125
|
-
/* Url */
|
|
126
|
-
,
|
|
127
|
-
value
|
|
128
|
-
});
|
|
129
|
-
|
|
130
|
-
const mailAttribute = value => ({
|
|
131
|
-
type: 3
|
|
132
|
-
/* Mail */
|
|
133
|
-
,
|
|
134
|
-
value
|
|
135
|
-
});
|
|
136
|
-
|
|
137
|
-
const phoneAttribute = value => ({
|
|
138
|
-
type: 1
|
|
139
|
-
/* Phone */
|
|
140
|
-
,
|
|
141
|
-
value
|
|
142
|
-
});
|
|
143
|
-
|
|
144
|
-
const convertStringAttribute = value => {
|
|
145
|
-
if (isStringAsMail(value)) {
|
|
146
|
-
return mailAttribute(value);
|
|
147
|
-
}
|
|
148
|
-
|
|
149
|
-
if (isStringAsUrl(value)) {
|
|
150
|
-
return urlAttribute(value);
|
|
151
|
-
}
|
|
152
|
-
|
|
153
|
-
if (isStringAsPhone(value)) {
|
|
154
|
-
return phoneAttribute(value);
|
|
155
|
-
}
|
|
156
|
-
|
|
157
|
-
return stringAttribute(value);
|
|
158
|
-
};
|
|
159
|
-
|
|
160
|
-
const formatStringAttribute = value => {
|
|
161
|
-
const phones = matchPhone(value);
|
|
162
|
-
|
|
163
|
-
if (!isRequisiteNumbers(value) && !isStringContainsDate(value) && phones && phones.length) {
|
|
164
|
-
return phones.map(phoneAttribute);
|
|
165
|
-
}
|
|
166
|
-
|
|
167
|
-
const attributeValues = value.split(/[\s|]/).map(convertStringAttribute);
|
|
168
|
-
|
|
169
|
-
if (attributeValues.every((_ref) => {
|
|
170
|
-
let {
|
|
171
|
-
type
|
|
172
|
-
} = _ref;
|
|
173
|
-
return type === 0;
|
|
174
|
-
}
|
|
175
|
-
/* String */
|
|
176
|
-
)) {
|
|
177
|
-
return [stringAttribute(attributeValues.map((_ref2) => {
|
|
178
|
-
let {
|
|
179
|
-
value
|
|
180
|
-
} = _ref2;
|
|
181
|
-
return isNaN(+value) || isRequisiteNumbers(value) ? isStringAsOgrn(value) ? +value : value : numberWithSpaces(+value, 0, '');
|
|
182
|
-
}).join(' '))];
|
|
183
|
-
}
|
|
184
|
-
|
|
185
|
-
return attributeValues;
|
|
186
|
-
};
|
|
187
|
-
|
|
188
|
-
const formatDateTimeAttribute = value => stringAttribute(value.toString());
|
|
189
|
-
|
|
190
|
-
const formatIntAttribute = value => stringAttribute(numberWithSpaces(value, 0, ''));
|
|
191
|
-
|
|
192
|
-
const DOUBLE_FRACTIONS = 2;
|
|
193
|
-
|
|
194
|
-
const formatDoubleAttribute = value => stringAttribute(numberWithSpaces(value, DOUBLE_FRACTIONS, '.'));
|
|
195
|
-
|
|
196
|
-
const isNullOrUndefined = value => value === null || value === undefined;
|
|
197
|
-
|
|
198
|
-
const NO_CONTENT_ATTRIBUTE = {
|
|
199
|
-
type: 0
|
|
200
|
-
/* String */
|
|
201
|
-
,
|
|
202
|
-
value: NO_CONTENT_VALUE
|
|
203
|
-
};
|
|
204
|
-
const formatAttributeValue = attribute => {
|
|
205
|
-
if (isNullOrUndefined(attribute.value)) {
|
|
206
|
-
return [NO_CONTENT_ATTRIBUTE];
|
|
207
|
-
}
|
|
208
|
-
|
|
209
|
-
switch (attribute.type) {
|
|
210
|
-
case 'String':
|
|
211
|
-
return formatStringAttribute(attribute.value);
|
|
212
|
-
|
|
213
|
-
case 'DateTime':
|
|
214
|
-
return [formatDateTimeAttribute(attribute.value)];
|
|
215
|
-
|
|
216
|
-
case 'Int32':
|
|
217
|
-
case 'Int64':
|
|
218
|
-
return [formatIntAttribute(attribute.value)];
|
|
219
|
-
|
|
220
|
-
case 'Double':
|
|
221
|
-
return [formatDoubleAttribute(attribute.value)];
|
|
222
|
-
|
|
223
|
-
default:
|
|
224
|
-
return [NO_CONTENT_ATTRIBUTE];
|
|
225
|
-
}
|
|
226
|
-
};
|
|
227
|
-
|
|
228
|
-
function useMount(_ref) {
|
|
229
|
-
let {
|
|
230
|
-
onMount,
|
|
231
|
-
onUnmount
|
|
232
|
-
} = _ref;
|
|
233
|
-
useEffect(() => {
|
|
234
|
-
onMount && onMount();
|
|
235
|
-
return onUnmount; // eslint-disable-next-line react-hooks/exhaustive-deps
|
|
236
|
-
}, []);
|
|
237
|
-
}
|
|
238
|
-
|
|
239
|
-
function useNode() {
|
|
240
|
-
const [node, onSetNode] = useState(null);
|
|
241
|
-
const ref = useCallback(onSetNode, [onSetNode]);
|
|
242
|
-
return [ref, node];
|
|
243
|
-
}
|
|
244
|
-
|
|
245
|
-
const useToggle = initial => {
|
|
246
|
-
const [state, setState] = useState(initial !== undefined ? initial : false);
|
|
247
|
-
const toggle = useCallback(() => setState(!state), [state]);
|
|
248
|
-
return [state, toggle, setState];
|
|
249
|
-
};
|
|
250
|
-
|
|
251
|
-
const getHexColor = colorString => colorString ? new Color(colorString).toString('hex') : undefined;
|
|
252
|
-
|
|
253
53
|
const isNumeric = number => !isNaN(parseFloat(number)) && isFinite(number);
|
|
254
54
|
|
|
255
55
|
function isObject(value) {
|
|
256
|
-
return typeof value ===
|
|
56
|
+
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
257
57
|
}
|
|
258
58
|
|
|
259
|
-
|
|
260
|
-
return Math.min(Math.max(num, min), max);
|
|
261
|
-
}
|
|
262
|
-
|
|
263
|
-
const metersToPixels = (meters, _ref) => {
|
|
264
|
-
let {
|
|
265
|
-
painter,
|
|
266
|
-
crs = geo
|
|
267
|
-
} = _ref;
|
|
268
|
-
const {
|
|
269
|
-
width
|
|
270
|
-
} = painter;
|
|
271
|
-
const zeroPoint = painter.getPointFromPxPosition(0, 0).projectTo(crs);
|
|
272
|
-
const maxWidthPoint = painter.getPointFromPxPosition(width, 0).projectTo(crs);
|
|
273
|
-
const widthDistance = distance(zeroPoint, maxWidthPoint);
|
|
274
|
-
const pxK = width / (widthDistance || 1);
|
|
275
|
-
return Math.round(meters * pxK);
|
|
276
|
-
};
|
|
277
|
-
|
|
278
|
-
const polygonCircleFromPoint = (center, diameter) => {
|
|
279
|
-
const coordinates = [];
|
|
280
|
-
const radius = diameter / 2;
|
|
281
|
-
const endAngle = Math.PI * 2;
|
|
282
|
-
const step = Math.max(Math.PI / 2 / radius, endAngle / 128);
|
|
283
|
-
let start = 0;
|
|
284
|
-
let end = endAngle;
|
|
285
|
-
|
|
286
|
-
for (let ang = start; ang < end; ang += step) {
|
|
287
|
-
coordinates.push([Math.cos(ang) * radius + center[0], Math.sin(ang) * radius + center[1]]);
|
|
288
|
-
}
|
|
289
|
-
|
|
290
|
-
return [coordinates];
|
|
291
|
-
};
|
|
292
|
-
|
|
293
|
-
export { DateFormat, NO_CONTENT_VALUE, clamp, formatAttributeValue, formatDate, getDate, getHexColor, isNumeric, isObject, isRequisiteNumbers, isStringAsInn, isStringAsKpp, isStringAsMail, isStringAsOgrn, isStringAsPhone, isStringAsUrl, isStringContainsDate, isValidUrl, mailHref, matchPhone, metersToPixels, numberWithSpaces, phoneHref, polygonCircleFromPoint, urlHref, useMount, useNode, useToggle };
|
|
59
|
+
export { DateFormat, NO_CONTENT_VALUE, formatDate, getDate, isNumeric, isObject, useToggle };
|
|
294
60
|
//# sourceMappingURL=react.esm.js.map
|
package/dist/react.esm.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"react.esm.js","sources":["../src/utils/date.ts","../src/utils/format.ts","../src/utils/url.ts","../src/core/attributes/format.ts","../src/hooks/useMount.ts","../src/hooks/useNode.ts","../src/hooks/useToggle.ts","../src/utils/color.ts","../src/utils/isNumeric.ts","../src/utils/isObject.ts","../src/utils/math.ts","../src/utils/metersToPixels.ts","../src/utils/polygonCircleFromPoint.ts"],"sourcesContent":["import { parseJSON, parseISO, isValid, format, toDate } from \"date-fns\";\n\nexport const NO_CONTENT_VALUE = '—';\n\nexport type DateType = number | Date;\nexport type RawDateType = string | DateType;\n\nexport enum DateFormat {\n ClientDefaultFormat = \"dd.MM.yyyy HH:mm\",\n DateTime = \"dd.MM.yyyy HH:mm:ss\",\n UTC = \"yyyy-MM-dd'T'HH:mm:ss.sssxxx\",\n AxisTooltip = \"d MMMM yyyy\",\n}\n\ninterface FormatDateOptions {\n dateFormat?: DateFormat;\n defaultValue?: RawDateType;\n}\n\nconst stringDateParsers: ((date: string) => DateType)[] = [parseJSON, parseISO, rawDate => new Date(rawDate)];\n\nexport const getDate = (rawDate?: RawDateType | null): Date | null => {\n if (!rawDate) return null;\n\n if (typeof rawDate === \"string\") {\n for (const parser of stringDateParsers) {\n const date = parser(rawDate);\n\n if (isValid(date)) {\n return toDate(date);\n }\n }\n\n return null;\n }\n\n const parsedDate = toDate(rawDate);\n\n return isValid(parsedDate) ? parsedDate : null;\n};\n\nexport const formatDate = (\n date?: RawDateType,\n { dateFormat = DateFormat.ClientDefaultFormat, defaultValue = NO_CONTENT_VALUE }: FormatDateOptions = {},\n): string => {\n const dateValue = date ? getDate(date) : null;\n\n if (isValid(dateValue)) {\n return format(dateValue as Date, dateFormat);\n }\n\n return defaultValue.toString();\n};\n","export function numberWithSpaces(\n x: number,\n fractionDigits = 2,\n delim: ',' | '.' | '' = ','\n): string {\n const [num, frac] = x.toFixed(fractionDigits).split('.');\n const numWithSpaces = num.replace(/\\B(?=(\\d{3})+(?!\\d))/g, ' ');\n\n return [numWithSpaces, frac].join(delim);\n}\n","export function matchPhone(value: string) {\n const phoneRegexp = /((8|\\+7)[- ]?)?(\\(?\\d{3,4}\\)?[- ]?)?[\\d\\- ]{7,10}/g;\n\n return !isStringAsInn(value) && value.match(phoneRegexp);\n}\n\nexport function isStringAsInn(value: string) {\n const innRegexp = /^(([0-9]{12})|([0-9]{10}))$/;\n\n return innRegexp.test(value);\n}\n\nexport function isStringAsKpp(value: string) {\n const kppRegexp = /^(([0-9]{9}))$/;\n\n return kppRegexp.test(value);\n}\n\nexport function isStringAsOgrn(value: string) {\n const ogrnRegexp = /^([0-9]{13})?$/;\n\n return ogrnRegexp.test((+value).toString());\n}\n\nexport function isStringContainsDate(value: string) {\n const dateRegexp = /\\d{4}(-|\\/)\\d{2}(-|\\/)\\d{2}/g;\n return dateRegexp.test(value);\n}\n\nexport function isRequisiteNumbers(value: string) {\n return isStringAsInn(value) || isStringAsKpp(value) || isStringAsOgrn(value);\n}\n\nexport function isStringAsPhone(value: string) {\n const phoneRegexp = /^((8|\\+7)[- ]?)?(\\(?\\d{3,4}\\)?[- ]?)?[\\d\\- ]{7,10}/;\n\n return (\n !isRequisiteNumbers(value) &&\n !isStringContainsDate(value) &&\n phoneRegexp.test(value)\n );\n}\n\nexport function isStringAsMail(value: string) {\n return isStringAsUrl(value) && value.includes('@');\n}\n\nexport function isStringAsUrl(value: string) {\n if (isValidUrl(value)) {\n return true;\n }\n\n const urlRegexp = /(http(s)?:\\/\\/.)?(www\\.)?[-a-zA-Z0-9@:%._+~#=]{2,256}\\.[a-z]{2,6}\\b([-a-zA-Z0-9@:%_+.~#?&//=]*)/g;\n\n const urlKind = value.match(urlRegexp);\n\n return urlKind !== null;\n}\n\nexport function isValidUrl(value: string) {\n try {\n new URL(value);\n } catch (_) {\n return false;\n }\n\n return true;\n}\n\nexport const mailHref = (mail: string) => `mailto:${mail}`;\n\nexport const phoneHref = (mail: string) => `tel:${mail}`;\n\nexport const urlHref = (url: string) => (isValidUrl(url) ? url : `//${url}`);\n","import { AttributeValue, AttributeValueType, FeatureAttribute } from './types';\n\nimport { NO_CONTENT_VALUE } from \"../../utils/date\";\nimport { numberWithSpaces } from '../../utils/format';\nimport {\n isStringAsMail,\n isStringAsPhone,\n isStringAsUrl,\n matchPhone,\n isRequisiteNumbers,\n isStringAsOgrn,\n isStringContainsDate,\n} from '../../utils/url';\n\nconst stringAttribute = (value: string) => ({\n type: AttributeValueType.String,\n value,\n});\n\nconst urlAttribute = (value: string) => ({\n type: AttributeValueType.Url,\n value,\n});\n\nconst mailAttribute = (value: string) => ({\n type: AttributeValueType.Mail,\n value,\n});\n\nconst phoneAttribute = (value: string) => ({\n type: AttributeValueType.Phone,\n value,\n});\n\nconst convertStringAttribute = (value: string) => {\n if (isStringAsMail(value)) {\n return mailAttribute(value);\n }\n\n if (isStringAsUrl(value)) {\n return urlAttribute(value);\n }\n\n if (isStringAsPhone(value)) {\n return phoneAttribute(value);\n }\n\n return stringAttribute(value);\n};\n\nconst formatStringAttribute = (value: string): AttributeValue[] => {\n const phones = matchPhone(value);\n\n if (\n !isRequisiteNumbers(value) &&\n !isStringContainsDate(value) &&\n phones &&\n phones.length\n ) {\n return phones.map(phoneAttribute);\n }\n\n const attributeValues = value.split(/[\\s|]/).map(convertStringAttribute);\n\n if (attributeValues.every(({ type }) => type === AttributeValueType.String)) {\n return [\n stringAttribute(\n attributeValues\n .map(({ value }) =>\n isNaN(+value) || isRequisiteNumbers(value)\n ? isStringAsOgrn(value)\n ? +value\n : value\n : numberWithSpaces(+value, 0, '')\n )\n .join(' ')\n ),\n ];\n }\n\n return attributeValues;\n};\n\nconst formatDateTimeAttribute = (value: Date): AttributeValue =>\n stringAttribute(value.toString());\n\nconst formatIntAttribute = (value: number): AttributeValue =>\n stringAttribute(numberWithSpaces(value, 0, ''));\n\nconst DOUBLE_FRACTIONS = 2;\n\nconst formatDoubleAttribute = (value: number): AttributeValue =>\n stringAttribute(numberWithSpaces(value, DOUBLE_FRACTIONS, '.'));\n\nconst isNullOrUndefined = <Value>(\n value: Value | null | undefined\n): value is null | undefined => value === null || value === undefined;\n\nconst NO_CONTENT_ATTRIBUTE = {\n type: AttributeValueType.String,\n value: NO_CONTENT_VALUE,\n};\n\nexport const formatAttributeValue = (\n attribute: FeatureAttribute\n): AttributeValue[] => {\n if (isNullOrUndefined(attribute.value)) {\n return [NO_CONTENT_ATTRIBUTE];\n }\n\n switch (attribute.type) {\n case 'String':\n return formatStringAttribute(attribute.value as string);\n case 'DateTime':\n return [formatDateTimeAttribute(attribute.value as Date)];\n case 'Int32':\n case 'Int64':\n return [formatIntAttribute(attribute.value as number)];\n case 'Double':\n return [formatDoubleAttribute(attribute.value as number)];\n default:\n return [NO_CONTENT_ATTRIBUTE];\n }\n};\n","import { useEffect } from 'react';\n\nexport function useMount({ onMount, onUnmount }: UseMountOptions) {\n useEffect(() => {\n onMount && onMount();\n return onUnmount;\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n}\n\ntype UseMountOptions = {\n onMount?: () => void;\n onUnmount?: () => void;\n};\n","import { PropsWithRef, useCallback, useState } from 'react';\n\nexport function useNode(): [PropsWithRef<any>, HTMLElement | null] {\n const [node, onSetNode] = useState<HTMLElement | null>(null);\n\n const ref = useCallback(onSetNode, [onSetNode]);\n\n return [ref, node];\n}\n","import { useCallback, useState } from \"react\";\n\nexport const useToggle = (initial?: boolean): [boolean, VoidFunction, (value: boolean) => void] => {\n const [state, setState] = useState(initial !== undefined ? initial : false);\n const toggle = useCallback(() => setState(!state), [state]);\n\n return [state, toggle, setState];\n};\n","import { Color } from '@evergis/color';\n\nexport const getHexColor = (colorString: string): string | undefined =>\n colorString ? new Color(colorString).toString('hex') : undefined;\n","export const isNumeric = (number: string | number): boolean =>\n !isNaN(parseFloat(number as string)) && isFinite(number as number);\n","export function isObject<T>(value: T | object): value is object {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n}\n","export function clamp(num: number, min: number, max: number): number {\n return Math.min(Math.max(num, min), max);\n}\n","import { Crs, geo } from '@evergis/sgis/es/Crs';\nimport { distance } from '@evergis/sgis/es/geotools';\nimport { DomPainter } from '@evergis/sgis/es/painters/DomPainter/DomPainter';\n\ntype ConvertionContext = {\n painter: DomPainter;\n crs?: Crs;\n};\n\nexport const metersToPixels = (\n meters: number,\n { painter, crs = geo }: ConvertionContext\n): number => {\n const { width } = painter;\n const zeroPoint = painter.getPointFromPxPosition(0, 0).projectTo(crs);\n const maxWidthPoint = painter.getPointFromPxPosition(width, 0).projectTo(crs);\n const widthDistance: number = distance(zeroPoint, maxWidthPoint);\n const pxK = width / (widthDistance || 1);\n\n return Math.round(meters * pxK);\n};\n","import { Coordinates } from '@evergis/sgis/es/baseTypes';\n\nexport const polygonCircleFromPoint = (\n center: Coordinates,\n diameter: number\n): Coordinates[][] => {\n const coordinates: Coordinates[] = [];\n const radius = diameter / 2;\n const endAngle = Math.PI * 2;\n const step = Math.max(Math.PI / 2 / radius, endAngle / 128);\n let start = 0;\n let end = endAngle;\n\n for (let ang = start; ang < end; ang += step) {\n coordinates.push([\n Math.cos(ang) * radius + center[0],\n Math.sin(ang) * radius + center[1],\n ]);\n }\n\n return [coordinates];\n};\n"],"names":["NO_CONTENT_VALUE","DateFormat","stringDateParsers","parseJSON","parseISO","rawDate","Date","getDate","parser","date","isValid","toDate","parsedDate","formatDate","dateFormat","ClientDefaultFormat","defaultValue","dateValue","format","toString","numberWithSpaces","x","fractionDigits","delim","num","frac","toFixed","split","numWithSpaces","replace","join","matchPhone","value","phoneRegexp","isStringAsInn","match","innRegexp","test","isStringAsKpp","kppRegexp","isStringAsOgrn","ogrnRegexp","isStringContainsDate","dateRegexp","isRequisiteNumbers","isStringAsPhone","isStringAsMail","isStringAsUrl","includes","isValidUrl","urlRegexp","urlKind","URL","_","mailHref","mail","phoneHref","urlHref","url","stringAttribute","type","urlAttribute","mailAttribute","phoneAttribute","convertStringAttribute","formatStringAttribute","phones","length","map","attributeValues","every","isNaN","formatDateTimeAttribute","formatIntAttribute","DOUBLE_FRACTIONS","formatDoubleAttribute","isNullOrUndefined","undefined","NO_CONTENT_ATTRIBUTE","formatAttributeValue","attribute","useMount","onMount","onUnmount","useEffect","useNode","node","onSetNode","useState","ref","useCallback","useToggle","initial","state","setState","toggle","getHexColor","colorString","Color","isNumeric","number","parseFloat","isFinite","isObject","Array","isArray","clamp","min","max","Math","metersToPixels","meters","painter","crs","geo","width","zeroPoint","getPointFromPxPosition","projectTo","maxWidthPoint","widthDistance","distance","pxK","round","polygonCircleFromPoint","center","diameter","coordinates","radius","endAngle","PI","step","start","end","ang","push","cos","sin"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"react.esm.js","sources":["../src/hooks/useToggle.ts","../src/utils/date.ts","../src/utils/isNumeric.ts","../src/utils/isObject.ts"],"sourcesContent":["import { useCallback, useState } from \"react\";\n\nexport const useToggle = (initial?: boolean): [boolean, VoidFunction, (value: boolean) => void] => {\n const [state, setState] = useState(initial !== undefined ? initial : false);\n\n const toggle = useCallback(() => setState(!state), [state]);\n\n return [state, toggle, setState];\n};\n","import { parseJSON, parseISO, isValid, format, toDate } from \"date-fns\";\n\nexport const NO_CONTENT_VALUE = \"—\";\n\nexport type DateType = number | Date;\nexport type RawDateType = string | DateType;\n\nexport enum DateFormat {\n ClientDefaultFormat = \"dd.MM.yyyy HH:mm\",\n DateTime = \"dd.MM.yyyy HH:mm:ss\",\n UTC = \"yyyy-MM-dd'T'HH:mm:ss.sssxxx\",\n AxisTooltip = \"d MMMM yyyy\",\n}\n\ninterface FormatDateOptions {\n dateFormat?: DateFormat;\n defaultValue?: RawDateType;\n}\n\nconst stringDateParsers: ((date: string) => DateType)[] = [parseJSON, parseISO, rawDate => new Date(rawDate)];\n\nexport const getDate = (rawDate?: RawDateType | null): Date | null => {\n if (!rawDate) return null;\n\n if (typeof rawDate === \"string\") {\n for (const parser of stringDateParsers) {\n const date = parser(rawDate);\n\n if (isValid(date)) {\n return toDate(date);\n }\n }\n\n return null;\n }\n\n const parsedDate = toDate(rawDate);\n\n return isValid(parsedDate) ? parsedDate : null;\n};\n\nexport const formatDate = (\n date?: RawDateType,\n { dateFormat = DateFormat.ClientDefaultFormat, defaultValue = NO_CONTENT_VALUE }: FormatDateOptions = {},\n): string => {\n const dateValue = date ? getDate(date) : null;\n\n if (isValid(dateValue)) {\n return format(dateValue as Date, dateFormat);\n }\n\n return defaultValue.toString();\n};\n","export const isNumeric = (number: string | number): boolean =>\n !isNaN(parseFloat(number as string)) && isFinite(number as number);\n","export function isObject<T>(value: T | object): value is object {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n"],"names":["useToggle","initial","state","setState","useState","undefined","toggle","useCallback","NO_CONTENT_VALUE","DateFormat","stringDateParsers","parseJSON","parseISO","rawDate","Date","getDate","parser","date","isValid","toDate","parsedDate","formatDate","dateFormat","ClientDefaultFormat","defaultValue","dateValue","format","toString","isNumeric","number","isNaN","parseFloat","isFinite","isObject","value","Array","isArray"],"mappings":";;;MAEaA,SAAS,GAAIC,OAAD;AACvB,QAAM,CAACC,KAAD,EAAQC,QAAR,IAAoBC,QAAQ,CAACH,OAAO,KAAKI,SAAZ,GAAwBJ,OAAxB,GAAkC,KAAnC,CAAlC;AAEA,QAAMK,MAAM,GAAGC,WAAW,CAAC,MAAMJ,QAAQ,CAAC,CAACD,KAAF,CAAf,EAAyB,CAACA,KAAD,CAAzB,CAA1B;AAEA,SAAO,CAACA,KAAD,EAAQI,MAAR,EAAgBH,QAAhB,CAAP;AACD;;MCNYK,gBAAgB,GAAG,GAAzB;AAKP,IAAYC,UAAZ;;AAAA,WAAYA;AACVA,EAAAA,iCAAA,qBAAA;AACAA,EAAAA,sBAAA,wBAAA;AACAA,EAAAA,iBAAA,iCAAA;AACAA,EAAAA,yBAAA,gBAAA;AACD,CALD,EAAYA,UAAU,KAAVA,UAAU,KAAA,CAAtB;;AAYA,MAAMC,iBAAiB,GAAmC,CAACC,SAAD,EAAYC,QAAZ,EAAsBC,OAAO,IAAI,IAAIC,IAAJ,CAASD,OAAT,CAAjC,CAA1D;AAEA,MAAaE,OAAO,GAAIF,OAAD;AACrB,MAAI,CAACA,OAAL,EAAc,OAAO,IAAP;;AAEd,MAAI,OAAOA,OAAP,KAAmB,QAAvB,EAAiC;AAC/B,SAAK,MAAMG,MAAX,IAAqBN,iBAArB,EAAwC;AACtC,YAAMO,IAAI,GAAGD,MAAM,CAACH,OAAD,CAAnB;;AAEA,UAAIK,OAAO,CAACD,IAAD,CAAX,EAAmB;AACjB,eAAOE,MAAM,CAACF,IAAD,CAAb;AACD;AACF;;AAED,WAAO,IAAP;AACD;;AAED,QAAMG,UAAU,GAAGD,MAAM,CAACN,OAAD,CAAzB;AAEA,SAAOK,OAAO,CAACE,UAAD,CAAP,GAAsBA,UAAtB,GAAmC,IAA1C;AACD,CAlBM;AAoBP,MAAaC,UAAU,GAAG,SAAbA,UAAa,CACxBJ,IADwB;MAExB;AAAEK,IAAAA,UAAU,GAAGb,UAAU,CAACc,mBAA1B;AAA+CC,IAAAA,YAAY,GAAGhB;AAA9D,yBAAsG;AAEtG,QAAMiB,SAAS,GAAGR,IAAI,GAAGF,OAAO,CAACE,IAAD,CAAV,GAAmB,IAAzC;;AAEA,MAAIC,OAAO,CAACO,SAAD,CAAX,EAAwB;AACtB,WAAOC,MAAM,CAACD,SAAD,EAAoBH,UAApB,CAAb;AACD;;AAED,SAAOE,YAAY,CAACG,QAAb,EAAP;AACD,CAXM;;MCzCMC,SAAS,GAAIC,MAAD,IACvB,CAACC,KAAK,CAACC,UAAU,CAACF,MAAD,CAAX,CAAN,IAAwCG,QAAQ,CAACH,MAAD,CAD3C;;SCASI,SAAYC;AAC1B,SAAO,OAAOA,KAAP,KAAiB,QAAjB,IAA6BA,KAAK,KAAK,IAAvC,IAA+C,CAACC,KAAK,CAACC,OAAN,CAAcF,KAAd,CAAvD;AACD;;;;"}
|
package/package.json
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
{
|
|
2
|
-
"version": "3.
|
|
2
|
+
"version": "3.1.1",
|
|
3
3
|
"license": "MIT",
|
|
4
4
|
"main": "dist/index.js",
|
|
5
5
|
"typings": "dist/index.d.ts",
|
|
@@ -21,7 +21,6 @@
|
|
|
21
21
|
},
|
|
22
22
|
"peerDependencies": {
|
|
23
23
|
"@evergis/api": ">=1.0.0",
|
|
24
|
-
"@evergis/sgis": ">=0.5.0-alpha.61",
|
|
25
24
|
"react": ">=17",
|
|
26
25
|
"react-dom": ">=17",
|
|
27
26
|
"react-i18next": ">=11"
|
|
@@ -44,8 +43,7 @@
|
|
|
44
43
|
"@babel/core": "^7.17.5",
|
|
45
44
|
"@babel/plugin-transform-classes": "^7.16.7",
|
|
46
45
|
"@babel/preset-env": "^7.16.11",
|
|
47
|
-
"@evergis/api": "^4.
|
|
48
|
-
"@evergis/sgis": "0.5.0-alpha.68",
|
|
46
|
+
"@evergis/api": "^4.1.1",
|
|
49
47
|
"@storybook/addon-actions": "^6.4.18",
|
|
50
48
|
"@storybook/addon-controls": "^6.4.18",
|
|
51
49
|
"@storybook/addon-docs": "^6.4.18",
|
|
@@ -76,11 +74,11 @@
|
|
|
76
74
|
},
|
|
77
75
|
"dependencies": {
|
|
78
76
|
"@evergis/color": "^1.0.0-alpha.1",
|
|
79
|
-
"@evergis/condition": "^2.
|
|
77
|
+
"@evergis/condition": "^2.1.1",
|
|
80
78
|
"@svgdotjs/svg.js": "^3.1.2",
|
|
81
79
|
"lodash": "^4.17.21",
|
|
82
80
|
"punycode": "^2.1.1",
|
|
83
81
|
"styled-components": "^5.3.5"
|
|
84
82
|
},
|
|
85
|
-
"gitHead": "
|
|
83
|
+
"gitHead": "a09121c280e395b08d0c1f9f98d8db13ae0a2017"
|
|
86
84
|
}
|
package/dist/hooks/useMount.d.ts
DELETED
package/dist/hooks/useNode.d.ts
DELETED
package/dist/i18n/index.d.ts
DELETED
package/dist/utils/color.d.ts
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export declare const getHexColor: (colorString: string) => string | undefined;
|
package/dist/utils/format.d.ts
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export declare function numberWithSpaces(x: number, fractionDigits?: number, delim?: ',' | '.' | ''): string;
|
package/dist/utils/math.d.ts
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export declare function clamp(num: number, min: number, max: number): number;
|
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
import { Crs } from '@evergis/sgis/es/Crs';
|
|
2
|
-
import { DomPainter } from '@evergis/sgis/es/painters/DomPainter/DomPainter';
|
|
3
|
-
declare type ConvertionContext = {
|
|
4
|
-
painter: DomPainter;
|
|
5
|
-
crs?: Crs;
|
|
6
|
-
};
|
|
7
|
-
export declare const metersToPixels: (meters: number, { painter, crs }: ConvertionContext) => number;
|
|
8
|
-
export {};
|
package/dist/utils/url.d.ts
DELETED
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
export declare function matchPhone(value: string): false | RegExpMatchArray | null;
|
|
2
|
-
export declare function isStringAsInn(value: string): boolean;
|
|
3
|
-
export declare function isStringAsKpp(value: string): boolean;
|
|
4
|
-
export declare function isStringAsOgrn(value: string): boolean;
|
|
5
|
-
export declare function isStringContainsDate(value: string): boolean;
|
|
6
|
-
export declare function isRequisiteNumbers(value: string): boolean;
|
|
7
|
-
export declare function isStringAsPhone(value: string): boolean;
|
|
8
|
-
export declare function isStringAsMail(value: string): boolean;
|
|
9
|
-
export declare function isStringAsUrl(value: string): boolean;
|
|
10
|
-
export declare function isValidUrl(value: string): boolean;
|
|
11
|
-
export declare const mailHref: (mail: string) => string;
|
|
12
|
-
export declare const phoneHref: (mail: string) => string;
|
|
13
|
-
export declare const urlHref: (url: string) => string;
|