@geoit/ui 0.0.2 → 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.
Files changed (258) hide show
  1. package/AGENTS.md +12 -8
  2. package/README.md +140 -17
  3. package/ai/AGENTS.md +43 -32
  4. package/ai/README.md +36 -2
  5. package/ai/catalog.json +5585 -437
  6. package/ai/components/geo-alert.md +75 -21
  7. package/ai/components/geo-back-button.md +64 -18
  8. package/ai/components/geo-breadcrumb.md +71 -12
  9. package/ai/components/geo-button.md +90 -27
  10. package/ai/components/geo-chart.md +103 -0
  11. package/ai/components/geo-checkbox.md +67 -20
  12. package/ai/components/geo-column-picker.md +91 -18
  13. package/ai/components/geo-confirm-modal.md +92 -27
  14. package/ai/components/geo-dashboard.md +91 -0
  15. package/ai/components/geo-date-picker.md +105 -29
  16. package/ai/components/geo-date-range-picker.md +101 -28
  17. package/ai/components/geo-empty-state.md +75 -0
  18. package/ai/components/geo-feedback-form.md +97 -0
  19. package/ai/components/geo-file-picker.md +99 -26
  20. package/ai/components/geo-forgot-password.md +78 -0
  21. package/ai/components/geo-form-modal.md +111 -44
  22. package/ai/components/geo-icon.md +70 -16
  23. package/ai/components/geo-input.md +94 -29
  24. package/ai/components/geo-layout-footer.md +70 -0
  25. package/ai/components/geo-layout-header-actions.md +82 -0
  26. package/ai/components/geo-layout-header.md +89 -0
  27. package/ai/components/geo-layout-sidebar.md +86 -0
  28. package/ai/components/geo-layout.md +155 -0
  29. package/ai/components/geo-list-page.md +72 -0
  30. package/ai/components/geo-login.md +94 -0
  31. package/ai/components/geo-map-admin-filter.md +80 -0
  32. package/ai/components/geo-map-basemap-switcher.md +75 -0
  33. package/ai/components/geo-map-help.md +72 -0
  34. package/ai/components/geo-map-layer-card.md +73 -0
  35. package/ai/components/geo-map-layer-panel.md +75 -0
  36. package/ai/components/geo-map-layers-drawer.md +78 -0
  37. package/ai/components/geo-map-legend.md +74 -0
  38. package/ai/components/geo-map-locate.md +75 -0
  39. package/ai/components/geo-map-location-chip.md +71 -0
  40. package/ai/components/geo-map-measure.md +74 -0
  41. package/ai/components/geo-map-opacity.md +75 -0
  42. package/ai/components/geo-map-parcel-popup.md +79 -0
  43. package/ai/components/geo-map-search.md +83 -0
  44. package/ai/components/geo-map-shell.md +110 -0
  45. package/ai/components/geo-map-snapshot.md +75 -0
  46. package/ai/components/geo-map-swipe.md +73 -0
  47. package/ai/components/geo-map-toolbar.md +76 -0
  48. package/ai/components/geo-map-zoom.md +74 -0
  49. package/ai/components/geo-map.md +205 -0
  50. package/ai/components/geo-overlap-result.md +88 -0
  51. package/ai/components/geo-page-header.md +72 -0
  52. package/ai/components/geo-page-title.md +62 -16
  53. package/ai/components/geo-pagination.md +76 -24
  54. package/ai/components/geo-radio.md +110 -27
  55. package/ai/components/geo-row-actions.md +87 -19
  56. package/ai/components/geo-select.md +108 -28
  57. package/ai/components/geo-slider.md +70 -21
  58. package/ai/components/geo-stat-card.md +98 -0
  59. package/ai/components/geo-status-tag.md +67 -15
  60. package/ai/components/geo-step-form-layout.md +121 -38
  61. package/ai/components/geo-stepper.md +81 -19
  62. package/ai/components/geo-table-filter.md +90 -29
  63. package/ai/components/geo-table-pagination.md +70 -23
  64. package/ai/components/geo-table-toolbar.md +84 -29
  65. package/ai/components/geo-table.md +191 -59
  66. package/ai/components/geo-tabs.md +99 -27
  67. package/ai/components/geo-textarea.md +84 -23
  68. package/ai/components/geo-toast.md +138 -27
  69. package/ai/components/geo-tree.md +94 -22
  70. package/ai/components/geo-typography.md +70 -19
  71. package/ai/components/geo-upload.md +109 -39
  72. package/ai/mockup.html +1194 -0
  73. package/ai/recipes.md +132 -47
  74. package/esm2022/lib/figma/geo-alert/geo-alert.component.mjs +19 -36
  75. package/esm2022/lib/figma/geo-back-button/geo-back-button.component.mjs +14 -24
  76. package/esm2022/lib/figma/geo-breadcrumb/geo-breadcrumb.component.mjs +8 -11
  77. package/esm2022/lib/figma/geo-button/geo-button.component.mjs +30 -59
  78. package/esm2022/lib/figma/geo-chart/geo-chart.component.mjs +88 -0
  79. package/esm2022/lib/figma/geo-chart/geo-chart.types.mjs +2 -0
  80. package/esm2022/lib/figma/geo-checkbox/geo-checkbox.component.mjs +11 -22
  81. package/esm2022/lib/figma/geo-confirm-modal/geo-confirm-modal.component.mjs +22 -54
  82. package/esm2022/lib/figma/geo-dashboard/geo-dashboard.component.mjs +49 -0
  83. package/esm2022/lib/figma/geo-dashboard/geo-dashboard.types.mjs +2 -0
  84. package/esm2022/lib/figma/geo-date-picker/geo-date-picker.component.mjs +48 -78
  85. package/esm2022/lib/figma/geo-date-range-picker/geo-date-range-picker.component.mjs +47 -75
  86. package/esm2022/lib/figma/geo-empty-state/geo-empty-state.component.mjs +25 -0
  87. package/esm2022/lib/figma/geo-feedback-form/geo-feedback-form.component.mjs +75 -0
  88. package/esm2022/lib/figma/geo-feedback-form/geo-feedback-form.types.mjs +2 -0
  89. package/esm2022/lib/figma/geo-file-picker/geo-file-picker.component.mjs +59 -81
  90. package/esm2022/lib/figma/geo-forgot-password/geo-forgot-password.component.mjs +51 -0
  91. package/esm2022/lib/figma/geo-form-modal/geo-form-modal.component.mjs +45 -112
  92. package/esm2022/lib/figma/geo-icon/geo-icon.component.mjs +22 -32
  93. package/esm2022/lib/figma/geo-input/geo-input.component.mjs +41 -70
  94. package/esm2022/lib/figma/geo-layout/footer/geo-layout-footer.component.mjs +18 -0
  95. package/esm2022/lib/figma/geo-layout/geo-layout-actions.directive.mjs +15 -0
  96. package/esm2022/lib/figma/geo-layout/geo-layout.component.mjs +79 -0
  97. package/esm2022/lib/figma/geo-layout/geo-layout.types.mjs +42 -0
  98. package/esm2022/lib/figma/geo-layout/header/geo-layout-header.component.mjs +60 -0
  99. package/esm2022/lib/figma/geo-layout/header-actions/geo-layout-header-actions.component.mjs +70 -0
  100. package/esm2022/lib/figma/geo-layout/sidebar/geo-layout-sidebar.component.mjs +90 -0
  101. package/esm2022/lib/figma/geo-list-page/geo-list-page.component.mjs +22 -0
  102. package/esm2022/lib/figma/geo-login/geo-login.component.mjs +58 -0
  103. package/esm2022/lib/figma/geo-login/geo-login.types.mjs +2 -0
  104. package/esm2022/lib/figma/geo-map/chrome/geo-map-admin-filter/geo-map-admin-filter.component.mjs +52 -0
  105. package/esm2022/lib/figma/geo-map/chrome/geo-map-basemap-switcher/geo-map-basemap-switcher.component.mjs +61 -0
  106. package/esm2022/lib/figma/geo-map/chrome/geo-map-help/geo-map-help.component.mjs +26 -0
  107. package/esm2022/lib/figma/geo-map/chrome/geo-map-layer-card/geo-map-layer-card.component.mjs +24 -0
  108. package/esm2022/lib/figma/geo-map/chrome/geo-map-layer-panel/geo-map-layer-panel.component.mjs +146 -0
  109. package/esm2022/lib/figma/geo-map/chrome/geo-map-layers-drawer/geo-map-layers-drawer.component.mjs +37 -0
  110. package/esm2022/lib/figma/geo-map/chrome/geo-map-legend/geo-map-legend.component.mjs +30 -0
  111. package/esm2022/lib/figma/geo-map/chrome/geo-map-locate/geo-map-locate.component.mjs +72 -0
  112. package/esm2022/lib/figma/geo-map/chrome/geo-map-location-chip/geo-map-location-chip.component.mjs +21 -0
  113. package/esm2022/lib/figma/geo-map/chrome/geo-map-measure/geo-map-measure.component.mjs +375 -0
  114. package/esm2022/lib/figma/geo-map/chrome/geo-map-opacity/geo-map-opacity.component.mjs +94 -0
  115. package/esm2022/lib/figma/geo-map/chrome/geo-map-parcel-popup/geo-map-parcel-popup.component.mjs +136 -0
  116. package/esm2022/lib/figma/geo-map/chrome/geo-map-search/geo-map-search.component.mjs +182 -0
  117. package/esm2022/lib/figma/geo-map/chrome/geo-map-shell/geo-map-shell.component.mjs +577 -0
  118. package/esm2022/lib/figma/geo-map/chrome/geo-map-snapshot/geo-map-snapshot.component.mjs +93 -0
  119. package/esm2022/lib/figma/geo-map/chrome/geo-map-swipe/geo-map-swipe.component.mjs +129 -0
  120. package/esm2022/lib/figma/geo-map/chrome/geo-map-toolbar/geo-map-toolbar.component.mjs +64 -0
  121. package/esm2022/lib/figma/geo-map/chrome/geo-map-zoom/geo-map-zoom.component.mjs +295 -0
  122. package/esm2022/lib/figma/geo-map/geo-map-toolbar.icons.mjs +18 -0
  123. package/esm2022/lib/figma/geo-map/geo-map.component.mjs +144 -0
  124. package/esm2022/lib/figma/geo-map/geo-map.constants.mjs +497 -0
  125. package/esm2022/lib/figma/geo-map/geo-map.controller.mjs +71 -0
  126. package/esm2022/lib/figma/geo-map/geo-map.types.mjs +2 -0
  127. package/esm2022/lib/figma/geo-map/services/geo-map-layer.service.mjs +368 -0
  128. package/esm2022/lib/figma/geo-map/services/geo-map-projection.service.mjs +110 -0
  129. package/esm2022/lib/figma/geo-map/services/geo-map.service.mjs +540 -0
  130. package/esm2022/lib/figma/geo-map/utils/geo-map-fullscreen-overlay.util.mjs +47 -0
  131. package/esm2022/lib/figma/geo-map/utils/geo-map-interactions.util.mjs +30 -0
  132. package/esm2022/lib/figma/geo-overlap-result/geo-overlap-result.component.mjs +25 -0
  133. package/esm2022/lib/figma/geo-overlap-result/geo-overlap-result.types.mjs +2 -0
  134. package/esm2022/lib/figma/geo-page-header/geo-page-header.component.mjs +23 -0
  135. package/esm2022/lib/figma/geo-page-title/geo-page-title.component.mjs +20 -35
  136. package/esm2022/lib/figma/geo-pagination/geo-pagination.component.mjs +13 -43
  137. package/esm2022/lib/figma/geo-radio/geo-radio.component.mjs +32 -52
  138. package/esm2022/lib/figma/geo-select/geo-select.component.mjs +46 -72
  139. package/esm2022/lib/figma/geo-slider/geo-slider.component.mjs +12 -28
  140. package/esm2022/lib/figma/geo-stat-card/geo-stat-card.component.mjs +163 -0
  141. package/esm2022/lib/figma/geo-stat-card/geo-stat-card.types.mjs +2 -0
  142. package/esm2022/lib/figma/geo-status-tag/geo-status-tag.component.mjs +23 -27
  143. package/esm2022/lib/figma/geo-step-form-layout/geo-step-form-layout.component.mjs +39 -96
  144. package/esm2022/lib/figma/geo-stepper/geo-stepper.component.mjs +18 -33
  145. package/esm2022/lib/figma/geo-table/geo-column-picker/geo-column-picker.component.mjs +14 -24
  146. package/esm2022/lib/figma/geo-table/geo-row-actions/geo-row-actions.component.mjs +18 -36
  147. package/esm2022/lib/figma/geo-table/geo-table-filter/geo-table-filter.component.mjs +41 -98
  148. package/esm2022/lib/figma/geo-table/geo-table-pagination/geo-table-pagination.component.mjs +40 -73
  149. package/esm2022/lib/figma/geo-table/geo-table-toolbar/geo-table-toolbar.component.mjs +26 -56
  150. package/esm2022/lib/figma/geo-table/geo-table.component.mjs +110 -210
  151. package/esm2022/lib/figma/geo-tabs/geo-tabs.component.mjs +33 -63
  152. package/esm2022/lib/figma/geo-textarea/geo-textarea.component.mjs +28 -44
  153. package/esm2022/lib/figma/geo-toast/geo-toast.component.mjs +18 -39
  154. package/esm2022/lib/figma/geo-tree/geo-tree.component.mjs +12 -40
  155. package/esm2022/lib/figma/geo-typography/geo-typography.component.mjs +49 -64
  156. package/esm2022/lib/figma/geo-upload/geo-upload.component.mjs +50 -101
  157. package/esm2022/lib/figma/index.mjs +50 -1
  158. package/esm2022/lib/styles/tokens.mjs +56 -24
  159. package/fesm2022/geoit-ui.mjs +5981 -1825
  160. package/fesm2022/geoit-ui.mjs.map +1 -1
  161. package/lib/figma/geo-alert/geo-alert.component.d.ts +10 -11
  162. package/lib/figma/geo-back-button/geo-back-button.component.d.ts +6 -7
  163. package/lib/figma/geo-breadcrumb/geo-breadcrumb.component.d.ts +2 -2
  164. package/lib/figma/geo-button/geo-button.component.d.ts +21 -17
  165. package/lib/figma/geo-chart/geo-chart.component.d.ts +40 -0
  166. package/lib/figma/geo-chart/geo-chart.types.d.ts +13 -0
  167. package/lib/figma/geo-checkbox/geo-checkbox.component.d.ts +6 -7
  168. package/lib/figma/geo-confirm-modal/geo-confirm-modal.component.d.ts +15 -17
  169. package/lib/figma/geo-dashboard/geo-dashboard.component.d.ts +29 -0
  170. package/lib/figma/geo-dashboard/geo-dashboard.types.d.ts +7 -0
  171. package/lib/figma/geo-date-picker/geo-date-picker.component.d.ts +26 -21
  172. package/lib/figma/geo-date-range-picker/geo-date-range-picker.component.d.ts +25 -20
  173. package/lib/figma/geo-empty-state/geo-empty-state.component.d.ts +17 -0
  174. package/lib/figma/geo-feedback-form/geo-feedback-form.component.d.ts +36 -0
  175. package/lib/figma/geo-feedback-form/geo-feedback-form.types.d.ts +8 -0
  176. package/lib/figma/geo-file-picker/geo-file-picker.component.d.ts +23 -20
  177. package/lib/figma/geo-forgot-password/geo-forgot-password.component.d.ts +24 -0
  178. package/lib/figma/geo-form-modal/geo-form-modal.component.d.ts +33 -35
  179. package/lib/figma/geo-icon/geo-icon.component.d.ts +7 -7
  180. package/lib/figma/geo-input/geo-input.component.d.ts +23 -21
  181. package/lib/figma/geo-layout/footer/geo-layout-footer.component.d.ts +10 -0
  182. package/lib/figma/geo-layout/geo-layout-actions.directive.d.ts +6 -0
  183. package/lib/figma/geo-layout/geo-layout.component.d.ts +48 -0
  184. package/lib/figma/geo-layout/geo-layout.types.d.ts +44 -0
  185. package/lib/figma/geo-layout/header/geo-layout-header.component.d.ts +31 -0
  186. package/lib/figma/geo-layout/header-actions/geo-layout-header-actions.component.d.ts +32 -0
  187. package/lib/figma/geo-layout/sidebar/geo-layout-sidebar.component.d.ts +34 -0
  188. package/lib/figma/geo-list-page/geo-list-page.component.d.ts +16 -0
  189. package/lib/figma/geo-login/geo-login.component.d.ts +27 -0
  190. package/lib/figma/geo-login/geo-login.types.d.ts +6 -0
  191. package/lib/figma/geo-map/chrome/geo-map-admin-filter/geo-map-admin-filter.component.d.ts +28 -0
  192. package/lib/figma/geo-map/chrome/geo-map-basemap-switcher/geo-map-basemap-switcher.component.d.ts +26 -0
  193. package/lib/figma/geo-map/chrome/geo-map-help/geo-map-help.component.d.ts +20 -0
  194. package/lib/figma/geo-map/chrome/geo-map-layer-card/geo-map-layer-card.component.d.ts +15 -0
  195. package/lib/figma/geo-map/chrome/geo-map-layer-panel/geo-map-layer-panel.component.d.ts +40 -0
  196. package/lib/figma/geo-map/chrome/geo-map-layers-drawer/geo-map-layers-drawer.component.d.ts +25 -0
  197. package/lib/figma/geo-map/chrome/geo-map-legend/geo-map-legend.component.d.ts +18 -0
  198. package/lib/figma/geo-map/chrome/geo-map-locate/geo-map-locate.component.d.ts +24 -0
  199. package/lib/figma/geo-map/chrome/geo-map-location-chip/geo-map-location-chip.component.d.ts +14 -0
  200. package/lib/figma/geo-map/chrome/geo-map-measure/geo-map-measure.component.d.ts +49 -0
  201. package/lib/figma/geo-map/chrome/geo-map-opacity/geo-map-opacity.component.d.ts +30 -0
  202. package/lib/figma/geo-map/chrome/geo-map-parcel-popup/geo-map-parcel-popup.component.d.ts +44 -0
  203. package/lib/figma/geo-map/chrome/geo-map-search/geo-map-search.component.d.ts +56 -0
  204. package/lib/figma/geo-map/chrome/geo-map-shell/geo-map-shell.component.d.ts +103 -0
  205. package/lib/figma/geo-map/chrome/geo-map-snapshot/geo-map-snapshot.component.d.ts +21 -0
  206. package/lib/figma/geo-map/chrome/geo-map-swipe/geo-map-swipe.component.d.ts +33 -0
  207. package/lib/figma/geo-map/chrome/geo-map-toolbar/geo-map-toolbar.component.d.ts +30 -0
  208. package/lib/figma/geo-map/chrome/geo-map-zoom/geo-map-zoom.component.d.ts +67 -0
  209. package/lib/figma/geo-map/geo-map-toolbar.icons.d.ts +17 -0
  210. package/lib/figma/geo-map/geo-map.component.d.ts +53 -0
  211. package/lib/figma/geo-map/geo-map.constants.d.ts +73 -0
  212. package/lib/figma/geo-map/geo-map.controller.d.ts +49 -0
  213. package/lib/figma/geo-map/geo-map.types.d.ts +224 -0
  214. package/lib/figma/geo-map/services/geo-map-layer.service.d.ts +42 -0
  215. package/lib/figma/geo-map/services/geo-map-projection.service.d.ts +32 -0
  216. package/lib/figma/geo-map/services/geo-map.service.d.ts +99 -0
  217. package/lib/figma/geo-map/utils/geo-map-fullscreen-overlay.util.d.ts +13 -0
  218. package/lib/figma/geo-map/utils/geo-map-interactions.util.d.ts +9 -0
  219. package/lib/figma/geo-overlap-result/geo-overlap-result.component.d.ts +18 -0
  220. package/lib/figma/geo-overlap-result/geo-overlap-result.types.d.ts +7 -0
  221. package/lib/figma/geo-page-header/geo-page-header.component.d.ts +16 -0
  222. package/lib/figma/geo-page-title/geo-page-title.component.d.ts +9 -9
  223. package/lib/figma/geo-pagination/geo-pagination.component.d.ts +9 -14
  224. package/lib/figma/geo-radio/geo-radio.component.d.ts +17 -15
  225. package/lib/figma/geo-select/geo-select.component.d.ts +24 -19
  226. package/lib/figma/geo-slider/geo-slider.component.d.ts +7 -9
  227. package/lib/figma/geo-stat-card/geo-stat-card.component.d.ts +50 -0
  228. package/lib/figma/geo-stat-card/geo-stat-card.types.d.ts +11 -0
  229. package/lib/figma/geo-status-tag/geo-status-tag.component.d.ts +7 -7
  230. package/lib/figma/geo-step-form-layout/geo-step-form-layout.component.d.ts +27 -29
  231. package/lib/figma/geo-stepper/geo-stepper.component.d.ts +6 -8
  232. package/lib/figma/geo-table/geo-column-picker/geo-column-picker.component.d.ts +6 -7
  233. package/lib/figma/geo-table/geo-row-actions/geo-row-actions.component.d.ts +11 -12
  234. package/lib/figma/geo-table/geo-table-filter/geo-table-filter.component.d.ts +21 -28
  235. package/lib/figma/geo-table/geo-table-pagination/geo-table-pagination.component.d.ts +17 -20
  236. package/lib/figma/geo-table/geo-table-toolbar/geo-table-toolbar.component.d.ts +17 -18
  237. package/lib/figma/geo-table/geo-table.component.d.ts +58 -62
  238. package/lib/figma/geo-tabs/geo-tabs.component.d.ts +14 -17
  239. package/lib/figma/geo-textarea/geo-textarea.component.d.ts +15 -13
  240. package/lib/figma/geo-toast/geo-toast.component.d.ts +11 -12
  241. package/lib/figma/geo-tree/geo-tree.component.d.ts +8 -13
  242. package/lib/figma/geo-typography/geo-typography.component.d.ts +13 -13
  243. package/lib/figma/geo-upload/geo-upload.component.d.ts +26 -28
  244. package/lib/figma/index.d.ts +49 -0
  245. package/lib/styles/tokens.d.ts +56 -23
  246. package/package.json +4 -2
  247. package/src/lib/figma/geo-map/assets/toolbar/fullscreen.svg +8 -0
  248. package/src/lib/figma/geo-map/assets/toolbar/home.svg +3 -0
  249. package/src/lib/figma/geo-map/assets/toolbar/layers.svg +3 -0
  250. package/src/lib/figma/geo-map/assets/toolbar/measure-area.svg +12 -0
  251. package/src/lib/figma/geo-map/assets/toolbar/measure-distance.svg +5 -0
  252. package/src/lib/figma/geo-map/assets/toolbar/pan.svg +13 -0
  253. package/src/lib/figma/geo-map/assets/toolbar/search.svg +3 -0
  254. package/src/lib/figma/geo-map/assets/toolbar/zoom-in.svg +3 -0
  255. package/src/lib/figma/geo-map/assets/toolbar/zoom-out.svg +5 -0
  256. package/src/lib/styles/design-tokens.scss +108 -35
  257. package/src/lib/styles/scrollbar.scss +2 -2
  258. 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VvLW1hcC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9nZW8tdWkvc3JjL2xpYi9maWdtYS9nZW8tbWFwL2dlby1tYXAuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZ2VvLXVpL3NyYy9saWIvZmlnbWEvZ2VvLW1hcC9nZW8tbWFwLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxlQUFlLEVBQ2YsdUJBQXVCLEVBQ3ZCLFNBQVMsRUFDVCxNQUFNLEVBRU4sTUFBTSxFQUNOLEtBQUssRUFFTCxNQUFNLEVBQ04sU0FBUyxFQUNULGlCQUFpQixHQUNsQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQ0wsc0JBQXNCLEVBQ3RCLHNCQUFzQixFQUN0Qix3QkFBd0IsRUFDeEIsd0JBQXdCLEVBQ3hCLCtCQUErQixFQUMvQixvQkFBb0IsR0FDckIsTUFBTSxxQkFBcUIsQ0FBQztBQUM3QixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQVF4RCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUN0RSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUNoRixPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7O0FBRTNEOzs7Ozs7R0FNRztBQWVILE1BQU0sT0FBTyxlQUFlO0lBQ1QsVUFBVSxHQUFHLE1BQU0sQ0FBQyxhQUFhLENBQUMsQ0FBQztJQUNuQyxZQUFZLEdBQUcsTUFBTSxDQUFDLGtCQUFrQixDQUFDLENBQUM7SUFDMUMsaUJBQWlCLEdBQUcsTUFBTSxDQUFDLHVCQUF1QixDQUFDLENBQUM7SUFFcEQsUUFBUSxHQUFHLFNBQVMsQ0FBQyxRQUFRLENBQTBCLFVBQVUsQ0FBQyxDQUFDO0lBRXBGLHdFQUF3RTtJQUMvRCxNQUFNLEdBQUcsS0FBSyxDQUFXLENBQUMsR0FBRyxzQkFBc0IsQ0FBQyxDQUFDLENBQUM7SUFDdEQsSUFBSSxHQUFHLEtBQUssQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO0lBQ25DLE9BQU8sR0FBRyxLQUFLLENBQUMsd0JBQXdCLENBQUMsQ0FBQztJQUMxQyxPQUFPLEdBQUcsS0FBSyxDQUFDLHdCQUF3QixDQUFDLENBQUM7SUFDMUMsY0FBYyxHQUFHLEtBQUssQ0FBQywrQkFBK0IsQ0FBQyxDQUFDO0lBQ3hELE9BQU8sR0FBRyxLQUFLLENBQXFCLEtBQUssQ0FBQyxDQUFDO0lBQzNDLE1BQU0sR0FBRyxLQUFLLENBQXNCLEVBQUUsQ0FBQyxDQUFDO0lBQ3hDLE1BQU0sR0FBRyxLQUFLLENBQUMsc0JBQXNCLENBQUMsQ0FBQztJQUNoRDs7OztPQUlHO0lBQ00sbUJBQW1CLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzNDLG9FQUFvRTtJQUMzRCxXQUFXLEdBQUcsS0FBSyxDQUFxQixFQUFFLENBQUMsQ0FBQztJQUM1QyxpQkFBaUIsR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDakMsdUJBQXVCLEdBQUcsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQ3RELHlFQUF5RTtJQUNoRSxlQUFlLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBRTlCLFFBQVEsR0FBRyxNQUFNLEVBQW9CLENBQUM7SUFDdEMsUUFBUSxHQUFHLE1BQU0sRUFBb0IsQ0FBQztJQUN0QyxVQUFVLEdBQUcsTUFBTSxFQUF5QixDQUFDO0lBQzdDLFNBQVMsR0FBRyxNQUFNLEVBQVUsQ0FBQztJQUU5QixVQUFVLEdBQTRCLElBQUksQ0FBQztJQUMzQyxhQUFhLEdBQXNCLEVBQUUsQ0FBQztJQUN0QyxhQUFhLEdBQUcsS0FBSyxDQUFDO0lBQ3RCLG1CQUFtQixHQUFHLEVBQUUsQ0FBQztJQUN6QixjQUFjLEdBQWtCLElBQUksQ0FBQztJQUNyQyxtQkFBbUIsR0FBK0IsSUFBSSxDQUFDO0lBRS9EO1FBQ0UsZUFBZSxDQUFDLEdBQUcsRUFBRTtZQUNuQixJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDdEIsQ0FBQyxDQUFDLENBQUM7UUFFSCxNQUFNLENBQUMsR0FBRyxFQUFFO1lBQ1YsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQzdCLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUN6QixJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxhQUFhLEVBQUUsRUFBRSxDQUFDO2dCQUNyQyxPQUFPO1lBQ1QsQ0FBQztZQUNELE1BQU0sU0FBUyxHQUFHLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQzlDLElBQUksU0FBUyxLQUFLLElBQUksQ0FBQyxtQkFBbUIsSUFBSSxJQUFJLEtBQUssSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO2dCQUMzRSxPQUFPO1lBQ1QsQ0FBQztZQUNELElBQUksQ0FBQyxtQkFBbUIsR0FBRyxTQUFTLENBQUM7WUFDckMsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUM7WUFDM0IsSUFBSSxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQzFDLENBQUMsQ0FBQyxDQUFDO1FBRUgsTUFBTSxDQUFDLEdBQUcsRUFBRTtZQUNWLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUM5QixJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxhQUFhLEVBQUUsRUFBRSxDQUFDO2dCQUNyQyxPQUFPO1lBQ1QsQ0FBQztZQUNELDREQUE0RDtZQUM1RCxJQUFJLE9BQU8sS0FBSyxJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztnQkFDekMsT0FBTztZQUNULENBQUM7WUFDRCxJQUFJLENBQUMsbUJBQW1CLEdBQUcsT0FBTyxDQUFDO1lBQ25DLElBQUksQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLE9BQU8sRUFBRSxFQUFFLHNCQUFzQixFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7UUFDekUsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsV0FBVztRQUNULEtBQUssTUFBTSxLQUFLLElBQUksSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1lBQ3ZDLEtBQUssRUFBRSxDQUFDO1FBQ1YsQ0FBQztRQUNELElBQUksQ0FBQyxhQUFhLEdBQUcsRUFBRSxDQUFDO1FBQ3hCLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDMUIsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7SUFDekIsQ0FBQztJQUVPLFlBQVk7UUFDbEIsSUFBSSxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7WUFDdkIsT0FBTztRQUNULENBQUM7UUFDRCxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQztRQUUxQixJQUFJLENBQUM7WUFDSCxJQUFJLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxFQUFFLENBQUM7Z0JBQy9CLEtBQUssTUFBTSxNQUFNLElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRSxFQUFFLENBQUM7b0JBQ3hDLElBQUksQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO3dCQUN0RCxJQUFJLENBQUMsaUJBQWlCLENBQUMsa0JBQWtCLENBQUMsTUFBTSxDQUFDLENBQUM7b0JBQ3BELENBQUM7Z0JBQ0gsQ0FBQztZQUNILENBQUM7WUFFRCxNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsYUFBYSxDQUFDO1lBQ3pDLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUM3QixNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDekIsSUFBSSxDQUFDLG1CQUFtQixHQUFHLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQ3ZELElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDO1lBQzNCLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7WUFFekMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUM7Z0JBQ25CLE1BQU0sRUFBRSxFQUFFO2dCQUNWLE1BQU07Z0JBQ04sSUFBSTtnQkFDSixPQUFPLEVBQUUsSUFBSSxDQUFDLE9BQU8sRUFBRTtnQkFDdkIsT0FBTyxFQUFFLElBQUksQ0FBQyxPQUFPLEVBQUU7Z0JBQ3ZCLGNBQWMsRUFBRSxJQUFJLENBQUMsY0FBYyxFQUFFO2dCQUNyQyxPQUFPLEVBQUUsSUFBSSxDQUFDLE9BQU8sRUFBRTtnQkFDdkIsTUFBTSxFQUFFLElBQUksQ0FBQyxtQkFBbUI7Z0JBQ2hDLGlCQUFpQixFQUFFLElBQUksQ0FBQyxpQkFBaUIsRUFBRTtnQkFDM0MsdUJBQXVCLEVBQUUsSUFBSSxDQUFDLHVCQUF1QixFQUFFO2dCQUN2RCxlQUFlLEVBQUUsSUFBSSxDQUFDLGVBQWUsRUFBRTthQUN4QyxDQUFDLENBQUM7WUFFSCxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksZ0JBQWdCLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7WUFFM0UsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQ3JCLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUM3RCxJQUFJLENBQUMsVUFBVSxDQUFDLFlBQVksQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FDckUsQ0FBQztZQUVGLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUN0QyxDQUFDO1FBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQztZQUNiLE1BQU0sT0FBTyxHQUNYLEdBQUcsWUFBWSxLQUFLO2dCQUNsQixDQUFDLENBQUMsR0FBRyxDQUFDLE9BQU87Z0JBQ2IsQ0FBQyxDQUFDLCtDQUErQyxDQUFDO1lBQ3RELE9BQU8sQ0FBQyxLQUFLLENBQUMsK0JBQStCLEVBQUUsR0FBRyxDQUFDLENBQUM7WUFDcEQsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDL0IsQ0FBQztJQUNILENBQUM7d0dBeElVLGVBQWU7NEZBQWYsZUFBZSxrZ0VBTmYsQ0FBQyxhQUFhLEVBQUUsa0JBQWtCLENBQUMsZ0pDaERoRCw0S0FNQTs7NEZEZ0RhLGVBQWU7a0JBZDNCLFNBQVM7K0JBQ0UsU0FBUyxjQUNQLElBQUksV0FDUCxFQUFFLGlCQUdJLGlCQUFpQixDQUFDLElBQUksbUJBQ3BCLHVCQUF1QixDQUFDLE1BQU0sYUFDcEMsQ0FBQyxhQUFhLEVBQUUsa0JBQWtCLENBQUMsUUFDeEM7d0JBQ0osS0FBSyxFQUFFLGNBQWM7d0JBQ3JCLGdCQUFnQixFQUFFLFVBQVU7cUJBQzdCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgYWZ0ZXJOZXh0UmVuZGVyLFxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ29tcG9uZW50LFxuICBlZmZlY3QsXG4gIEVsZW1lbnRSZWYsXG4gIGluamVjdCxcbiAgaW5wdXQsXG4gIE9uRGVzdHJveSxcbiAgb3V0cHV0LFxuICB2aWV3Q2hpbGQsXG4gIFZpZXdFbmNhcHN1bGF0aW9uLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gIEdFT19NQVBfREVGQVVMVF9DRU5URVIsXG4gIEdFT19NQVBfREVGQVVMVF9IRUlHSFQsXG4gIEdFT19NQVBfREVGQVVMVF9NQVhfWk9PTSxcbiAgR0VPX01BUF9ERUZBVUxUX01JTl9aT09NLFxuICBHRU9fTUFQX0RFRkFVTFRfVklFV19QUk9KRUNUSU9OLFxuICBHRU9fTUFQX0RFRkFVTFRfWk9PTSxcbn0gZnJvbSAnLi9nZW8tbWFwLmNvbnN0YW50cyc7XG5pbXBvcnQgeyBHZW9NYXBDb250cm9sbGVyIH0gZnJvbSAnLi9nZW8tbWFwLmNvbnRyb2xsZXInO1xuaW1wb3J0IHR5cGUge1xuICBHZW9NYXBCYXNlbWFwSW5wdXQsXG4gIEdlb01hcENsaWNrRXZlbnQsXG4gIEdlb01hcExheWVyQ29uZmlnLFxuICBHZW9NYXBWaWV3Q2hhbmdlRXZlbnQsXG4gIFByb2plY3Rpb25Db25maWcsXG59IGZyb20gJy4vZ2VvLW1hcC50eXBlcyc7XG5pbXBvcnQgeyBHZW9NYXBMYXllclNlcnZpY2UgfSBmcm9tICcuL3NlcnZpY2VzL2dlby1tYXAtbGF5ZXIuc2VydmljZSc7XG5pbXBvcnQgeyBHZW9NYXBQcm9qZWN0aW9uU2VydmljZSB9IGZyb20gJy4vc2VydmljZXMvZ2VvLW1hcC1wcm9qZWN0aW9uLnNlcnZpY2UnO1xuaW1wb3J0IHsgR2VvTWFwU2VydmljZSB9IGZyb20gJy4vc2VydmljZXMvZ2VvLW1hcC5zZXJ2aWNlJztcblxuLyoqXG4gKiBPcGVuTGF5ZXJzIG1hcCBob3N0IHdpdGggYmFzZW1hcCwgdHlwZWQgbGF5ZXJzLCBhbmQgR2VvTWFwQ29udHJvbGxlci5cbiAqXG4gKiBAc3VtbWFyeSBPcGVuTGF5ZXJzIG1hcCBob3N0IHdpdGggYmFzZW1hcCwgdHlwZWQgbGF5ZXJzLCBhbmQgR2VvTWFwQ29udHJvbGxlci5cbiAqIEB3aGVuVG9Vc2UgQW55IG1hcCB2aWV3cG9ydCAocG9ydGFsIHF1eSBob+G6oWNoLCB0cmEgY+G7qXUgdGjhu61hKS4gUGVlcnM6IG9sLCBwcm9qNC5cbiAqIEBkb05vdFVzZVdoZW4gTm9uLW1hcCBjaGFydGluZyDigJQgdXNlIGRhc2hib2FyZCBsaWJzLlxuICovXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdnZW8tbWFwJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW10sXG4gIHRlbXBsYXRlVXJsOiAnLi9nZW8tbWFwLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmw6ICcuL2dlby1tYXAuY29tcG9uZW50LnNjc3MnLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgcHJvdmlkZXJzOiBbR2VvTWFwU2VydmljZSwgR2VvTWFwTGF5ZXJTZXJ2aWNlXSxcbiAgaG9zdDoge1xuICAgIGNsYXNzOiAnZ2VvLW1hcC1ob3N0JyxcbiAgICAnW3N0eWxlLmhlaWdodF0nOiAnaGVpZ2h0KCknLFxuICB9LFxufSlcbmV4cG9ydCBjbGFzcyBHZW9NYXBDb21wb25lbnQgaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xuICBwcml2YXRlIHJlYWRvbmx5IG1hcFNlcnZpY2UgPSBpbmplY3QoR2VvTWFwU2VydmljZSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgbGF5ZXJTZXJ2aWNlID0gaW5qZWN0KEdlb01hcExheWVyU2VydmljZSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgcHJvamVjdGlvblNlcnZpY2UgPSBpbmplY3QoR2VvTWFwUHJvamVjdGlvblNlcnZpY2UpO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgdmlld3BvcnQgPSB2aWV3Q2hpbGQucmVxdWlyZWQ8RWxlbWVudFJlZjxIVE1MRWxlbWVudD4+KCd2aWV3cG9ydCcpO1xuXG4gIC8qKiBNYXAgY2VudGVyIGluIHZpZXcgcHJvamVjdGlvbiAoZGVmYXVsdCBXZWIgTWVyY2F0b3IgxJDDoCBM4bqhdCBhcmVhKS4gKi9cbiAgcmVhZG9ubHkgY2VudGVyID0gaW5wdXQ8bnVtYmVyW10+KFsuLi5HRU9fTUFQX0RFRkFVTFRfQ0VOVEVSXSk7XG4gIHJlYWRvbmx5IHpvb20gPSBpbnB1dChHRU9fTUFQX0RFRkFVTFRfWk9PTSk7XG4gIHJlYWRvbmx5IG1pblpvb20gPSBpbnB1dChHRU9fTUFQX0RFRkFVTFRfTUlOX1pPT00pO1xuICByZWFkb25seSBtYXhab29tID0gaW5wdXQoR0VPX01BUF9ERUZBVUxUX01BWF9aT09NKTtcbiAgcmVhZG9ubHkgdmlld1Byb2plY3Rpb24gPSBpbnB1dChHRU9fTUFQX0RFRkFVTFRfVklFV19QUk9KRUNUSU9OKTtcbiAgcmVhZG9ubHkgYmFzZW1hcCA9IGlucHV0PEdlb01hcEJhc2VtYXBJbnB1dD4oJ29zbScpO1xuICByZWFkb25seSBsYXllcnMgPSBpbnB1dDxHZW9NYXBMYXllckNvbmZpZ1tdPihbXSk7XG4gIHJlYWRvbmx5IGhlaWdodCA9IGlucHV0KEdFT19NQVBfREVGQVVMVF9IRUlHSFQpO1xuICAvKipcbiAgICogV2hlbiB0cnVlLCBjdXN0b20gcHJvamVjdGlvbnMgbGlzdGVkIGluIGBwcm9qZWN0aW9uc2AgYXJlIHJlZ2lzdGVyZWQgYmVmb3JlIG1hcCBjcmVhdGUuXG4gICAqIEJ1aWx0LWluIEVQU0c6NDMyNiAvIEVQU0c6Mzg1NyBuZXZlciBuZWVkIHJlZ2lzdHJhdGlvbi5cbiAgICogVk4tMjAwMCBkZWZpbml0aW9ucyBtdXN0IGJlIHN1cHBsaWVkIHZpYSBgcHJvamVjdGlvbnNgIOKAlCBuZXZlciBpbnZlbnRlZC5cbiAgICovXG4gIHJlYWRvbmx5IHJlZ2lzdGVyUHJvamVjdGlvbnMgPSBpbnB1dCh0cnVlKTtcbiAgLyoqIEN1c3RvbSBDUlMgZGVmaW5pdGlvbnMgKGUuZy4gbG9jYWwgVk4tMjAwMCBmcm9tIGVudmlyb25tZW50KS4gKi9cbiAgcmVhZG9ubHkgcHJvamVjdGlvbnMgPSBpbnB1dDxQcm9qZWN0aW9uQ29uZmlnW10+KFtdKTtcbiAgcmVhZG9ubHkgc2hvd01vdXNlUG9zaXRpb24gPSBpbnB1dChmYWxzZSk7XG4gIHJlYWRvbmx5IG1vdXNlUG9zaXRpb25Qcm9qZWN0aW9uID0gaW5wdXQoJ0VQU0c6NDMyNicpO1xuICAvKiogV2hlbiBmYWxzZSwgaGlkZSBidWlsdC1pbiBPTCB6b29tIGNvbnRyb2wgKHByZWZlciBgZ2VvLW1hcC16b29tYCkuICovXG4gIHJlYWRvbmx5IHNob3dab29tQ29udHJvbCA9IGlucHV0KHRydWUpO1xuXG4gIHJlYWRvbmx5IG1hcFJlYWR5ID0gb3V0cHV0PEdlb01hcENvbnRyb2xsZXI+KCk7XG4gIHJlYWRvbmx5IG1hcENsaWNrID0gb3V0cHV0PEdlb01hcENsaWNrRXZlbnQ+KCk7XG4gIHJlYWRvbmx5IHZpZXdDaGFuZ2UgPSBvdXRwdXQ8R2VvTWFwVmlld0NoYW5nZUV2ZW50PigpO1xuICByZWFkb25seSBpbml0RXJyb3IgPSBvdXRwdXQ8c3RyaW5nPigpO1xuXG4gIHByaXZhdGUgY29udHJvbGxlcjogR2VvTWFwQ29udHJvbGxlciB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIHVuc3Vic2NyaWJlcnM6IEFycmF5PCgpID0+IHZvaWQ+ID0gW107XG4gIHByaXZhdGUgaW5pdEF0dGVtcHRlZCA9IGZhbHNlO1xuICBwcml2YXRlIGxhc3RTeW5jZWRDZW50ZXJLZXkgPSAnJztcbiAgcHJpdmF0ZSBsYXN0U3luY2VkWm9vbTogbnVtYmVyIHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgbGFzdFN5bmNlZExheWVyc1JlZjogR2VvTWFwTGF5ZXJDb25maWdbXSB8IG51bGwgPSBudWxsO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIGFmdGVyTmV4dFJlbmRlcigoKSA9PiB7XG4gICAgICB0aGlzLmJvb3RzdHJhcE1hcCgpO1xuICAgIH0pO1xuXG4gICAgZWZmZWN0KCgpID0+IHtcbiAgICAgIGNvbnN0IGNlbnRlciA9IHRoaXMuY2VudGVyKCk7XG4gICAgICBjb25zdCB6b29tID0gdGhpcy56b29tKCk7XG4gICAgICBpZiAoIXRoaXMubWFwU2VydmljZS5pc0luaXRpYWxpemVkKCkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY29uc3QgY2VudGVyS2V5ID0gYCR7Y2VudGVyWzBdfSwke2NlbnRlclsxXX1gO1xuICAgICAgaWYgKGNlbnRlcktleSA9PT0gdGhpcy5sYXN0U3luY2VkQ2VudGVyS2V5ICYmIHpvb20gPT09IHRoaXMubGFzdFN5bmNlZFpvb20pIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdGhpcy5sYXN0U3luY2VkQ2VudGVyS2V5ID0gY2VudGVyS2V5O1xuICAgICAgdGhpcy5sYXN0U3luY2VkWm9vbSA9IHpvb207XG4gICAgICB0aGlzLm1hcFNlcnZpY2Uuc2V0Q2VudGVyKGNlbnRlciwgem9vbSk7XG4gICAgfSk7XG5cbiAgICBlZmZlY3QoKCkgPT4ge1xuICAgICAgY29uc3QgY29uZmlncyA9IHRoaXMubGF5ZXJzKCk7XG4gICAgICBpZiAoIXRoaXMubWFwU2VydmljZS5pc0luaXRpYWxpemVkKCkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgLy8gU2tpcCBpZGVudGljYWwgcmVmZXJlbmNlIChTdG9yeWJvb2sgLyBwYXJlbnQgcmUtcmVuZGVycykuXG4gICAgICBpZiAoY29uZmlncyA9PT0gdGhpcy5sYXN0U3luY2VkTGF5ZXJzUmVmKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHRoaXMubGFzdFN5bmNlZExheWVyc1JlZiA9IGNvbmZpZ3M7XG4gICAgICB0aGlzLm1hcFNlcnZpY2Uuc3luY0xheWVycyhjb25maWdzLCB7IHJlcGxhY2VCYXNlbWFwU2hvcnRjdXQ6IGZhbHNlIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgZm9yIChjb25zdCB1bnN1YiBvZiB0aGlzLnVuc3Vic2NyaWJlcnMpIHtcbiAgICAgIHVuc3ViKCk7XG4gICAgfVxuICAgIHRoaXMudW5zdWJzY3JpYmVycyA9IFtdO1xuICAgIHRoaXMubWFwU2VydmljZS5kZXN0cm95KCk7XG4gICAgdGhpcy5jb250cm9sbGVyID0gbnVsbDtcbiAgfVxuXG4gIHByaXZhdGUgYm9vdHN0cmFwTWFwKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmluaXRBdHRlbXB0ZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5pbml0QXR0ZW1wdGVkID0gdHJ1ZTtcblxuICAgIHRyeSB7XG4gICAgICBpZiAodGhpcy5yZWdpc3RlclByb2plY3Rpb25zKCkpIHtcbiAgICAgICAgZm9yIChjb25zdCBjb25maWcgb2YgdGhpcy5wcm9qZWN0aW9ucygpKSB7XG4gICAgICAgICAgaWYgKCF0aGlzLnByb2plY3Rpb25TZXJ2aWNlLmlzUmVnaXN0ZXJlZChjb25maWcuY29kZSkpIHtcbiAgICAgICAgICAgIHRoaXMucHJvamVjdGlvblNlcnZpY2UucmVnaXN0ZXJQcm9qZWN0aW9uKGNvbmZpZyk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGVsID0gdGhpcy52aWV3cG9ydCgpLm5hdGl2ZUVsZW1lbnQ7XG4gICAgICBjb25zdCBjZW50ZXIgPSB0aGlzLmNlbnRlcigpO1xuICAgICAgY29uc3Qgem9vbSA9IHRoaXMuem9vbSgpO1xuICAgICAgdGhpcy5sYXN0U3luY2VkQ2VudGVyS2V5ID0gYCR7Y2VudGVyWzBdfSwke2NlbnRlclsxXX1gO1xuICAgICAgdGhpcy5sYXN0U3luY2VkWm9vbSA9IHpvb207XG4gICAgICB0aGlzLmxhc3RTeW5jZWRMYXllcnNSZWYgPSB0aGlzLmxheWVycygpO1xuXG4gICAgICB0aGlzLm1hcFNlcnZpY2UuaW5pdCh7XG4gICAgICAgIHRhcmdldDogZWwsXG4gICAgICAgIGNlbnRlcixcbiAgICAgICAgem9vbSxcbiAgICAgICAgbWluWm9vbTogdGhpcy5taW5ab29tKCksXG4gICAgICAgIG1heFpvb206IHRoaXMubWF4Wm9vbSgpLFxuICAgICAgICB2aWV3UHJvamVjdGlvbjogdGhpcy52aWV3UHJvamVjdGlvbigpLFxuICAgICAgICBiYXNlbWFwOiB0aGlzLmJhc2VtYXAoKSxcbiAgICAgICAgbGF5ZXJzOiB0aGlzLmxhc3RTeW5jZWRMYXllcnNSZWYsXG4gICAgICAgIHNob3dNb3VzZVBvc2l0aW9uOiB0aGlzLnNob3dNb3VzZVBvc2l0aW9uKCksXG4gICAgICAgIG1vdXNlUG9zaXRpb25Qcm9qZWN0aW9uOiB0aGlzLm1vdXNlUG9zaXRpb25Qcm9qZWN0aW9uKCksXG4gICAgICAgIHNob3dab29tQ29udHJvbDogdGhpcy5zaG93Wm9vbUNvbnRyb2woKSxcbiAgICAgIH0pO1xuXG4gICAgICB0aGlzLmNvbnRyb2xsZXIgPSBuZXcgR2VvTWFwQ29udHJvbGxlcih0aGlzLm1hcFNlcnZpY2UsIHRoaXMubGF5ZXJTZXJ2aWNlKTtcblxuICAgICAgdGhpcy51bnN1YnNjcmliZXJzLnB1c2goXG4gICAgICAgIHRoaXMubWFwU2VydmljZS5vbkNsaWNrKChldmVudCkgPT4gdGhpcy5tYXBDbGljay5lbWl0KGV2ZW50KSksXG4gICAgICAgIHRoaXMubWFwU2VydmljZS5vblZpZXdDaGFuZ2UoKGV2ZW50KSA9PiB0aGlzLnZpZXdDaGFuZ2UuZW1pdChldmVudCkpLFxuICAgICAgKTtcblxuICAgICAgdGhpcy5tYXBSZWFkeS5lbWl0KHRoaXMuY29udHJvbGxlcik7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBjb25zdCBtZXNzYWdlID1cbiAgICAgICAgZXJyIGluc3RhbmNlb2YgRXJyb3JcbiAgICAgICAgICA/IGVyci5tZXNzYWdlXG4gICAgICAgICAgOiAnS2jDtG5nIGto4bufaSB04bqhbyDEkcaw4bujYyBi4bqjbiDEkeG7ky4gVnVpIGzDsm5nIHRo4butIGzhuqFpLic7XG4gICAgICBjb25zb2xlLmVycm9yKCdbR2VvTWFwQ29tcG9uZW50XSBpbml0IGZhaWxlZCcsIGVycik7XG4gICAgICB0aGlzLmluaXRFcnJvci5lbWl0KG1lc3NhZ2UpO1xuICAgIH1cbiAgfVxufVxuIiwiPGRpdlxuICAjdmlld3BvcnRcbiAgY2xhc3M9XCJnZW8tbWFwX192aWV3cG9ydFwiXG4gIHJvbGU9XCJhcHBsaWNhdGlvblwiXG4gIGFyaWEtbGFiZWw9XCJC4bqjbiDEkeG7kyBxdXkgaG/huqFjaCBz4butIGThu6VuZyDEkeG6pXRcIlxuPjwvZGl2PlxuIl19