@dartcom/ui-kit 10.6.0 → 10.6.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.
@@ -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;AAU/B,OAAO,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;;AAiD3C,wBAAqC"}
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 m}from"../../stores/modal/modal.esm.js";import r from"@mui/material/Box";import s from"@mui/material/Modal";import"../../node_modules/mobx-react-lite/es/index.esm.js";import{modalStyle as t}from"./styles.esm.js";import{observer as i}from"../../node_modules/mobx-react-lite/es/observer.esm.js";var a=i(({name:i,children:a,onClose:l,onOpen:n})=>{const d=o.useId(),p=m.getIsOpen(i);return o.useEffect(()=>{p?n?.({name:i}):l?.({name:i})},[p]),e(s,{open:p,onClose:()=>{m.close(i)},"aria-labelledby":`modal-${d}-title`,"aria-describedby":`modal-${d}-description`,children:e(r,{sx:({breakpoints:e})=>({...t,[e.up("sm")]:{minWidth:400},[e.down("sm")]:{minWidth:"80vw"}}),children:a})})});export{a as default};
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 { SxProps } from '@mui/material';
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":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAExC,eAAO,MAAM,UAAU,EAAE,OAcxB,CAAC"}
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%)",bgcolor:"background.paper",border:"2px solid #000",boxShadow:24,p:4,maxHeight:"90vh",overflowX:"auto",overflowY:"auto"};export{o as modalStyle};
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: CustomModalProps['name'];
4
+ name: string;
5
5
  }) => void;
6
6
  onOpen?: (props: {
7
- name: CustomModalProps['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,gBAAgB,CAAC,MAAM,CAAC,CAAA;KAAE,KAAK,IAAI,CAAC;IAC9D,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE;QAAE,IAAI,EAAE,gBAAgB,CAAC,MAAM,CAAC,CAAA;KAAE,KAAK,IAAI,CAAC;CAC9D"}
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');
@@ -9433,6 +9432,60 @@ class MapService {
9433
9432
  }
9434
9433
  }
9435
9434
  }
9435
+ /**
9436
+ * Вычисляет два узла, расположенных перпендикулярно отрезку
9437
+ * в его конечной точке на заданном расстоянии.
9438
+ *
9439
+ * Алгоритм:
9440
+ * 1. Вычисляет обратный азимут (направление от конечной точки к начальной).
9441
+ * 2. Поворачивает его на ±90° — получает два перпендикулярных направления.
9442
+ * 3. Смещает конечную точку на `offset` метров в каждую сторону,
9443
+ * используя плоскую аппроксимацию (приемлемо при offset ≤ 2000 м).
9444
+ *
9445
+ * Принимает и возвращает координаты в формате {@link FrontendLatLng}
9446
+ * (`{ lat, lng }`) для прямой совместимости с Leaflet.
9447
+ *
9448
+ * Типичный сценарий использования: построение нормалей к маршруту,
9449
+ * поперечных контрольных точек, перпендикулярных смещений на линии.
9450
+ *
9451
+ * @param params - Параметры расчёта.
9452
+ * @param params.from - Начальная точка отрезка.
9453
+ * @param params.to - Конечная точка отрезка. Перпендикуляр строится именно здесь.
9454
+ * @param params.offset - Расстояние смещения в метрах (по умолчанию 100 м).
9455
+ * @returns Два узла в формате {@link FrontendLatLng}, сдвинутых перпендикулярно
9456
+ * отрезку влево и вправо от конечной точки.
9457
+ *
9458
+ * @example
9459
+ * const { left, right } = mapService.getPerpendicularPoints({
9460
+ * from: { lat: 55.75, lng: 37.61 },
9461
+ * to: { lat: 55.76, lng: 37.62 },
9462
+ * });
9463
+ */
9464
+ getPerpendicularPoints({ from, to, offset = 100, }) {
9465
+ const φ1 = from.lat * this.DEG_TO_RAD;
9466
+ const λ1 = from.lng * this.DEG_TO_RAD;
9467
+ const φ2 = to.lat * this.DEG_TO_RAD;
9468
+ const λ2 = to.lng * this.DEG_TO_RAD;
9469
+ const Δλ = λ1 - λ2;
9470
+ const y = Math.sin(Δλ) * Math.cos(φ1);
9471
+ const x = Math.cos(φ2) * Math.sin(φ1) - Math.sin(φ2) * Math.cos(φ1) * Math.cos(Δλ);
9472
+ const reverseBearing = this.normalizeBearing(Math.atan2(y, x) * this.RAD_TO_DEG);
9473
+ const leftBearing = this.normalizeBearing(reverseBearing + 90);
9474
+ const rightBearing = this.normalizeBearing(reverseBearing + 270);
9475
+ const metersPerDegLat = (this.EARTH_RADIUS_M * Math.PI) / 180;
9476
+ const metersPerDegLon = metersPerDegLat * Math.cos(φ2);
9477
+ const shift = (bearing) => {
9478
+ const bearingRad = bearing * this.DEG_TO_RAD;
9479
+ return {
9480
+ lat: to.lat + (offset * Math.cos(bearingRad)) / metersPerDegLat,
9481
+ lng: to.lng + (offset * Math.sin(bearingRad)) / metersPerDegLon,
9482
+ };
9483
+ };
9484
+ return {
9485
+ left: shift(leftBearing),
9486
+ right: shift(rightBearing),
9487
+ };
9488
+ }
9436
9489
  }
