@dartcom/ui-kit 10.6.0 → 10.6.2
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/components/modal/modal.d.ts.map +1 -1
- package/dist/components/modal/modal.esm.js +1 -1
- package/dist/components/modal/styles.d.ts +1 -2
- package/dist/components/modal/styles.d.ts.map +1 -1
- package/dist/components/modal/styles.esm.js +1 -1
- package/dist/components/modal/types.d.ts +2 -2
- package/dist/components/modal/types.d.ts.map +1 -1
- package/dist/index.cjs +203 -111
- package/dist/index.esm.js +1 -1
- package/dist/layouts/auth/auth.esm.js +1 -1
- package/dist/pages/auth/auth.esm.js +1 -1
- package/dist/services/collection/collection.service.d.ts +35 -60
- package/dist/services/collection/collection.service.d.ts.map +1 -1
- package/dist/services/collection/collection.service.esm.js +1 -1
- package/dist/services/index.d.ts +1 -0
- package/dist/services/index.d.ts.map +1 -1
- package/dist/services/map/map.service.d.ts +37 -0
- package/dist/services/map/map.service.d.ts.map +1 -1
- package/dist/services/map/map.service.esm.js +1 -1
- package/dist/services/scalar-id/index.d.ts +2 -0
- package/dist/services/scalar-id/index.d.ts.map +1 -0
- package/dist/services/scalar-id/scalar-id.constants.d.ts +2 -0
- package/dist/services/scalar-id/scalar-id.constants.d.ts.map +1 -0
- package/dist/services/scalar-id/scalar-id.constants.esm.js +1 -0
- package/dist/services/scalar-id/scalar-id.service.d.ts +49 -0
- package/dist/services/scalar-id/scalar-id.service.d.ts.map +1 -0
- package/dist/services/scalar-id/scalar-id.service.esm.js +1 -0
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"modal.d.ts","sourceRoot":"","sources":["../../../src/components/modal/modal.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"modal.d.ts","sourceRoot":"","sources":["../../../src/components/modal/modal.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAS/B,OAAO,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;;AAkC3C,wBAAqC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{jsx as e}from"react/jsx-runtime";import*as o from"react";import"../../stores/alert/alert.esm.js";import{modalStore as
|
|
1
|
+
import{jsx as e}from"react/jsx-runtime";import*as o from"react";import"../../stores/alert/alert.esm.js";import{modalStore as r}from"../../stores/modal/modal.esm.js";import m from"@mui/material/Modal";import"../../node_modules/mobx-react-lite/es/index.esm.js";import{ModalContainer as s}from"./styles.esm.js";import{observer as t}from"../../node_modules/mobx-react-lite/es/observer.esm.js";var a=t(({name:t,children:a,onClose:l,onOpen:i})=>{const d=o.useId(),n=r.getIsOpen(t);return o.useEffect(()=>{n?i?.({name:t}):l?.({name:t})},[n]),e(m,{open:n,onClose:()=>{r.close(t)},"aria-labelledby":`modal-${d}-title`,"aria-describedby":`modal-${d}-description`,children:e(s,{children:a})})});export{a as default};
|
|
@@ -1,3 +1,2 @@
|
|
|
1
|
-
import
|
|
2
|
-
export declare const modalStyle: SxProps;
|
|
1
|
+
export declare const ModalContainer: import("@emotion/styled").StyledComponent<import("@mui/system").BoxOwnProps<import("@mui/material").Theme> & Omit<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLDivElement>, HTMLDivElement>, keyof import("@mui/system").BoxOwnProps<import("@mui/material").Theme>> & import("@mui/system").MUIStyledCommonProps<import("@mui/material").Theme>, {}, {}>;
|
|
3
2
|
//# sourceMappingURL=styles.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"styles.d.ts","sourceRoot":"","sources":["../../../src/components/modal/styles.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"styles.d.ts","sourceRoot":"","sources":["../../../src/components/modal/styles.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,cAAc,mXA6BzB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
const o={position:"absolute",top:"50%",left:"50%",transform:"translate(-50%, -50%)",
|
|
1
|
+
import{styled as t,Box as o}from"@mui/material";const i=t(o)(({theme:t})=>{const{spacing:o,breakpoints:i,palette:a}=t;return{position:"absolute",top:"50%",left:"50%",transform:"translate(-50%, -50%)",backgroundColor:a.white.main,borderRadius:o(2),padding:o(2),maxHeight:"90vh",overflow:"auto",[i.up("sm")]:{minWidth:400},[i.down("sm")]:{minWidth:"80vw"}}});export{i as ModalContainer};
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
export interface CustomModalProps {
|
|
2
2
|
name: string;
|
|
3
3
|
onClose?: (props: {
|
|
4
|
-
name:
|
|
4
|
+
name: string;
|
|
5
5
|
}) => void;
|
|
6
6
|
onOpen?: (props: {
|
|
7
|
-
name:
|
|
7
|
+
name: string;
|
|
8
8
|
}) => void;
|
|
9
9
|
}
|
|
10
10
|
//# sourceMappingURL=types.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/components/modal/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IAEb,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE;QAAE,IAAI,EAAE,
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/components/modal/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IAEb,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,CAAC;IAC5C,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,CAAC;CAC5C"}
|
package/dist/index.cjs
CHANGED
|
@@ -20,7 +20,6 @@ var Checkbox = require('@mui/material/Checkbox');
|
|
|
20
20
|
var FormControlLabel = require('@mui/material/FormControlLabel');
|
|
21
21
|
var styles$2 = require('@mui/material/styles');
|
|
22
22
|
var DateField$1 = require('@mui/x-date-pickers/DateField');
|
|
23
|
-
var Box = require('@mui/material/Box');
|
|
24
23
|
var Modal = require('@mui/material/Modal');
|
|
25
24
|
var lab = require('@mui/lab');
|
|
26
25
|
var xDatePickers = require('@mui/x-date-pickers');
|
|
@@ -5662,6 +5661,66 @@ class ApiService {
|
|
|
5662
5661
|
}
|
|
5663
5662
|
}
|
|
5664
5663
|
|
|
5664
|
+
const defaultId = null;
|
|
5665
|
+
|
|
5666
|
+
/**
|
|
5667
|
+
* ScalarIdService<Id>
|
|
5668
|
+
*
|
|
5669
|
+
* Небольшой сервис для хранения одного "текущего" идентификатора.
|
|
5670
|
+
* Подходит для:
|
|
5671
|
+
* - последнего обновлённого элемента (updatedId);
|
|
5672
|
+
* - последнего удалённого элемента (deletedId);
|
|
5673
|
+
* - текущего выделенного элемента (selectedId), если нужен один.
|
|
5674
|
+
*
|
|
5675
|
+
* Возможности:
|
|
5676
|
+
* - value: текущее значение или null;
|
|
5677
|
+
* - isSet: флаг, установлен ли id;
|
|
5678
|
+
* - set / reset: явное управление значением.
|
|
5679
|
+
*
|
|
5680
|
+
* Пример:
|
|
5681
|
+
* const updated = new ScalarIdService<string>();
|
|
5682
|
+
* updated.set('42');
|
|
5683
|
+
* updated.isSet; // true
|
|
5684
|
+
* updated.value; // '42'
|
|
5685
|
+
* updated.reset();
|
|
5686
|
+
*/
|
|
5687
|
+
class ScalarIdService {
|
|
5688
|
+
/**
|
|
5689
|
+
* Внутреннее хранилище идентификатора.
|
|
5690
|
+
* null означает "ничего не выбрано / не установлено".
|
|
5691
|
+
*/
|
|
5692
|
+
_value = defaultId;
|
|
5693
|
+
constructor() {
|
|
5694
|
+
makeAutoObservable(this, {}, { autoBind: true });
|
|
5695
|
+
}
|
|
5696
|
+
/**
|
|
5697
|
+
* Текущее значение id или null, если значение не установлено.
|
|
5698
|
+
*/
|
|
5699
|
+
get value() {
|
|
5700
|
+
return this._value;
|
|
5701
|
+
}
|
|
5702
|
+
/**
|
|
5703
|
+
* Установить новое значение id.
|
|
5704
|
+
*
|
|
5705
|
+
* @param value Новое значение или null для сброса.
|
|
5706
|
+
*/
|
|
5707
|
+
set(value) {
|
|
5708
|
+
this._value = value;
|
|
5709
|
+
}
|
|
5710
|
+
/**
|
|
5711
|
+
* Сбросить значение id в null.
|
|
5712
|
+
*/
|
|
5713
|
+
reset() {
|
|
5714
|
+
this._value = defaultId;
|
|
5715
|
+
}
|
|
5716
|
+
/**
|
|
5717
|
+
* Признак, что значение установлено (отлично от null).
|
|
5718
|
+
*/
|
|
5719
|
+
get isSet() {
|
|
5720
|
+
return this._value !== defaultId;
|
|
5721
|
+
}
|
|
5722
|
+
}
|
|
5723
|
+
|
|
5665
5724
|
/**
|
|
5666
5725
|
* SetService<T>
|
|
5667
5726
|
*
|
|
@@ -5790,18 +5849,23 @@ class CollectionService {
|
|
|
5790
5849
|
props;
|
|
5791
5850
|
_items = observable.map();
|
|
5792
5851
|
selectedIds = new SetService();
|
|
5852
|
+
_idSlots = new Map();
|
|
5793
5853
|
constructor(props) {
|
|
5794
5854
|
this.props = props;
|
|
5855
|
+
const { slots = [] } = props;
|
|
5795
5856
|
makeAutoObservable(this);
|
|
5857
|
+
slots.forEach((slotName) => {
|
|
5858
|
+
this._idSlots.set(slotName, new ScalarIdService());
|
|
5859
|
+
});
|
|
5796
5860
|
}
|
|
5797
5861
|
/**
|
|
5798
|
-
*
|
|
5862
|
+
* Возвращает id по самому элементу коллекции.
|
|
5799
5863
|
*/
|
|
5800
5864
|
getIdByItem(item) {
|
|
5801
5865
|
return this.props.getId(item);
|
|
5802
5866
|
}
|
|
5803
5867
|
/**
|
|
5804
|
-
* Возвращает observable
|
|
5868
|
+
* Возвращает observable‑коллекцию элементов в виде Map.
|
|
5805
5869
|
*/
|
|
5806
5870
|
get items() {
|
|
5807
5871
|
return this._items;
|
|
@@ -5810,90 +5874,35 @@ class CollectionService {
|
|
|
5810
5874
|
* Возвращает все элементы коллекции в виде обычного массива.
|
|
5811
5875
|
*/
|
|
5812
5876
|
get list() {
|
|
5813
|
-
return Array.from(this.items.values());
|
|
5877
|
+
return Object.freeze(Array.from(this.items.values()));
|
|
5814
5878
|
}
|
|
5815
|
-
/**
|
|
5816
|
-
* Возвращает все элементы, у которых значение указанного поля
|
|
5817
|
-
* строго равно переданному значению.
|
|
5818
|
-
*
|
|
5819
|
-
* @typeParam K Ключ поля элемента.
|
|
5820
|
-
* @param key Поле, по которому выполняется поиск.
|
|
5821
|
-
* @param value Значение, с которым сравнивается поле.
|
|
5822
|
-
* @returns Массив всех найденных элементов. Если совпадений нет, вернётся пустой массив.
|
|
5823
|
-
*/
|
|
5824
5879
|
findAllBy(key, value) {
|
|
5825
5880
|
return this.list.filter((item) => item[key] === value);
|
|
5826
5881
|
}
|
|
5827
|
-
/**
|
|
5828
|
-
* Возвращает все элементы, у которых значение указанного поля
|
|
5829
|
-
* входит в список переданных значений.
|
|
5830
|
-
*
|
|
5831
|
-
* @typeParam K Ключ поля элемента.
|
|
5832
|
-
* @param key Поле, по которому выполняется поиск.
|
|
5833
|
-
* @param values Набор допустимых значений поля.
|
|
5834
|
-
* @returns Массив всех найденных элементов. Если совпадений нет, вернётся пустой массив.
|
|
5835
|
-
*/
|
|
5836
5882
|
findAllIn(key, values) {
|
|
5837
5883
|
const valuesSet = new Set(values);
|
|
5838
5884
|
return this.list.filter((item) => valuesSet.has(item[key]));
|
|
5839
5885
|
}
|
|
5840
|
-
/**
|
|
5841
|
-
* Возвращает все элементы, которые одновременно соответствуют
|
|
5842
|
-
* всем переданным критериям.
|
|
5843
|
-
*
|
|
5844
|
-
* Метод выполняет точное сравнение по каждому полю.
|
|
5845
|
-
* Если передан пустой объект критериев, будут возвращены все элементы коллекции.
|
|
5846
|
-
*
|
|
5847
|
-
* @param criteria Объект с набором полей и значений для поиска.
|
|
5848
|
-
* @returns Массив всех элементов, удовлетворяющих всем условиям сразу.
|
|
5849
|
-
*/
|
|
5850
5886
|
findAllWhere(criteria) {
|
|
5851
5887
|
const entries = Object.entries(criteria);
|
|
5852
5888
|
return this.list.filter((item) => entries.every(([key, value]) => item[key] === value));
|
|
5853
5889
|
}
|
|
5854
|
-
/**
|
|
5855
|
-
* Возвращает элемент по его идентификатору.
|
|
5856
|
-
*
|
|
5857
|
-
* @param id Идентификатор элемента.
|
|
5858
|
-
* @returns Найденный элемент или undefined, если элемента с таким id нет.
|
|
5859
|
-
*/
|
|
5860
5890
|
getById(id) {
|
|
5861
|
-
|
|
5862
|
-
return item;
|
|
5891
|
+
return this.items.get(id) ?? null;
|
|
5863
5892
|
}
|
|
5864
|
-
/**
|
|
5865
|
-
* Добавляет элемент в коллекцию.
|
|
5866
|
-
*
|
|
5867
|
-
* @param item Элемент для добавления или замены.
|
|
5868
|
-
*/
|
|
5869
5893
|
add(item) {
|
|
5870
5894
|
const key = this.props.getId(item);
|
|
5871
5895
|
const value = this.props.normalizeItem(item);
|
|
5872
5896
|
this._items.set(key, value);
|
|
5873
5897
|
}
|
|
5874
|
-
/**
|
|
5875
|
-
* Добавляет в коллекцию несколько элементов подряд.
|
|
5876
|
-
*
|
|
5877
|
-
* @param items Массив элементов для добавления.
|
|
5878
|
-
*/
|
|
5879
5898
|
addMany(items) {
|
|
5880
5899
|
items.forEach((item) => {
|
|
5881
5900
|
this.add(item);
|
|
5882
5901
|
});
|
|
5883
5902
|
}
|
|
5884
|
-
/**
|
|
5885
|
-
* Удаляет элемент из коллекции по id.
|
|
5886
|
-
*
|
|
5887
|
-
* @param id Идентификатор удаляемого элемента.
|
|
5888
|
-
*/
|
|
5889
5903
|
delete(id) {
|
|
5890
5904
|
this._items.delete(id);
|
|
5891
5905
|
}
|
|
5892
|
-
/**
|
|
5893
|
-
* Удаляет из коллекции несколько элементов по списку id.
|
|
5894
|
-
*
|
|
5895
|
-
* @param ids Массив идентификаторов для удаления.
|
|
5896
|
-
*/
|
|
5897
5906
|
deleteMany(ids) {
|
|
5898
5907
|
ids.forEach((id) => {
|
|
5899
5908
|
this.delete(id);
|
|
@@ -5904,41 +5913,72 @@ class CollectionService {
|
|
|
5904
5913
|
*/
|
|
5905
5914
|
clear() {
|
|
5906
5915
|
this._items.clear();
|
|
5907
|
-
this.
|
|
5908
|
-
this.deletedId = null;
|
|
5916
|
+
this.resetSlots();
|
|
5909
5917
|
this.selectedIds.clear();
|
|
5910
5918
|
}
|
|
5911
|
-
|
|
5912
|
-
|
|
5913
|
-
|
|
5914
|
-
|
|
5915
|
-
|
|
5916
|
-
|
|
5919
|
+
/**
|
|
5920
|
+
* Запрос на получение отделельного экзепляра ScalarIdService
|
|
5921
|
+
*
|
|
5922
|
+
* @param name Имя слота.
|
|
5923
|
+
* @returns ScalarIdService по имени слота, если он был сконфигурирован.
|
|
5924
|
+
*/
|
|
5925
|
+
getIdSlot(name) {
|
|
5926
|
+
return this._idSlots.get(name) ?? null;
|
|
5917
5927
|
}
|
|
5918
|
-
|
|
5919
|
-
|
|
5920
|
-
|
|
5921
|
-
|
|
5928
|
+
/**
|
|
5929
|
+
* Возвращает id, хранящемуся в указанном слоте.
|
|
5930
|
+
*
|
|
5931
|
+
* @param name Имя слота.
|
|
5932
|
+
*/
|
|
5933
|
+
getIdBySlot(name) {
|
|
5934
|
+
const slot = this.getIdSlot(name);
|
|
5935
|
+
if (slot) {
|
|
5936
|
+
return slot.value;
|
|
5922
5937
|
}
|
|
5938
|
+
return null;
|
|
5923
5939
|
}
|
|
5924
|
-
|
|
5925
|
-
|
|
5926
|
-
|
|
5927
|
-
|
|
5928
|
-
|
|
5929
|
-
|
|
5940
|
+
/**
|
|
5941
|
+
* Возвращает элемент коллекции по id, хранящемуся в указанном слоте.
|
|
5942
|
+
*
|
|
5943
|
+
* @param name Имя слота.
|
|
5944
|
+
*/
|
|
5945
|
+
getItemBySlot(name) {
|
|
5946
|
+
const slot = this.getIdSlot(name);
|
|
5947
|
+
if (slot && slot.isSet && slot.value !== null) {
|
|
5948
|
+
return this.getById(slot.value);
|
|
5949
|
+
}
|
|
5950
|
+
return null;
|
|
5930
5951
|
}
|
|
5931
|
-
|
|
5932
|
-
|
|
5952
|
+
/**
|
|
5953
|
+
* Устанавливает id в указанный слот.
|
|
5954
|
+
*
|
|
5955
|
+
* @param name Имя слота.
|
|
5956
|
+
* @param value Новое значения id в слоте.
|
|
5957
|
+
*/
|
|
5958
|
+
setIdSlot(name, value) {
|
|
5959
|
+
const slot = this.getIdSlot(name);
|
|
5960
|
+
if (slot) {
|
|
5961
|
+
slot.set(value);
|
|
5962
|
+
}
|
|
5933
5963
|
}
|
|
5934
|
-
|
|
5935
|
-
|
|
5936
|
-
|
|
5937
|
-
|
|
5964
|
+
/**
|
|
5965
|
+
* Сбрасывает id в указанном слоте.
|
|
5966
|
+
*
|
|
5967
|
+
* @param name Имя слота.
|
|
5968
|
+
*/
|
|
5969
|
+
resetIdSlot(name) {
|
|
5970
|
+
const slot = this.getIdSlot(name);
|
|
5971
|
+
if (slot) {
|
|
5972
|
+
slot.reset();
|
|
5938
5973
|
}
|
|
5939
5974
|
}
|
|
5940
|
-
|
|
5941
|
-
|
|
5975
|
+
/**
|
|
5976
|
+
* Сбрасывает все слоты.
|
|
5977
|
+
*/
|
|
5978
|
+
resetSlots() {
|
|
5979
|
+
this._idSlots.forEach((slot) => {
|
|
5980
|
+
slot.reset();
|
|
5981
|
+
});
|
|
5942
5982
|
}
|
|
5943
5983
|
}
|
|
5944
5984
|
|
|
@@ -9433,6 +9473,60 @@ class MapService {
|
|
|
9433
9473
|
}
|
|
9434
9474
|
}
|
|
9435
9475
|
}
|
|
9476
|
+
/**
|
|
9477
|
+
* Вычисляет два узла, расположенных перпендикулярно отрезку
|
|
9478
|
+
* в его конечной точке на заданном расстоянии.
|
|
9479
|
+
*
|
|
9480
|
+
* Алгоритм:
|
|
9481
|
+
* 1. Вычисляет обратный азимут (направление от конечной точки к начальной).
|
|
9482
|
+
* 2. Поворачивает его на ±90° — получает два перпендикулярных направления.
|
|
9483
|
+
* 3. Смещает конечную точку на `offset` метров в каждую сторону,
|
|
9484
|
+
* используя плоскую аппроксимацию (приемлемо при offset ≤ 2000 м).
|
|
9485
|
+
*
|
|
9486
|
+
* Принимает и возвращает координаты в формате {@link FrontendLatLng}
|
|
9487
|
+
* (`{ lat, lng }`) для прямой совместимости с Leaflet.
|
|
9488
|
+
*
|
|
9489
|
+
* Типичный сценарий использования: построение нормалей к маршруту,
|
|
9490
|
+
* поперечных контрольных точек, перпендикулярных смещений на линии.
|
|
9491
|
+
*
|
|
9492
|
+
* @param params - Параметры расчёта.
|
|
9493
|
+
* @param params.from - Начальная точка отрезка.
|
|
9494
|
+
* @param params.to - Конечная точка отрезка. Перпендикуляр строится именно здесь.
|
|
9495
|
+
* @param params.offset - Расстояние смещения в метрах (по умолчанию 100 м).
|
|
9496
|
+
* @returns Два узла в формате {@link FrontendLatLng}, сдвинутых перпендикулярно
|
|
9497
|
+
* отрезку влево и вправо от конечной точки.
|
|
9498
|
+
*
|
|
9499
|
+
* @example
|
|
9500
|
+
* const { left, right } = mapService.getPerpendicularPoints({
|
|
9501
|
+
* from: { lat: 55.75, lng: 37.61 },
|
|
9502
|
+
* to: { lat: 55.76, lng: 37.62 },
|
|
9503
|
+
* });
|
|
9504
|
+
*/
|
|
9505
|
+
getPerpendicularPoints({ from, to, offset = 100, }) {
|
|
9506
|
+
const φ1 = from.lat * this.DEG_TO_RAD;
|
|
9507
|
+
const λ1 = from.lng * this.DEG_TO_RAD;
|
|
9508
|
+
const φ2 = to.lat * this.DEG_TO_RAD;
|
|
9509
|
+
const λ2 = to.lng * this.DEG_TO_RAD;
|
|
9510
|
+
const Δλ = λ1 - λ2;
|
|
9511
|
+
const y = Math.sin(Δλ) * Math.cos(φ1);
|
|
9512
|
+
const x = Math.cos(φ2) * Math.sin(φ1) - Math.sin(φ2) * Math.cos(φ1) * Math.cos(Δλ);
|
|
9513
|
+
const reverseBearing = this.normalizeBearing(Math.atan2(y, x) * this.RAD_TO_DEG);
|
|
9514
|
+
const leftBearing = this.normalizeBearing(reverseBearing + 90);
|
|
9515
|
+
const rightBearing = this.normalizeBearing(reverseBearing + 270);
|
|
9516
|
+
const metersPerDegLat = (this.EARTH_RADIUS_M * Math.PI) / 180;
|
|
9517
|
+
const metersPerDegLon = metersPerDegLat * Math.cos(φ2);
|
|
9518
|
+
const shift = (bearing) => {
|
|
9519
|
+
const bearingRad = bearing * this.DEG_TO_RAD;
|
|
9520
|
+
return {
|
|
9521
|
+
lat: to.lat + (offset * Math.cos(bearingRad)) / metersPerDegLat,
|
|
9522
|
+
lng: to.lng + (offset * Math.sin(bearingRad)) / metersPerDegLon,
|
|
9523
|
+
};
|
|
9524
|
+
};
|
|
9525
|
+
return {
|
|
9526
|
+
left: shift(leftBearing),
|
|
9527
|
+
right: shift(rightBearing),
|
|
9528
|
+
};
|
|
9529
|
+
}
|
|
9436
9530
|
}
|
|
9437
9531
|
/**
|
|
9438
9532
|
* Сервис для работы с географическими координатами и базовыми
|
|
@@ -44781,19 +44875,26 @@ const Loader = (props) => {
|
|
|
44781
44875
|
return jsxRuntime.jsx(material.CircularProgress, { ...props });
|
|
44782
44876
|
};
|
|
44783
44877
|
|
|
44784
|
-
const
|
|
44785
|
-
|
|
44786
|
-
|
|
44787
|
-
|
|
44788
|
-
|
|
44789
|
-
|
|
44790
|
-
|
|
44791
|
-
|
|
44792
|
-
|
|
44793
|
-
|
|
44794
|
-
|
|
44795
|
-
|
|
44796
|
-
|
|
44878
|
+
const ModalContainer = material.styled(material.Box)(({ theme }) => {
|
|
44879
|
+
const { spacing, breakpoints, palette } = theme;
|
|
44880
|
+
return {
|
|
44881
|
+
position: 'absolute',
|
|
44882
|
+
top: '50%',
|
|
44883
|
+
left: '50%',
|
|
44884
|
+
transform: 'translate(-50%, -50%)',
|
|
44885
|
+
backgroundColor: palette.white.main,
|
|
44886
|
+
borderRadius: spacing(2),
|
|
44887
|
+
padding: spacing(2),
|
|
44888
|
+
maxHeight: '90vh',
|
|
44889
|
+
overflow: 'auto',
|
|
44890
|
+
[breakpoints.up('sm')]: {
|
|
44891
|
+
minWidth: 400,
|
|
44892
|
+
},
|
|
44893
|
+
[breakpoints.down('sm')]: {
|
|
44894
|
+
minWidth: '80vw',
|
|
44895
|
+
},
|
|
44896
|
+
};
|
|
44897
|
+
});
|
|
44797
44898
|
|
|
44798
44899
|
const CustomModal = ({ name, children, onClose, onOpen, }) => {
|
|
44799
44900
|
const modalId = React__namespace.useId();
|
|
@@ -44808,17 +44909,7 @@ const CustomModal = ({ name, children, onClose, onOpen, }) => {
|
|
|
44808
44909
|
}, [isOpen]);
|
|
44809
44910
|
return (jsxRuntime.jsx(Modal, { open: isOpen, onClose: () => {
|
|
44810
44911
|
modalStore.close(name);
|
|
44811
|
-
}, "aria-labelledby": `modal-${modalId}-title`, "aria-describedby": `modal-${modalId}-description`, children: jsxRuntime.jsx(
|
|
44812
|
-
return {
|
|
44813
|
-
...modalStyle,
|
|
44814
|
-
[breakpoints.up('sm')]: {
|
|
44815
|
-
minWidth: 400,
|
|
44816
|
-
},
|
|
44817
|
-
[breakpoints.down('sm')]: {
|
|
44818
|
-
minWidth: '80vw',
|
|
44819
|
-
},
|
|
44820
|
-
};
|
|
44821
|
-
}, children: children }) }));
|
|
44912
|
+
}, "aria-labelledby": `modal-${modalId}-title`, "aria-describedby": `modal-${modalId}-description`, children: jsxRuntime.jsx(ModalContainer, { children: children }) }));
|
|
44822
44913
|
};
|
|
44823
44914
|
var modal = observer(CustomModal);
|
|
44824
44915
|
|
|
@@ -48309,8 +48400,10 @@ exports.LeafletLayer = LeafletLayer;
|
|
|
48309
48400
|
exports.List = CustomList;
|
|
48310
48401
|
exports.Loader = Loader;
|
|
48311
48402
|
exports.Modal = modal;
|
|
48403
|
+
exports.ModalContainer = ModalContainer;
|
|
48312
48404
|
exports.NoData = NoData;
|
|
48313
48405
|
exports.Paragraph = Paragraph;
|
|
48406
|
+
exports.ScalarIdService = ScalarIdService;
|
|
48314
48407
|
exports.Select = FormSelect;
|
|
48315
48408
|
exports.SetService = SetService;
|
|
48316
48409
|
exports.Tabs = Tabs;
|
|
@@ -48378,7 +48471,6 @@ exports.localizationService = localizationService;
|
|
|
48378
48471
|
exports.loggerService = loggerService;
|
|
48379
48472
|
exports.mapService = mapService;
|
|
48380
48473
|
exports.modalStore = modalStore;
|
|
48381
|
-
exports.modalStyle = modalStyle;
|
|
48382
48474
|
exports.numberRequiredSchema = numberRequiredSchema;
|
|
48383
48475
|
exports.numberSchema = numberSchema;
|
|
48384
48476
|
exports.parseTrafficSignCSVFile = parseTrafficSignCSVFile;
|
package/dist/index.esm.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export{alertStore}from"./stores/alert/alert.esm.js";export{modalStore}from"./stores/modal/modal.esm.js";export{Operations}from"./lib/types.esm.js";export{useDeviceType}from"./lib/hooks/useDeviceType.esm.js";export{useGetUser,useLazyGetUser}from"./lib/hooks/useGetUser.esm.js";export{useShowErrorSnackbar}from"./lib/hooks/useShowErrorSnackbar.esm.js";export{useShowSnackbar}from"./lib/hooks/useShowSnackbar.esm.js";export{useSignIn}from"./lib/hooks/useSignIn.esm.js";export{useSignOut}from"./lib/hooks/useSignOut.esm.js";export{copyInformation,encodeString,getEntityNames,getImageSrc,getNewId,getUniqueKey,getUrlencodedBody,showSnackbar}from"./lib/utils.esm.js";export{_testApiKeys}from"./configs/global/constants.esm.js";export{GlobalConfig}from"./configs/global/global.esm.js";export{API_METHODS}from"./constants/api.esm.js";export{PanelsNames}from"./constants/map.esm.js";export{arraySchema,dateRequiredSchema,dateSchema,getStringRequiredSchema,getStringSchema,numberRequiredSchema,numberSchema}from"./constants/schema.esm.js";export{default as Accordion}from"./components/accordion/accordion.esm.js";export{default as AlertDialog}from"./components/alert-dialog/alert-dialog.esm.js";export{default as Button}from"./components/buttons/button/button.esm.js";export{default as DeleteButton}from"./components/buttons/delete/delete.esm.js";export{default as IconButton}from"./components/buttons/icon/icon.esm.js";export{default as UploadButton}from"./components/buttons/upload/upload.esm.js";export{default as Card}from"./components/card/card.esm.js";export{default as Checkbox}from"./components/checkbox/checkbox.esm.js";export{default as CopyText}from"./components/copy-text/copy-text.esm.js";export{default as DateField}from"./components/date-field/date-field.esm.js";export{default as DragList}from"./components/drag-list/drag-list.esm.js";export{default as DraggableContainer}from"./components/draggable-container/draggable-container.esm.js";export{default as ErrorBoundary}from"./components/error-boundary/error-boundary.esm.js";export{default as FormErrorMessage}from"./components/form/error-message/error-message.esm.js";export{default as Form}from"./components/form/form.esm.js";export{useFormContext}from"./components/form/hooks/useFormContext.esm.js";export{default as Input}from"./components/input/input.esm.js";export{SourceLayers,TangramSourceNames}from"./components/layers/leaflet/lib/types.esm.js";export{getAllLayers,getAllPointLayers,getAllPolygonLayers,getAllPolylineLayers,getBackendDate,getLayerModalsNames,getLayerName,getValidLayer}from"./components/layers/leaflet/lib/utils.esm.js";export{sourceUrl,tile_size}from"./components/layers/leaflet/config/constants.esm.js";export{getBuildingLayers}from"./components/layers/leaflet/layers/building/utils.esm.js";export{getBuiltupAreaLayers}from"./components/layers/leaflet/layers/builtup-area/utils.esm.js";export{getAdminAreaLayers}from"./components/layers/leaflet/layers/admin-area/utils.esm.js";export{getCameraLayers}from"./components/layers/leaflet/layers/camera/lib/utils.esm.js";export{cameraConfig}from"./components/layers/leaflet/layers/camera/config/constants.esm.js";export{getCityPOILayers}from"./components/layers/leaflet/layers/city-POI/utils.esm.js";export{getConditionLayers}from"./components/layers/leaflet/layers/condition/utils.esm.js";export{getFacilityAreaLayers}from"./components/layers/leaflet/layers/facility-area/utils.esm.js";export{landuseAreaFeatureTypes,landuseAreaLayerGeometryData,landuseAreaLayerLabelData}from"./components/layers/leaflet/layers/landuse-area/constants.esm.js";export{getLanduseAreaGeometryLayer,getLanduseAreaLabelLayer,getLanduseAreaLayers}from"./components/layers/leaflet/layers/landuse-area/utils.esm.js";export{getLaneMarkingArrowLayers}from"./components/layers/leaflet/layers/lane-marking-arrow/utils.esm.js";export{getLinkLayers}from"./components/layers/leaflet/layers/link/utils.esm.js";export{getNatureFieldLayers}from"./components/layers/leaflet/layers/nature-field/utils.esm.js";export{getNatureForestGeometryLayer,getNatureForestLayers}from"./components/layers/leaflet/layers/nature-forest/utils.esm.js";export{getOceanAreaLayers}from"./components/layers/leaflet/layers/ocean-area/utils.esm.js";export{getOneWayLayers}from"./components/layers/leaflet/layers/one-way/utils.esm.js";export{getPillarLayers}from"./components/layers/leaflet/layers/pillar/lib/utils.esm.js";export{pillarConfig}from"./components/layers/leaflet/layers/pillar/config/constants.esm.js";export{catIds,text_source}from"./components/layers/leaflet/layers/POI/constants.esm.js";export{getDefaultPOI,getPOILayers,getPOITypeLayer}from"./components/layers/leaflet/layers/POI/utils.esm.js";export{getPointAddressLayers}from"./components/layers/leaflet/layers/point-address/utils.esm.js";export{getRailroadLayers}from"./components/layers/leaflet/layers/railroad/utils.esm.js";export{getTrafficSignImgSrc,getTrafficSignLayers,parseTrafficSignCSVFile}from"./components/layers/leaflet/layers/traffic-sign/lib/utils.esm.js";export{allTrafficSigns,trafficSignConfig,trafficSigns,trafficSignsDop}from"./components/layers/leaflet/layers/traffic-sign/config/constants.esm.js";export{getTrafficSignalLayers}from"./components/layers/leaflet/layers/traffic-signal/lib/utils.esm.js";export{trafficSignalConfig}from"./components/layers/leaflet/layers/traffic-signal/config/constants.esm.js";export{getWaterAreaLayers}from"./components/layers/leaflet/layers/water-area/utils.esm.js";export{getWaterLinkLayers}from"./components/layers/leaflet/layers/water-link/utils.esm.js";export{default as LeafletLayer}from"./components/layers/leaflet/leaflet.esm.js";export{TangramLayer}from"./components/layers/leaflet/services/tangram-layer.esm.js";export{default as List}from"./components/list/list.esm.js";export{default as Loader}from"./components/loader/loader.esm.js";export{default as Modal}from"./components/modal/modal.esm.js";export{
|
|
1
|
+
export{alertStore}from"./stores/alert/alert.esm.js";export{modalStore}from"./stores/modal/modal.esm.js";export{Operations}from"./lib/types.esm.js";export{useDeviceType}from"./lib/hooks/useDeviceType.esm.js";export{useGetUser,useLazyGetUser}from"./lib/hooks/useGetUser.esm.js";export{useShowErrorSnackbar}from"./lib/hooks/useShowErrorSnackbar.esm.js";export{useShowSnackbar}from"./lib/hooks/useShowSnackbar.esm.js";export{useSignIn}from"./lib/hooks/useSignIn.esm.js";export{useSignOut}from"./lib/hooks/useSignOut.esm.js";export{copyInformation,encodeString,getEntityNames,getImageSrc,getNewId,getUniqueKey,getUrlencodedBody,showSnackbar}from"./lib/utils.esm.js";export{_testApiKeys}from"./configs/global/constants.esm.js";export{GlobalConfig}from"./configs/global/global.esm.js";export{API_METHODS}from"./constants/api.esm.js";export{PanelsNames}from"./constants/map.esm.js";export{arraySchema,dateRequiredSchema,dateSchema,getStringRequiredSchema,getStringSchema,numberRequiredSchema,numberSchema}from"./constants/schema.esm.js";export{default as Accordion}from"./components/accordion/accordion.esm.js";export{default as AlertDialog}from"./components/alert-dialog/alert-dialog.esm.js";export{default as Button}from"./components/buttons/button/button.esm.js";export{default as DeleteButton}from"./components/buttons/delete/delete.esm.js";export{default as IconButton}from"./components/buttons/icon/icon.esm.js";export{default as UploadButton}from"./components/buttons/upload/upload.esm.js";export{default as Card}from"./components/card/card.esm.js";export{default as Checkbox}from"./components/checkbox/checkbox.esm.js";export{default as CopyText}from"./components/copy-text/copy-text.esm.js";export{default as DateField}from"./components/date-field/date-field.esm.js";export{default as DragList}from"./components/drag-list/drag-list.esm.js";export{default as DraggableContainer}from"./components/draggable-container/draggable-container.esm.js";export{default as ErrorBoundary}from"./components/error-boundary/error-boundary.esm.js";export{default as FormErrorMessage}from"./components/form/error-message/error-message.esm.js";export{default as Form}from"./components/form/form.esm.js";export{useFormContext}from"./components/form/hooks/useFormContext.esm.js";export{default as Input}from"./components/input/input.esm.js";export{SourceLayers,TangramSourceNames}from"./components/layers/leaflet/lib/types.esm.js";export{getAllLayers,getAllPointLayers,getAllPolygonLayers,getAllPolylineLayers,getBackendDate,getLayerModalsNames,getLayerName,getValidLayer}from"./components/layers/leaflet/lib/utils.esm.js";export{sourceUrl,tile_size}from"./components/layers/leaflet/config/constants.esm.js";export{getBuildingLayers}from"./components/layers/leaflet/layers/building/utils.esm.js";export{getBuiltupAreaLayers}from"./components/layers/leaflet/layers/builtup-area/utils.esm.js";export{getAdminAreaLayers}from"./components/layers/leaflet/layers/admin-area/utils.esm.js";export{getCameraLayers}from"./components/layers/leaflet/layers/camera/lib/utils.esm.js";export{cameraConfig}from"./components/layers/leaflet/layers/camera/config/constants.esm.js";export{getCityPOILayers}from"./components/layers/leaflet/layers/city-POI/utils.esm.js";export{getConditionLayers}from"./components/layers/leaflet/layers/condition/utils.esm.js";export{getFacilityAreaLayers}from"./components/layers/leaflet/layers/facility-area/utils.esm.js";export{landuseAreaFeatureTypes,landuseAreaLayerGeometryData,landuseAreaLayerLabelData}from"./components/layers/leaflet/layers/landuse-area/constants.esm.js";export{getLanduseAreaGeometryLayer,getLanduseAreaLabelLayer,getLanduseAreaLayers}from"./components/layers/leaflet/layers/landuse-area/utils.esm.js";export{getLaneMarkingArrowLayers}from"./components/layers/leaflet/layers/lane-marking-arrow/utils.esm.js";export{getLinkLayers}from"./components/layers/leaflet/layers/link/utils.esm.js";export{getNatureFieldLayers}from"./components/layers/leaflet/layers/nature-field/utils.esm.js";export{getNatureForestGeometryLayer,getNatureForestLayers}from"./components/layers/leaflet/layers/nature-forest/utils.esm.js";export{getOceanAreaLayers}from"./components/layers/leaflet/layers/ocean-area/utils.esm.js";export{getOneWayLayers}from"./components/layers/leaflet/layers/one-way/utils.esm.js";export{getPillarLayers}from"./components/layers/leaflet/layers/pillar/lib/utils.esm.js";export{pillarConfig}from"./components/layers/leaflet/layers/pillar/config/constants.esm.js";export{catIds,text_source}from"./components/layers/leaflet/layers/POI/constants.esm.js";export{getDefaultPOI,getPOILayers,getPOITypeLayer}from"./components/layers/leaflet/layers/POI/utils.esm.js";export{getPointAddressLayers}from"./components/layers/leaflet/layers/point-address/utils.esm.js";export{getRailroadLayers}from"./components/layers/leaflet/layers/railroad/utils.esm.js";export{getTrafficSignImgSrc,getTrafficSignLayers,parseTrafficSignCSVFile}from"./components/layers/leaflet/layers/traffic-sign/lib/utils.esm.js";export{allTrafficSigns,trafficSignConfig,trafficSigns,trafficSignsDop}from"./components/layers/leaflet/layers/traffic-sign/config/constants.esm.js";export{getTrafficSignalLayers}from"./components/layers/leaflet/layers/traffic-signal/lib/utils.esm.js";export{trafficSignalConfig}from"./components/layers/leaflet/layers/traffic-signal/config/constants.esm.js";export{getWaterAreaLayers}from"./components/layers/leaflet/layers/water-area/utils.esm.js";export{getWaterLinkLayers}from"./components/layers/leaflet/layers/water-link/utils.esm.js";export{default as LeafletLayer}from"./components/layers/leaflet/leaflet.esm.js";export{TangramLayer}from"./components/layers/leaflet/services/tangram-layer.esm.js";export{default as List}from"./components/list/list.esm.js";export{default as Loader}from"./components/loader/loader.esm.js";export{default as Modal}from"./components/modal/modal.esm.js";export{ModalContainer}from"./components/modal/styles.esm.js";export{default as NoData}from"./components/no-data/no-data.esm.js";export{default as Paragraph}from"./components/paragraph/paragraph.esm.js";export{default as Select}from"./components/select/select.esm.js";export{default as Tabs}from"./components/tabs/tabs.esm.js";export{default as TextField}from"./components/text-field/text-field.esm.js";export{CSVUploader}from"./components/uploader/csv/csv.esm.js";export{default as ExcelUploader}from"./components/uploader/excel/excel.esm.js";export{default as AuthPage}from"./pages/auth/auth.esm.js";export{default as DartcomAuthProvider}from"./providers/auth/auth.esm.js";export{default as DartcomInitializeProvider}from"./providers/initialize/initialize.esm.js";export{default as DartcomLocalizationProvider}from"./providers/localization/localization.esm.js";export{default as DartcomProviders}from"./providers/providers.esm.js";export{ApiService}from"./services/api/api.service.esm.js";export{CollectionService}from"./services/collection/collection.service.esm.js";export{GeometryHistoryService}from"./services/geometry-history/geometry-history.service.esm.js";export{localStateService}from"./services/local-state/local-state.esm.js";export{localizationService}from"./services/localization/localization.esm.js";export{loggerService}from"./services/logger/logger.esm.js";export{mapService}from"./services/map/map.service.esm.js";export{queryService}from"./services/query/query.esm.js";export{ScalarIdService}from"./services/scalar-id/scalar-id.service.esm.js";export{SetService}from"./services/set/set.service.esm.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{jsx as e}from"react/jsx-runtime";import"react";import"@mui/icons-material/ArrowDownward";import{Box as s}from"@mui/material";import"../../components/alert-dialog/alert-dialog.esm.js";import"@mui/material/IconButton";import"../../components/buttons/delete/delete.esm.js";import"../../components/buttons/icon/icon.esm.js";import"@mui/icons-material/CloudUpload";import"../../components/buttons/upload/styles.esm.js";import t from"../../components/card/card.esm.js";import"../../components/checkbox/checkbox.esm.js";import"../../node_modules/react-copy-to-clipboard-ts/dist/index.esm.js";import"../../lib/types.esm.js";import"axios";import"../../services/query/query.esm.js";import"../../node_modules/notistack/notistack.esm.esm.js";import"../../_virtual/uuid.esm.js";import"../../components/copy-text/styles.esm.js";import"@mui/x-date-pickers/DateField";import"../../components/paragraph/styles.esm.js";import"../../node_modules/@dnd-kit/core/dist/core.esm.esm.js";import"../../node_modules/@dnd-kit/sortable/dist/sortable.esm.esm.js";import"../../node_modules/react-error-boundary/dist/react-error-boundary.esm.js";import"../../components/layers/leaflet/lib/types.esm.js";import"../../components/layers/leaflet/layers/condition/types.esm.js";import"../../components/layers/leaflet/layers/landuse-area/constants.esm.js";import"../../components/layers/leaflet/layers/nature-field/constants.esm.js";import"../../components/layers/leaflet/layers/nature-forest/constants.esm.js";import"../../components/layers/leaflet/layers/POI/utils.esm.js";import"../../components/layers/leaflet/layers/traffic-sign/config/constants.esm.js";import"../../components/layers/leaflet/layers/road-poly/types.esm.js";import"../../components/layers/leaflet/layers/road-poly/constants.esm.js";import"../../components/layers/leaflet/config/constants.esm.js";import"../../components/layers/leaflet/scene.yaml.esm.js";import"../../_virtual/leaflet-src.esm.js";import"../../components/modal/modal.esm.js";import"@mui/lab";import"../../node_modules/react-papaparse/dist/react-papaparse.es.esm.js";const o=({children:o})=>e(s,{sx:{display:"flex",alignItems:"center",height:"100vh",width:"100vw",overflow:"hidden"},children:e(s,{sx:{margin:"auto",maxWidth:"400px",width:"100%"},children:e(t,{children:o})})});export{o as default};
|
|
1
|
+
import{jsx as e}from"react/jsx-runtime";import"react";import"@mui/icons-material/ArrowDownward";import{Box as s}from"@mui/material";import"../../components/alert-dialog/alert-dialog.esm.js";import"@mui/material/IconButton";import"../../components/buttons/delete/delete.esm.js";import"../../components/buttons/icon/icon.esm.js";import"@mui/icons-material/CloudUpload";import"../../components/buttons/upload/styles.esm.js";import t from"../../components/card/card.esm.js";import"../../components/checkbox/checkbox.esm.js";import"../../node_modules/react-copy-to-clipboard-ts/dist/index.esm.js";import"../../lib/types.esm.js";import"axios";import"../../services/query/query.esm.js";import"../../node_modules/notistack/notistack.esm.esm.js";import"../../_virtual/uuid.esm.js";import"../../components/copy-text/styles.esm.js";import"@mui/x-date-pickers/DateField";import"../../components/paragraph/styles.esm.js";import"../../node_modules/@dnd-kit/core/dist/core.esm.esm.js";import"../../node_modules/@dnd-kit/sortable/dist/sortable.esm.esm.js";import"../../node_modules/react-error-boundary/dist/react-error-boundary.esm.js";import"../../components/layers/leaflet/lib/types.esm.js";import"../../components/layers/leaflet/layers/condition/types.esm.js";import"../../components/layers/leaflet/layers/landuse-area/constants.esm.js";import"../../components/layers/leaflet/layers/nature-field/constants.esm.js";import"../../components/layers/leaflet/layers/nature-forest/constants.esm.js";import"../../components/layers/leaflet/layers/POI/utils.esm.js";import"../../components/layers/leaflet/layers/traffic-sign/config/constants.esm.js";import"../../components/layers/leaflet/layers/road-poly/types.esm.js";import"../../components/layers/leaflet/layers/road-poly/constants.esm.js";import"../../components/layers/leaflet/config/constants.esm.js";import"../../components/layers/leaflet/scene.yaml.esm.js";import"../../_virtual/leaflet-src.esm.js";import"../../components/modal/modal.esm.js";import"../../components/modal/styles.esm.js";import"@mui/lab";import"../../node_modules/react-papaparse/dist/react-papaparse.es.esm.js";const o=({children:o})=>e(s,{sx:{display:"flex",alignItems:"center",height:"100vh",width:"100vw",overflow:"hidden"},children:e(s,{sx:{margin:"auto",maxWidth:"400px",width:"100%"},children:e(t,{children:o})})});export{o as default};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{jsx as e,jsxs as s}from"react/jsx-runtime";import*as o from"react";import{useForm as t}from"../../node_modules/react-hook-form/dist/index.esm.esm.js";import"@mui/icons-material/ArrowDownward";import{Typography as r}from"@mui/material";import"../../components/alert-dialog/alert-dialog.esm.js";import m from"../../components/buttons/button/button.esm.js";import"../../components/buttons/delete/delete.esm.js";import"../../components/buttons/icon/icon.esm.js";import"@mui/icons-material/CloudUpload";import"../../components/buttons/upload/styles.esm.js";import"../../components/checkbox/checkbox.esm.js";import"../../node_modules/react-copy-to-clipboard-ts/dist/index.esm.js";import"../../lib/types.esm.js";import"axios";import"../../services/query/query.esm.js";import{useShowSnackbar as a}from"../../lib/hooks/useShowSnackbar.esm.js";import{useSignIn as n}from"../../lib/hooks/useSignIn.esm.js";import"../../_virtual/uuid.esm.js";import"../../node_modules/notistack/notistack.esm.esm.js";import"../../components/copy-text/styles.esm.js";import"@mui/x-date-pickers/DateField";import"../../components/paragraph/styles.esm.js";import i from"../../components/form/form.esm.js";import"../../node_modules/@dnd-kit/core/dist/core.esm.esm.js";import"../../node_modules/@dnd-kit/sortable/dist/sortable.esm.esm.js";import"../../node_modules/react-error-boundary/dist/react-error-boundary.esm.js";import l from"../../components/input/input.esm.js";import"../../components/layers/leaflet/lib/types.esm.js";import"../../components/layers/leaflet/layers/condition/types.esm.js";import"../../components/layers/leaflet/layers/landuse-area/constants.esm.js";import"../../components/layers/leaflet/layers/nature-field/constants.esm.js";import"../../components/layers/leaflet/layers/nature-forest/constants.esm.js";import"../../components/layers/leaflet/layers/POI/utils.esm.js";import"../../components/layers/leaflet/layers/traffic-sign/config/constants.esm.js";import"../../components/layers/leaflet/layers/road-poly/types.esm.js";import"../../components/layers/leaflet/layers/road-poly/constants.esm.js";import"../../components/layers/leaflet/config/constants.esm.js";import"../../components/layers/leaflet/scene.yaml.esm.js";import"../../_virtual/leaflet-src.esm.js";import"../../components/modal/modal.esm.js";import"@mui/lab";import"../../node_modules/react-papaparse/dist/react-papaparse.es.esm.js";import p from"../../layouts/auth/auth.esm.js";import{defaultValues as c}from"./constants.esm.js";import{resolver as d}from"./schema.esm.js";const u=({onSuccess:u,onError:f})=>{const j=n(),y=a(),b=t({defaultValues:c,resolver:d}),{register:h,formState:{isValid:k}}=b,g=o.useCallback(e=>{j.mutate({body:e})},[j]);return o.useEffect(()=>{if(j.error){f(j.error);const{response:e}=j.error;if(e){const{data:{detail:s}}=e;y({message:s,variant:"error"})}}},[j.error]),o.useEffect(()=>{j.data&&u(j.data)},[j.data]),e(p,{children:s(i,{form:b,onSubmit:g,sx:()=>({justifyContent:"center",justifyItems:"center",alignContent:"center",alignItems:"center"}),children:[e(r,{variant:"h4",children:"Авторизация"}),e(l,{...h("username"),label:"Логин",placeholder:"Введите логин"}),e(l,{...h("password"),label:"Пароль",placeholder:"Введите пароль",type:"password"}),e(m,{type:"submit",disabled:!k,children:"Войти"})]})})};export{u as default};
|
|
1
|
+
import{jsx as e,jsxs as s}from"react/jsx-runtime";import*as o from"react";import{useForm as t}from"../../node_modules/react-hook-form/dist/index.esm.esm.js";import"@mui/icons-material/ArrowDownward";import{Typography as r}from"@mui/material";import"../../components/alert-dialog/alert-dialog.esm.js";import m from"../../components/buttons/button/button.esm.js";import"../../components/buttons/delete/delete.esm.js";import"../../components/buttons/icon/icon.esm.js";import"@mui/icons-material/CloudUpload";import"../../components/buttons/upload/styles.esm.js";import"../../components/checkbox/checkbox.esm.js";import"../../node_modules/react-copy-to-clipboard-ts/dist/index.esm.js";import"../../lib/types.esm.js";import"axios";import"../../services/query/query.esm.js";import{useShowSnackbar as a}from"../../lib/hooks/useShowSnackbar.esm.js";import{useSignIn as n}from"../../lib/hooks/useSignIn.esm.js";import"../../_virtual/uuid.esm.js";import"../../node_modules/notistack/notistack.esm.esm.js";import"../../components/copy-text/styles.esm.js";import"@mui/x-date-pickers/DateField";import"../../components/paragraph/styles.esm.js";import i from"../../components/form/form.esm.js";import"../../node_modules/@dnd-kit/core/dist/core.esm.esm.js";import"../../node_modules/@dnd-kit/sortable/dist/sortable.esm.esm.js";import"../../node_modules/react-error-boundary/dist/react-error-boundary.esm.js";import l from"../../components/input/input.esm.js";import"../../components/layers/leaflet/lib/types.esm.js";import"../../components/layers/leaflet/layers/condition/types.esm.js";import"../../components/layers/leaflet/layers/landuse-area/constants.esm.js";import"../../components/layers/leaflet/layers/nature-field/constants.esm.js";import"../../components/layers/leaflet/layers/nature-forest/constants.esm.js";import"../../components/layers/leaflet/layers/POI/utils.esm.js";import"../../components/layers/leaflet/layers/traffic-sign/config/constants.esm.js";import"../../components/layers/leaflet/layers/road-poly/types.esm.js";import"../../components/layers/leaflet/layers/road-poly/constants.esm.js";import"../../components/layers/leaflet/config/constants.esm.js";import"../../components/layers/leaflet/scene.yaml.esm.js";import"../../_virtual/leaflet-src.esm.js";import"../../components/modal/modal.esm.js";import"../../components/modal/styles.esm.js";import"@mui/lab";import"../../node_modules/react-papaparse/dist/react-papaparse.es.esm.js";import p from"../../layouts/auth/auth.esm.js";import{defaultValues as c}from"./constants.esm.js";import{resolver as d}from"./schema.esm.js";const u=({onSuccess:u,onError:f})=>{const j=n(),y=a(),b=t({defaultValues:c,resolver:d}),{register:h,formState:{isValid:k}}=b,g=o.useCallback(e=>{j.mutate({body:e})},[j]);return o.useEffect(()=>{if(j.error){f(j.error);const{response:e}=j.error;if(e){const{data:{detail:s}}=e;y({message:s,variant:"error"})}}},[j.error]),o.useEffect(()=>{j.data&&u(j.data)},[j.data]),e(p,{children:s(i,{form:b,onSubmit:g,sx:()=>({justifyContent:"center",justifyItems:"center",alignContent:"center",alignItems:"center"}),children:[e(r,{variant:"h4",children:"Авторизация"}),e(l,{...h("username"),label:"Логин",placeholder:"Введите логин"}),e(l,{...h("password"),label:"Пароль",placeholder:"Введите пароль",type:"password"}),e(m,{type:"submit",disabled:!k,children:"Войти"})]})})};export{u as default};
|
|
@@ -1,100 +1,75 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { StringOrNumber } from '../../lib';
|
|
2
|
+
import { ScalarIdService } from '../scalar-id';
|
|
2
3
|
import { SetService } from '../set';
|
|
3
|
-
export declare class CollectionService<T, Id extends StringOrNumber> {
|
|
4
|
+
export declare class CollectionService<T, Id extends StringOrNumber, TSlots extends string> {
|
|
4
5
|
private readonly props;
|
|
5
6
|
private readonly _items;
|
|
6
7
|
readonly selectedIds: SetService<Id>;
|
|
8
|
+
private readonly _idSlots;
|
|
7
9
|
constructor(props: {
|
|
8
10
|
getId: (item: T) => Id;
|
|
9
11
|
normalizeItem: (item: T) => T;
|
|
12
|
+
slots?: readonly TSlots[];
|
|
10
13
|
});
|
|
11
14
|
/**
|
|
12
|
-
*
|
|
15
|
+
* Возвращает id по самому элементу коллекции.
|
|
13
16
|
*/
|
|
14
17
|
getIdByItem(item: T): Id;
|
|
15
18
|
/**
|
|
16
|
-
* Возвращает observable
|
|
19
|
+
* Возвращает observable‑коллекцию элементов в виде Map.
|
|
17
20
|
*/
|
|
18
21
|
get items(): import("mobx").ObservableMap<StringOrNumber, T>;
|
|
19
22
|
/**
|
|
20
23
|
* Возвращает все элементы коллекции в виде обычного массива.
|
|
21
24
|
*/
|
|
22
|
-
get list(): T[];
|
|
23
|
-
/**
|
|
24
|
-
* Возвращает все элементы, у которых значение указанного поля
|
|
25
|
-
* строго равно переданному значению.
|
|
26
|
-
*
|
|
27
|
-
* @typeParam K Ключ поля элемента.
|
|
28
|
-
* @param key Поле, по которому выполняется поиск.
|
|
29
|
-
* @param value Значение, с которым сравнивается поле.
|
|
30
|
-
* @returns Массив всех найденных элементов. Если совпадений нет, вернётся пустой массив.
|
|
31
|
-
*/
|
|
25
|
+
get list(): readonly T[];
|
|
32
26
|
findAllBy<K extends keyof T>(key: K, value: T[K]): T[];
|
|
33
|
-
/**
|
|
34
|
-
* Возвращает все элементы, у которых значение указанного поля
|
|
35
|
-
* входит в список переданных значений.
|
|
36
|
-
*
|
|
37
|
-
* @typeParam K Ключ поля элемента.
|
|
38
|
-
* @param key Поле, по которому выполняется поиск.
|
|
39
|
-
* @param values Набор допустимых значений поля.
|
|
40
|
-
* @returns Массив всех найденных элементов. Если совпадений нет, вернётся пустой массив.
|
|
41
|
-
*/
|
|
42
27
|
findAllIn<K extends keyof T>(key: K, values: readonly T[K][]): T[];
|
|
28
|
+
findAllWhere(criteria: Partial<T>): T[];
|
|
29
|
+
getById(id: Id): NonNullable<T> | null;
|
|
30
|
+
add(item: T): void;
|
|
31
|
+
addMany(items: T[]): void;
|
|
32
|
+
delete(id: Id): void;
|
|
33
|
+
deleteMany(ids: Id[]): void;
|
|
43
34
|
/**
|
|
44
|
-
*
|
|
45
|
-
* всем переданным критериям.
|
|
46
|
-
*
|
|
47
|
-
* Метод выполняет точное сравнение по каждому полю.
|
|
48
|
-
* Если передан пустой объект критериев, будут возвращены все элементы коллекции.
|
|
49
|
-
*
|
|
50
|
-
* @param criteria Объект с набором полей и значений для поиска.
|
|
51
|
-
* @returns Массив всех элементов, удовлетворяющих всем условиям сразу.
|
|
35
|
+
* Полностью очищает коллекцию и сбрасывает служебные состояния выбора.
|
|
52
36
|
*/
|
|
53
|
-
|
|
37
|
+
clear(): void;
|
|
54
38
|
/**
|
|
55
|
-
*
|
|
39
|
+
* Запрос на получение отделельного экзепляра ScalarIdService
|
|
56
40
|
*
|
|
57
|
-
* @param
|
|
58
|
-
* @returns
|
|
41
|
+
* @param name Имя слота.
|
|
42
|
+
* @returns ScalarIdService по имени слота, если он был сконфигурирован.
|
|
59
43
|
*/
|
|
60
|
-
|
|
44
|
+
getIdSlot(name: TSlots): ScalarIdService<Id> | null;
|
|
61
45
|
/**
|
|
62
|
-
*
|
|
46
|
+
* Возвращает id, хранящемуся в указанном слоте.
|
|
63
47
|
*
|
|
64
|
-
* @param
|
|
48
|
+
* @param name Имя слота.
|
|
65
49
|
*/
|
|
66
|
-
|
|
50
|
+
getIdBySlot(name: TSlots): import("../../lib").Nullable<Id>;
|
|
67
51
|
/**
|
|
68
|
-
*
|
|
52
|
+
* Возвращает элемент коллекции по id, хранящемуся в указанном слоте.
|
|
69
53
|
*
|
|
70
|
-
* @param
|
|
54
|
+
* @param name Имя слота.
|
|
71
55
|
*/
|
|
72
|
-
|
|
56
|
+
getItemBySlot(name: TSlots): NonNullable<T> | null;
|
|
73
57
|
/**
|
|
74
|
-
*
|
|
58
|
+
* Устанавливает id в указанный слот.
|
|
75
59
|
*
|
|
76
|
-
* @param
|
|
60
|
+
* @param name Имя слота.
|
|
61
|
+
* @param value Новое значения id в слоте.
|
|
77
62
|
*/
|
|
78
|
-
|
|
63
|
+
setIdSlot(name: TSlots, value: Id): void;
|
|
79
64
|
/**
|
|
80
|
-
*
|
|
65
|
+
* Сбрасывает id в указанном слоте.
|
|
81
66
|
*
|
|
82
|
-
* @param
|
|
67
|
+
* @param name Имя слота.
|
|
83
68
|
*/
|
|
84
|
-
|
|
69
|
+
resetIdSlot(name: TSlots): void;
|
|
85
70
|
/**
|
|
86
|
-
*
|
|
71
|
+
* Сбрасывает все слоты.
|
|
87
72
|
*/
|
|
88
|
-
|
|
89
|
-
private _updatedId;
|
|
90
|
-
get updatedId(): Nullable<Id>;
|
|
91
|
-
set updatedId(value: Nullable<Id>);
|
|
92
|
-
get updatedItem(): T | undefined;
|
|
93
|
-
get isUpdated(): boolean;
|
|
94
|
-
private _deletedId;
|
|
95
|
-
get deletedId(): Nullable<Id>;
|
|
96
|
-
set deletedId(value: Nullable<Id>);
|
|
97
|
-
get deletedItem(): T | undefined;
|
|
98
|
-
get isDeleted(): boolean;
|
|
73
|
+
resetSlots(): void;
|
|
99
74
|
}
|
|
100
75
|
//# sourceMappingURL=collection.service.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"collection.service.d.ts","sourceRoot":"","sources":["../../../src/services/collection/collection.service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"collection.service.d.ts","sourceRoot":"","sources":["../../../src/services/collection/collection.service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,OAAO,CAAC;AAIvC,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAC/C,OAAO,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AAEpC,qBAAa,iBAAiB,CAC5B,CAAC,EACD,EAAE,SAAS,cAAc,EACzB,MAAM,SAAS,MAAM;IASnB,OAAO,CAAC,QAAQ,CAAC,KAAK;IAPxB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAuC;IAE9D,SAAgB,WAAW,iBAAwB;IAEnD,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAA0C;gBAGhD,KAAK,EAAE;QACtB,KAAK,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,EAAE,CAAC;QACvB,aAAa,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC;QAC9B,KAAK,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;KAC3B;IAWH;;OAEG;IACI,WAAW,CAAC,IAAI,EAAE,CAAC;IAI1B;;OAEG;IACH,IAAW,KAAK,oDAEf;IAED;;OAEG;IACH,IAAW,IAAI,iBAEd;IAEM,SAAS,CAAC,CAAC,SAAS,MAAM,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC;IAIhD,SAAS,CAAC,CAAC,SAAS,MAAM,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE;IAM5D,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC;IAQjC,OAAO,CAAC,EAAE,EAAE,EAAE;IAId,GAAG,CAAC,IAAI,EAAE,CAAC;IAQX,OAAO,CAAC,KAAK,EAAE,CAAC,EAAE;IAMlB,MAAM,CAAC,EAAE,EAAE,EAAE;IAIb,UAAU,CAAC,GAAG,EAAE,EAAE,EAAE;IAM3B;;OAEG;IACI,KAAK;IAQZ;;;;;OAKG;IACI,SAAS,CAAC,IAAI,EAAE,MAAM;IAI7B;;;;OAIG;IACI,WAAW,CAAC,IAAI,EAAE,MAAM;IAU/B;;;;OAIG;IACI,aAAa,CAAC,IAAI,EAAE,MAAM;IAUjC;;;;;OAKG;IACI,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE;IAQxC;;;;OAIG;IACI,WAAW,CAAC,IAAI,EAAE,MAAM;IAQ/B;;OAEG;IACI,UAAU;CAKlB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{observable as
|
|
1
|
+
import{observable as t,makeAutoObservable as e}from"../../node_modules/mobx/dist/mobx.esm.esm.js";import{ScalarIdService as s}from"../scalar-id/scalar-id.service.esm.js";import{SetService as r}from"../set/set.service.esm.js";class i{props;_items=t.map();selectedIds=new r;_idSlots=new Map;constructor(t){this.props=t;const{slots:r=[]}=t;e(this),r.forEach(t=>{this._idSlots.set(t,new s)})}getIdByItem(t){return this.props.getId(t)}get items(){return this._items}get list(){return Object.freeze(Array.from(this.items.values()))}findAllBy(t,e){return this.list.filter(s=>s[t]===e)}findAllIn(t,e){const s=new Set(e);return this.list.filter(e=>s.has(e[t]))}findAllWhere(t){const e=Object.entries(t);return this.list.filter(t=>e.every(([e,s])=>t[e]===s))}getById(t){return this.items.get(t)??null}add(t){const e=this.props.getId(t),s=this.props.normalizeItem(t);this._items.set(e,s)}addMany(t){t.forEach(t=>{this.add(t)})}delete(t){this._items.delete(t)}deleteMany(t){t.forEach(t=>{this.delete(t)})}clear(){this._items.clear(),this.resetSlots(),this.selectedIds.clear()}getIdSlot(t){return this._idSlots.get(t)??null}getIdBySlot(t){const e=this.getIdSlot(t);return e?e.value:null}getItemBySlot(t){const e=this.getIdSlot(t);return e&&e.isSet&&null!==e.value?this.getById(e.value):null}setIdSlot(t,e){const s=this.getIdSlot(t);s&&s.set(e)}resetIdSlot(t){const e=this.getIdSlot(t);e&&e.reset()}resetSlots(){this._idSlots.forEach(t=>{t.reset()})}}export{i as CollectionService};
|
package/dist/services/index.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/services/index.ts"],"names":[],"mappings":"AAAA,cAAc,OAAO,CAAC;AACtB,cAAc,cAAc,CAAC;AAC7B,cAAc,oBAAoB,CAAC;AACnC,cAAc,eAAe,CAAC;AAC9B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,UAAU,CAAC;AACzB,cAAc,OAAO,CAAC;AACtB,cAAc,SAAS,CAAC;AACxB,cAAc,OAAO,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/services/index.ts"],"names":[],"mappings":"AAAA,cAAc,OAAO,CAAC;AACtB,cAAc,cAAc,CAAC;AAC7B,cAAc,oBAAoB,CAAC;AACnC,cAAc,eAAe,CAAC;AAC9B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,UAAU,CAAC;AACzB,cAAc,OAAO,CAAC;AACtB,cAAc,SAAS,CAAC;AACxB,cAAc,aAAa,CAAC;AAC5B,cAAc,OAAO,CAAC"}
|
|
@@ -256,6 +256,43 @@ declare class MapService {
|
|
|
256
256
|
extractCoordinatesFromGeom(geom: GeoJsonMultiLineString): FrontendLatLng[][];
|
|
257
257
|
extractCoordinatesFromGeom(geom: GeoJsonPolygon): FrontendLatLng[][];
|
|
258
258
|
extractCoordinatesFromGeom(geom: GeoJsonMultiPolygon): FrontendLatLng[][][];
|
|
259
|
+
/**
|
|
260
|
+
* Вычисляет два узла, расположенных перпендикулярно отрезку
|
|
261
|
+
* в его конечной точке на заданном расстоянии.
|
|
262
|
+
*
|
|
263
|
+
* Алгоритм:
|
|
264
|
+
* 1. Вычисляет обратный азимут (направление от конечной точки к начальной).
|
|
265
|
+
* 2. Поворачивает его на ±90° — получает два перпендикулярных направления.
|
|
266
|
+
* 3. Смещает конечную точку на `offset` метров в каждую сторону,
|
|
267
|
+
* используя плоскую аппроксимацию (приемлемо при offset ≤ 2000 м).
|
|
268
|
+
*
|
|
269
|
+
* Принимает и возвращает координаты в формате {@link FrontendLatLng}
|
|
270
|
+
* (`{ lat, lng }`) для прямой совместимости с Leaflet.
|
|
271
|
+
*
|
|
272
|
+
* Типичный сценарий использования: построение нормалей к маршруту,
|
|
273
|
+
* поперечных контрольных точек, перпендикулярных смещений на линии.
|
|
274
|
+
*
|
|
275
|
+
* @param params - Параметры расчёта.
|
|
276
|
+
* @param params.from - Начальная точка отрезка.
|
|
277
|
+
* @param params.to - Конечная точка отрезка. Перпендикуляр строится именно здесь.
|
|
278
|
+
* @param params.offset - Расстояние смещения в метрах (по умолчанию 100 м).
|
|
279
|
+
* @returns Два узла в формате {@link FrontendLatLng}, сдвинутых перпендикулярно
|
|
280
|
+
* отрезку влево и вправо от конечной точки.
|
|
281
|
+
*
|
|
282
|
+
* @example
|
|
283
|
+
* const { left, right } = mapService.getPerpendicularPoints({
|
|
284
|
+
* from: { lat: 55.75, lng: 37.61 },
|
|
285
|
+
* to: { lat: 55.76, lng: 37.62 },
|
|
286
|
+
* });
|
|
287
|
+
*/
|
|
288
|
+
getPerpendicularPoints({ from, to, offset, }: {
|
|
289
|
+
from: FrontendLatLng;
|
|
290
|
+
to: FrontendLatLng;
|
|
291
|
+
offset?: number;
|
|
292
|
+
}): {
|
|
293
|
+
left: FrontendLatLng;
|
|
294
|
+
right: FrontendLatLng;
|
|
295
|
+
};
|
|
259
296
|
}
|
|
260
297
|
/**
|
|
261
298
|
* Сервис для работы с географическими координатами и базовыми
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"map.service.d.ts","sourceRoot":"","sources":["../../../src/services/map/map.service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAElE,OAAO,EAEL,iBAAiB,EACjB,sBAAsB,EACtB,mBAAmB,EACnB,YAAY,EACZ,cAAc,EACf,MAAM,YAAY,CAAC;AAEpB,OAAO,EACL,mBAAmB,EACnB,YAAY,EACZ,iBAAiB,EAClB,MAAM,aAAa,CAAC;AAErB,cAAM,UAAU;IACd;;OAEG;IACH,SAAgB,cAAc,WAAa;IAE3C;;OAEG;IACH,SAAgB,mBAAmB,OAAO;IAE1C;;OAEG;IACH,SAAgB,6BAA6B,SAAQ;;IAIrD;;;;;;;OAOG;IACH,IAAW,mBAAmB,WAE7B;IAED;;;;;;OAMG;IACH,IAAW,UAAU,WAEpB;IAED;;;;;;OAMG;IACH,IAAW,UAAU,WAEpB;IAED;;;;;;;;;;;;OAYG;IACI,gBAAgB,CAAC,OAAO,EAAE,MAAM;IAOvC;;;;;;;;;OASG;IACI,kBAAkB,CAAC,GAAG,EAAE,MAAM;IAQrC;;;;;;;;;;;;;OAaG;IACI,oBAAoB,GAAI,0CAK5B;QACD,UAAU,EAAE,cAAc,CAAC;QAC3B,QAAQ,EAAE,MAAM,CAAC;QACjB,OAAO,EAAE,MAAM,CAAC;QAChB,IAAI,CAAC,EAAE,YAAY,CAAC;KACrB,KAAG,cAAc,CAwBhB;IAEF;;;;;;;;;;;OAWG;IACI,iBAAiB,CACtB,CAAC,EAAE,cAAc,EACjB,CAAC,EAAE,cAAc,EACjB,IAAI,GAAE,YAAuB;IAkB/B;;;;;;;;;OASG;IACI,cAAc,CAAC,CAAC,EAAE,cAAc,EAAE,CAAC,EAAE,cAAc;IAkB1D;;;;;;OAMG;IACI,eAAe,CACpB,gBAAgB,EAAE,MAAM,EACxB,IAAI,GAAE,YAAuB;IAO/B;;;;;;OAMG;IACI,gBAAgB,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,GAAE,YAAuB;IAQvE;;;;;;;;;OASG;IACI,iBAAiB,CACtB,WAAW,EAAE,cAAc,EAAE,EAC7B,IAAI,GAAE,YAAuB;IAsB/B;;;;;;;OAOG;IACI,gBAAgB,CAAC,CAAC,EAAE,cAAc,EAAE,CAAC,EAAE,cAAc;IAQ5D;;;;;;;;;OASG;IACH,OAAO,CAAC,iBAAiB;IAWzB;;;;;;;;;;;;;;;;;;OAkBG;IACI,uBAAuB,CAC5B,IAAI,EAAE,cAAc,EAAE,EACtB,aAAa,EAAE,cAAc,EAC7B,aAAa,EAAE,cAAc,EAC7B,OAAO,GAAE,mBAAsD;IAKjE;;;;;;;;;;;;OAYG;IACI,0BAA0B,CAC/B,OAAO,EAAE,cAAc,EAAE,EAAE,EAC3B,aAAa,EAAE,cAAc,EAC7B,aAAa,EAAE,cAAc,EAC7B,OAAO,GAAE,mBAAsD;IAOjE;;;;;;;;;;;OAWG;IACI,+BAA+B,CACpC,YAAY,EAAE,cAAc,EAAE,EAAE,EAAE,EAClC,aAAa,EAAE,cAAc,EAC7B,aAAa,EAAE,cAAc,EAC7B,OAAO,GAAE,mBAAsD;IAYjE;;;;;;;;;;;;;;;;;;;;OAoBG;IACI,oBAAoB,CACzB,WAAW,EAAE,cAAc,EAAE,EAC7B,OAAO,GAAE,iBAAsB;IAwEjC;;;;;;;;;;;;;;OAcG;IACI,iBAAiB,CACtB,WAAW,EAAE,cAAc,EAAE,GAC5B,QAAQ,CAAC,cAAc,CAAC;IAqD3B;;;;;;;;OAQG;IACI,kBAAkB,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,eAAe,GAAG,cAAc;IAO/D,0BAA0B,CAAC,IAAI,EAAE,YAAY,GAAG,cAAc;IAC9D,0BAA0B,CAAC,IAAI,EAAE,iBAAiB,GAAG,cAAc,EAAE;IACrE,0BAA0B,CAC/B,IAAI,EAAE,sBAAsB,GAC3B,cAAc,EAAE,EAAE;IACd,0BAA0B,CAAC,IAAI,EAAE,cAAc,GAAG,cAAc,EAAE,EAAE;IACpE,0BAA0B,CAC/B,IAAI,EAAE,mBAAmB,GACxB,cAAc,EAAE,EAAE,EAAE;
|
|
1
|
+
{"version":3,"file":"map.service.d.ts","sourceRoot":"","sources":["../../../src/services/map/map.service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAElE,OAAO,EAEL,iBAAiB,EACjB,sBAAsB,EACtB,mBAAmB,EACnB,YAAY,EACZ,cAAc,EACf,MAAM,YAAY,CAAC;AAEpB,OAAO,EACL,mBAAmB,EACnB,YAAY,EACZ,iBAAiB,EAClB,MAAM,aAAa,CAAC;AAErB,cAAM,UAAU;IACd;;OAEG;IACH,SAAgB,cAAc,WAAa;IAE3C;;OAEG;IACH,SAAgB,mBAAmB,OAAO;IAE1C;;OAEG;IACH,SAAgB,6BAA6B,SAAQ;;IAIrD;;;;;;;OAOG;IACH,IAAW,mBAAmB,WAE7B;IAED;;;;;;OAMG;IACH,IAAW,UAAU,WAEpB;IAED;;;;;;OAMG;IACH,IAAW,UAAU,WAEpB;IAED;;;;;;;;;;;;OAYG;IACI,gBAAgB,CAAC,OAAO,EAAE,MAAM;IAOvC;;;;;;;;;OASG;IACI,kBAAkB,CAAC,GAAG,EAAE,MAAM;IAQrC;;;;;;;;;;;;;OAaG;IACI,oBAAoB,GAAI,0CAK5B;QACD,UAAU,EAAE,cAAc,CAAC;QAC3B,QAAQ,EAAE,MAAM,CAAC;QACjB,OAAO,EAAE,MAAM,CAAC;QAChB,IAAI,CAAC,EAAE,YAAY,CAAC;KACrB,KAAG,cAAc,CAwBhB;IAEF;;;;;;;;;;;OAWG;IACI,iBAAiB,CACtB,CAAC,EAAE,cAAc,EACjB,CAAC,EAAE,cAAc,EACjB,IAAI,GAAE,YAAuB;IAkB/B;;;;;;;;;OASG;IACI,cAAc,CAAC,CAAC,EAAE,cAAc,EAAE,CAAC,EAAE,cAAc;IAkB1D;;;;;;OAMG;IACI,eAAe,CACpB,gBAAgB,EAAE,MAAM,EACxB,IAAI,GAAE,YAAuB;IAO/B;;;;;;OAMG;IACI,gBAAgB,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,GAAE,YAAuB;IAQvE;;;;;;;;;OASG;IACI,iBAAiB,CACtB,WAAW,EAAE,cAAc,EAAE,EAC7B,IAAI,GAAE,YAAuB;IAsB/B;;;;;;;OAOG;IACI,gBAAgB,CAAC,CAAC,EAAE,cAAc,EAAE,CAAC,EAAE,cAAc;IAQ5D;;;;;;;;;OASG;IACH,OAAO,CAAC,iBAAiB;IAWzB;;;;;;;;;;;;;;;;;;OAkBG;IACI,uBAAuB,CAC5B,IAAI,EAAE,cAAc,EAAE,EACtB,aAAa,EAAE,cAAc,EAC7B,aAAa,EAAE,cAAc,EAC7B,OAAO,GAAE,mBAAsD;IAKjE;;;;;;;;;;;;OAYG;IACI,0BAA0B,CAC/B,OAAO,EAAE,cAAc,EAAE,EAAE,EAC3B,aAAa,EAAE,cAAc,EAC7B,aAAa,EAAE,cAAc,EAC7B,OAAO,GAAE,mBAAsD;IAOjE;;;;;;;;;;;OAWG;IACI,+BAA+B,CACpC,YAAY,EAAE,cAAc,EAAE,EAAE,EAAE,EAClC,aAAa,EAAE,cAAc,EAC7B,aAAa,EAAE,cAAc,EAC7B,OAAO,GAAE,mBAAsD;IAYjE;;;;;;;;;;;;;;;;;;;;OAoBG;IACI,oBAAoB,CACzB,WAAW,EAAE,cAAc,EAAE,EAC7B,OAAO,GAAE,iBAAsB;IAwEjC;;;;;;;;;;;;;;OAcG;IACI,iBAAiB,CACtB,WAAW,EAAE,cAAc,EAAE,GAC5B,QAAQ,CAAC,cAAc,CAAC;IAqD3B;;;;;;;;OAQG;IACI,kBAAkB,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,eAAe,GAAG,cAAc;IAO/D,0BAA0B,CAAC,IAAI,EAAE,YAAY,GAAG,cAAc;IAC9D,0BAA0B,CAAC,IAAI,EAAE,iBAAiB,GAAG,cAAc,EAAE;IACrE,0BAA0B,CAC/B,IAAI,EAAE,sBAAsB,GAC3B,cAAc,EAAE,EAAE;IACd,0BAA0B,CAAC,IAAI,EAAE,cAAc,GAAG,cAAc,EAAE,EAAE;IACpE,0BAA0B,CAC/B,IAAI,EAAE,mBAAmB,GACxB,cAAc,EAAE,EAAE,EAAE;IA8BvB;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA4BG;IACI,sBAAsB,CAAC,EAC5B,IAAI,EACJ,EAAE,EACF,MAAY,GACb,EAAE;QACD,IAAI,EAAE,cAAc,CAAC;QACrB,EAAE,EAAE,cAAc,CAAC;QACnB,MAAM,CAAC,EAAE,MAAM,CAAC;KACjB,GAAG;QACF,IAAI,EAAE,cAAc,CAAC;QACrB,KAAK,EAAE,cAAc,CAAC;KACvB;CAmCF;AAED;;;;;;;;;;GAUG;AACH,eAAO,MAAM,UAAU,YAAmB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{DISTANCE_UNIT_FACTORS as t}from"./map.constants.esm.js";const
|
|
1
|
+
import{DISTANCE_UNIT_FACTORS as t}from"./map.constants.esm.js";const n=new class{EARTH_RADIUS_M=6371e3;FULL_CIRCLE_DEGREES=360;COORDINATE_EQUALITY_EPSILON_M=.002;constructor(){}get HALF_CIRCLE_DEGREES(){return this.FULL_CIRCLE_DEGREES/2}get DEG_TO_RAD(){return Math.PI/this.HALF_CIRCLE_DEGREES}get RAD_TO_DEG(){return this.HALF_CIRCLE_DEGREES/Math.PI}normalizeBearing(t){return(t%this.FULL_CIRCLE_DEGREES+this.FULL_CIRCLE_DEGREES)%this.FULL_CIRCLE_DEGREES}normalizeLongitude(t){return(t+this.FULL_CIRCLE_DEGREES+this.HALF_CIRCLE_DEGREES)%this.FULL_CIRCLE_DEGREES-this.HALF_CIRCLE_DEGREES}calculateDestination=({coordinate:t,distance:n,azimuth:e,unit:i="meters"})=>{const s=t.lat*this.DEG_TO_RAD,a=t.lng*this.DEG_TO_RAD,r=this.normalizeBearing(e)*this.DEG_TO_RAD,o=this.distanceToMeters(n,i)/this.EARTH_RADIUS_M,h=Math.sin(s),l=Math.cos(s),c=Math.sin(o),E=Math.cos(o),_=Math.sin(r),D=Math.cos(r),g=Math.asin(h*E+l*c*D),R=a+Math.atan2(_*c*l,E-h*Math.sin(g));return{lat:g*this.RAD_TO_DEG,lng:this.normalizeLongitude(R*this.RAD_TO_DEG)}};haversineDistance(t,n,e="meters"){const i=t.lat*this.DEG_TO_RAD,s=n.lat*this.DEG_TO_RAD,a=(n.lat-t.lat)*this.DEG_TO_RAD,r=(n.lng-t.lng)*this.DEG_TO_RAD,o=Math.sin(a/2)**2+Math.cos(i)*Math.cos(s)*Math.sin(r/2)**2,h=2*Math.atan2(Math.sqrt(o),Math.sqrt(1-o)),l=this.EARTH_RADIUS_M*h;return this.convertDistance(l,e)}initialBearing(t,n){const e=t.lat*this.DEG_TO_RAD,i=n.lat*this.DEG_TO_RAD,s=t.lng*this.DEG_TO_RAD,a=n.lng*this.DEG_TO_RAD,r=Math.sin(a-s)*Math.cos(i),o=Math.cos(e)*Math.sin(i)-Math.sin(e)*Math.cos(i)*Math.cos(a-s);return this.normalizeBearing(Math.atan2(r,o)*this.RAD_TO_DEG)}convertDistance(n,e="meters"){return n/t[e]}distanceToMeters(n,e="meters"){return n*t[e]}getPolylineLength(t,n="meters"){const e=t.reduce((t,n,e,i)=>{const s=i[e+1];if(!s)return t;return t+this.haversineDistance(n,s,"meters")},0);return this.convertDistance(e,n)}coordinatesEqual(t,n){return this.haversineDistance(t,n,"meters")<=this.COORDINATE_EQUALITY_EPSILON_M}replaceInFlatRing(t,n,e,i){return t.map(t=>i(t,n)?e:t)}replaceCoordinateInLine(t,n,e,i=this.coordinatesEqual.bind(this)){return this.replaceInFlatRing(t,n,e,i)}replaceCoordinateInPolygon(t,n,e,i=this.coordinatesEqual.bind(this)){return t.map(t=>this.replaceInFlatRing(t,n,e,i))}replaceCoordinateInMultiPolygon(t,n,e,i=this.coordinatesEqual.bind(this)){return t.map(t=>this.replaceCoordinateInPolygon(t,n,e,i))}sampleLineByDistance(t,n={}){const{interval:e=1e3,maxPoints:i,unit:s="meters",includeStart:a=!1}=n;if(t.length<2)return[];const r=this.distanceToMeters(e,s);if(!Number.isFinite(r)||r<=0)return[];const o=[];let h=0,l=t[0];a&&o.push(l);for(let n=1;n<t.length;n++){const e=t[n],s=this.haversineDistance(l,e,"meters");if(Number.isFinite(s)&&0!==s){for(h+=s;h>=r;){const t=(s-(h-r))/s,n=l.lat+t*(e.lat-l.lat),a=l.lng+t*(e.lng-l.lng);if(o.push({lat:n,lng:a}),null!=i&&o.length>=i)return o;h-=r}l=e}else l=e}return null!=i?o.slice(0,i):o}getPolylineCenter(t){if(0===t.length)return null;if(1===t.length)return t[0];const n=this.getPolylineLength(t,"meters");if(0===n)return t[0];const e=n/2;let i=0,s=t[0];for(let n=1;n<t.length;n++){const a=t[n],r=this.haversineDistance(s,a,"meters");if(0!==r){if(i+r>=e){const t=(e-i)/r;return{lat:s.lat+t*(a.lat-s.lat),lng:s.lng+t*(a.lng-s.lng)}}i+=r,s=a}else s=a}return t[t.length-1]}coordinateToLatLng([t,n]){return{lat:n,lng:t}}extractCoordinatesFromGeom(t){switch(t.type){case"Point":return this.coordinateToLatLng(t.coordinates);case"LineString":return t.coordinates.map(t=>this.coordinateToLatLng(t));case"MultiLineString":case"Polygon":return t.coordinates.map(t=>t.map(t=>this.coordinateToLatLng(t)));case"MultiPolygon":return t.coordinates.map(t=>t.map(t=>t.map(t=>this.coordinateToLatLng(t))))}}getPerpendicularPoints({from:t,to:n,offset:e=100}){const i=t.lat*this.DEG_TO_RAD,s=t.lng*this.DEG_TO_RAD,a=n.lat*this.DEG_TO_RAD,r=s-n.lng*this.DEG_TO_RAD,o=Math.sin(r)*Math.cos(i),h=Math.cos(a)*Math.sin(i)-Math.sin(a)*Math.cos(i)*Math.cos(r),l=this.normalizeBearing(Math.atan2(o,h)*this.RAD_TO_DEG),c=this.normalizeBearing(l+90),E=this.normalizeBearing(l+270),_=this.EARTH_RADIUS_M*Math.PI/180,D=_*Math.cos(a),g=t=>{const i=t*this.DEG_TO_RAD;return{lat:n.lat+e*Math.cos(i)/_,lng:n.lng+e*Math.sin(i)/D}};return{left:g(c),right:g(E)}}};export{n as mapService};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/services/scalar-id/index.ts"],"names":[],"mappings":"AAAA,cAAc,qBAAqB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scalar-id.constants.d.ts","sourceRoot":"","sources":["../../../src/services/scalar-id/scalar-id.constants.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,SAAS,MAAO,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
const l=null;export{l as defaultId};
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { Nullable } from '../../lib';
|
|
2
|
+
/**
|
|
3
|
+
* ScalarIdService<Id>
|
|
4
|
+
*
|
|
5
|
+
* Небольшой сервис для хранения одного "текущего" идентификатора.
|
|
6
|
+
* Подходит для:
|
|
7
|
+
* - последнего обновлённого элемента (updatedId);
|
|
8
|
+
* - последнего удалённого элемента (deletedId);
|
|
9
|
+
* - текущего выделенного элемента (selectedId), если нужен один.
|
|
10
|
+
*
|
|
11
|
+
* Возможности:
|
|
12
|
+
* - value: текущее значение или null;
|
|
13
|
+
* - isSet: флаг, установлен ли id;
|
|
14
|
+
* - set / reset: явное управление значением.
|
|
15
|
+
*
|
|
16
|
+
* Пример:
|
|
17
|
+
* const updated = new ScalarIdService<string>();
|
|
18
|
+
* updated.set('42');
|
|
19
|
+
* updated.isSet; // true
|
|
20
|
+
* updated.value; // '42'
|
|
21
|
+
* updated.reset();
|
|
22
|
+
*/
|
|
23
|
+
export declare class ScalarIdService<Id> {
|
|
24
|
+
/**
|
|
25
|
+
* Внутреннее хранилище идентификатора.
|
|
26
|
+
* null означает "ничего не выбрано / не установлено".
|
|
27
|
+
*/
|
|
28
|
+
private _value;
|
|
29
|
+
constructor();
|
|
30
|
+
/**
|
|
31
|
+
* Текущее значение id или null, если значение не установлено.
|
|
32
|
+
*/
|
|
33
|
+
get value(): Nullable<Id>;
|
|
34
|
+
/**
|
|
35
|
+
* Установить новое значение id.
|
|
36
|
+
*
|
|
37
|
+
* @param value Новое значение или null для сброса.
|
|
38
|
+
*/
|
|
39
|
+
set(value: Id): void;
|
|
40
|
+
/**
|
|
41
|
+
* Сбросить значение id в null.
|
|
42
|
+
*/
|
|
43
|
+
reset(): void;
|
|
44
|
+
/**
|
|
45
|
+
* Признак, что значение установлено (отлично от null).
|
|
46
|
+
*/
|
|
47
|
+
get isSet(): boolean;
|
|
48
|
+
}
|
|
49
|
+
//# sourceMappingURL=scalar-id.service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scalar-id.service.d.ts","sourceRoot":"","sources":["../../../src/services/scalar-id/scalar-id.service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAMjC;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,qBAAa,eAAe,CAAC,EAAE;IAC7B;;;OAGG;IACH,OAAO,CAAC,MAAM,CAA2B;;IAMzC;;OAEG;IACH,IAAW,KAAK,iBAEf;IAED;;;;OAIG;IACI,GAAG,CAAC,KAAK,EAAE,EAAE;IAIpB;;OAEG;IACI,KAAK;IAIZ;;OAEG;IACH,IAAW,KAAK,YAEf;CACF"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{makeAutoObservable as s}from"../../node_modules/mobx/dist/mobx.esm.esm.js";import{defaultId as t}from"./scalar-id.constants.esm.js";class e{_value=t;constructor(){s(this,{},{autoBind:!0})}get value(){return this._value}set(s){this._value=s}reset(){this._value=t}get isSet(){return this._value!==t}}export{e as ScalarIdService};
|