@geoit/ui 0.0.4 → 0.0.5
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/AGENTS.md +12 -8
- package/README.md +49 -62
- package/ai/AGENTS.md +38 -28
- package/ai/README.md +35 -1
- package/ai/catalog.json +2796 -288
- package/ai/components/geo-alert.md +3 -3
- package/ai/components/geo-back-button.md +2 -2
- package/ai/components/geo-breadcrumb.md +1 -1
- package/ai/components/geo-button.md +3 -3
- package/ai/components/geo-chart.md +103 -0
- package/ai/components/geo-checkbox.md +4 -6
- package/ai/components/geo-column-picker.md +3 -3
- package/ai/components/geo-confirm-modal.md +4 -5
- package/ai/components/geo-dashboard.md +91 -0
- package/ai/components/geo-date-picker.md +5 -3
- package/ai/components/geo-date-range-picker.md +5 -3
- package/ai/components/geo-empty-state.md +75 -0
- package/ai/components/geo-feedback-form.md +97 -0
- package/ai/components/geo-file-picker.md +4 -2
- package/ai/components/geo-forgot-password.md +78 -0
- package/ai/components/geo-form-modal.md +9 -10
- package/ai/components/geo-icon.md +3 -3
- package/ai/components/geo-input.md +8 -6
- package/ai/components/geo-layout-footer.md +70 -0
- package/ai/components/geo-layout-header-actions.md +82 -0
- package/ai/components/geo-layout-header.md +89 -0
- package/ai/components/geo-layout-sidebar.md +86 -0
- package/ai/components/geo-layout.md +155 -0
- package/ai/components/geo-list-page.md +72 -0
- package/ai/components/geo-login.md +94 -0
- package/ai/components/geo-map-admin-filter.md +80 -0
- package/ai/components/geo-map-basemap-switcher.md +75 -0
- package/ai/components/geo-map-help.md +72 -0
- package/ai/components/geo-map-layer-card.md +73 -0
- package/ai/components/geo-map-layer-panel.md +75 -0
- package/ai/components/geo-map-layers-drawer.md +78 -0
- package/ai/components/geo-map-legend.md +74 -0
- package/ai/components/geo-map-locate.md +75 -0
- package/ai/components/geo-map-location-chip.md +71 -0
- package/ai/components/geo-map-measure.md +74 -0
- package/ai/components/geo-map-opacity.md +75 -0
- package/ai/components/geo-map-parcel-popup.md +79 -0
- package/ai/components/geo-map-search.md +83 -0
- package/ai/components/geo-map-shell.md +110 -0
- package/ai/components/geo-map-snapshot.md +75 -0
- package/ai/components/geo-map-swipe.md +73 -0
- package/ai/components/geo-map-toolbar.md +76 -0
- package/ai/components/geo-map-zoom.md +74 -0
- package/ai/components/geo-map.md +205 -0
- package/ai/components/geo-overlap-result.md +88 -0
- package/ai/components/geo-page-header.md +72 -0
- package/ai/components/geo-page-title.md +1 -1
- package/ai/components/geo-pagination.md +4 -7
- package/ai/components/geo-radio.md +3 -1
- package/ai/components/geo-row-actions.md +3 -3
- package/ai/components/geo-select.md +4 -2
- package/ai/components/geo-slider.md +5 -7
- package/ai/components/geo-stat-card.md +98 -0
- package/ai/components/geo-status-tag.md +2 -2
- package/ai/components/geo-step-form-layout.md +7 -8
- package/ai/components/geo-stepper.md +3 -4
- package/ai/components/geo-table-filter.md +4 -5
- package/ai/components/geo-table-pagination.md +4 -7
- package/ai/components/geo-table-toolbar.md +7 -7
- package/ai/components/geo-table.md +17 -20
- package/ai/components/geo-tabs.md +4 -6
- package/ai/components/geo-textarea.md +4 -2
- package/ai/components/geo-toast.md +4 -4
- package/ai/components/geo-tree.md +4 -6
- package/ai/components/geo-typography.md +1 -1
- package/ai/components/geo-upload.md +9 -10
- package/ai/mockup.html +1194 -0
- package/ai/recipes.md +98 -85
- package/esm2022/lib/figma/geo-alert/geo-alert.component.mjs +19 -36
- package/esm2022/lib/figma/geo-back-button/geo-back-button.component.mjs +14 -24
- package/esm2022/lib/figma/geo-breadcrumb/geo-breadcrumb.component.mjs +8 -11
- package/esm2022/lib/figma/geo-button/geo-button.component.mjs +30 -59
- package/esm2022/lib/figma/geo-chart/geo-chart.component.mjs +88 -0
- package/esm2022/lib/figma/geo-chart/geo-chart.types.mjs +2 -0
- package/esm2022/lib/figma/geo-checkbox/geo-checkbox.component.mjs +11 -22
- package/esm2022/lib/figma/geo-confirm-modal/geo-confirm-modal.component.mjs +22 -54
- package/esm2022/lib/figma/geo-dashboard/geo-dashboard.component.mjs +49 -0
- package/esm2022/lib/figma/geo-dashboard/geo-dashboard.types.mjs +2 -0
- package/esm2022/lib/figma/geo-date-picker/geo-date-picker.component.mjs +48 -78
- package/esm2022/lib/figma/geo-date-range-picker/geo-date-range-picker.component.mjs +47 -75
- package/esm2022/lib/figma/geo-empty-state/geo-empty-state.component.mjs +25 -0
- package/esm2022/lib/figma/geo-feedback-form/geo-feedback-form.component.mjs +75 -0
- package/esm2022/lib/figma/geo-feedback-form/geo-feedback-form.types.mjs +2 -0
- package/esm2022/lib/figma/geo-file-picker/geo-file-picker.component.mjs +59 -81
- package/esm2022/lib/figma/geo-forgot-password/geo-forgot-password.component.mjs +51 -0
- package/esm2022/lib/figma/geo-form-modal/geo-form-modal.component.mjs +45 -112
- package/esm2022/lib/figma/geo-icon/geo-icon.component.mjs +22 -32
- package/esm2022/lib/figma/geo-input/geo-input.component.mjs +41 -70
- package/esm2022/lib/figma/geo-layout/footer/geo-layout-footer.component.mjs +18 -0
- package/esm2022/lib/figma/geo-layout/geo-layout-actions.directive.mjs +15 -0
- package/esm2022/lib/figma/geo-layout/geo-layout.component.mjs +79 -0
- package/esm2022/lib/figma/geo-layout/geo-layout.types.mjs +42 -0
- package/esm2022/lib/figma/geo-layout/header/geo-layout-header.component.mjs +60 -0
- package/esm2022/lib/figma/geo-layout/header-actions/geo-layout-header-actions.component.mjs +70 -0
- package/esm2022/lib/figma/geo-layout/sidebar/geo-layout-sidebar.component.mjs +90 -0
- package/esm2022/lib/figma/geo-list-page/geo-list-page.component.mjs +22 -0
- package/esm2022/lib/figma/geo-login/geo-login.component.mjs +58 -0
- package/esm2022/lib/figma/geo-login/geo-login.types.mjs +2 -0
- package/esm2022/lib/figma/geo-map/chrome/geo-map-admin-filter/geo-map-admin-filter.component.mjs +52 -0
- package/esm2022/lib/figma/geo-map/chrome/geo-map-basemap-switcher/geo-map-basemap-switcher.component.mjs +61 -0
- package/esm2022/lib/figma/geo-map/chrome/geo-map-help/geo-map-help.component.mjs +26 -0
- package/esm2022/lib/figma/geo-map/chrome/geo-map-layer-card/geo-map-layer-card.component.mjs +24 -0
- package/esm2022/lib/figma/geo-map/chrome/geo-map-layer-panel/geo-map-layer-panel.component.mjs +146 -0
- package/esm2022/lib/figma/geo-map/chrome/geo-map-layers-drawer/geo-map-layers-drawer.component.mjs +37 -0
- package/esm2022/lib/figma/geo-map/chrome/geo-map-legend/geo-map-legend.component.mjs +30 -0
- package/esm2022/lib/figma/geo-map/chrome/geo-map-locate/geo-map-locate.component.mjs +72 -0
- package/esm2022/lib/figma/geo-map/chrome/geo-map-location-chip/geo-map-location-chip.component.mjs +21 -0
- package/esm2022/lib/figma/geo-map/chrome/geo-map-measure/geo-map-measure.component.mjs +375 -0
- package/esm2022/lib/figma/geo-map/chrome/geo-map-opacity/geo-map-opacity.component.mjs +94 -0
- package/esm2022/lib/figma/geo-map/chrome/geo-map-parcel-popup/geo-map-parcel-popup.component.mjs +136 -0
- package/esm2022/lib/figma/geo-map/chrome/geo-map-search/geo-map-search.component.mjs +182 -0
- package/esm2022/lib/figma/geo-map/chrome/geo-map-shell/geo-map-shell.component.mjs +577 -0
- package/esm2022/lib/figma/geo-map/chrome/geo-map-snapshot/geo-map-snapshot.component.mjs +93 -0
- package/esm2022/lib/figma/geo-map/chrome/geo-map-swipe/geo-map-swipe.component.mjs +129 -0
- package/esm2022/lib/figma/geo-map/chrome/geo-map-toolbar/geo-map-toolbar.component.mjs +64 -0
- package/esm2022/lib/figma/geo-map/chrome/geo-map-zoom/geo-map-zoom.component.mjs +295 -0
- package/esm2022/lib/figma/geo-map/geo-map-toolbar.icons.mjs +18 -0
- package/esm2022/lib/figma/geo-map/geo-map.component.mjs +144 -0
- package/esm2022/lib/figma/geo-map/geo-map.constants.mjs +497 -0
- package/esm2022/lib/figma/geo-map/geo-map.controller.mjs +71 -0
- package/esm2022/lib/figma/geo-map/geo-map.types.mjs +2 -0
- package/esm2022/lib/figma/geo-map/services/geo-map-layer.service.mjs +368 -0
- package/esm2022/lib/figma/geo-map/services/geo-map-projection.service.mjs +110 -0
- package/esm2022/lib/figma/geo-map/services/geo-map.service.mjs +540 -0
- package/esm2022/lib/figma/geo-map/utils/geo-map-fullscreen-overlay.util.mjs +47 -0
- package/esm2022/lib/figma/geo-map/utils/geo-map-interactions.util.mjs +30 -0
- package/esm2022/lib/figma/geo-overlap-result/geo-overlap-result.component.mjs +25 -0
- package/esm2022/lib/figma/geo-overlap-result/geo-overlap-result.types.mjs +2 -0
- package/esm2022/lib/figma/geo-page-header/geo-page-header.component.mjs +23 -0
- package/esm2022/lib/figma/geo-page-title/geo-page-title.component.mjs +20 -35
- package/esm2022/lib/figma/geo-pagination/geo-pagination.component.mjs +13 -43
- package/esm2022/lib/figma/geo-radio/geo-radio.component.mjs +32 -52
- package/esm2022/lib/figma/geo-select/geo-select.component.mjs +46 -72
- package/esm2022/lib/figma/geo-slider/geo-slider.component.mjs +12 -28
- package/esm2022/lib/figma/geo-stat-card/geo-stat-card.component.mjs +163 -0
- package/esm2022/lib/figma/geo-stat-card/geo-stat-card.types.mjs +2 -0
- package/esm2022/lib/figma/geo-status-tag/geo-status-tag.component.mjs +23 -27
- package/esm2022/lib/figma/geo-step-form-layout/geo-step-form-layout.component.mjs +39 -96
- package/esm2022/lib/figma/geo-stepper/geo-stepper.component.mjs +18 -33
- package/esm2022/lib/figma/geo-table/geo-column-picker/geo-column-picker.component.mjs +14 -24
- package/esm2022/lib/figma/geo-table/geo-row-actions/geo-row-actions.component.mjs +18 -36
- package/esm2022/lib/figma/geo-table/geo-table-filter/geo-table-filter.component.mjs +41 -98
- package/esm2022/lib/figma/geo-table/geo-table-pagination/geo-table-pagination.component.mjs +40 -73
- package/esm2022/lib/figma/geo-table/geo-table-toolbar/geo-table-toolbar.component.mjs +26 -56
- package/esm2022/lib/figma/geo-table/geo-table.component.mjs +110 -210
- package/esm2022/lib/figma/geo-tabs/geo-tabs.component.mjs +33 -63
- package/esm2022/lib/figma/geo-textarea/geo-textarea.component.mjs +28 -44
- package/esm2022/lib/figma/geo-toast/geo-toast.component.mjs +18 -39
- package/esm2022/lib/figma/geo-tree/geo-tree.component.mjs +12 -40
- package/esm2022/lib/figma/geo-typography/geo-typography.component.mjs +49 -64
- package/esm2022/lib/figma/geo-upload/geo-upload.component.mjs +50 -101
- package/esm2022/lib/figma/index.mjs +50 -1
- package/esm2022/lib/styles/tokens.mjs +56 -24
- package/fesm2022/geoit-ui.mjs +5981 -1825
- package/fesm2022/geoit-ui.mjs.map +1 -1
- package/lib/figma/geo-alert/geo-alert.component.d.ts +10 -11
- package/lib/figma/geo-back-button/geo-back-button.component.d.ts +6 -7
- package/lib/figma/geo-breadcrumb/geo-breadcrumb.component.d.ts +2 -2
- package/lib/figma/geo-button/geo-button.component.d.ts +21 -17
- package/lib/figma/geo-chart/geo-chart.component.d.ts +40 -0
- package/lib/figma/geo-chart/geo-chart.types.d.ts +13 -0
- package/lib/figma/geo-checkbox/geo-checkbox.component.d.ts +6 -7
- package/lib/figma/geo-confirm-modal/geo-confirm-modal.component.d.ts +15 -17
- package/lib/figma/geo-dashboard/geo-dashboard.component.d.ts +29 -0
- package/lib/figma/geo-dashboard/geo-dashboard.types.d.ts +7 -0
- package/lib/figma/geo-date-picker/geo-date-picker.component.d.ts +26 -21
- package/lib/figma/geo-date-range-picker/geo-date-range-picker.component.d.ts +25 -20
- package/lib/figma/geo-empty-state/geo-empty-state.component.d.ts +17 -0
- package/lib/figma/geo-feedback-form/geo-feedback-form.component.d.ts +36 -0
- package/lib/figma/geo-feedback-form/geo-feedback-form.types.d.ts +8 -0
- package/lib/figma/geo-file-picker/geo-file-picker.component.d.ts +23 -20
- package/lib/figma/geo-forgot-password/geo-forgot-password.component.d.ts +24 -0
- package/lib/figma/geo-form-modal/geo-form-modal.component.d.ts +33 -35
- package/lib/figma/geo-icon/geo-icon.component.d.ts +7 -7
- package/lib/figma/geo-input/geo-input.component.d.ts +23 -21
- package/lib/figma/geo-layout/footer/geo-layout-footer.component.d.ts +10 -0
- package/lib/figma/geo-layout/geo-layout-actions.directive.d.ts +6 -0
- package/lib/figma/geo-layout/geo-layout.component.d.ts +48 -0
- package/lib/figma/geo-layout/geo-layout.types.d.ts +44 -0
- package/lib/figma/geo-layout/header/geo-layout-header.component.d.ts +31 -0
- package/lib/figma/geo-layout/header-actions/geo-layout-header-actions.component.d.ts +32 -0
- package/lib/figma/geo-layout/sidebar/geo-layout-sidebar.component.d.ts +34 -0
- package/lib/figma/geo-list-page/geo-list-page.component.d.ts +16 -0
- package/lib/figma/geo-login/geo-login.component.d.ts +27 -0
- package/lib/figma/geo-login/geo-login.types.d.ts +6 -0
- package/lib/figma/geo-map/chrome/geo-map-admin-filter/geo-map-admin-filter.component.d.ts +28 -0
- package/lib/figma/geo-map/chrome/geo-map-basemap-switcher/geo-map-basemap-switcher.component.d.ts +26 -0
- package/lib/figma/geo-map/chrome/geo-map-help/geo-map-help.component.d.ts +20 -0
- package/lib/figma/geo-map/chrome/geo-map-layer-card/geo-map-layer-card.component.d.ts +15 -0
- package/lib/figma/geo-map/chrome/geo-map-layer-panel/geo-map-layer-panel.component.d.ts +40 -0
- package/lib/figma/geo-map/chrome/geo-map-layers-drawer/geo-map-layers-drawer.component.d.ts +25 -0
- package/lib/figma/geo-map/chrome/geo-map-legend/geo-map-legend.component.d.ts +18 -0
- package/lib/figma/geo-map/chrome/geo-map-locate/geo-map-locate.component.d.ts +24 -0
- package/lib/figma/geo-map/chrome/geo-map-location-chip/geo-map-location-chip.component.d.ts +14 -0
- package/lib/figma/geo-map/chrome/geo-map-measure/geo-map-measure.component.d.ts +49 -0
- package/lib/figma/geo-map/chrome/geo-map-opacity/geo-map-opacity.component.d.ts +30 -0
- package/lib/figma/geo-map/chrome/geo-map-parcel-popup/geo-map-parcel-popup.component.d.ts +44 -0
- package/lib/figma/geo-map/chrome/geo-map-search/geo-map-search.component.d.ts +56 -0
- package/lib/figma/geo-map/chrome/geo-map-shell/geo-map-shell.component.d.ts +103 -0
- package/lib/figma/geo-map/chrome/geo-map-snapshot/geo-map-snapshot.component.d.ts +21 -0
- package/lib/figma/geo-map/chrome/geo-map-swipe/geo-map-swipe.component.d.ts +33 -0
- package/lib/figma/geo-map/chrome/geo-map-toolbar/geo-map-toolbar.component.d.ts +30 -0
- package/lib/figma/geo-map/chrome/geo-map-zoom/geo-map-zoom.component.d.ts +67 -0
- package/lib/figma/geo-map/geo-map-toolbar.icons.d.ts +17 -0
- package/lib/figma/geo-map/geo-map.component.d.ts +53 -0
- package/lib/figma/geo-map/geo-map.constants.d.ts +73 -0
- package/lib/figma/geo-map/geo-map.controller.d.ts +49 -0
- package/lib/figma/geo-map/geo-map.types.d.ts +224 -0
- package/lib/figma/geo-map/services/geo-map-layer.service.d.ts +42 -0
- package/lib/figma/geo-map/services/geo-map-projection.service.d.ts +32 -0
- package/lib/figma/geo-map/services/geo-map.service.d.ts +99 -0
- package/lib/figma/geo-map/utils/geo-map-fullscreen-overlay.util.d.ts +13 -0
- package/lib/figma/geo-map/utils/geo-map-interactions.util.d.ts +9 -0
- package/lib/figma/geo-overlap-result/geo-overlap-result.component.d.ts +18 -0
- package/lib/figma/geo-overlap-result/geo-overlap-result.types.d.ts +7 -0
- package/lib/figma/geo-page-header/geo-page-header.component.d.ts +16 -0
- package/lib/figma/geo-page-title/geo-page-title.component.d.ts +9 -9
- package/lib/figma/geo-pagination/geo-pagination.component.d.ts +9 -14
- package/lib/figma/geo-radio/geo-radio.component.d.ts +17 -15
- package/lib/figma/geo-select/geo-select.component.d.ts +24 -19
- package/lib/figma/geo-slider/geo-slider.component.d.ts +7 -9
- package/lib/figma/geo-stat-card/geo-stat-card.component.d.ts +50 -0
- package/lib/figma/geo-stat-card/geo-stat-card.types.d.ts +11 -0
- package/lib/figma/geo-status-tag/geo-status-tag.component.d.ts +7 -7
- package/lib/figma/geo-step-form-layout/geo-step-form-layout.component.d.ts +27 -29
- package/lib/figma/geo-stepper/geo-stepper.component.d.ts +6 -8
- package/lib/figma/geo-table/geo-column-picker/geo-column-picker.component.d.ts +6 -7
- package/lib/figma/geo-table/geo-row-actions/geo-row-actions.component.d.ts +11 -12
- package/lib/figma/geo-table/geo-table-filter/geo-table-filter.component.d.ts +21 -28
- package/lib/figma/geo-table/geo-table-pagination/geo-table-pagination.component.d.ts +17 -20
- package/lib/figma/geo-table/geo-table-toolbar/geo-table-toolbar.component.d.ts +17 -18
- package/lib/figma/geo-table/geo-table.component.d.ts +58 -62
- package/lib/figma/geo-tabs/geo-tabs.component.d.ts +14 -17
- package/lib/figma/geo-textarea/geo-textarea.component.d.ts +15 -13
- package/lib/figma/geo-toast/geo-toast.component.d.ts +11 -12
- package/lib/figma/geo-tree/geo-tree.component.d.ts +8 -13
- package/lib/figma/geo-typography/geo-typography.component.d.ts +13 -13
- package/lib/figma/geo-upload/geo-upload.component.d.ts +26 -28
- package/lib/figma/index.d.ts +49 -0
- package/lib/styles/tokens.d.ts +56 -23
- package/package.json +4 -2
- package/src/lib/figma/geo-map/assets/toolbar/fullscreen.svg +8 -0
- package/src/lib/figma/geo-map/assets/toolbar/home.svg +3 -0
- package/src/lib/figma/geo-map/assets/toolbar/layers.svg +3 -0
- package/src/lib/figma/geo-map/assets/toolbar/measure-area.svg +12 -0
- package/src/lib/figma/geo-map/assets/toolbar/measure-distance.svg +5 -0
- package/src/lib/figma/geo-map/assets/toolbar/pan.svg +13 -0
- package/src/lib/figma/geo-map/assets/toolbar/search.svg +3 -0
- package/src/lib/figma/geo-map/assets/toolbar/zoom-in.svg +3 -0
- package/src/lib/figma/geo-map/assets/toolbar/zoom-out.svg +5 -0
- package/src/lib/styles/design-tokens.scss +108 -35
- package/src/lib/styles/scrollbar.scss +2 -2
- package/src/lib/styles/theme.scss +1 -1
|
@@ -0,0 +1,295 @@
|
|
|
1
|
+
import { ChangeDetectionStrategy, Component, DestroyRef, effect, ElementRef, inject, input, signal, ViewEncapsulation, } from '@angular/core';
|
|
2
|
+
import { OverlayContainer } from '@angular/cdk/overlay';
|
|
3
|
+
import { NzToolTipModule } from 'ng-zorro-antd/tooltip';
|
|
4
|
+
import { always as alwaysCondition } from 'ol/events/condition';
|
|
5
|
+
import { getCenter } from 'ol/extent';
|
|
6
|
+
import DragBox from 'ol/interaction/DragBox';
|
|
7
|
+
import { GeoIconComponent } from '../../../geo-icon/geo-icon.component';
|
|
8
|
+
import { syncOverlayContainerToFullscreen, restoreOverlayContainerToBody } from '../../utils/geo-map-fullscreen-overlay.util';
|
|
9
|
+
import { pauseConflictingInteractions } from '../../utils/geo-map-interactions.util';
|
|
10
|
+
import * as i0 from "@angular/core";
|
|
11
|
+
import * as i1 from "ng-zorro-antd/tooltip";
|
|
12
|
+
/**
|
|
13
|
+
* Stacked +/- zoom control for map chrome.
|
|
14
|
+
*
|
|
15
|
+
* @summary Stacked +/- zoom control.
|
|
16
|
+
* @whenToUse Right-side map chrome.
|
|
17
|
+
* @doNotUseWhen Browser/native scroll zoom only.
|
|
18
|
+
*/
|
|
19
|
+
export class GeoMapZoomComponent {
|
|
20
|
+
destroyRef = inject(DestroyRef);
|
|
21
|
+
host = inject((ElementRef));
|
|
22
|
+
overlayContainer = inject(OverlayContainer);
|
|
23
|
+
controller = input(null);
|
|
24
|
+
/** Show prev / next zoom + fullscreen + box zoom (UC-15). */
|
|
25
|
+
showNav = input(true);
|
|
26
|
+
/** Show “xem toàn tỉnh” (TCQH.14 GD5) — fit province extent, not fullscreen. */
|
|
27
|
+
showFitProvince = input(true);
|
|
28
|
+
/**
|
|
29
|
+
* Province extent in EPSG:4326. Defaults to Lâm Đồng placeholder when omitted.
|
|
30
|
+
*/
|
|
31
|
+
provinceExtent = input(null);
|
|
32
|
+
/**
|
|
33
|
+
* Element to put in Fullscreen API.
|
|
34
|
+
* Defaults to closest `.geo-map-shell`, then the OL map target.
|
|
35
|
+
*/
|
|
36
|
+
fullscreenTarget = input(null);
|
|
37
|
+
boxMode = signal('none');
|
|
38
|
+
canZoomPrev = signal(false);
|
|
39
|
+
canZoomNext = signal(false);
|
|
40
|
+
isFullscreen = signal(false);
|
|
41
|
+
/** Visited zoom levels; `historyIndex` points at the current level. */
|
|
42
|
+
history = signal([]);
|
|
43
|
+
historyIndex = signal(-1);
|
|
44
|
+
navigatingHistory = false;
|
|
45
|
+
dragBox = null;
|
|
46
|
+
resumeInteractions = null;
|
|
47
|
+
commitTimer = null;
|
|
48
|
+
onFullscreenChange = () => {
|
|
49
|
+
this.syncFullscreenState();
|
|
50
|
+
};
|
|
51
|
+
constructor() {
|
|
52
|
+
this.destroyRef.onDestroy(() => {
|
|
53
|
+
this.clearBoxZoom();
|
|
54
|
+
document.removeEventListener('fullscreenchange', this.onFullscreenChange);
|
|
55
|
+
// Ensure Storybook / next stories get overlays back on body.
|
|
56
|
+
restoreOverlayContainerToBody(this.overlayContainer);
|
|
57
|
+
});
|
|
58
|
+
if (typeof document !== 'undefined') {
|
|
59
|
+
document.addEventListener('fullscreenchange', this.onFullscreenChange);
|
|
60
|
+
}
|
|
61
|
+
effect(() => {
|
|
62
|
+
const ctrl = this.controller();
|
|
63
|
+
if (ctrl) {
|
|
64
|
+
this.seedHistory(ctrl);
|
|
65
|
+
}
|
|
66
|
+
}, { allowSignalWrites: true });
|
|
67
|
+
}
|
|
68
|
+
ngOnDestroy() {
|
|
69
|
+
if (this.commitTimer != null) {
|
|
70
|
+
clearTimeout(this.commitTimer);
|
|
71
|
+
}
|
|
72
|
+
this.clearBoxZoom();
|
|
73
|
+
document.removeEventListener('fullscreenchange', this.onFullscreenChange);
|
|
74
|
+
}
|
|
75
|
+
zoomIn() {
|
|
76
|
+
this.runZoomAction((ctrl) => ctrl.zoomIn());
|
|
77
|
+
}
|
|
78
|
+
zoomOut() {
|
|
79
|
+
this.runZoomAction((ctrl) => ctrl.zoomOut());
|
|
80
|
+
}
|
|
81
|
+
zoomPrev() {
|
|
82
|
+
const ctrl = this.controller();
|
|
83
|
+
if (!ctrl || !this.canZoomPrev()) {
|
|
84
|
+
return;
|
|
85
|
+
}
|
|
86
|
+
this.clearBoxZoom();
|
|
87
|
+
const nextIdx = this.historyIndex() - 1;
|
|
88
|
+
this.navigatingHistory = true;
|
|
89
|
+
this.historyIndex.set(nextIdx);
|
|
90
|
+
ctrl.setZoom(this.history()[nextIdx]);
|
|
91
|
+
this.navigatingHistory = false;
|
|
92
|
+
this.refreshNavState();
|
|
93
|
+
}
|
|
94
|
+
zoomNext() {
|
|
95
|
+
const ctrl = this.controller();
|
|
96
|
+
if (!ctrl || !this.canZoomNext()) {
|
|
97
|
+
return;
|
|
98
|
+
}
|
|
99
|
+
this.clearBoxZoom();
|
|
100
|
+
const nextIdx = this.historyIndex() + 1;
|
|
101
|
+
this.navigatingHistory = true;
|
|
102
|
+
this.historyIndex.set(nextIdx);
|
|
103
|
+
ctrl.setZoom(this.history()[nextIdx]);
|
|
104
|
+
this.navigatingHistory = false;
|
|
105
|
+
this.refreshNavState();
|
|
106
|
+
}
|
|
107
|
+
/** Fit tỉnh / toàn cảnh (TCQH.14) — distinct from fullscreen. */
|
|
108
|
+
fitProvince() {
|
|
109
|
+
this.runZoomAction((ctrl) => {
|
|
110
|
+
const extent = this.provinceExtent();
|
|
111
|
+
ctrl.fitProvince(extent ?? undefined);
|
|
112
|
+
});
|
|
113
|
+
}
|
|
114
|
+
/** Toggle browser fullscreen for the map shell / target. */
|
|
115
|
+
toggleFullscreen() {
|
|
116
|
+
const el = this.resolveFullscreenElement();
|
|
117
|
+
if (!el || typeof document === 'undefined') {
|
|
118
|
+
return;
|
|
119
|
+
}
|
|
120
|
+
this.clearBoxZoom();
|
|
121
|
+
if (document.fullscreenElement === el) {
|
|
122
|
+
void document
|
|
123
|
+
.exitFullscreen()
|
|
124
|
+
.catch(() => undefined)
|
|
125
|
+
.finally(() => this.syncFullscreenState());
|
|
126
|
+
return;
|
|
127
|
+
}
|
|
128
|
+
void el
|
|
129
|
+
.requestFullscreen?.()
|
|
130
|
+
.catch(() => undefined)
|
|
131
|
+
.finally(() => this.syncFullscreenState());
|
|
132
|
+
}
|
|
133
|
+
toggleBoxZoom(mode) {
|
|
134
|
+
if (this.boxMode() === mode) {
|
|
135
|
+
this.clearBoxZoom();
|
|
136
|
+
return;
|
|
137
|
+
}
|
|
138
|
+
this.startBoxZoom(mode);
|
|
139
|
+
}
|
|
140
|
+
/** Exit box-zoom / temporary interaction so map returns to pan. */
|
|
141
|
+
resetInteractionMode() {
|
|
142
|
+
this.clearBoxZoom();
|
|
143
|
+
}
|
|
144
|
+
runZoomAction(apply) {
|
|
145
|
+
const ctrl = this.controller();
|
|
146
|
+
if (!ctrl) {
|
|
147
|
+
return;
|
|
148
|
+
}
|
|
149
|
+
this.clearBoxZoom();
|
|
150
|
+
this.seedHistory(ctrl);
|
|
151
|
+
apply(ctrl);
|
|
152
|
+
this.scheduleCommit(ctrl);
|
|
153
|
+
}
|
|
154
|
+
startBoxZoom(mode) {
|
|
155
|
+
const map = this.controller()?.getMap();
|
|
156
|
+
if (!map) {
|
|
157
|
+
return;
|
|
158
|
+
}
|
|
159
|
+
this.clearBoxZoom();
|
|
160
|
+
this.boxMode.set(mode);
|
|
161
|
+
this.resumeInteractions = pauseConflictingInteractions(map, {
|
|
162
|
+
dragPan: true,
|
|
163
|
+
doubleClickZoom: true,
|
|
164
|
+
});
|
|
165
|
+
this.dragBox = new DragBox({
|
|
166
|
+
condition: alwaysCondition,
|
|
167
|
+
className: 'ol-dragbox geo-map-zoom__dragbox',
|
|
168
|
+
});
|
|
169
|
+
this.dragBox.on('boxend', () => {
|
|
170
|
+
const ctrl = this.controller();
|
|
171
|
+
const extent = this.dragBox?.getGeometry().getExtent();
|
|
172
|
+
if (!ctrl || !extent) {
|
|
173
|
+
this.clearBoxZoom();
|
|
174
|
+
return;
|
|
175
|
+
}
|
|
176
|
+
this.seedHistory(ctrl);
|
|
177
|
+
if (mode === 'in') {
|
|
178
|
+
ctrl.fitExtent(extent, {
|
|
179
|
+
maxZoom: 20,
|
|
180
|
+
padding: [16, 16, 16, 16],
|
|
181
|
+
duration: 200,
|
|
182
|
+
});
|
|
183
|
+
}
|
|
184
|
+
else {
|
|
185
|
+
const view = map.getView();
|
|
186
|
+
const size = map.getSize();
|
|
187
|
+
if (!view || !size) {
|
|
188
|
+
this.clearBoxZoom();
|
|
189
|
+
return;
|
|
190
|
+
}
|
|
191
|
+
const current = view.getResolution();
|
|
192
|
+
if (current == null) {
|
|
193
|
+
this.clearBoxZoom();
|
|
194
|
+
return;
|
|
195
|
+
}
|
|
196
|
+
view.animate({
|
|
197
|
+
center: getCenter(extent),
|
|
198
|
+
resolution: current * 1.85,
|
|
199
|
+
duration: 200,
|
|
200
|
+
});
|
|
201
|
+
}
|
|
202
|
+
this.scheduleCommit(ctrl);
|
|
203
|
+
this.clearBoxZoom();
|
|
204
|
+
});
|
|
205
|
+
map.addInteraction(this.dragBox);
|
|
206
|
+
}
|
|
207
|
+
clearBoxZoom() {
|
|
208
|
+
const map = this.controller()?.getMap();
|
|
209
|
+
if (map && this.dragBox) {
|
|
210
|
+
map.removeInteraction(this.dragBox);
|
|
211
|
+
}
|
|
212
|
+
this.dragBox = null;
|
|
213
|
+
this.resumeInteractions?.();
|
|
214
|
+
this.resumeInteractions = null;
|
|
215
|
+
this.boxMode.set('none');
|
|
216
|
+
}
|
|
217
|
+
resolveFullscreenElement() {
|
|
218
|
+
const override = this.fullscreenTarget();
|
|
219
|
+
if (override) {
|
|
220
|
+
return override;
|
|
221
|
+
}
|
|
222
|
+
const shell = this.host.nativeElement.closest('.geo-map-shell');
|
|
223
|
+
if (shell) {
|
|
224
|
+
return shell;
|
|
225
|
+
}
|
|
226
|
+
return this.controller()?.getMap()?.getTargetElement() ?? null;
|
|
227
|
+
}
|
|
228
|
+
syncFullscreenState() {
|
|
229
|
+
const el = this.resolveFullscreenElement();
|
|
230
|
+
const active = typeof document !== 'undefined' &&
|
|
231
|
+
!!el &&
|
|
232
|
+
document.fullscreenElement === el;
|
|
233
|
+
this.isFullscreen.set(active);
|
|
234
|
+
// Overlay portals on body are not visible during Fullscreen API — remount.
|
|
235
|
+
const scope = el ??
|
|
236
|
+
this.host.nativeElement.closest('.geo-map-shell');
|
|
237
|
+
syncOverlayContainerToFullscreen(this.overlayContainer, scope);
|
|
238
|
+
// OL canvas must remeasure after layout changes to fullscreen.
|
|
239
|
+
queueMicrotask(() => this.controller()?.updateSize());
|
|
240
|
+
}
|
|
241
|
+
seedHistory(ctrl) {
|
|
242
|
+
if (this.history().length > 0) {
|
|
243
|
+
return;
|
|
244
|
+
}
|
|
245
|
+
const zoom = ctrl.getZoom();
|
|
246
|
+
if (zoom == null) {
|
|
247
|
+
return;
|
|
248
|
+
}
|
|
249
|
+
this.history.set([zoom]);
|
|
250
|
+
this.historyIndex.set(0);
|
|
251
|
+
this.refreshNavState();
|
|
252
|
+
}
|
|
253
|
+
scheduleCommit(ctrl) {
|
|
254
|
+
if (this.commitTimer != null) {
|
|
255
|
+
clearTimeout(this.commitTimer);
|
|
256
|
+
}
|
|
257
|
+
// Wait for view.animate (+ fit) to settle before reading zoom.
|
|
258
|
+
this.commitTimer = setTimeout(() => {
|
|
259
|
+
this.commitTimer = null;
|
|
260
|
+
this.commitHistory(ctrl);
|
|
261
|
+
}, 240);
|
|
262
|
+
}
|
|
263
|
+
commitHistory(ctrl) {
|
|
264
|
+
if (this.navigatingHistory) {
|
|
265
|
+
return;
|
|
266
|
+
}
|
|
267
|
+
const zoom = ctrl.getZoom();
|
|
268
|
+
if (zoom == null) {
|
|
269
|
+
return;
|
|
270
|
+
}
|
|
271
|
+
const stack = this.history().slice(0, this.historyIndex() + 1);
|
|
272
|
+
const last = stack[stack.length - 1];
|
|
273
|
+
if (last != null && Math.abs(last - zoom) < 1e-4) {
|
|
274
|
+
this.refreshNavState();
|
|
275
|
+
return;
|
|
276
|
+
}
|
|
277
|
+
stack.push(zoom);
|
|
278
|
+
this.history.set(stack);
|
|
279
|
+
this.historyIndex.set(stack.length - 1);
|
|
280
|
+
this.refreshNavState();
|
|
281
|
+
}
|
|
282
|
+
refreshNavState() {
|
|
283
|
+
const idx = this.historyIndex();
|
|
284
|
+
const len = this.history().length;
|
|
285
|
+
this.canZoomPrev.set(idx > 0);
|
|
286
|
+
this.canZoomNext.set(idx >= 0 && idx < len - 1);
|
|
287
|
+
}
|
|
288
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: GeoMapZoomComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
289
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: GeoMapZoomComponent, isStandalone: true, selector: "geo-map-zoom", inputs: { controller: { classPropertyName: "controller", publicName: "controller", isSignal: true, isRequired: false, transformFunction: null }, showNav: { classPropertyName: "showNav", publicName: "showNav", isSignal: true, isRequired: false, transformFunction: null }, showFitProvince: { classPropertyName: "showFitProvince", publicName: "showFitProvince", isSignal: true, isRequired: false, transformFunction: null }, provinceExtent: { classPropertyName: "provinceExtent", publicName: "provinceExtent", isSignal: true, isRequired: false, transformFunction: null }, fullscreenTarget: { classPropertyName: "fullscreenTarget", publicName: "fullscreenTarget", isSignal: true, isRequired: false, transformFunction: null } }, host: { classAttribute: "geo-map-zoom-host" }, ngImport: i0, template: "<div class=\"geo-map-zoom\" role=\"group\" aria-label=\"Thu ph\u00F3ng b\u1EA3n \u0111\u1ED3\">\n <button\n type=\"button\"\n class=\"geo-map-zoom__btn\"\n nz-tooltip=\"Ph\u00F3ng to\"\n nzTooltipPlacement=\"left\"\n aria-label=\"Ph\u00F3ng to\"\n [disabled]=\"!controller()\"\n (click)=\"zoomIn()\"\n >\n <geo-icon type=\"plus\" size=\"md\" />\n </button>\n <button\n type=\"button\"\n class=\"geo-map-zoom__btn\"\n nz-tooltip=\"Thu nh\u1ECF\"\n nzTooltipPlacement=\"left\"\n aria-label=\"Thu nh\u1ECF\"\n [disabled]=\"!controller()\"\n (click)=\"zoomOut()\"\n >\n <geo-icon type=\"minus\" size=\"md\" />\n </button>\n\n @if (showNav()) {\n <span class=\"geo-map-zoom__divider\" aria-hidden=\"true\"></span>\n <button\n type=\"button\"\n class=\"geo-map-zoom__btn\"\n [class.geo-map-zoom__btn--active]=\"boxMode() === 'in'\"\n nz-tooltip=\"Ph\u00F3ng to theo v\u00F9ng (k\u00E9o khung)\"\n nzTooltipPlacement=\"left\"\n aria-label=\"Ph\u00F3ng to theo v\u00F9ng\"\n [disabled]=\"!controller()\"\n (click)=\"toggleBoxZoom('in')\"\n >\n <geo-icon type=\"zoom-in\" size=\"sm\" />\n </button>\n <button\n type=\"button\"\n class=\"geo-map-zoom__btn\"\n [class.geo-map-zoom__btn--active]=\"boxMode() === 'out'\"\n nz-tooltip=\"Thu nh\u1ECF theo v\u00F9ng (k\u00E9o khung)\"\n nzTooltipPlacement=\"left\"\n aria-label=\"Thu nh\u1ECF theo v\u00F9ng\"\n [disabled]=\"!controller()\"\n (click)=\"toggleBoxZoom('out')\"\n >\n <geo-icon type=\"zoom-out\" size=\"sm\" />\n </button>\n <button\n type=\"button\"\n class=\"geo-map-zoom__btn\"\n nz-tooltip=\"Zoom tr\u01B0\u1EDBc\"\n nzTooltipPlacement=\"left\"\n aria-label=\"Zoom tr\u01B0\u1EDBc\"\n [disabled]=\"!controller() || !canZoomPrev()\"\n (click)=\"zoomPrev()\"\n >\n <geo-icon type=\"left\" size=\"sm\" />\n </button>\n <button\n type=\"button\"\n class=\"geo-map-zoom__btn\"\n nz-tooltip=\"Zoom sau\"\n nzTooltipPlacement=\"left\"\n aria-label=\"Zoom sau\"\n [disabled]=\"!controller() || !canZoomNext()\"\n (click)=\"zoomNext()\"\n >\n <geo-icon type=\"right\" size=\"sm\" />\n </button>\n @if (showFitProvince()) {\n <button\n type=\"button\"\n class=\"geo-map-zoom__btn\"\n nz-tooltip=\"Xem to\u00E0n t\u1EC9nh\"\n nzTooltipPlacement=\"left\"\n aria-label=\"Xem to\u00E0n t\u1EC9nh\"\n [disabled]=\"!controller()\"\n (click)=\"fitProvince()\"\n >\n <geo-icon type=\"expand\" size=\"sm\" />\n </button>\n }\n <button\n type=\"button\"\n class=\"geo-map-zoom__btn\"\n [class.geo-map-zoom__btn--active]=\"isFullscreen()\"\n [nz-tooltip]=\"\n isFullscreen() ? 'Tho\u00E1t to\u00E0n m\u00E0n h\u00ECnh' : 'Xem to\u00E0n b\u1EA3n \u0111\u1ED3'\n \"\n nzTooltipPlacement=\"left\"\n [attr.aria-label]=\"\n isFullscreen() ? 'Tho\u00E1t to\u00E0n m\u00E0n h\u00ECnh' : 'Xem to\u00E0n b\u1EA3n \u0111\u1ED3'\n \"\n [disabled]=\"!controller()\"\n (click)=\"toggleFullscreen()\"\n >\n <geo-icon\n [type]=\"isFullscreen() ? 'fullscreen-exit' : 'fullscreen'\"\n size=\"sm\"\n />\n </button>\n }\n</div>\n", styles: ["@charset \"UTF-8\";.geo-map-zoom-host{display:block}.geo-map-zoom{border:1px solid var(--geo-color-border-default);border-radius:var(--geo-radius-lg);background:var(--geo-color-surface-elevated);box-shadow:var(--geo-shadow-sm);display:flex;flex-direction:column;align-items:stretch;gap:2px;padding:4px}.geo-map-zoom__btn{display:inline-flex;align-items:center;justify-content:center;gap:6px;min-width:40px;min-height:40px;border:0;border-radius:var(--geo-radius);background:transparent;color:var(--geo-color-neutral-700);font:inherit;font-size:var(--geo-font-size-body-small);font-weight:var(--geo-font-weight-medium);line-height:1;cursor:pointer;transition:background-color .15s ease,color .15s ease,transform .1s ease;width:40px;padding:0}.geo-map-zoom__btn:hover:not(:disabled){background:var(--geo-color-primary-soft-hover);color:var(--geo-color-primary-default)}.geo-map-zoom__btn:active:not(:disabled){transform:scale(.98)}.geo-map-zoom__btn:disabled{opacity:.45;cursor:not-allowed}.geo-map-zoom__btn--active,.geo-map-zoom__btn--checked{background:var(--geo-color-primary-soft-active);color:var(--geo-color-primary-default)}.geo-map-zoom__btn--icon-only{width:40px;padding:0}.geo-map-zoom__btn--active{background:var(--geo-color-primary-soft-active);color:var(--geo-color-primary-default)}.geo-map-zoom__dragbox{background:color-mix(in srgb,var(--geo-color-primary-default) 18%,transparent);border:2px solid var(--geo-color-primary-default)}.geo-map-zoom__divider{height:1px;margin:2px 6px;background:var(--geo-color-neutral-100)}\n"], dependencies: [{ kind: "component", type: GeoIconComponent, selector: "geo-icon", inputs: ["type", "theme", "spin", "size", "color"] }, { kind: "ngmodule", type: NzToolTipModule }, { kind: "directive", type: i1.NzTooltipDirective, selector: "[nz-tooltip]", inputs: ["nzTooltipTitle", "nzTooltipTitleContext", "nz-tooltip", "nzTooltipTrigger", "nzTooltipPlacement", "nzTooltipOrigin", "nzTooltipVisible", "nzTooltipMouseEnterDelay", "nzTooltipMouseLeaveDelay", "nzTooltipOverlayClassName", "nzTooltipOverlayStyle", "nzTooltipArrowPointAtCenter", "cdkConnectedOverlayPush", "nzTooltipColor"], outputs: ["nzTooltipVisibleChange"], exportAs: ["nzTooltip"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
|
|
290
|
+
}
|
|
291
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: GeoMapZoomComponent, decorators: [{
|
|
292
|
+
type: Component,
|
|
293
|
+
args: [{ selector: 'geo-map-zoom', standalone: true, imports: [GeoIconComponent, NzToolTipModule], changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, host: { class: 'geo-map-zoom-host' }, template: "<div class=\"geo-map-zoom\" role=\"group\" aria-label=\"Thu ph\u00F3ng b\u1EA3n \u0111\u1ED3\">\n <button\n type=\"button\"\n class=\"geo-map-zoom__btn\"\n nz-tooltip=\"Ph\u00F3ng to\"\n nzTooltipPlacement=\"left\"\n aria-label=\"Ph\u00F3ng to\"\n [disabled]=\"!controller()\"\n (click)=\"zoomIn()\"\n >\n <geo-icon type=\"plus\" size=\"md\" />\n </button>\n <button\n type=\"button\"\n class=\"geo-map-zoom__btn\"\n nz-tooltip=\"Thu nh\u1ECF\"\n nzTooltipPlacement=\"left\"\n aria-label=\"Thu nh\u1ECF\"\n [disabled]=\"!controller()\"\n (click)=\"zoomOut()\"\n >\n <geo-icon type=\"minus\" size=\"md\" />\n </button>\n\n @if (showNav()) {\n <span class=\"geo-map-zoom__divider\" aria-hidden=\"true\"></span>\n <button\n type=\"button\"\n class=\"geo-map-zoom__btn\"\n [class.geo-map-zoom__btn--active]=\"boxMode() === 'in'\"\n nz-tooltip=\"Ph\u00F3ng to theo v\u00F9ng (k\u00E9o khung)\"\n nzTooltipPlacement=\"left\"\n aria-label=\"Ph\u00F3ng to theo v\u00F9ng\"\n [disabled]=\"!controller()\"\n (click)=\"toggleBoxZoom('in')\"\n >\n <geo-icon type=\"zoom-in\" size=\"sm\" />\n </button>\n <button\n type=\"button\"\n class=\"geo-map-zoom__btn\"\n [class.geo-map-zoom__btn--active]=\"boxMode() === 'out'\"\n nz-tooltip=\"Thu nh\u1ECF theo v\u00F9ng (k\u00E9o khung)\"\n nzTooltipPlacement=\"left\"\n aria-label=\"Thu nh\u1ECF theo v\u00F9ng\"\n [disabled]=\"!controller()\"\n (click)=\"toggleBoxZoom('out')\"\n >\n <geo-icon type=\"zoom-out\" size=\"sm\" />\n </button>\n <button\n type=\"button\"\n class=\"geo-map-zoom__btn\"\n nz-tooltip=\"Zoom tr\u01B0\u1EDBc\"\n nzTooltipPlacement=\"left\"\n aria-label=\"Zoom tr\u01B0\u1EDBc\"\n [disabled]=\"!controller() || !canZoomPrev()\"\n (click)=\"zoomPrev()\"\n >\n <geo-icon type=\"left\" size=\"sm\" />\n </button>\n <button\n type=\"button\"\n class=\"geo-map-zoom__btn\"\n nz-tooltip=\"Zoom sau\"\n nzTooltipPlacement=\"left\"\n aria-label=\"Zoom sau\"\n [disabled]=\"!controller() || !canZoomNext()\"\n (click)=\"zoomNext()\"\n >\n <geo-icon type=\"right\" size=\"sm\" />\n </button>\n @if (showFitProvince()) {\n <button\n type=\"button\"\n class=\"geo-map-zoom__btn\"\n nz-tooltip=\"Xem to\u00E0n t\u1EC9nh\"\n nzTooltipPlacement=\"left\"\n aria-label=\"Xem to\u00E0n t\u1EC9nh\"\n [disabled]=\"!controller()\"\n (click)=\"fitProvince()\"\n >\n <geo-icon type=\"expand\" size=\"sm\" />\n </button>\n }\n <button\n type=\"button\"\n class=\"geo-map-zoom__btn\"\n [class.geo-map-zoom__btn--active]=\"isFullscreen()\"\n [nz-tooltip]=\"\n isFullscreen() ? 'Tho\u00E1t to\u00E0n m\u00E0n h\u00ECnh' : 'Xem to\u00E0n b\u1EA3n \u0111\u1ED3'\n \"\n nzTooltipPlacement=\"left\"\n [attr.aria-label]=\"\n isFullscreen() ? 'Tho\u00E1t to\u00E0n m\u00E0n h\u00ECnh' : 'Xem to\u00E0n b\u1EA3n \u0111\u1ED3'\n \"\n [disabled]=\"!controller()\"\n (click)=\"toggleFullscreen()\"\n >\n <geo-icon\n [type]=\"isFullscreen() ? 'fullscreen-exit' : 'fullscreen'\"\n size=\"sm\"\n />\n </button>\n }\n</div>\n", styles: ["@charset \"UTF-8\";.geo-map-zoom-host{display:block}.geo-map-zoom{border:1px solid var(--geo-color-border-default);border-radius:var(--geo-radius-lg);background:var(--geo-color-surface-elevated);box-shadow:var(--geo-shadow-sm);display:flex;flex-direction:column;align-items:stretch;gap:2px;padding:4px}.geo-map-zoom__btn{display:inline-flex;align-items:center;justify-content:center;gap:6px;min-width:40px;min-height:40px;border:0;border-radius:var(--geo-radius);background:transparent;color:var(--geo-color-neutral-700);font:inherit;font-size:var(--geo-font-size-body-small);font-weight:var(--geo-font-weight-medium);line-height:1;cursor:pointer;transition:background-color .15s ease,color .15s ease,transform .1s ease;width:40px;padding:0}.geo-map-zoom__btn:hover:not(:disabled){background:var(--geo-color-primary-soft-hover);color:var(--geo-color-primary-default)}.geo-map-zoom__btn:active:not(:disabled){transform:scale(.98)}.geo-map-zoom__btn:disabled{opacity:.45;cursor:not-allowed}.geo-map-zoom__btn--active,.geo-map-zoom__btn--checked{background:var(--geo-color-primary-soft-active);color:var(--geo-color-primary-default)}.geo-map-zoom__btn--icon-only{width:40px;padding:0}.geo-map-zoom__btn--active{background:var(--geo-color-primary-soft-active);color:var(--geo-color-primary-default)}.geo-map-zoom__dragbox{background:color-mix(in srgb,var(--geo-color-primary-default) 18%,transparent);border:2px solid var(--geo-color-primary-default)}.geo-map-zoom__divider{height:1px;margin:2px 6px;background:var(--geo-color-neutral-100)}\n"] }]
|
|
294
|
+
}], ctorParameters: () => [] });
|
|
295
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VvLW1hcC16b29tLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2dlby11aS9zcmMvbGliL2ZpZ21hL2dlby1tYXAvY2hyb21lL2dlby1tYXAtem9vbS9nZW8tbWFwLXpvb20uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZ2VvLXVpL3NyYy9saWIvZmlnbWEvZ2VvLW1hcC9jaHJvbWUvZ2VvLW1hcC16b29tL2dlby1tYXAtem9vbS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsdUJBQXVCLEVBQ3ZCLFNBQVMsRUFDVCxVQUFVLEVBQ1YsTUFBTSxFQUNOLFVBQVUsRUFDVixNQUFNLEVBQ04sS0FBSyxFQUVMLE1BQU0sRUFDTixpQkFBaUIsR0FDbEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDeEQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3hELE9BQU8sRUFBRSxNQUFNLElBQUksZUFBZSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDaEUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUN0QyxPQUFPLE9BQU8sTUFBTSx3QkFBd0IsQ0FBQztBQUM3QyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUN4RSxPQUFPLEVBQUUsZ0NBQWdDLEVBQUUsNkJBQTZCLEVBQUUsTUFBTSw2Q0FBNkMsQ0FBQztBQUM5SCxPQUFPLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQzs7O0FBS3JGOzs7Ozs7R0FNRztBQVdILE1BQU0sT0FBTyxtQkFBbUI7SUFDYixVQUFVLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQ2hDLElBQUks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QUFHLEdBQUcsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDLE1BQU0sQ0FBQztRQUNsQyxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDOUIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ2xELENBQUM7d0dBL1NVLG1CQUFtQjs0RkFBbkIsbUJBQW1CLDAwQkN6Q2hDLHV6R0EwR0EsNGpERHhFWSxnQkFBZ0Isd0dBQUUsZUFBZTs7NEZBT2hDLG1CQUFtQjtrQkFWL0IsU0FBUzsrQkFDRSxjQUFjLGNBQ1osSUFBSSxXQUNQLENBQUMsZ0JBQWdCLEVBQUUsZUFBZSxDQUFDLG1CQUczQix1QkFBdUIsQ0FBQyxNQUFNLGlCQUNoQyxpQkFBaUIsQ0FBQyxJQUFJLFFBQy9CLEVBQUUsS0FBSyxFQUFFLG1CQUFtQixFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENvbXBvbmVudCxcbiAgRGVzdHJveVJlZixcbiAgZWZmZWN0LFxuICBFbGVtZW50UmVmLFxuICBpbmplY3QsXG4gIGlucHV0LFxuICBPbkRlc3Ryb3ksXG4gIHNpZ25hbCxcbiAgVmlld0VuY2Fwc3VsYXRpb24sXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgT3ZlcmxheUNvbnRhaW5lciB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9vdmVybGF5JztcbmltcG9ydCB7IE56VG9vbFRpcE1vZHVsZSB9IGZyb20gJ25nLXpvcnJvLWFudGQvdG9vbHRpcCc7XG5pbXBvcnQgeyBhbHdheXMgYXMgYWx3YXlzQ29uZGl0aW9uIH0gZnJvbSAnb2wvZXZlbnRzL2NvbmRpdGlvbic7XG5pbXBvcnQgeyBnZXRDZW50ZXIgfSBmcm9tICdvbC9leHRlbnQnO1xuaW1wb3J0IERyYWdCb3ggZnJvbSAnb2wvaW50ZXJhY3Rpb24vRHJhZ0JveCc7XG5pbXBvcnQgeyBHZW9JY29uQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vLi4vZ2VvLWljb24vZ2VvLWljb24uY29tcG9uZW50JztcbmltcG9ydCB7IHN5bmNPdmVybGF5Q29udGFpbmVyVG9GdWxsc2NyZWVuLCByZXN0b3JlT3ZlcmxheUNvbnRhaW5lclRvQm9keSB9IGZyb20gJy4uLy4uL3V0aWxzL2dlby1tYXAtZnVsbHNjcmVlbi1vdmVybGF5LnV0aWwnO1xuaW1wb3J0IHsgcGF1c2VDb25mbGljdGluZ0ludGVyYWN0aW9ucyB9IGZyb20gJy4uLy4uL3V0aWxzL2dlby1tYXAtaW50ZXJhY3Rpb25zLnV0aWwnO1xuaW1wb3J0IHsgR2VvTWFwQ29udHJvbGxlciB9IGZyb20gJy4uLy4uL2dlby1tYXAuY29udHJvbGxlcic7XG5cbnR5cGUgQm94Wm9vbU1vZGUgPSAnbm9uZScgfCAnaW4nIHwgJ291dCc7XG5cbi8qKlxuICogU3RhY2tlZCArLy0gem9vbSBjb250cm9sIGZvciBtYXAgY2hyb21lLlxuICpcbiAqIEBzdW1tYXJ5IFN0YWNrZWQgKy8tIHpvb20gY29udHJvbC5cbiAqIEB3aGVuVG9Vc2UgUmlnaHQtc2lkZSBtYXAgY2hyb21lLlxuICogQGRvTm90VXNlV2hlbiBCcm93c2VyL25hdGl2ZSBzY3JvbGwgem9vbSBvbmx5LlxuICovXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdnZW8tbWFwLXpvb20nLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbR2VvSWNvbkNvbXBvbmVudCwgTnpUb29sVGlwTW9kdWxlXSxcbiAgdGVtcGxhdGVVcmw6ICcuL2dlby1tYXAtem9vbS5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsOiAnLi9nZW8tbWFwLXpvb20uY29tcG9uZW50LnNjc3MnLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgaG9zdDogeyBjbGFzczogJ2dlby1tYXAtem9vbS1ob3N0JyB9LFxufSlcbmV4cG9ydCBjbGFzcyBHZW9NYXBab29tQ29tcG9uZW50IGltcGxlbWVudHMgT25EZXN0cm95IHtcbiAgcHJpdmF0ZSByZWFkb25seSBkZXN0cm95UmVmID0gaW5qZWN0KERlc3Ryb3lSZWYpO1xuICBwcml2YXRlIHJlYWRvbmx5IGhvc3QgPSBpbmplY3QoRWxlbWVudFJlZjxIVE1MRWxlbWVudD4pO1xuICBwcml2YXRlIHJlYWRvbmx5IG92ZXJsYXlDb250YWluZXIgPSBpbmplY3QoT3ZlcmxheUNvbnRhaW5lcik7XG5cbiAgcmVhZG9ubHkgY29udHJvbGxlciA9IGlucHV0PEdlb01hcENvbnRyb2xsZXIgfCBudWxsPihudWxsKTtcbiAgLyoqIFNob3cgcHJldiAvIG5leHQgem9vbSArIGZ1bGxzY3JlZW4gKyBib3ggem9vbSAoVUMtMTUpLiAqL1xuICByZWFkb25seSBzaG93TmF2ID0gaW5wdXQodHJ1ZSk7XG4gIC8qKiBTaG93IOKAnHhlbSB0b8OgbiB04buJbmjigJ0gKFRDUUguMTQgR0Q1KSDigJQgZml0IHByb3ZpbmNlIGV4dGVudCwgbm90IGZ1bGxzY3JlZW4uICovXG4gIHJlYWRvbmx5IHNob3dGaXRQcm92aW5jZSA9IGlucHV0KHRydWUpO1xuICAvKipcbiAgICogUHJvdmluY2UgZXh0ZW50IGluIEVQU0c6NDMyNi4gRGVmYXVsdHMgdG8gTMOibSDEkOG7k25nIHBsYWNlaG9sZGVyIHdoZW4gb21pdHRlZC5cbiAgICovXG4gIHJlYWRvbmx5IHByb3ZpbmNlRXh0ZW50ID0gaW5wdXQ8cmVhZG9ubHkgW251bWJlciwgbnVtYmVyLCBudW1iZXIsIG51bWJlcl0gfCBudWxsPihcbiAgICBudWxsLFxuICApO1xuICAvKipcbiAgICogRWxlbWVudCB0byBwdXQgaW4gRnVsbHNjcmVlbiBBUEkuXG4gICAqIERlZmF1bHRzIHRvIGNsb3Nlc3QgYC5nZW8tbWFwLXNoZWxsYCwgdGhlbiB0aGUgT0wgbWFwIHRhcmdldC5cbiAgICovXG4gIHJlYWRvbmx5IGZ1bGxzY3JlZW5UYXJnZXQgPSBpbnB1dDxIVE1MRWxlbWVudCB8IG51bGw+KG51bGwpO1xuXG4gIHJlYWRvbmx5IGJveE1vZGUgPSBzaWduYWw8Qm94Wm9vbU1vZGU+KCdub25lJyk7XG4gIHJlYWRvbmx5IGNhblpvb21QcmV2ID0gc2lnbmFsKGZhbHNlKTtcbiAgcmVhZG9ubHkgY2FuWm9vbU5leHQgPSBzaWduYWwoZmFsc2UpO1xuICByZWFkb25seSBpc0Z1bGxzY3JlZW4gPSBzaWduYWwoZmFsc2UpO1xuXG4gIC8qKiBWaXNpdGVkIHpvb20gbGV2ZWxzOyBgaGlzdG9yeUluZGV4YCBwb2ludHMgYXQgdGhlIGN1cnJlbnQgbGV2ZWwuICovXG4gIHByaXZhdGUgcmVhZG9ubHkgaGlzdG9yeSA9IHNpZ25hbDxudW1iZXJbXT4oW10pO1xuICBwcml2YXRlIHJlYWRvbmx5IGhpc3RvcnlJbmRleCA9IHNpZ25hbCgtMSk7XG4gIHByaXZhdGUgbmF2aWdhdGluZ0hpc3RvcnkgPSBmYWxzZTtcbiAgcHJpdmF0ZSBkcmFnQm94OiBEcmFnQm94IHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgcmVzdW1lSW50ZXJhY3Rpb25zOiAoKCkgPT4gdm9pZCkgfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSBjb21taXRUaW1lcjogUmV0dXJuVHlwZTx0eXBlb2Ygc2V0VGltZW91dD4gfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSByZWFkb25seSBvbkZ1bGxzY3JlZW5DaGFuZ2UgPSAoKTogdm9pZCA9PiB7XG4gICAgdGhpcy5zeW5jRnVsbHNjcmVlblN0YXRlKCk7XG4gIH07XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5kZXN0cm95UmVmLm9uRGVzdHJveSgoKSA9PiB7XG4gICAgICB0aGlzLmNsZWFyQm94Wm9vbSgpO1xuICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignZnVsbHNjcmVlbmNoYW5nZScsIHRoaXMub25GdWxsc2NyZWVuQ2hhbmdlKTtcbiAgICAgIC8vIEVuc3VyZSBTdG9yeWJvb2sgLyBuZXh0IHN0b3JpZXMgZ2V0IG92ZXJsYXlzIGJhY2sgb24gYm9keS5cbiAgICAgIHJlc3RvcmVPdmVybGF5Q29udGFpbmVyVG9Cb2R5KHRoaXMub3ZlcmxheUNvbnRhaW5lcik7XG4gICAgfSk7XG5cbiAgICBpZiAodHlwZW9mIGRvY3VtZW50ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignZnVsbHNjcmVlbmNoYW5nZScsIHRoaXMub25GdWxsc2NyZWVuQ2hhbmdlKTtcbiAgICB9XG5cbiAgICBlZmZlY3QoXG4gICAgICAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGN0cmwgPSB0aGlzLmNvbnRyb2xsZXIoKTtcbiAgICAgICAgaWYgKGN0cmwpIHtcbiAgICAgICAgICB0aGlzLnNlZWRIaXN0b3J5KGN0cmwpO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgeyBhbGxvd1NpZ25hbFdyaXRlczogdHJ1ZSB9LFxuICAgICk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5jb21taXRUaW1lciAhPSBudWxsKSB7XG4gICAgICBjbGVhclRpbWVvdXQodGhpcy5jb21taXRUaW1lcik7XG4gICAgfVxuICAgIHRoaXMuY2xlYXJCb3hab29tKCk7XG4gICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignZnVsbHNjcmVlbmNoYW5nZScsIHRoaXMub25GdWxsc2NyZWVuQ2hhbmdlKTtcbiAgfVxuXG4gIHpvb21JbigpOiB2b2lkIHtcbiAgICB0aGlzLnJ1blpvb21BY3Rpb24oKGN0cmwpID0+IGN0cmwuem9vbUluKCkpO1xuICB9XG5cbiAgem9vbU91dCgpOiB2b2lkIHtcbiAgICB0aGlzLnJ1blpvb21BY3Rpb24oKGN0cmwpID0+IGN0cmwuem9vbU91dCgpKTtcbiAgfVxuXG4gIHpvb21QcmV2KCk6IHZvaWQge1xuICAgIGNvbnN0IGN0cmwgPSB0aGlzLmNvbnRyb2xsZXIoKTtcbiAgICBpZiAoIWN0cmwgfHwgIXRoaXMuY2FuWm9vbVByZXYoKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLmNsZWFyQm94Wm9vbSgpO1xuICAgIGNvbnN0IG5leHRJZHggPSB0aGlzLmhpc3RvcnlJbmRleCgpIC0gMTtcbiAgICB0aGlzLm5hdmlnYXRpbmdIaXN0b3J5ID0gdHJ1ZTtcbiAgICB0aGlzLmhpc3RvcnlJbmRleC5zZXQobmV4dElkeCk7XG4gICAgY3RybC5zZXRab29tKHRoaXMuaGlzdG9yeSgpW25leHRJZHhdKTtcbiAgICB0aGlzLm5hdmlnYXRpbmdIaXN0b3J5ID0gZmFsc2U7XG4gICAgdGhpcy5yZWZyZXNoTmF2U3RhdGUoKTtcbiAgfVxuXG4gIHpvb21OZXh0KCk6IHZvaWQge1xuICAgIGNvbnN0IGN0cmwgPSB0aGlzLmNvbnRyb2xsZXIoKTtcbiAgICBpZiAoIWN0cmwgfHwgIXRoaXMuY2FuWm9vbU5leHQoKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLmNsZWFyQm94Wm9vbSgpO1xuICAgIGNvbnN0IG5leHRJZHggPSB0aGlzLmhpc3RvcnlJbmRleCgpICsgMTtcbiAgICB0aGlzLm5hdmlnYXRpbmdIaXN0b3J5ID0gdHJ1ZTtcbiAgICB0aGlzLmhpc3RvcnlJbmRleC5zZXQobmV4dElkeCk7XG4gICAgY3RybC5zZXRab29tKHRoaXMuaGlzdG9yeSgpW25leHRJZHhdKTtcbiAgICB0aGlzLm5hdmlnYXRpbmdIaXN0b3J5ID0gZmFsc2U7XG4gICAgdGhpcy5yZWZyZXNoTmF2U3RhdGUoKTtcbiAgfVxuXG4gIC8qKiBGaXQgdOG7iW5oIC8gdG/DoG4gY+G6o25oIChUQ1FILjE0KSDigJQgZGlzdGluY3QgZnJvbSBmdWxsc2NyZWVuLiAqL1xuICBmaXRQcm92aW5jZSgpOiB2b2lkIHtcbiAgICB0aGlzLnJ1blpvb21BY3Rpb24oKGN0cmwpID0+IHtcbiAgICAgIGNvbnN0IGV4dGVudCA9IHRoaXMucHJvdmluY2VFeHRlbnQoKTtcbiAgICAgIGN0cmwuZml0UHJvdmluY2UoZXh0ZW50ID8/IHVuZGVmaW5lZCk7XG4gICAgfSk7XG4gIH1cblxuICAvKiogVG9nZ2xlIGJyb3dzZXIgZnVsbHNjcmVlbiBmb3IgdGhlIG1hcCBzaGVsbCAvIHRhcmdldC4gKi9cbiAgdG9nZ2xlRnVsbHNjcmVlbigpOiB2b2lkIHtcbiAgICBjb25zdCBlbCA9IHRoaXMucmVzb2x2ZUZ1bGxzY3JlZW5FbGVtZW50KCk7XG4gICAgaWYgKCFlbCB8fCB0eXBlb2YgZG9jdW1lbnQgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuY2xlYXJCb3hab29tKCk7XG4gICAgaWYgKGRvY3VtZW50LmZ1bGxzY3JlZW5FbGVtZW50ID09PSBlbCkge1xuICAgICAgdm9pZCBkb2N1bWVudFxuICAgICAgICAuZXhpdEZ1bGxzY3JlZW4oKVxuICAgICAgICAuY2F0Y2goKCkgPT4gdW5kZWZpbmVkKVxuICAgICAgICAuZmluYWxseSgoKSA9PiB0aGlzLnN5bmNGdWxsc2NyZWVuU3RhdGUoKSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHZvaWQgZWxcbiAgICAgIC5yZXF1ZXN0RnVsbHNjcmVlbj8uKClcbiAgICAgIC5jYXRjaCgoKSA9PiB1bmRlZmluZWQpXG4gICAgICAuZmluYWxseSgoKSA9PiB0aGlzLnN5bmNGdWxsc2NyZWVuU3RhdGUoKSk7XG4gIH1cblxuICB0b2dnbGVCb3hab29tKG1vZGU6IEV4Y2x1ZGU8Qm94Wm9vbU1vZGUsICdub25lJz4pOiB2b2lkIHtcbiAgICBpZiAodGhpcy5ib3hNb2RlKCkgPT09IG1vZGUpIHtcbiAgICAgIHRoaXMuY2xlYXJCb3hab29tKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuc3RhcnRCb3hab29tKG1vZGUpO1xuICB9XG5cbiAgLyoqIEV4aXQgYm94LXpvb20gLyB0ZW1wb3JhcnkgaW50ZXJhY3Rpb24gc28gbWFwIHJldHVybnMgdG8gcGFuLiAqL1xuICByZXNldEludGVyYWN0aW9uTW9kZSgpOiB2b2lkIHtcbiAgICB0aGlzLmNsZWFyQm94Wm9vbSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBydW5ab29tQWN0aW9uKGFwcGx5OiAoY3RybDogR2VvTWFwQ29udHJvbGxlcikgPT4gdm9pZCk6IHZvaWQge1xuICAgIGNvbnN0IGN0cmwgPSB0aGlzLmNvbnRyb2xsZXIoKTtcbiAgICBpZiAoIWN0cmwpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5jbGVhckJveFpvb20oKTtcbiAgICB0aGlzLnNlZWRIaXN0b3J5KGN0cmwpO1xuICAgIGFwcGx5KGN0cmwpO1xuICAgIHRoaXMuc2NoZWR1bGVDb21taXQoY3RybCk7XG4gIH1cblxuICBwcml2YXRlIHN0YXJ0Qm94Wm9vbShtb2RlOiBFeGNsdWRlPEJveFpvb21Nb2RlLCAnbm9uZSc+KTogdm9pZCB7XG4gICAgY29uc3QgbWFwID0gdGhpcy5jb250cm9sbGVyKCk/LmdldE1hcCgpO1xuICAgIGlmICghbWFwKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuY2xlYXJCb3hab29tKCk7XG4gICAgdGhpcy5ib3hNb2RlLnNldChtb2RlKTtcbiAgICB0aGlzLnJlc3VtZUludGVyYWN0aW9ucyA9IHBhdXNlQ29uZmxpY3RpbmdJbnRlcmFjdGlvbnMobWFwLCB7XG4gICAgICBkcmFnUGFuOiB0cnVlLFxuICAgICAgZG91YmxlQ2xpY2tab29tOiB0cnVlLFxuICAgIH0pO1xuXG4gICAgdGhpcy5kcmFnQm94ID0gbmV3IERyYWdCb3goe1xuICAgICAgY29uZGl0aW9uOiBhbHdheXNDb25kaXRpb24sXG4gICAgICBjbGFzc05hbWU6ICdvbC1kcmFnYm94IGdlby1tYXAtem9vbV9fZHJhZ2JveCcsXG4gICAgfSk7XG4gICAgdGhpcy5kcmFnQm94Lm9uKCdib3hlbmQnLCAoKSA9PiB7XG4gICAgICBjb25zdCBjdHJsID0gdGhpcy5jb250cm9sbGVyKCk7XG4gICAgICBjb25zdCBleHRlbnQgPSB0aGlzLmRyYWdCb3g/LmdldEdlb21ldHJ5KCkuZ2V0RXh0ZW50KCk7XG4gICAgICBpZiAoIWN0cmwgfHwgIWV4dGVudCkge1xuICAgICAgICB0aGlzLmNsZWFyQm94Wm9vbSgpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICB0aGlzLnNlZWRIaXN0b3J5KGN0cmwpO1xuICAgICAgaWYgKG1vZGUgPT09ICdpbicpIHtcbiAgICAgICAgY3RybC5maXRFeHRlbnQoZXh0ZW50IGFzIFtudW1iZXIsIG51bWJlciwgbnVtYmVyLCBudW1iZXJdLCB7XG4gICAgICAgICAgbWF4Wm9vbTogMjAsXG4gICAgICAgICAgcGFkZGluZzogWzE2LCAxNiwgMTYsIDE2XSxcbiAgICAgICAgICBkdXJhdGlvbjogMjAwLFxuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IHZpZXcgPSBtYXAuZ2V0VmlldygpO1xuICAgICAgICBjb25zdCBzaXplID0gbWFwLmdldFNpemUoKTtcbiAgICAgICAgaWYgKCF2aWV3IHx8ICFzaXplKSB7XG4gICAgICAgICAgdGhpcy5jbGVhckJveFpvb20oKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY3VycmVudCA9IHZpZXcuZ2V0UmVzb2x1dGlvbigpO1xuICAgICAgICBpZiAoY3VycmVudCA9PSBudWxsKSB7XG4gICAgICAgICAgdGhpcy5jbGVhckJveFpvb20oKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdmlldy5hbmltYXRlKHtcbiAgICAgICAgICBjZW50ZXI6IGdldENlbnRlcihleHRlbnQpLFxuICAgICAgICAgIHJlc29sdXRpb246IGN1cnJlbnQgKiAxLjg1LFxuICAgICAgICAgIGR1cmF0aW9uOiAyMDAsXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgdGhpcy5zY2hlZHVsZUNvbW1pdChjdHJsKTtcbiAgICAgIHRoaXMuY2xlYXJCb3hab29tKCk7XG4gICAgfSk7XG4gICAgbWFwLmFkZEludGVyYWN0aW9uKHRoaXMuZHJhZ0JveCk7XG4gIH1cblxuICBwcml2YXRlIGNsZWFyQm94Wm9vbSgpOiB2b2lkIHtcbiAgICBjb25zdCBtYXAgPSB0aGlzLmNvbnRyb2xsZXIoKT8uZ2V0TWFwKCk7XG4gICAgaWYgKG1hcCAmJiB0aGlzLmRyYWdCb3gpIHtcbiAgICAgIG1hcC5yZW1vdmVJbnRlcmFjdGlvbih0aGlzLmRyYWdCb3gpO1xuICAgIH1cbiAgICB0aGlzLmRyYWdCb3ggPSBudWxsO1xuICAgIHRoaXMucmVzdW1lSW50ZXJhY3Rpb25zPy4oKTtcbiAgICB0aGlzLnJlc3VtZUludGVyYWN0aW9ucyA9IG51bGw7XG4gICAgdGhpcy5ib3hNb2RlLnNldCgnbm9uZScpO1xuICB9XG5cbiAgcHJpdmF0ZSByZXNvbHZlRnVsbHNjcmVlbkVsZW1lbnQoKTogSFRNTEVsZW1lbnQgfCBudWxsIHtcbiAgICBjb25zdCBvdmVycmlkZSA9IHRoaXMuZnVsbHNjcmVlblRhcmdldCgpO1xuICAgIGlmIChvdmVycmlkZSkge1xuICAgICAgcmV0dXJuIG92ZXJyaWRlO1xuICAgIH1cbiAgICBjb25zdCBzaGVsbCA9IHRoaXMuaG9zdC5uYXRpdmVFbGVtZW50LmNsb3Nlc3QoXG4gICAgICAnLmdlby1tYXAtc2hlbGwnLFxuICAgICkgYXMgSFRNTEVsZW1lbnQgfCBudWxsO1xuICAgIGlmIChzaGVsbCkge1xuICAgICAgcmV0dXJuIHNoZWxsO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5jb250cm9sbGVyKCk/LmdldE1hcCgpPy5nZXRUYXJnZXRFbGVtZW50KCkgPz8gbnVsbDtcbiAgfVxuXG4gIHByaXZhdGUgc3luY0Z1bGxzY3JlZW5TdGF0ZSgpOiB2b2lkIHtcbiAgICBjb25zdCBlbCA9IHRoaXMucmVzb2x2ZUZ1bGxzY3JlZW5FbGVtZW50KCk7XG4gICAgY29uc3QgYWN0aXZlID1cbiAgICAgIHR5cGVvZiBkb2N1bWVudCAhPT0gJ3VuZGVmaW5lZCcgJiZcbiAgICAgICEhZWwgJiZcbiAgICAgIGRvY3VtZW50LmZ1bGxzY3JlZW5FbGVtZW50ID09PSBlbDtcbiAgICB0aGlzLmlzRnVsbHNjcmVlbi5zZXQoYWN0aXZlKTtcblxuICAgIC8vIE92ZXJsYXkgcG9ydGFscyBvbiBib2R5IGFyZSBub3QgdmlzaWJsZSBkdXJpbmcgRnVsbHNjcmVlbiBBUEkg4oCUIHJlbW91bnQuXG4gICAgY29uc3Qgc2NvcGUgPVxuICAgICAgZWwgPz9cbiAgICAgICh0aGlzLmhvc3QubmF0aXZlRWxlbWVudC5jbG9zZXN0KCcuZ2VvLW1hcC1zaGVsbCcpIGFzIEhUTUxFbGVtZW50IHwgbnVsbCk7XG4gICAgc3luY092ZXJsYXlDb250YWluZXJUb0Z1bGxzY3JlZW4odGhpcy5vdmVybGF5Q29udGFpbmVyLCBzY29wZSk7XG5cbiAgICAvLyBPTCBjYW52YXMgbXVzdCByZW1lYXN1cmUgYWZ0ZXIgbGF5b3V0IGNoYW5nZXMgdG8gZnVsbHNjcmVlbi5cbiAgICBxdWV1ZU1pY3JvdGFzaygoKSA9PiB0aGlzLmNvbnRyb2xsZXIoKT8udXBkYXRlU2l6ZSgpKTtcbiAgfVxuXG4gIHByaXZhdGUgc2VlZEhpc3RvcnkoY3RybDogR2VvTWFwQ29udHJvbGxlcik6IHZvaWQge1xuICAgIGlmICh0aGlzLmhpc3RvcnkoKS5sZW5ndGggPiAwKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHpvb20gPSBjdHJsLmdldFpvb20oKTtcbiAgICBpZiAoem9vbSA9PSBudWxsKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuaGlzdG9yeS5zZXQoW3pvb21dKTtcbiAgICB0aGlzLmhpc3RvcnlJbmRleC5zZXQoMCk7XG4gICAgdGhpcy5yZWZyZXNoTmF2U3RhdGUoKTtcbiAgfVxuXG4gIHByaXZhdGUgc2NoZWR1bGVDb21taXQoY3RybDogR2VvTWFwQ29udHJvbGxlcik6IHZvaWQge1xuICAgIGlmICh0aGlzLmNvbW1pdFRpbWVyICE9IG51bGwpIHtcbiAgICAgIGNsZWFyVGltZW91dCh0aGlzLmNvbW1pdFRpbWVyKTtcbiAgICB9XG4gICAgLy8gV2FpdCBmb3Igdmlldy5hbmltYXRlICgrIGZpdCkgdG8gc2V0dGxlIGJlZm9yZSByZWFkaW5nIHpvb20uXG4gICAgdGhpcy5jb21taXRUaW1lciA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5jb21taXRUaW1lciA9IG51bGw7XG4gICAgICB0aGlzLmNvbW1pdEhpc3RvcnkoY3RybCk7XG4gICAgfSwgMjQwKTtcbiAgfVxuXG4gIHByaXZhdGUgY29tbWl0SGlzdG9yeShjdHJsOiBHZW9NYXBDb250cm9sbGVyKTogdm9pZCB7XG4gICAgaWYgKHRoaXMubmF2aWdhdGluZ0hpc3RvcnkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3Qgem9vbSA9IGN0cmwuZ2V0Wm9vbSgpO1xuICAgIGlmICh6b29tID09IG51bGwpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3Qgc3RhY2sgPSB0aGlzLmhpc3RvcnkoKS5zbGljZSgwLCB0aGlzLmhpc3RvcnlJbmRleCgpICsgMSk7XG4gICAgY29uc3QgbGFzdCA9IHN0YWNrW3N0YWNrLmxlbmd0aCAtIDFdO1xuICAgIGlmIChsYXN0ICE9IG51bGwgJiYgTWF0aC5hYnMobGFzdCAtIHpvb20pIDwgMWUtNCkge1xuICAgICAgdGhpcy5yZWZyZXNoTmF2U3RhdGUoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgc3RhY2sucHVzaCh6b29tKTtcbiAgICB0aGlzLmhpc3Rvcnkuc2V0KHN0YWNrKTtcbiAgICB0aGlzLmhpc3RvcnlJbmRleC5zZXQoc3RhY2subGVuZ3RoIC0gMSk7XG4gICAgdGhpcy5yZWZyZXNoTmF2U3RhdGUoKTtcbiAgfVxuXG4gIHByaXZhdGUgcmVmcmVzaE5hdlN0YXRlKCk6IHZvaWQge1xuICAgIGNvbnN0IGlkeCA9IHRoaXMuaGlzdG9yeUluZGV4KCk7XG4gICAgY29uc3QgbGVuID0gdGhpcy5oaXN0b3J5KCkubGVuZ3RoO1xuICAgIHRoaXMuY2FuWm9vbVByZXYuc2V0KGlkeCA+IDApO1xuICAgIHRoaXMuY2FuWm9vbU5leHQuc2V0KGlkeCA+PSAwICYmIGlkeCA8IGxlbiAtIDEpO1xuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwiZ2VvLW1hcC16b29tXCIgcm9sZT1cImdyb3VwXCIgYXJpYS1sYWJlbD1cIlRodSBwaMOzbmcgYuG6o24gxJHhu5NcIj5cbiAgPGJ1dHRvblxuICAgIHR5cGU9XCJidXR0b25cIlxuICAgIGNsYXNzPVwiZ2VvLW1hcC16b29tX19idG5cIlxuICAgIG56LXRvb2x0aXA9XCJQaMOzbmcgdG9cIlxuICAgIG56VG9vbHRpcFBsYWNlbWVudD1cImxlZnRcIlxuICAgIGFyaWEtbGFiZWw9XCJQaMOzbmcgdG9cIlxuICAgIFtkaXNhYmxlZF09XCIhY29udHJvbGxlcigpXCJcbiAgICAoY2xpY2spPVwiem9vbUluKClcIlxuICA+XG4gICAgPGdlby1pY29uIHR5cGU9XCJwbHVzXCIgc2l6ZT1cIm1kXCIgLz5cbiAgPC9idXR0b24+XG4gIDxidXR0b25cbiAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICBjbGFzcz1cImdlby1tYXAtem9vbV9fYnRuXCJcbiAgICBuei10b29sdGlwPVwiVGh1IG5o4buPXCJcbiAgICBuelRvb2x0aXBQbGFjZW1lbnQ9XCJsZWZ0XCJcbiAgICBhcmlhLWxhYmVsPVwiVGh1IG5o4buPXCJcbiAgICBbZGlzYWJsZWRdPVwiIWNvbnRyb2xsZXIoKVwiXG4gICAgKGNsaWNrKT1cInpvb21PdXQoKVwiXG4gID5cbiAgICA8Z2VvLWljb24gdHlwZT1cIm1pbnVzXCIgc2l6ZT1cIm1kXCIgLz5cbiAgPC9idXR0b24+XG5cbiAgQGlmIChzaG93TmF2KCkpIHtcbiAgICA8c3BhbiBjbGFzcz1cImdlby1tYXAtem9vbV9fZGl2aWRlclwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvc3Bhbj5cbiAgICA8YnV0dG9uXG4gICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgIGNsYXNzPVwiZ2VvLW1hcC16b29tX19idG5cIlxuICAgICAgW2NsYXNzLmdlby1tYXAtem9vbV9fYnRuLS1hY3RpdmVdPVwiYm94TW9kZSgpID09PSAnaW4nXCJcbiAgICAgIG56LXRvb2x0aXA9XCJQaMOzbmcgdG8gdGhlbyB2w7luZyAoa8OpbyBraHVuZylcIlxuICAgICAgbnpUb29sdGlwUGxhY2VtZW50PVwibGVmdFwiXG4gICAgICBhcmlhLWxhYmVsPVwiUGjDs25nIHRvIHRoZW8gdsO5bmdcIlxuICAgICAgW2Rpc2FibGVkXT1cIiFjb250cm9sbGVyKClcIlxuICAgICAgKGNsaWNrKT1cInRvZ2dsZUJveFpvb20oJ2luJylcIlxuICAgID5cbiAgICAgIDxnZW8taWNvbiB0eXBlPVwiem9vbS1pblwiIHNpemU9XCJzbVwiIC8+XG4gICAgPC9idXR0b24+XG4gICAgPGJ1dHRvblxuICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICBjbGFzcz1cImdlby1tYXAtem9vbV9fYnRuXCJcbiAgICAgIFtjbGFzcy5nZW8tbWFwLXpvb21fX2J0bi0tYWN0aXZlXT1cImJveE1vZGUoKSA9PT0gJ291dCdcIlxuICAgICAgbnotdG9vbHRpcD1cIlRodSBuaOG7jyB0aGVvIHbDuW5nIChrw6lvIGtodW5nKVwiXG4gICAgICBuelRvb2x0aXBQbGFjZW1lbnQ9XCJsZWZ0XCJcbiAgICAgIGFyaWEtbGFiZWw9XCJUaHUgbmjhu48gdGhlbyB2w7luZ1wiXG4gICAgICBbZGlzYWJsZWRdPVwiIWNvbnRyb2xsZXIoKVwiXG4gICAgICAoY2xpY2spPVwidG9nZ2xlQm94Wm9vbSgnb3V0JylcIlxuICAgID5cbiAgICAgIDxnZW8taWNvbiB0eXBlPVwiem9vbS1vdXRcIiBzaXplPVwic21cIiAvPlxuICAgIDwvYnV0dG9uPlxuICAgIDxidXR0b25cbiAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgY2xhc3M9XCJnZW8tbWFwLXpvb21fX2J0blwiXG4gICAgICBuei10b29sdGlwPVwiWm9vbSB0csaw4bubY1wiXG4gICAgICBuelRvb2x0aXBQbGFjZW1lbnQ9XCJsZWZ0XCJcbiAgICAgIGFyaWEtbGFiZWw9XCJab29tIHRyxrDhu5tjXCJcbiAgICAgIFtkaXNhYmxlZF09XCIhY29udHJvbGxlcigpIHx8ICFjYW5ab29tUHJldigpXCJcbiAgICAgIChjbGljayk9XCJ6b29tUHJldigpXCJcbiAgICA+XG4gICAgICA8Z2VvLWljb24gdHlwZT1cImxlZnRcIiBzaXplPVwic21cIiAvPlxuICAgIDwvYnV0dG9uPlxuICAgIDxidXR0b25cbiAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgY2xhc3M9XCJnZW8tbWFwLXpvb21fX2J0blwiXG4gICAgICBuei10b29sdGlwPVwiWm9vbSBzYXVcIlxuICAgICAgbnpUb29sdGlwUGxhY2VtZW50PVwibGVmdFwiXG4gICAgICBhcmlhLWxhYmVsPVwiWm9vbSBzYXVcIlxuICAgICAgW2Rpc2FibGVkXT1cIiFjb250cm9sbGVyKCkgfHwgIWNhblpvb21OZXh0KClcIlxuICAgICAgKGNsaWNrKT1cInpvb21OZXh0KClcIlxuICAgID5cbiAgICAgIDxnZW8taWNvbiB0eXBlPVwicmlnaHRcIiBzaXplPVwic21cIiAvPlxuICAgIDwvYnV0dG9uPlxuICAgIEBpZiAoc2hvd0ZpdFByb3ZpbmNlKCkpIHtcbiAgICAgIDxidXR0b25cbiAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgIGNsYXNzPVwiZ2VvLW1hcC16b29tX19idG5cIlxuICAgICAgICBuei10b29sdGlwPVwiWGVtIHRvw6BuIHThu4luaFwiXG4gICAgICAgIG56VG9vbHRpcFBsYWNlbWVudD1cImxlZnRcIlxuICAgICAgICBhcmlhLWxhYmVsPVwiWGVtIHRvw6BuIHThu4luaFwiXG4gICAgICAgIFtkaXNhYmxlZF09XCIhY29udHJvbGxlcigpXCJcbiAgICAgICAgKGNsaWNrKT1cImZpdFByb3ZpbmNlKClcIlxuICAgICAgPlxuICAgICAgICA8Z2VvLWljb24gdHlwZT1cImV4cGFuZFwiIHNpemU9XCJzbVwiIC8+XG4gICAgICA8L2J1dHRvbj5cbiAgICB9XG4gICAgPGJ1dHRvblxuICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICBjbGFzcz1cImdlby1tYXAtem9vbV9fYnRuXCJcbiAgICAgIFtjbGFzcy5nZW8tbWFwLXpvb21fX2J0bi0tYWN0aXZlXT1cImlzRnVsbHNjcmVlbigpXCJcbiAgICAgIFtuei10b29sdGlwXT1cIlxuICAgICAgICBpc0Z1bGxzY3JlZW4oKSA/ICdUaG/DoXQgdG/DoG4gbcOgbiBow6xuaCcgOiAnWGVtIHRvw6BuIGLhuqNuIMSR4buTJ1xuICAgICAgXCJcbiAgICAgIG56VG9vbHRpcFBsYWNlbWVudD1cImxlZnRcIlxuICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJcbiAgICAgICAgaXNGdWxsc2NyZWVuKCkgPyAnVGhvw6F0IHRvw6BuIG3DoG4gaMOsbmgnIDogJ1hlbSB0b8OgbiBi4bqjbiDEkeG7kydcbiAgICAgIFwiXG4gICAgICBbZGlzYWJsZWRdPVwiIWNvbnRyb2xsZXIoKVwiXG4gICAgICAoY2xpY2spPVwidG9nZ2xlRnVsbHNjcmVlbigpXCJcbiAgICA+XG4gICAgICA8Z2VvLWljb25cbiAgICAgICAgW3R5cGVdPVwiaXNGdWxsc2NyZWVuKCkgPyAnZnVsbHNjcmVlbi1leGl0JyA6ICdmdWxsc2NyZWVuJ1wiXG4gICAgICAgIHNpemU9XCJzbVwiXG4gICAgICAvPlxuICAgIDwvYnV0dG9uPlxuICB9XG48L2Rpdj5cbiJdfQ==
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Packaged fallback for ng-packagr (cannot resolve `import … from '*.svg'`).
|
|
3
|
+
* Source of truth for the SVG files remains `assets/toolbar/*.svg`.
|
|
4
|
+
* Demo / Vite builds use `geo-map-toolbar.icons.ts` (real SVG URL imports).
|
|
5
|
+
*/
|
|
6
|
+
export const GEO_MAP_TOOLBAR_ASSET_BASE = '/geo-map-assets/toolbar';
|
|
7
|
+
export const GEO_MAP_TOOLBAR_ICONS = {
|
|
8
|
+
home: `${GEO_MAP_TOOLBAR_ASSET_BASE}/home.svg`,
|
|
9
|
+
search: `${GEO_MAP_TOOLBAR_ASSET_BASE}/search.svg`,
|
|
10
|
+
pan: `${GEO_MAP_TOOLBAR_ASSET_BASE}/pan.svg`,
|
|
11
|
+
zoomIn: `${GEO_MAP_TOOLBAR_ASSET_BASE}/zoom-in.svg`,
|
|
12
|
+
zoomOut: `${GEO_MAP_TOOLBAR_ASSET_BASE}/zoom-out.svg`,
|
|
13
|
+
fullscreen: `${GEO_MAP_TOOLBAR_ASSET_BASE}/fullscreen.svg`,
|
|
14
|
+
measureDistance: `${GEO_MAP_TOOLBAR_ASSET_BASE}/measure-distance.svg`,
|
|
15
|
+
measureArea: `${GEO_MAP_TOOLBAR_ASSET_BASE}/measure-area.svg`,
|
|
16
|
+
layers: `${GEO_MAP_TOOLBAR_ASSET_BASE}/layers.svg`,
|
|
17
|
+
};
|
|
18
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VvLW1hcC10b29sYmFyLmljb25zLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZ2VvLXVpL3NyYy9saWIvZmlnbWEvZ2VvLW1hcC9nZW8tbWFwLXRvb2xiYXIuaWNvbnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7R0FJRztBQUNILE1BQU0sQ0FBQyxNQUFNLDBCQUEwQixHQUFHLHlCQUF5QixDQUFDO0FBRXBFLE1BQU0sQ0FBQyxNQUFNLHFCQUFxQixHQUFHO0lBQ25DLElBQUksRUFBRSxHQUFHLDBCQUEwQixXQUFXO0lBQzlDLE1BQU0sRUFBRSxHQUFHLDBCQUEwQixhQUFhO0lBQ2xELEdBQUcsRUFBRSxHQUFHLDBCQUEwQixVQUFVO0lBQzVDLE1BQU0sRUFBRSxHQUFHLDBCQUEwQixjQUFjO0lBQ25ELE9BQU8sRUFBRSxHQUFHLDBCQUEwQixlQUFlO0lBQ3JELFVBQVUsRUFBRSxHQUFHLDBCQUEwQixpQkFBaUI7SUFDMUQsZUFBZSxFQUFFLEdBQUcsMEJBQTBCLHVCQUF1QjtJQUNyRSxXQUFXLEVBQUUsR0FBRywwQkFBMEIsbUJBQW1CO0lBQzdELE1BQU0sRUFBRSxHQUFHLDBCQUEwQixhQUFhO0NBQzFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFBhY2thZ2VkIGZhbGxiYWNrIGZvciBuZy1wYWNrYWdyIChjYW5ub3QgcmVzb2x2ZSBgaW1wb3J0IOKApiBmcm9tICcqLnN2ZydgKS5cbiAqIFNvdXJjZSBvZiB0cnV0aCBmb3IgdGhlIFNWRyBmaWxlcyByZW1haW5zIGBhc3NldHMvdG9vbGJhci8qLnN2Z2AuXG4gKiBEZW1vIC8gVml0ZSBidWlsZHMgdXNlIGBnZW8tbWFwLXRvb2xiYXIuaWNvbnMudHNgIChyZWFsIFNWRyBVUkwgaW1wb3J0cykuXG4gKi9cbmV4cG9ydCBjb25zdCBHRU9fTUFQX1RPT0xCQVJfQVNTRVRfQkFTRSA9ICcvZ2VvLW1hcC1hc3NldHMvdG9vbGJhcic7XG5cbmV4cG9ydCBjb25zdCBHRU9fTUFQX1RPT0xCQVJfSUNPTlMgPSB7XG4gIGhvbWU6IGAke0dFT19NQVBfVE9PTEJBUl9BU1NFVF9CQVNFfS9ob21lLnN2Z2AsXG4gIHNlYXJjaDogYCR7R0VPX01BUF9UT09MQkFSX0FTU0VUX0JBU0V9L3NlYXJjaC5zdmdgLFxuICBwYW46IGAke0dFT19NQVBfVE9PTEJBUl9BU1NFVF9CQVNFfS9wYW4uc3ZnYCxcbiAgem9vbUluOiBgJHtHRU9fTUFQX1RPT0xCQVJfQVNTRVRfQkFTRX0vem9vbS1pbi5zdmdgLFxuICB6b29tT3V0OiBgJHtHRU9fTUFQX1RPT0xCQVJfQVNTRVRfQkFTRX0vem9vbS1vdXQuc3ZnYCxcbiAgZnVsbHNjcmVlbjogYCR7R0VPX01BUF9UT09MQkFSX0FTU0VUX0JBU0V9L2Z1bGxzY3JlZW4uc3ZnYCxcbiAgbWVhc3VyZURpc3RhbmNlOiBgJHtHRU9fTUFQX1RPT0xCQVJfQVNTRVRfQkFTRX0vbWVhc3VyZS1kaXN0YW5jZS5zdmdgLFxuICBtZWFzdXJlQXJlYTogYCR7R0VPX01BUF9UT09MQkFSX0FTU0VUX0JBU0V9L21lYXN1cmUtYXJlYS5zdmdgLFxuICBsYXllcnM6IGAke0dFT19NQVBfVE9PTEJBUl9BU1NFVF9CQVNFfS9sYXllcnMuc3ZnYCxcbn0gYXMgY29uc3Q7XG4iXX0=
|
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
import { afterNextRender, ChangeDetectionStrategy, Component, effect, inject, input, output, viewChild, ViewEncapsulation, } from '@angular/core';
|
|
2
|
+
import { GEO_MAP_DEFAULT_CENTER, GEO_MAP_DEFAULT_HEIGHT, GEO_MAP_DEFAULT_MAX_ZOOM, GEO_MAP_DEFAULT_MIN_ZOOM, GEO_MAP_DEFAULT_VIEW_PROJECTION, GEO_MAP_DEFAULT_ZOOM, } from './geo-map.constants';
|
|
3
|
+
import { GeoMapController } from './geo-map.controller';
|
|
4
|
+
import { GeoMapLayerService } from './services/geo-map-layer.service';
|
|
5
|
+
import { GeoMapProjectionService } from './services/geo-map-projection.service';
|
|
6
|
+
import { GeoMapService } from './services/geo-map.service';
|
|
7
|
+
import * as i0 from "@angular/core";
|
|
8
|
+
/**
|
|
9
|
+
* OpenLayers map host with basemap, typed layers, and GeoMapController.
|
|
10
|
+
*
|
|
11
|
+
* @summary OpenLayers map host with basemap, typed layers, and GeoMapController.
|
|
12
|
+
* @whenToUse Any map viewport (portal quy hoạch, tra cứu thửa). Peers: ol, proj4.
|
|
13
|
+
* @doNotUseWhen Non-map charting — use dashboard libs.
|
|
14
|
+
*/
|
|
15
|
+
export class GeoMapComponent {
|
|
16
|
+
mapService = inject(GeoMapService);
|
|
17
|
+
layerService = inject(GeoMapLayerService);
|
|
18
|
+
projectionService = inject(GeoMapProjectionService);
|
|
19
|
+
viewport = viewChild.required('viewport');
|
|
20
|
+
/** Map center in view projection (default Web Mercator Đà Lạt area). */
|
|
21
|
+
center = input([...GEO_MAP_DEFAULT_CENTER]);
|
|
22
|
+
zoom = input(GEO_MAP_DEFAULT_ZOOM);
|
|
23
|
+
minZoom = input(GEO_MAP_DEFAULT_MIN_ZOOM);
|
|
24
|
+
maxZoom = input(GEO_MAP_DEFAULT_MAX_ZOOM);
|
|
25
|
+
viewProjection = input(GEO_MAP_DEFAULT_VIEW_PROJECTION);
|
|
26
|
+
basemap = input('osm');
|
|
27
|
+
layers = input([]);
|
|
28
|
+
height = input(GEO_MAP_DEFAULT_HEIGHT);
|
|
29
|
+
/**
|
|
30
|
+
* When true, custom projections listed in `projections` are registered before map create.
|
|
31
|
+
* Built-in EPSG:4326 / EPSG:3857 never need registration.
|
|
32
|
+
* VN-2000 definitions must be supplied via `projections` — never invented.
|
|
33
|
+
*/
|
|
34
|
+
registerProjections = input(true);
|
|
35
|
+
/** Custom CRS definitions (e.g. local VN-2000 from environment). */
|
|
36
|
+
projections = input([]);
|
|
37
|
+
showMousePosition = input(false);
|
|
38
|
+
mousePositionProjection = input('EPSG:4326');
|
|
39
|
+
/** When false, hide built-in OL zoom control (prefer `geo-map-zoom`). */
|
|
40
|
+
showZoomControl = input(true);
|
|
41
|
+
mapReady = output();
|
|
42
|
+
mapClick = output();
|
|
43
|
+
viewChange = output();
|
|
44
|
+
initError = output();
|
|
45
|
+
controller = null;
|
|
46
|
+
unsubscribers = [];
|
|
47
|
+
initAttempted = false;
|
|
48
|
+
lastSyncedCenterKey = '';
|
|
49
|
+
lastSyncedZoom = null;
|
|
50
|
+
lastSyncedLayersRef = null;
|
|
51
|
+
constructor() {
|
|
52
|
+
afterNextRender(() => {
|
|
53
|
+
this.bootstrapMap();
|
|
54
|
+
});
|
|
55
|
+
effect(() => {
|
|
56
|
+
const center = this.center();
|
|
57
|
+
const zoom = this.zoom();
|
|
58
|
+
if (!this.mapService.isInitialized()) {
|
|
59
|
+
return;
|
|
60
|
+
}
|
|
61
|
+
const centerKey = `${center[0]},${center[1]}`;
|
|
62
|
+
if (centerKey === this.lastSyncedCenterKey && zoom === this.lastSyncedZoom) {
|
|
63
|
+
return;
|
|
64
|
+
}
|
|
65
|
+
this.lastSyncedCenterKey = centerKey;
|
|
66
|
+
this.lastSyncedZoom = zoom;
|
|
67
|
+
this.mapService.setCenter(center, zoom);
|
|
68
|
+
});
|
|
69
|
+
effect(() => {
|
|
70
|
+
const configs = this.layers();
|
|
71
|
+
if (!this.mapService.isInitialized()) {
|
|
72
|
+
return;
|
|
73
|
+
}
|
|
74
|
+
// Skip identical reference (Storybook / parent re-renders).
|
|
75
|
+
if (configs === this.lastSyncedLayersRef) {
|
|
76
|
+
return;
|
|
77
|
+
}
|
|
78
|
+
this.lastSyncedLayersRef = configs;
|
|
79
|
+
this.mapService.syncLayers(configs, { replaceBasemapShortcut: false });
|
|
80
|
+
});
|
|
81
|
+
}
|
|
82
|
+
ngOnDestroy() {
|
|
83
|
+
for (const unsub of this.unsubscribers) {
|
|
84
|
+
unsub();
|
|
85
|
+
}
|
|
86
|
+
this.unsubscribers = [];
|
|
87
|
+
this.mapService.destroy();
|
|
88
|
+
this.controller = null;
|
|
89
|
+
}
|
|
90
|
+
bootstrapMap() {
|
|
91
|
+
if (this.initAttempted) {
|
|
92
|
+
return;
|
|
93
|
+
}
|
|
94
|
+
this.initAttempted = true;
|
|
95
|
+
try {
|
|
96
|
+
if (this.registerProjections()) {
|
|
97
|
+
for (const config of this.projections()) {
|
|
98
|
+
if (!this.projectionService.isRegistered(config.code)) {
|
|
99
|
+
this.projectionService.registerProjection(config);
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
const el = this.viewport().nativeElement;
|
|
104
|
+
const center = this.center();
|
|
105
|
+
const zoom = this.zoom();
|
|
106
|
+
this.lastSyncedCenterKey = `${center[0]},${center[1]}`;
|
|
107
|
+
this.lastSyncedZoom = zoom;
|
|
108
|
+
this.lastSyncedLayersRef = this.layers();
|
|
109
|
+
this.mapService.init({
|
|
110
|
+
target: el,
|
|
111
|
+
center,
|
|
112
|
+
zoom,
|
|
113
|
+
minZoom: this.minZoom(),
|
|
114
|
+
maxZoom: this.maxZoom(),
|
|
115
|
+
viewProjection: this.viewProjection(),
|
|
116
|
+
basemap: this.basemap(),
|
|
117
|
+
layers: this.lastSyncedLayersRef,
|
|
118
|
+
showMousePosition: this.showMousePosition(),
|
|
119
|
+
mousePositionProjection: this.mousePositionProjection(),
|
|
120
|
+
showZoomControl: this.showZoomControl(),
|
|
121
|
+
});
|
|
122
|
+
this.controller = new GeoMapController(this.mapService, this.layerService);
|
|
123
|
+
this.unsubscribers.push(this.mapService.onClick((event) => this.mapClick.emit(event)), this.mapService.onViewChange((event) => this.viewChange.emit(event)));
|
|
124
|
+
this.mapReady.emit(this.controller);
|
|
125
|
+
}
|
|
126
|
+
catch (err) {
|
|
127
|
+
const message = err instanceof Error
|
|
128
|
+
? err.message
|
|
129
|
+
: 'Không khởi tạo được bản đồ. Vui lòng thử lại.';
|
|
130
|
+
console.error('[GeoMapComponent] init failed', err);
|
|
131
|
+
this.initError.emit(message);
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: GeoMapComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
135
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "18.2.14", type: GeoMapComponent, isStandalone: true, selector: "geo-map", inputs: { center: { classPropertyName: "center", publicName: "center", isSignal: true, isRequired: false, transformFunction: null }, zoom: { classPropertyName: "zoom", publicName: "zoom", isSignal: true, isRequired: false, transformFunction: null }, minZoom: { classPropertyName: "minZoom", publicName: "minZoom", isSignal: true, isRequired: false, transformFunction: null }, maxZoom: { classPropertyName: "maxZoom", publicName: "maxZoom", isSignal: true, isRequired: false, transformFunction: null }, viewProjection: { classPropertyName: "viewProjection", publicName: "viewProjection", isSignal: true, isRequired: false, transformFunction: null }, basemap: { classPropertyName: "basemap", publicName: "basemap", isSignal: true, isRequired: false, transformFunction: null }, layers: { classPropertyName: "layers", publicName: "layers", isSignal: true, isRequired: false, transformFunction: null }, height: { classPropertyName: "height", publicName: "height", isSignal: true, isRequired: false, transformFunction: null }, registerProjections: { classPropertyName: "registerProjections", publicName: "registerProjections", isSignal: true, isRequired: false, transformFunction: null }, projections: { classPropertyName: "projections", publicName: "projections", isSignal: true, isRequired: false, transformFunction: null }, showMousePosition: { classPropertyName: "showMousePosition", publicName: "showMousePosition", isSignal: true, isRequired: false, transformFunction: null }, mousePositionProjection: { classPropertyName: "mousePositionProjection", publicName: "mousePositionProjection", isSignal: true, isRequired: false, transformFunction: null }, showZoomControl: { classPropertyName: "showZoomControl", publicName: "showZoomControl", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { mapReady: "mapReady", mapClick: "mapClick", viewChange: "viewChange", initError: "initError" }, host: { properties: { "style.height": "height()" }, classAttribute: "geo-map-host" }, providers: [GeoMapService, GeoMapLayerService], viewQueries: [{ propertyName: "viewport", first: true, predicate: ["viewport"], descendants: true, isSignal: true }], ngImport: i0, template: "<div\n #viewport\n class=\"geo-map__viewport\"\n role=\"application\"\n aria-label=\"B\u1EA3n \u0111\u1ED3 quy ho\u1EA1ch s\u1EED d\u1EE5ng \u0111\u1EA5t\"\n></div>\n", styles: [":root,:host{--ol-background-color: white;--ol-accent-background-color: #F5F5F5;--ol-subtle-background-color: rgba(128, 128, 128, .25);--ol-partial-background-color: rgba(255, 255, 255, .75);--ol-foreground-color: #333333;--ol-subtle-foreground-color: #666666;--ol-brand-color: #00AAFF}.ol-box{box-sizing:border-box;border-radius:2px;border:1.5px solid var(--ol-background-color);background-color:var(--ol-partial-background-color)}.ol-mouse-position{top:8px;right:8px;position:absolute}.ol-scale-line{background:var(--ol-partial-background-color);border-radius:4px;bottom:8px;left:8px;padding:2px;position:absolute}.ol-scale-line-inner{border:1px solid var(--ol-subtle-foreground-color);border-top:none;color:var(--ol-foreground-color);font-size:10px;text-align:center;margin:1px;will-change:contents,width;transition:all .25s}.ol-scale-bar{position:absolute;bottom:8px;left:8px}.ol-scale-bar-inner{display:flex}.ol-scale-step-marker{width:1px;height:15px;background-color:var(--ol-foreground-color);float:right;z-index:10}.ol-scale-step-text{position:absolute;bottom:-5px;font-size:10px;z-index:11;color:var(--ol-foreground-color);text-shadow:-1.5px 0 var(--ol-partial-background-color),0 1.5px var(--ol-partial-background-color),1.5px 0 var(--ol-partial-background-color),0 -1.5px var(--ol-partial-background-color)}.ol-scale-text{position:absolute;font-size:12px;text-align:center;bottom:25px;color:var(--ol-foreground-color);text-shadow:-1.5px 0 var(--ol-partial-background-color),0 1.5px var(--ol-partial-background-color),1.5px 0 var(--ol-partial-background-color),0 -1.5px var(--ol-partial-background-color)}.ol-scale-singlebar{position:relative;height:10px;z-index:9;box-sizing:border-box;border:1px solid var(--ol-foreground-color)}.ol-scale-singlebar-even{background-color:var(--ol-subtle-foreground-color)}.ol-scale-singlebar-odd{background-color:var(--ol-background-color)}.ol-unsupported{display:none}.ol-viewport,.ol-unselectable{-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;-webkit-tap-highlight-color:transparent}.ol-viewport canvas{all:unset;overflow:hidden}.ol-viewport{touch-action:pan-x pan-y}.ol-selectable{-webkit-touch-callout:default;-webkit-user-select:text;-moz-user-select:text;user-select:text}.ol-grabbing{cursor:-webkit-grabbing;cursor:-moz-grabbing;cursor:grabbing}.ol-grab{cursor:move;cursor:-webkit-grab;cursor:-moz-grab;cursor:grab}.ol-control{position:absolute;background-color:var(--ol-subtle-background-color);border-radius:4px}.ol-zoom{top:.5em;left:.5em}.ol-rotate{top:.5em;right:.5em;transition:opacity .25s linear,visibility 0s linear}.ol-rotate.ol-hidden{opacity:0;visibility:hidden;transition:opacity .25s linear,visibility 0s linear .25s}.ol-zoom-extent{top:4.643em;left:.5em}.ol-full-screen{right:.5em;top:.5em}.ol-control button{display:block;margin:1px;padding:0;color:var(--ol-subtle-foreground-color);font-weight:700;text-decoration:none;font-size:inherit;text-align:center;height:1.375em;width:1.375em;line-height:.4em;background-color:var(--ol-background-color);border:none;border-radius:2px}.ol-control button::-moz-focus-inner{border:none;padding:0}.ol-zoom-extent button{line-height:1.4em}.ol-compass{display:block;font-weight:400;will-change:transform}.ol-touch .ol-control button{font-size:1.5em}.ol-touch .ol-zoom-extent{top:5.5em}.ol-control button:hover,.ol-control button:focus{text-decoration:none;outline:1px solid var(--ol-subtle-foreground-color);color:var(--ol-foreground-color)}.ol-zoom .ol-zoom-in{border-radius:2px 2px 0 0}.ol-zoom .ol-zoom-out{border-radius:0 0 2px 2px}.ol-attribution{text-align:right;bottom:.5em;right:.5em;max-width:calc(100% - 1.3em);display:flex;flex-flow:row-reverse;align-items:center}.ol-attribution a{color:var(--ol-subtle-foreground-color);text-decoration:none}.ol-attribution ul{margin:0;padding:1px .5em;color:var(--ol-foreground-color);text-shadow:0 0 2px var(--ol-background-color);font-size:12px}.ol-attribution li{display:inline;list-style:none}.ol-attribution li:not(:last-child):after{content:\" \"}.ol-attribution img{max-height:2em;max-width:inherit;vertical-align:middle}.ol-attribution button{flex-shrink:0}.ol-attribution.ol-collapsed ul{display:none}.ol-attribution:not(.ol-collapsed){background:var(--ol-partial-background-color)}.ol-attribution.ol-uncollapsible{bottom:0;right:0;border-radius:4px 0 0}.ol-attribution.ol-uncollapsible img{margin-top:-.2em;max-height:1.6em}.ol-attribution.ol-uncollapsible button{display:none}.ol-zoomslider{top:4.5em;left:.5em;height:200px}.ol-zoomslider button{position:relative;height:10px}.ol-touch .ol-zoomslider{top:5.5em}.ol-overviewmap{left:.5em;bottom:.5em}.ol-overviewmap.ol-uncollapsible{bottom:0;left:0;border-radius:0 4px 0 0}.ol-overviewmap .ol-overviewmap-map,.ol-overviewmap button{display:block}.ol-overviewmap .ol-overviewmap-map{border:1px solid var(--ol-subtle-foreground-color);height:150px;width:150px}.ol-overviewmap:not(.ol-collapsed) button{bottom:0;left:0;position:absolute}.ol-overviewmap.ol-collapsed .ol-overviewmap-map,.ol-overviewmap.ol-uncollapsible button{display:none}.ol-overviewmap:not(.ol-collapsed){background:var(--ol-subtle-background-color)}.ol-overviewmap-box{border:1.5px dotted var(--ol-subtle-foreground-color)}.ol-overviewmap .ol-overviewmap-box:hover{cursor:move}.ol-overviewmap .ol-viewport:hover{cursor:pointer}.geo-map-host{display:block;position:relative;width:100%;min-height:240px;overflow:hidden;contain:layout paint;border-radius:var(--geo-radius);background:var(--geo-color-primary-background-alt);border:1px solid var(--geo-color-primary-border);font-family:var(--geo-font-family);color:var(--geo-color-neutral-800)}.geo-map__viewport{position:absolute;inset:0;width:100%;height:100%;overflow:hidden}.geo-map-host .ol-viewport{border-radius:inherit}.geo-map-host .ol-control{border-radius:var(--geo-radius);background:color-mix(in srgb,var(--geo-color-neutral-white) 92%,transparent);border:1px solid var(--geo-color-primary-border);box-shadow:none}.geo-map-host .ol-control button{color:var(--geo-color-neutral-800);background:transparent;font-family:var(--geo-font-family)}.geo-map-host .ol-control button:hover,.geo-map-host .ol-control button:focus-visible{background:var(--geo-color-primary-surface-light);color:var(--geo-color-primary-default);outline:2px solid var(--geo-color-primary-default);outline-offset:1px}.geo-map-host .ol-scale-line{left:16px;bottom:44px;background:color-mix(in srgb,var(--geo-color-neutral-white) 92%,transparent);border-radius:var(--geo-radius);border:1px solid var(--geo-color-primary-border)}.geo-map-host .ol-scale-line-inner{border-color:var(--geo-color-neutral-700);color:var(--geo-color-neutral-700);font-size:var(--geo-font-size-caption)}.geo-map__mouse-position{position:absolute;left:16px;right:auto;bottom:12px;z-index:1;padding:6px 10px;border-radius:var(--geo-radius);background:color-mix(in srgb,var(--geo-color-neutral-white) 94%,transparent);border:1px solid var(--geo-color-primary-border);color:var(--geo-color-neutral-700);font-size:var(--geo-font-size-caption);font-variant-numeric:tabular-nums;pointer-events:none;white-space:nowrap}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
|
|
136
|
+
}
|
|
137
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: GeoMapComponent, decorators: [{
|
|
138
|
+
type: Component,
|
|
139
|
+
args: [{ selector: 'geo-map', standalone: true, imports: [], encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, providers: [GeoMapService, GeoMapLayerService], host: {
|
|
140
|
+
class: 'geo-map-host',
|
|
141
|
+
'[style.height]': 'height()',
|
|
142
|
+
}, template: "<div\n #viewport\n class=\"geo-map__viewport\"\n role=\"application\"\n aria-label=\"B\u1EA3n \u0111\u1ED3 quy ho\u1EA1ch s\u1EED d\u1EE5ng \u0111\u1EA5t\"\n></div>\n", styles: [":root,:host{--ol-background-color: white;--ol-accent-background-color: #F5F5F5;--ol-subtle-background-color: rgba(128, 128, 128, .25);--ol-partial-background-color: rgba(255, 255, 255, .75);--ol-foreground-color: #333333;--ol-subtle-foreground-color: #666666;--ol-brand-color: #00AAFF}.ol-box{box-sizing:border-box;border-radius:2px;border:1.5px solid var(--ol-background-color);background-color:var(--ol-partial-background-color)}.ol-mouse-position{top:8px;right:8px;position:absolute}.ol-scale-line{background:var(--ol-partial-background-color);border-radius:4px;bottom:8px;left:8px;padding:2px;position:absolute}.ol-scale-line-inner{border:1px solid var(--ol-subtle-foreground-color);border-top:none;color:var(--ol-foreground-color);font-size:10px;text-align:center;margin:1px;will-change:contents,width;transition:all .25s}.ol-scale-bar{position:absolute;bottom:8px;left:8px}.ol-scale-bar-inner{display:flex}.ol-scale-step-marker{width:1px;height:15px;background-color:var(--ol-foreground-color);float:right;z-index:10}.ol-scale-step-text{position:absolute;bottom:-5px;font-size:10px;z-index:11;color:var(--ol-foreground-color);text-shadow:-1.5px 0 var(--ol-partial-background-color),0 1.5px var(--ol-partial-background-color),1.5px 0 var(--ol-partial-background-color),0 -1.5px var(--ol-partial-background-color)}.ol-scale-text{position:absolute;font-size:12px;text-align:center;bottom:25px;color:var(--ol-foreground-color);text-shadow:-1.5px 0 var(--ol-partial-background-color),0 1.5px var(--ol-partial-background-color),1.5px 0 var(--ol-partial-background-color),0 -1.5px var(--ol-partial-background-color)}.ol-scale-singlebar{position:relative;height:10px;z-index:9;box-sizing:border-box;border:1px solid var(--ol-foreground-color)}.ol-scale-singlebar-even{background-color:var(--ol-subtle-foreground-color)}.ol-scale-singlebar-odd{background-color:var(--ol-background-color)}.ol-unsupported{display:none}.ol-viewport,.ol-unselectable{-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;-webkit-tap-highlight-color:transparent}.ol-viewport canvas{all:unset;overflow:hidden}.ol-viewport{touch-action:pan-x pan-y}.ol-selectable{-webkit-touch-callout:default;-webkit-user-select:text;-moz-user-select:text;user-select:text}.ol-grabbing{cursor:-webkit-grabbing;cursor:-moz-grabbing;cursor:grabbing}.ol-grab{cursor:move;cursor:-webkit-grab;cursor:-moz-grab;cursor:grab}.ol-control{position:absolute;background-color:var(--ol-subtle-background-color);border-radius:4px}.ol-zoom{top:.5em;left:.5em}.ol-rotate{top:.5em;right:.5em;transition:opacity .25s linear,visibility 0s linear}.ol-rotate.ol-hidden{opacity:0;visibility:hidden;transition:opacity .25s linear,visibility 0s linear .25s}.ol-zoom-extent{top:4.643em;left:.5em}.ol-full-screen{right:.5em;top:.5em}.ol-control button{display:block;margin:1px;padding:0;color:var(--ol-subtle-foreground-color);font-weight:700;text-decoration:none;font-size:inherit;text-align:center;height:1.375em;width:1.375em;line-height:.4em;background-color:var(--ol-background-color);border:none;border-radius:2px}.ol-control button::-moz-focus-inner{border:none;padding:0}.ol-zoom-extent button{line-height:1.4em}.ol-compass{display:block;font-weight:400;will-change:transform}.ol-touch .ol-control button{font-size:1.5em}.ol-touch .ol-zoom-extent{top:5.5em}.ol-control button:hover,.ol-control button:focus{text-decoration:none;outline:1px solid var(--ol-subtle-foreground-color);color:var(--ol-foreground-color)}.ol-zoom .ol-zoom-in{border-radius:2px 2px 0 0}.ol-zoom .ol-zoom-out{border-radius:0 0 2px 2px}.ol-attribution{text-align:right;bottom:.5em;right:.5em;max-width:calc(100% - 1.3em);display:flex;flex-flow:row-reverse;align-items:center}.ol-attribution a{color:var(--ol-subtle-foreground-color);text-decoration:none}.ol-attribution ul{margin:0;padding:1px .5em;color:var(--ol-foreground-color);text-shadow:0 0 2px var(--ol-background-color);font-size:12px}.ol-attribution li{display:inline;list-style:none}.ol-attribution li:not(:last-child):after{content:\" \"}.ol-attribution img{max-height:2em;max-width:inherit;vertical-align:middle}.ol-attribution button{flex-shrink:0}.ol-attribution.ol-collapsed ul{display:none}.ol-attribution:not(.ol-collapsed){background:var(--ol-partial-background-color)}.ol-attribution.ol-uncollapsible{bottom:0;right:0;border-radius:4px 0 0}.ol-attribution.ol-uncollapsible img{margin-top:-.2em;max-height:1.6em}.ol-attribution.ol-uncollapsible button{display:none}.ol-zoomslider{top:4.5em;left:.5em;height:200px}.ol-zoomslider button{position:relative;height:10px}.ol-touch .ol-zoomslider{top:5.5em}.ol-overviewmap{left:.5em;bottom:.5em}.ol-overviewmap.ol-uncollapsible{bottom:0;left:0;border-radius:0 4px 0 0}.ol-overviewmap .ol-overviewmap-map,.ol-overviewmap button{display:block}.ol-overviewmap .ol-overviewmap-map{border:1px solid var(--ol-subtle-foreground-color);height:150px;width:150px}.ol-overviewmap:not(.ol-collapsed) button{bottom:0;left:0;position:absolute}.ol-overviewmap.ol-collapsed .ol-overviewmap-map,.ol-overviewmap.ol-uncollapsible button{display:none}.ol-overviewmap:not(.ol-collapsed){background:var(--ol-subtle-background-color)}.ol-overviewmap-box{border:1.5px dotted var(--ol-subtle-foreground-color)}.ol-overviewmap .ol-overviewmap-box:hover{cursor:move}.ol-overviewmap .ol-viewport:hover{cursor:pointer}.geo-map-host{display:block;position:relative;width:100%;min-height:240px;overflow:hidden;contain:layout paint;border-radius:var(--geo-radius);background:var(--geo-color-primary-background-alt);border:1px solid var(--geo-color-primary-border);font-family:var(--geo-font-family);color:var(--geo-color-neutral-800)}.geo-map__viewport{position:absolute;inset:0;width:100%;height:100%;overflow:hidden}.geo-map-host .ol-viewport{border-radius:inherit}.geo-map-host .ol-control{border-radius:var(--geo-radius);background:color-mix(in srgb,var(--geo-color-neutral-white) 92%,transparent);border:1px solid var(--geo-color-primary-border);box-shadow:none}.geo-map-host .ol-control button{color:var(--geo-color-neutral-800);background:transparent;font-family:var(--geo-font-family)}.geo-map-host .ol-control button:hover,.geo-map-host .ol-control button:focus-visible{background:var(--geo-color-primary-surface-light);color:var(--geo-color-primary-default);outline:2px solid var(--geo-color-primary-default);outline-offset:1px}.geo-map-host .ol-scale-line{left:16px;bottom:44px;background:color-mix(in srgb,var(--geo-color-neutral-white) 92%,transparent);border-radius:var(--geo-radius);border:1px solid var(--geo-color-primary-border)}.geo-map-host .ol-scale-line-inner{border-color:var(--geo-color-neutral-700);color:var(--geo-color-neutral-700);font-size:var(--geo-font-size-caption)}.geo-map__mouse-position{position:absolute;left:16px;right:auto;bottom:12px;z-index:1;padding:6px 10px;border-radius:var(--geo-radius);background:color-mix(in srgb,var(--geo-color-neutral-white) 94%,transparent);border:1px solid var(--geo-color-primary-border);color:var(--geo-color-neutral-700);font-size:var(--geo-font-size-caption);font-variant-numeric:tabular-nums;pointer-events:none;white-space:nowrap}\n"] }]
|
|
143
|
+
}], ctorParameters: () => [] });
|
|
144
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VvLW1hcC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9nZW8tdWkvc3JjL2xpYi9maWdtYS9nZW8tbWFwL2dlby1tYXAuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZ2VvLXVpL3NyYy9saWIvZmlnbWEvZ2VvLW1hcC9nZW8tbWFwLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxlQUFlLEVBQ2YsdUJBQXVCLEVBQ3ZCLFNBQVMsRUFDVCxNQUFNLEVBRU4sTUFBTSxFQUNOLEtBQUssRUFFTCxNQUFNLEVBQ04sU0FBUyxFQUNULGlCQUFpQixHQUNsQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQ0wsc0JBQXNCLEVBQ3RCLHNCQUFzQixFQUN0Qix3QkFBd0IsRUFDeEIsd0JBQXdCLEVBQ3hCLCtCQUErQixFQUMvQixvQkFBb0IsR0FDckIsTUFBTSxxQkFBcUIsQ0FBQztBQUM3QixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQVF4RCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUN0RSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUNoRixPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7O0FBRTNEOzs7Ozs7R0FNRztBQWVILE1BQU0sT0FBTyxlQUFlO0lBQ1QsVUFBVSxHQUFHLE1BQU0sQ0FBQyxhQUFhLENBQUMsQ0FBQztJQUNuQyxZQUFZLEdBQUcsTUFBTSxDQUFDLGtCQUFrQixDQUFDLENBQUM7SUFDMUMsaUJBQWlCLEdBQUcsTUFBTSxDQUFDLHVCQUF1QixDQUFDLENBQUM7SUFFcEQsUUFBUSxHQUFHLFNBQVMsQ0FBQyxRQUFRLENBQTBCLFVBQVUsQ0FBQyxDQUFDO0lBRXBGLHdFQUF3RTtJ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LENBQUMsQ0FBQztRQUN0QyxDQUFDO1FBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQztZQUNiLE1BQU0sT0FBTyxHQUNYLEdBQUcsWUFBWSxLQUFLO2dCQUNsQixDQUFDLENBQUMsR0FBRyxDQUFDLE9BQU87Z0JBQ2IsQ0FBQyxDQUFDLCtDQUErQyxDQUFDO1lBQ3RELE9BQU8sQ0FBQyxLQUFLLENBQUMsK0JBQStCLEVBQUUsR0FBRyxDQUFDLENBQUM7WUFDcEQsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDL0IsQ0FBQztJQUNILENBQUM7d0dBeElVLGVBQWU7NEZBQWYsZUFBZSxrZ0VBTmYsQ0FBQyxhQUFhLEVBQUUsa0JBQWtCLENBQUMsZ0pDaERoRCw0S0FNQTs7NEZEZ0RhLGVBQWU7a0JBZDNCLFNBQVM7K0JBQ0UsU0FBUyxjQUNQLElBQUksV0FDUCxFQUFFLGlCQUdJLGlCQUFpQixDQUFDLElBQUksbUJBQ3BCLHVCQUF1QixDQUFDLE1BQU0sYUFDcEMsQ0FBQyxhQUFhLEVBQUUsa0JBQWtCLENBQUMsUUFDeEM7d0JBQ0osS0FBSyxFQUFFLGNBQWM7d0JBQ3JCLGdCQUFnQixFQUFFLFVBQVU7cUJBQzdCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgYWZ0ZXJOZXh0UmVuZGVyLFxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ29tcG9uZW50LFxuICBlZmZlY3QsXG4gIEVsZW1lbnRSZWYsXG4gIGluamVjdCxcbiAgaW5wdXQsXG4gIE9uRGVzdHJveSxcbiAgb3V0cHV0LFxuICB2aWV3Q2hpbGQsXG4gIFZpZXdFbmNhcHN1bGF0aW9uLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gIEdFT19NQVBfREVGQVVMVF9DRU5URVIsXG4gIEdFT19NQVBfREVGQVVMVF9IRUlHSFQsXG4gIEdFT19NQVBfREVGQVVMVF9NQVhfWk9PTSxcbiAgR0VPX01BUF9ERUZBVUxUX01JTl9aT09NLFxuICBHRU9fTUFQX0RFRkFVTFRfVklFV19QUk9KRUNUSU9OLFxuICBHRU9fTUFQX0RFRkFVTFRfWk9PTSxcbn0gZnJvbSAnLi9nZW8tbWFwLmNvbnN0YW50cyc7XG5pbXBvcnQgeyBHZW9NYXBDb250cm9sbGVyIH0gZnJvbSAnLi9nZW8tbWFwLmNvbnRyb2xsZXInO1xuaW1wb3J0IHR5cGUge1xuICBHZW9NYXBCYXNlbWFwSW5wdXQsXG4gIEdlb01hcENsaWNrRXZlbnQsXG4gIEdlb01hcExheWVyQ29uZmlnLFxuICBHZW9NYXBWaWV3Q2hhbmdlRXZlbnQsXG4gIFByb2plY3Rpb25Db25maWcsXG59IGZyb20gJy4vZ2VvLW1hcC50eXBlcyc7XG5pbXBvcnQgeyBHZW9NYXBMYXllclNlcnZpY2UgfSBmcm9tICcuL3NlcnZpY2VzL2dlby1tYXAtbGF5ZXIuc2VydmljZSc7XG5pbXBvcnQgeyBHZW9NYXBQcm9qZWN0aW9uU2VydmljZSB9IGZyb20gJy4vc2VydmljZXMvZ2VvLW1hcC1wcm9qZWN0aW9uLnNlcnZpY2UnO1xuaW1wb3J0IHsgR2VvTWFwU2VydmljZSB9IGZyb20gJy4vc2VydmljZXMvZ2VvLW1hcC5zZXJ2aWNlJztcblxuLyoqXG4gKiBPcGVuTGF5ZXJzIG1hcCBob3N0IHdpdGggYmFzZW1hcCwgdHlwZWQgbGF5ZXJzLCBhbmQgR2VvTWFwQ29udHJvbGxlci5cbiAqXG4gKiBAc3VtbWFyeSBPcGVuTGF5ZXJzIG1hcCBob3N0IHdpdGggYmFzZW1hcCwgdHlwZWQgbGF5ZXJzLCBhbmQgR2VvTWFwQ29udHJvbGxlci5cbiAqIEB3aGVuVG9Vc2UgQW55IG1hcCB2aWV3cG9ydCAocG9ydGFsIHF1eSBob+G6oWNoLCB0cmEgY+G7qXUgdGjhu61hKS4gUGVlcnM6IG9sLCBwcm9qNC5cbiAqIEBkb05vdFVzZVdoZW4gTm9uLW1hcCBjaGFydGluZyDigJQgdXNlIGRhc2hib2FyZCBsaWJzLlxuICovXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdnZW8tbWFwJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW10sXG4gIHRlbXBsYXRlVXJsOiAnLi9nZW8tbWFwLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmw6ICcuL2dlby1tYXAuY29tcG9uZW50LnNjc3MnLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgcHJvdmlkZXJzOiBbR2VvTWFwU2VydmljZSwgR2VvTWFwTGF5ZXJTZXJ2aWNlXSxcbiAgaG9zdDoge1xuICAgIGNsYXNzOiAnZ2VvLW1hcC1ob3N0JyxcbiAgICAnW3N0eWxlLmhlaWdodF0nOiAnaGVpZ2h0KCknLFxuICB9LFxufSlcbmV4cG9ydCBjbGFzcyBHZW9NYXBDb21wb25lbnQgaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xuICBwcml2YXRlIHJlYWRvbmx5IG1hcFNlcnZpY2UgPSBpbmplY3QoR2VvTWFwU2VydmljZSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgbGF5ZXJTZXJ2aWNlID0gaW5qZWN0KEdlb01hcExheWVyU2VydmljZSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgcHJvamVjdGlvblNlcnZpY2UgPSBpbmplY3QoR2VvTWFwUHJvamVjdGlvblNlcnZpY2UpO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgdmlld3BvcnQgPSB2aWV3Q2hpbGQucmVxdWlyZWQ8RWxlbWVudFJlZjxIVE1MRWxlbWVudD4+KCd2aWV3cG9ydCcpO1xuXG4gIC8qKiBNYXAgY2VudGVyIGluIHZpZXcgcHJvamVjdGlvbiAoZGVmYXVsdCBXZWIgTWVyY2F0b3IgxJDDoCBM4bqhdCBhcmVhKS4gKi9cbiAgcmVhZG9ubHkgY2VudGVyID0gaW5wdXQ8bnVtYmVyW10+KFsuLi5HRU9fTUFQX0RFRkFVTFRfQ0VOVEVSXSk7XG4gIHJlYWRvbmx5IHpvb20gPSBpbnB1dChHRU9fTUFQX0RFRkFVTFRfWk9PTSk7XG4gIHJlYWRvbmx5IG1pblpvb20gPSBpbnB1dChHRU9fTUFQX0RFRkFVTFRfTUlOX1pPT00pO1xuICByZWFkb25seSBtYXhab29tID0gaW5wdXQoR0VPX01BUF9ERUZBVUxUX01BWF9aT09NKTtcbiAgcmVhZG9ubHkgdmlld1Byb2plY3Rpb24gPSBpbnB1dChHRU9fTUFQX0RFRkFVTFRfVklFV19QUk9KRUNUSU9OKTtcbiAgcmVhZG9ubHkgYmFzZW1hcCA9IGlucHV0PEdlb01hcEJhc2VtYXBJbnB1dD4oJ29zbScpO1xuICByZWFkb25seSBsYXllcnMgPSBpbnB1dDxHZW9NYXBMYXllckNvbmZpZ1tdPihbXSk7XG4gIHJlYWRvbmx5IGhlaWdodCA9IGlucHV0KEdFT19NQVBfREVGQVVMVF9IRUlHSFQpO1xuICAvKipcbiAgICogV2hlbiB0cnVlLCBjdXN0b20gcHJvamVjdGlvbnMgbGlzdGVkIGluIGBwcm9qZWN0aW9uc2AgYXJlIHJlZ2lzdGVyZWQgYmVmb3JlIG1hcCBjcmVhdGUuXG4gICAqIEJ1aWx0LWluIEVQU0c6NDMyNiAvIEVQU0c6Mzg1NyBuZXZlciBuZWVkIHJlZ2lzdHJhdGlvbi5cbiAgICogVk4tMjAwMCBkZWZpbml0aW9ucyBtdXN0IGJlIHN1cHBsaWVkIHZpYSBgcHJvamVjdGlvbnNgIOKAlCBuZXZlciBpbnZlbnRlZC5cbiAgICovXG4gIHJlYWRvbmx5IHJlZ2lzdGVyUHJvamVjdGlvbnMgPSBpbnB1dCh0cnVlKTtcbiAgLyoqIEN1c3RvbSBDUlMgZGVmaW5pdGlvbnMgKGUuZy4gbG9jYWwgVk4tMjAwMCBmcm9tIGVudmlyb25tZW50KS4gKi9cbiAgcmVhZG9ubHkgcHJvamVjdGlvbnMgPSBpbnB1dDxQcm9qZWN0aW9uQ29uZmlnW10+KFtdKTtcbiAgcmVhZG9ubHkgc2hvd01vdXNlUG9zaXRpb24gPSBpbnB1dChmYWxzZSk7XG4gIHJlYWRvbmx5IG1vdXNlUG9zaXRpb25Qcm9qZWN0aW9uID0gaW5wdXQoJ0VQU0c6NDMyNicpO1xuICAvKiogV2hlbiBmYWxzZSwgaGlkZSBidWlsdC1pbiBPTCB6b29tIGNvbnRyb2wgKHByZWZlciBgZ2VvLW1hcC16b29tYCkuICovXG4gIHJlYWRvbmx5IHNob3dab29tQ29udHJvbCA9IGlucHV0KHRydWUpO1xuXG4gIHJlYWRvbmx5IG1hcFJlYWR5ID0gb3V0cHV0PEdlb01hcENvbnRyb2xsZXI+KCk7XG4gIHJlYWRvbmx5IG1hcENsaWNrID0gb3V0cHV0PEdlb01hcENsaWNrRXZlbnQ+KCk7XG4gIHJlYWRvbmx5IHZpZXdDaGFuZ2UgPSBvdXRwdXQ8R2VvTWFwVmlld0NoYW5nZUV2ZW50PigpO1xuICByZWFkb25seSBpbml0RXJyb3IgPSBvdXRwdXQ8c3RyaW5nPigpO1xuXG4gIHByaXZhdGUgY29udHJvbGxlcjogR2VvTWFwQ29udHJvbGxlciB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIHVuc3Vic2NyaWJlcnM6IEFycmF5PCgpID0+IHZvaWQ+ID0gW107XG4gIHByaXZhdGUgaW5pdEF0dGVtcHRlZCA9IGZhbHNlO1xuICBwcml2YXRlIGxhc3RTeW5jZWRDZW50ZXJLZXkgPSAnJztcbiAgcHJpdmF0ZSBsYXN0U3luY2VkWm9vbTogbnVtYmVyIHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgbGFzdFN5bmNlZExheWVyc1JlZjogR2VvTWFwTGF5ZXJDb25maWdbXSB8IG51bGwgPSBudWxsO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIGFmdGVyTmV4dFJlbmRlcigoKSA9PiB7XG4gICAgICB0aGlzLmJvb3RzdHJhcE1hcCgpO1xuICAgIH0pO1xuXG4gICAgZWZmZWN0KCgpID0+IHtcbiAgICAgIGNvbnN0IGNlbnRlciA9IHRoaXMuY2VudGVyKCk7XG4gICAgICBjb25zdCB6b29tID0gdGhpcy56b29tKCk7XG4gICAgICBpZiAoIXRoaXMubWFwU2VydmljZS5pc0luaXRpYWxpemVkKCkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY29uc3QgY2VudGVyS2V5ID0gYCR7Y2VudGVyWzBdfSwke2NlbnRlclsxXX1gO1xuICAgICAgaWYgKGNlbnRlcktleSA9PT0gdGhpcy5sYXN0U3luY2VkQ2VudGVyS2V5ICYmIHpvb20gPT09IHRoaXMubGFzdFN5bmNlZFpvb20pIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdGhpcy5sYXN0U3luY2VkQ2VudGVyS2V5ID0gY2VudGVyS2V5O1xuICAgICAgdGhpcy5sYXN0U3luY2VkWm9vbSA9IHpvb207XG4gICAgICB0aGlzLm1hcFNlcnZpY2Uuc2V0Q2VudGVyKGNlbnRlciwgem9vbSk7XG4gICAgfSk7XG5cbiAgICBlZmZlY3QoKCkgPT4ge1xuICAgICAgY29uc3QgY29uZmlncyA9IHRoaXMubGF5ZXJzKCk7XG4gICAgICBpZiAoIXRoaXMubWFwU2VydmljZS5pc0luaXRpYWxpemVkKCkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgLy8gU2tpcCBpZGVudGljYWwgcmVmZXJlbmNlIChTdG9yeWJvb2sgLyBwYXJlbnQgcmUtcmVuZGVycykuXG4gICAgICBpZiAoY29uZmlncyA9PT0gdGhpcy5sYXN0U3luY2VkTGF5ZXJzUmVmKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHRoaXMubGFzdFN5bmNlZExheWVyc1JlZiA9IGNvbmZpZ3M7XG4gICAgICB0aGlzLm1hcFNlcnZpY2Uuc3luY0xheWVycyhjb25maWdzLCB7IHJlcGxhY2VCYXNlbWFwU2hvcnRjdXQ6IGZhbHNlIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgZm9yIChjb25zdCB1bnN1YiBvZiB0aGlzLnVuc3Vic2NyaWJlcnMpIHtcbiAgICAgIHVuc3ViKCk7XG4gICAgfVxuICAgIHRoaXMudW5zdWJzY3JpYmVycyA9IFtdO1xuICAgIHRoaXMubWFwU2VydmljZS5kZXN0cm95KCk7XG4gICAgdGhpcy5jb250cm9sbGVyID0gbnVsbDtcbiAgfVxuXG4gIHByaXZhdGUgYm9vdHN0cmFwTWFwKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmluaXRBdHRlbXB0ZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5pbml0QXR0ZW1wdGVkID0gdHJ1ZTtcblxuICAgIHRyeSB7XG4gICAgICBpZiAodGhpcy5yZWdpc3RlclByb2plY3Rpb25zKCkpIHtcbiAgICAgICAgZm9yIChjb25zdCBjb25maWcgb2YgdGhpcy5wcm9qZWN0aW9ucygpKSB7XG4gICAgICAgICAgaWYgKCF0aGlzLnByb2plY3Rpb25TZXJ2aWNlLmlzUmVnaXN0ZXJlZChjb25maWcuY29kZSkpIHtcbiAgICAgICAgICAgIHRoaXMucHJvamVjdGlvblNlcnZpY2UucmVnaXN0ZXJQcm9qZWN0aW9uKGNvbmZpZyk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGVsID0gdGhpcy52aWV3cG9ydCgpLm5hdGl2ZUVsZW1lbnQ7XG4gICAgICBjb25zdCBjZW50ZXIgPSB0aGlzLmNlbnRlcigpO1xuICAgICAgY29uc3Qgem9vbSA9IHRoaXMuem9vbSgpO1xuICAgICAgdGhpcy5sYXN0U3luY2VkQ2VudGVyS2V5ID0gYCR7Y2VudGVyWzBdfSwke2NlbnRlclsxXX1gO1xuICAgICAgdGhpcy5sYXN0U3luY2VkWm9vbSA9IHpvb207XG4gICAgICB0aGlzLmxhc3RTeW5jZWRMYXllcnNSZWYgPSB0aGlzLmxheWVycygpO1xuXG4gICAgICB0aGlzLm1hcFNlcnZpY2UuaW5pdCh7XG4gICAgICAgIHRhcmdldDogZWwsXG4gICAgICAgIGNlbnRlcixcbiAgICAgICAgem9vbSxcbiAgICAgICAgbWluWm9vbTogdGhpcy5taW5ab29tKCksXG4gICAgICAgIG1heFpvb206IHRoaXMubWF4Wm9vbSgpLFxuICAgICAgICB2aWV3UHJvamVjdGlvbjogdGhpcy52aWV3UHJvamVjdGlvbigpLFxuICAgICAgICBiYXNlbWFwOiB0aGlzLmJhc2VtYXAoKSxcbiAgICAgICAgbGF5ZXJzOiB0aGlzLmxhc3RTeW5jZWRMYXllcnNSZWYsXG4gICAgICAgIHNob3dNb3VzZVBvc2l0aW9uOiB0aGlzLnNob3dNb3VzZVBvc2l0aW9uKCksXG4gICAgICAgIG1vdXNlUG9zaXRpb25Qcm9qZWN0aW9uOiB0aGlzLm1vdXNlUG9zaXRpb25Qcm9qZWN0aW9uKCksXG4gICAgICAgIHNob3dab29tQ29udHJvbDogdGhpcy5zaG93Wm9vbUNvbnRyb2woKSxcbiAgICAgIH0pO1xuXG4gICAgICB0aGlzLmNvbnRyb2xsZXIgPSBuZXcgR2VvTWFwQ29udHJvbGxlcih0aGlzLm1hcFNlcnZpY2UsIHRoaXMubGF5ZXJTZXJ2aWNlKTtcblxuICAgICAgdGhpcy51bnN1YnNjcmliZXJzLnB1c2goXG4gICAgICAgIHRoaXMubWFwU2VydmljZS5vbkNsaWNrKChldmVudCkgPT4gdGhpcy5tYXBDbGljay5lbWl0KGV2ZW50KSksXG4gICAgICAgIHRoaXMubWFwU2VydmljZS5vblZpZXdDaGFuZ2UoKGV2ZW50KSA9PiB0aGlzLnZpZXdDaGFuZ2UuZW1pdChldmVudCkpLFxuICAgICAgKTtcblxuICAgICAgdGhpcy5tYXBSZWFkeS5lbWl0KHRoaXMuY29udHJvbGxlcik7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBjb25zdCBtZXNzYWdlID1cbiAgICAgICAgZXJyIGluc3RhbmNlb2YgRXJyb3JcbiAgICAgICAgICA/IGVyci5tZXNzYWdlXG4gICAgICAgICAgOiAnS2jDtG5nIGto4bufaSB04bqhbyDEkcaw4bujYyBi4bqjbiDEkeG7ky4gVnVpIGzDsm5nIHRo4butIGzhuqFpLic7XG4gICAgICBjb25zb2xlLmVycm9yKCdbR2VvTWFwQ29tcG9uZW50XSBpbml0IGZhaWxlZCcsIGVycik7XG4gICAgICB0aGlzLmluaXRFcnJvci5lbWl0KG1lc3NhZ2UpO1xuICAgIH1cbiAgfVxufVxuIiwiPGRpdlxuICAjdmlld3BvcnRcbiAgY2xhc3M9XCJnZW8tbWFwX192aWV3cG9ydFwiXG4gIHJvbGU9XCJhcHBsaWNhdGlvblwiXG4gIGFyaWEtbGFiZWw9XCJC4bqjbiDEkeG7kyBxdXkgaG/huqFjaCBz4butIGThu6VuZyDEkeG6pXRcIlxuPjwvZGl2PlxuIl19
|