9437
9490
  /**
9438
9491
  * Сервис для работы с географическими координатами и базовыми
@@ -44781,19 +44834,26 @@ const Loader = (props) => {
44781
44834
  return jsxRuntime.jsx(material.CircularProgress, { ...props });
44782
44835
  };
44783
44836
 
44784
- const modalStyle = {
44785
- position: 'absolute',
44786
- top: '50%',
44787
- left: '50%',
44788
- transform: 'translate(-50%, -50%)',
44789
- bgcolor: 'background.paper',
44790
- border: '2px solid #000',
44791
- boxShadow: 24,
44792
- p: 4,
44793
- maxHeight: '90vh',
44794
- overflowX: 'auto',
44795
- overflowY: 'auto',
44796
- };
44837
+ const ModalContainer = material.styled(material.Box)(({ theme }) => {
44838
+ const { spacing, breakpoints, palette } = theme;
44839
+ return {
44840
+ position: 'absolute',
44841
+ top: '50%',
44842
+ left: '50%',
44843
+ transform: 'translate(-50%, -50%)',
44844
+ backgroundColor: palette.white.main,
44845
+ borderRadius: spacing(2),
44846
+ padding: spacing(2),
44847
+ maxHeight: '90vh',
44848
+ overflow: 'auto',
44849
+ [breakpoints.up('sm')]: {
44850
+ minWidth: 400,
44851
+ },
44852
+ [breakpoints.down('sm')]: {
44853
+ minWidth: '80vw',
44854
+ },
44855
+ };
44856
+ });
44797
44857
 
44798
44858
  const CustomModal = ({ name, children, onClose, onOpen, }) => {
44799
44859
  const modalId = React__namespace.useId();
@@ -44808,17 +44868,7 @@ const CustomModal = ({ name, children, onClose, onOpen, }) => {
44808
44868
  }, [isOpen]);
44809
44869
  return (jsxRuntime.jsx(Modal, { open: isOpen, onClose: () => {
44810
44870
  modalStore.close(name);
44811
- }, "aria-labelledby": `modal-${modalId}-title`, "aria-describedby": `modal-${modalId}-description`, children: jsxRuntime.jsx(Box, { sx: ({ breakpoints }) => {
44812
- return {
44813
- ...modalStyle,
44814
- [breakpoints.up('sm')]: {
44815
- minWidth: 400,
44816
- },
44817
- [breakpoints.down('sm')]: {
44818
- minWidth: '80vw',
44819
- },
44820
- };
44821
- }, children: children }) }));
44871
+ }, "aria-labelledby": `modal-${modalId}-title`, "aria-describedby": `modal-${modalId}-description`, children: jsxRuntime.jsx(ModalContainer, { children: children }) }));
44822
44872
  };
44823
44873
  var modal = observer(CustomModal);
44824
44874
 
@@ -48309,6 +48359,7 @@ exports.LeafletLayer = LeafletLayer;
48309
48359
  exports.List = CustomList;
48310
48360
  exports.Loader = Loader;
48311
48361
  exports.Modal = modal;
48362
+ exports.ModalContainer = ModalContainer;
48312
48363
  exports.NoData = NoData;
48313
48364
  exports.Paragraph = Paragraph;
48314
48365
  exports.Select = FormSelect;
@@ -48378,7 +48429,6 @@ exports.localizationService = localizationService;
48378
48429
  exports.loggerService = loggerService;
48379
48430
  exports.mapService = mapService;
48380
48431
  exports.modalStore = modalStore;
48381
- exports.modalStyle = modalStyle;
48382
48432
  exports.numberRequiredSchema = numberRequiredSchema;
48383
48433
  exports.numberSchema = numberSchema;
48384
48434
  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{modalStyle}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{SetService}from"./services/set/set.service.esm.js";
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{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};
@@ -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":"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"}
1
+ {"version":3,"file":"map.service.d.ts","sourceRoot":"","sources":["../../../src/services/map/map.service.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- import{DISTANCE_UNIT_FACTORS as t}from"./map.constants.esm.js";const e=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:e,azimuth:n,unit:i="meters"})=>{const s=t.lat*this.DEG_TO_RAD,a=t.lng*this.DEG_TO_RAD,r=this.normalizeBearing(n)*this.DEG_TO_RAD,o=this.distanceToMeters(e,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),u=Math.asin(h*E+l*c*D),L=a+Math.atan2(_*c*l,E-h*Math.sin(u));return{lat:u*this.RAD_TO_DEG,lng:this.normalizeLongitude(L*this.RAD_TO_DEG)}};haversineDistance(t,e,n="meters"){const i=t.lat*this.DEG_TO_RAD,s=e.lat*this.DEG_TO_RAD,a=(e.lat-t.lat)*this.DEG_TO_RAD,r=(e.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,n)}initialBearing(t,e){const n=t.lat*this.DEG_TO_RAD,i=e.lat*this.DEG_TO_RAD,s=t.lng*this.DEG_TO_RAD,a=e.lng*this.DEG_TO_RAD,r=Math.sin(a-s)*Math.cos(i),o=Math.cos(n)*Math.sin(i)-Math.sin(n)*Math.cos(i)*Math.cos(a-s);return this.normalizeBearing(Math.atan2(r,o)*this.RAD_TO_DEG)}convertDistance(e,n="meters"){return e/t[n]}distanceToMeters(e,n="meters"){return e*t[n]}getPolylineLength(t,e="meters"){const n=t.reduce((t,e,n,i)=>{const s=i[n+1];if(!s)return t;return t+this.haversineDistance(e,s,"meters")},0);return this.convertDistance(n,e)}coordinatesEqual(t,e){return this.haversineDistance(t,e,"meters")<=this.COORDINATE_EQUALITY_EPSILON_M}replaceInFlatRing(t,e,n,i){return t.map(t=>i(t,e)?n:t)}replaceCoordinateInLine(t,e,n,i=this.coordinatesEqual.bind(this)){return this.replaceInFlatRing(t,e,n,i)}replaceCoordinateInPolygon(t,e,n,i=this.coordinatesEqual.bind(this)){return t.map(t=>this.replaceInFlatRing(t,e,n,i))}replaceCoordinateInMultiPolygon(t,e,n,i=this.coordinatesEqual.bind(this)){return t.map(t=>this.replaceCoordinateInPolygon(t,e,n,i))}sampleLineByDistance(t,e={}){const{interval:n=1e3,maxPoints:i,unit:s="meters",includeStart:a=!1}=e;if(t.length<2)return[];const r=this.distanceToMeters(n,s);if(!Number.isFinite(r)||r<=0)return[];const o=[];let h=0,l=t[0];a&&o.push(l);for(let e=1;e<t.length;e++){const n=t[e],s=this.haversineDistance(l,n,"meters");if(Number.isFinite(s)&&0!==s){for(h+=s;h>=r;){const t=(s-(h-r))/s,e=l.lat+t*(n.lat-l.lat),a=l.lng+t*(n.lng-l.lng);if(o.push({lat:e,lng:a}),null!=i&&o.length>=i)return o;h-=r}l=n}else l=n}return null!=i?o.slice(0,i):o}getPolylineCenter(t){if(0===t.length)return null;if(1===t.length)return t[0];const e=this.getPolylineLength(t,"meters");if(0===e)return t[0];const n=e/2;let i=0,s=t[0];for(let e=1;e<t.length;e++){const a=t[e],r=this.haversineDistance(s,a,"meters");if(0!==r){if(i+r>=n){const t=(n-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,e]){return{lat:e,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))))}}};export{e as mapService};
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};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dartcom/ui-kit",
3
- "version": "10.6.0",
3
+ "version": "10.6.1",
4
4
  "description": "Кастомная библиотека компонентов Dartcom",
5
5
  "type": "module",
6
6
  "main": "./dist/index.cjs",