@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,53 @@
1
+ import { OnDestroy } from '@angular/core';
2
+ import { GeoMapController } from './geo-map.controller';
3
+ import type { GeoMapBasemapInput, GeoMapClickEvent, GeoMapLayerConfig, GeoMapViewChangeEvent, ProjectionConfig } from './geo-map.types';
4
+ import * as i0 from "@angular/core";
5
+ /**
6
+ * OpenLayers map host with basemap, typed layers, and GeoMapController.
7
+ *
8
+ * @summary OpenLayers map host with basemap, typed layers, and GeoMapController.
9
+ * @whenToUse Any map viewport (portal quy hoạch, tra cứu thửa). Peers: ol, proj4.
10
+ * @doNotUseWhen Non-map charting — use dashboard libs.
11
+ */
12
+ export declare class GeoMapComponent implements OnDestroy {
13
+ private readonly mapService;
14
+ private readonly layerService;
15
+ private readonly projectionService;
16
+ private readonly viewport;
17
+ /** Map center in view projection (default Web Mercator Đà Lạt area). */
18
+ readonly center: import("@angular/core").InputSignal<number[]>;
19
+ readonly zoom: import("@angular/core").InputSignal<number>;
20
+ readonly minZoom: import("@angular/core").InputSignal<number>;
21
+ readonly maxZoom: import("@angular/core").InputSignal<number>;
22
+ readonly viewProjection: import("@angular/core").InputSignal<string>;
23
+ readonly basemap: import("@angular/core").InputSignal<GeoMapBasemapInput>;
24
+ readonly layers: import("@angular/core").InputSignal<GeoMapLayerConfig[]>;
25
+ readonly height: import("@angular/core").InputSignal<string>;
26
+ /**
27
+ * When true, custom projections listed in `projections` are registered before map create.
28
+ * Built-in EPSG:4326 / EPSG:3857 never need registration.
29
+ * VN-2000 definitions must be supplied via `projections` — never invented.
30
+ */
31
+ readonly registerProjections: import("@angular/core").InputSignal<boolean>;
32
+ /** Custom CRS definitions (e.g. local VN-2000 from environment). */
33
+ readonly projections: import("@angular/core").InputSignal<ProjectionConfig[]>;
34
+ readonly showMousePosition: import("@angular/core").InputSignal<boolean>;
35
+ readonly mousePositionProjection: import("@angular/core").InputSignal<string>;
36
+ /** When false, hide built-in OL zoom control (prefer `geo-map-zoom`). */
37
+ readonly showZoomControl: import("@angular/core").InputSignal<boolean>;
38
+ readonly mapReady: import("@angular/core").OutputEmitterRef<GeoMapController>;
39
+ readonly mapClick: import("@angular/core").OutputEmitterRef<GeoMapClickEvent>;
40
+ readonly viewChange: import("@angular/core").OutputEmitterRef<GeoMapViewChangeEvent>;
41
+ readonly initError: import("@angular/core").OutputEmitterRef<string>;
42
+ private controller;
43
+ private unsubscribers;
44
+ private initAttempted;
45
+ private lastSyncedCenterKey;
46
+ private lastSyncedZoom;
47
+ private lastSyncedLayersRef;
48
+ constructor();
49
+ ngOnDestroy(): void;
50
+ private bootstrapMap;
51
+ static ɵfac: i0.ɵɵFactoryDeclaration<GeoMapComponent, never>;
52
+ static ɵcmp: i0.ɵɵComponentDeclaration<GeoMapComponent, "geo-map", never, { "center": { "alias": "center"; "required": false; "isSignal": true; }; "zoom": { "alias": "zoom"; "required": false; "isSignal": true; }; "minZoom": { "alias": "minZoom"; "required": false; "isSignal": true; }; "maxZoom": { "alias": "maxZoom"; "required": false; "isSignal": true; }; "viewProjection": { "alias": "viewProjection"; "required": false; "isSignal": true; }; "basemap": { "alias": "basemap"; "required": false; "isSignal": true; }; "layers": { "alias": "layers"; "required": false; "isSignal": true; }; "height": { "alias": "height"; "required": false; "isSignal": true; }; "registerProjections": { "alias": "registerProjections"; "required": false; "isSignal": true; }; "projections": { "alias": "projections"; "required": false; "isSignal": true; }; "showMousePosition": { "alias": "showMousePosition"; "required": false; "isSignal": true; }; "mousePositionProjection": { "alias": "mousePositionProjection"; "required": false; "isSignal": true; }; "showZoomControl": { "alias": "showZoomControl"; "required": false; "isSignal": true; }; }, { "mapReady": "mapReady"; "mapClick": "mapClick"; "viewChange": "viewChange"; "initError": "initError"; }, never, never, true, never>;
53
+ }
@@ -0,0 +1,73 @@
1
+ import type { GeoMapBasemapOption, GeoMapLayerConfig, GeoMapLegendItem, GeoMapParcelDetail, GeoMapToolbarAction, GeoMapXyzLayerConfig } from './geo-map.types';
2
+ import type { GeoTreeNode } from '../geo-tree/geo-tree.types';
3
+ /** Built-in CRS codes available without custom proj4 registration. */
4
+ export declare const GEO_MAP_BUILTIN_PROJECTIONS: readonly ["EPSG:4326", "EPSG:3857"];
5
+ /**
6
+ * Default view — Web Mercator around Đà Lạt (Lâm Đồng).
7
+ * Center is already in EPSG:3857 (do not treat as lon/lat).
8
+ */
9
+ export declare const GEO_MAP_DEFAULT_CENTER: readonly [number, number];
10
+ export declare const GEO_MAP_DEFAULT_ZOOM = 11;
11
+ export declare const GEO_MAP_DEFAULT_MIN_ZOOM = 2;
12
+ export declare const GEO_MAP_DEFAULT_MAX_ZOOM = 20;
13
+ export declare const GEO_MAP_DEFAULT_VIEW_PROJECTION = "EPSG:3857";
14
+ export declare const GEO_MAP_DEFAULT_HEIGHT = "480px";
15
+ /** Internal layer id reserved for the `basemap` input shortcut. */
16
+ export declare const GEO_MAP_BASEMAP_LAYER_ID = "__geo_basemap";
17
+ /** Internal vector layers reserved for selection / measure / highlight. */
18
+ export declare const GEO_MAP_SELECTION_LAYER_ID = "__geo_selection";
19
+ export declare const GEO_MAP_MEASURE_LAYER_ID = "__geo_measure";
20
+ export declare const GEO_MAP_HIGHLIGHT_LAYER_ID = "__geo_highlight";
21
+ /**
22
+ * Default province extent (Lâm Đồng approx, EPSG:4326) for “xem toàn tỉnh” (TCQH.14 GD5).
23
+ * Host apps should override with authoritative boundary extent from API.
24
+ */
25
+ export declare const GEO_MAP_DEFAULT_PROVINCE_EXTENT_4326: readonly [
26
+ number,
27
+ number,
28
+ number,
29
+ number
30
+ ];
31
+ /** Optional traffic / roads reference overlay (not a planning layer). */
32
+ export declare const GEO_MAP_TRAFFIC_LAYER_ID = "__geo_traffic";
33
+ export declare const GEO_MAP_ESRI_IMAGERY_URL = "https://server.arcgisonline.com/ArcGIS/rest/services/World_Imagery/MapServer/tile/{z}/{y}/{x}";
34
+ export declare const GEO_MAP_ESRI_STREETS_URL = "https://server.arcgisonline.com/ArcGIS/rest/services/World_Street_Map/MapServer/tile/{z}/{y}/{x}";
35
+ export declare const GEO_MAP_ESRI_TRANSPORT_URL = "https://server.arcgisonline.com/ArcGIS/rest/services/Reference/World_Transportation/MapServer/tile/{z}/{y}/{x}";
36
+ /** Default basemap picker options (đường phố / vệ tinh). */
37
+ export declare const GEO_MAP_DEFAULT_BASEMAP_OPTIONS: GeoMapBasemapOption[];
38
+ /** Transportation reference overlay — toggle independently of basemap. */
39
+ export declare const GEO_MAP_TRAFFIC_OVERLAY: GeoMapXyzLayerConfig;
40
+ /** Built-in toolbar actions — Figma map chrome (Dat Dai Lam Dong 2026). */
41
+ export declare const GEO_MAP_DEFAULT_TOOLBAR_ACTIONS: GeoMapToolbarAction[];
42
+ /**
43
+ * Demo thematic overlays for Storybook (offline-friendly GeoJSON).
44
+ * Groups match portal layers popover: QHSDD · địa chính · hiện trạng.
45
+ */
46
+ export declare const GEO_MAP_DEMO_THEMATIC_LAYERS: GeoMapLayerConfig[];
47
+ /**
48
+ * Sample legend — placeholder colors until Thông tư 09/2024 palette is complete (Q13–Q15).
49
+ * Do not treat as legally authoritative.
50
+ */
51
+ export declare const GEO_MAP_DEMO_LEGEND_ITEMS: GeoMapLegendItem[];
52
+ export declare const GEO_MAP_DEFAULT_HELP_SECTIONS: Array<{
53
+ title: string;
54
+ body: string;
55
+ }>;
56
+ /** Demo admin tree (xã) for Storybook — replace via API in production. */
57
+ export declare const GEO_MAP_DEMO_ADMIN_NODES: GeoTreeNode[];
58
+ /** Demo parcel detail for Storybook search/popup (TCQH.12). */
59
+ export declare const GEO_MAP_DEMO_PARCEL_DETAIL: GeoMapParcelDetail;
60
+ /**
61
+ * Placeholder endpoints — replace via environment / API.
62
+ * Do not hard-code production domains here.
63
+ */
64
+ export declare const GEO_MAP_ENV_PLACEHOLDERS: {
65
+ readonly wmsUrl: "https://{MAP_API_HOST}/geoserver/wms";
66
+ readonly xyzSatelliteUrl: "https://{TILE_HOST}/satellite/{z}/{x}/{y}.png";
67
+ readonly geojsonParcelUrl: "https://{MAP_API_HOST}/api/v1/parcels.geojson";
68
+ };
69
+ /**
70
+ * Example multi-layer stack for land-use planning demos / Storybook.
71
+ * URLs are placeholders; WMS/XYZ tiles will fail until env is wired.
72
+ */
73
+ export declare const GEO_MAP_DEFAULT_PLANNING_LAYERS: GeoMapLayerConfig[];
@@ -0,0 +1,49 @@
1
+ import type OlMap from 'ol/Map';
2
+ import type { Coordinate } from 'ol/coordinate';
3
+ import type Feature from 'ol/Feature';
4
+ import type Geometry from 'ol/geom/Geometry';
5
+ import type { GeoMapBasemapInput, GeoMapHighlightOptions, GeoMapLayerConfig, GeoMapLayerRuntimeState } from './geo-map.types';
6
+ import type { CreatedMapLayer } from './services/geo-map-layer.service';
7
+ import type { GeoMapService } from './services/geo-map.service';
8
+ import type { GeoMapLayerService } from './services/geo-map-layer.service';
9
+ /**
10
+ * Public façade emitted via `mapReady`. Keeps OpenLayers Map out of templates
11
+ * while allowing host features to drive view / layers.
12
+ */
13
+ export declare class GeoMapController {
14
+ private readonly mapService;
15
+ private readonly layerService;
16
+ constructor(mapService: GeoMapService, layerService: GeoMapLayerService);
17
+ getMap(): OlMap | null;
18
+ setCenter(center: Coordinate, zoom?: number): void;
19
+ setZoom(zoom: number): void;
20
+ getZoom(): number | undefined;
21
+ zoomIn(): void;
22
+ zoomOut(): void;
23
+ setBasemap(basemap: GeoMapBasemapInput): void;
24
+ fitExtent(extent: [number, number, number, number], options?: {
25
+ padding?: number[];
26
+ maxZoom?: number;
27
+ duration?: number;
28
+ }): void;
29
+ fitLonLatExtent(extent4326: [number, number, number, number], options?: {
30
+ padding?: number[];
31
+ maxZoom?: number;
32
+ duration?: number;
33
+ }): void;
34
+ /** Fit province / toàn tỉnh (TCQH.14 GD5) — not browser fullscreen. */
35
+ fitProvince(extent4326?: readonly [number, number, number, number], options?: {
36
+ padding?: number[];
37
+ maxZoom?: number;
38
+ duration?: number;
39
+ }): void;
40
+ setHighlightFromGeoJson(data: object, options?: GeoMapHighlightOptions): void;
41
+ setHighlightFeatures(features: Feature<Geometry>[], options?: GeoMapHighlightOptions): void;
42
+ clearHighlight(): void;
43
+ updateSize(): void;
44
+ syncLayers(configs: GeoMapLayerConfig[]): void;
45
+ setLayerVisibility(layerId: string, visible: boolean): void;
46
+ setLayerOpacity(layerId: string, opacity: number): void;
47
+ getLayers(): CreatedMapLayer[];
48
+ getLayerRuntimeStates(): GeoMapLayerRuntimeState[];
49
+ }
@@ -0,0 +1,224 @@
1
+ import type Feature from 'ol/Feature';
2
+ import type Geometry from 'ol/geom/Geometry';
3
+ /** Supported map layer source kinds. */
4
+ export type GeoMapLayerType = 'osm' | 'xyz' | 'wms' | 'wmts' | 'vector' | 'geojson';
5
+ /** Layer load lifecycle for panel / chrome. */
6
+ export type GeoMapLayerStatus = 'idle' | 'loading' | 'ready' | 'error';
7
+ export interface ProjectionConfig {
8
+ code: string;
9
+ /** Full proj4 definition string. Must be supplied by env/API — never invent VN-2000 params. */
10
+ definition: string;
11
+ extent?: [number, number, number, number];
12
+ units?: string;
13
+ }
14
+ export interface GeoMapLayerBase {
15
+ id: string;
16
+ title: string;
17
+ visible?: boolean;
18
+ /** 0–1 */
19
+ opacity?: number;
20
+ zIndex?: number;
21
+ minZoom?: number;
22
+ maxZoom?: number;
23
+ /** Treat as basemap (only one active at a time). */
24
+ basemap?: boolean;
25
+ /** Group key for layer panel sections (`base-map`, `qhsdd`, …). */
26
+ group?: string;
27
+ /** Display title for the group accordion (falls back to group key). */
28
+ groupLabel?: string;
29
+ /** Selection UX within the group: radio (`single`) or checkbox (`multi`). */
30
+ groupSelection?: 'single' | 'multi';
31
+ /** Eligible for identify / GetFeatureInfo. */
32
+ queryable?: boolean;
33
+ legendUrl?: string;
34
+ projection?: string;
35
+ metadata?: Record<string, unknown>;
36
+ }
37
+ export interface GeoMapOsmLayerConfig extends GeoMapLayerBase {
38
+ type: 'osm';
39
+ }
40
+ export interface GeoMapXyzLayerConfig extends GeoMapLayerBase {
41
+ type: 'xyz';
42
+ url: string;
43
+ attributions?: string | string[];
44
+ maxZoom?: number;
45
+ crossOrigin?: string | null;
46
+ }
47
+ export interface GeoMapWmsLayerConfig extends GeoMapLayerBase {
48
+ type: 'wms';
49
+ url: string;
50
+ params: Record<string, string | number | boolean>;
51
+ serverType?: 'geoserver' | 'mapserver' | 'qgis' | 'carmentaserver';
52
+ crossOrigin?: string | null;
53
+ /** Optional WMS layer name when not only in `params.LAYERS`. */
54
+ layerName?: string;
55
+ }
56
+ export interface GeoMapWmtsLayerConfig extends GeoMapLayerBase {
57
+ type: 'wmts';
58
+ url: string;
59
+ layer: string;
60
+ matrixSet: string;
61
+ format?: string;
62
+ style?: string;
63
+ projection?: string;
64
+ crossOrigin?: string | null;
65
+ }
66
+ export interface GeoMapGeoJsonLayerConfig extends GeoMapLayerBase {
67
+ type: 'geojson';
68
+ /** Inline GeoJSON object or URL string. */
69
+ data: object | string;
70
+ dataProjection?: string;
71
+ featureProjection?: string;
72
+ }
73
+ export interface GeoMapVectorLayerConfig extends GeoMapLayerBase {
74
+ type: 'vector';
75
+ /** Pre-built OL features (app-owned). */
76
+ features?: Feature<Geometry>[];
77
+ }
78
+ export type GeoMapLayerConfig = GeoMapOsmLayerConfig | GeoMapXyzLayerConfig | GeoMapWmsLayerConfig | GeoMapWmtsLayerConfig | GeoMapGeoJsonLayerConfig | GeoMapVectorLayerConfig;
79
+ export type GeoMapBasemapInput = 'osm' | {
80
+ type: 'xyz';
81
+ url: string;
82
+ attributions?: string | string[];
83
+ maxZoom?: number;
84
+ title?: string;
85
+ };
86
+ /** Alias used by basemap switcher output. */
87
+ export type GeoMapBasemap = GeoMapBasemapInput;
88
+ export interface GeoMapBasemapOption {
89
+ id: string;
90
+ label: string;
91
+ basemap: GeoMapBasemap;
92
+ previewUrl?: string;
93
+ }
94
+ export type GeoMapLocateErrorReason = 'unsupported' | 'denied' | 'unavailable' | 'timeout' | 'unknown';
95
+ export interface GeoMapClickEvent {
96
+ /** Coordinate in view projection. */
97
+ coordinate: number[];
98
+ /** Lon/lat (EPSG:4326) as [longitude, latitude]. */
99
+ lonLat: [number, number];
100
+ pixel: [number, number];
101
+ originalEvent: UIEvent;
102
+ }
103
+ export interface GeoMapViewChangeEvent {
104
+ center: number[];
105
+ zoom: number;
106
+ resolution: number;
107
+ rotation: number;
108
+ }
109
+ export interface GeoMapLayerVisibilityChange {
110
+ layerId: string;
111
+ visible: boolean;
112
+ }
113
+ export interface GeoMapLayerOpacityChange {
114
+ layerId: string;
115
+ opacity: number;
116
+ }
117
+ export interface GeoMapLayerRuntimeState {
118
+ id: string;
119
+ status: GeoMapLayerStatus;
120
+ errorMessage?: string;
121
+ }
122
+ export interface GeoMapCoordinate {
123
+ /** [x, y] or [longitude, latitude] in `projection`. */
124
+ coordinates: [number, number];
125
+ projection: string;
126
+ }
127
+ export interface MapInitOptions {
128
+ target: HTMLElement;
129
+ center: number[];
130
+ zoom: number;
131
+ minZoom: number;
132
+ maxZoom: number;
133
+ viewProjection: string;
134
+ }
135
+ export interface GeoMapLegendItem {
136
+ label: string;
137
+ /** Optional land-use code (e.g. ONT, SKC). */
138
+ code?: string;
139
+ /** CSS color for swatch — prefer design tokens when possible. */
140
+ color?: string;
141
+ swatchUrl?: string;
142
+ }
143
+ export type GeoMapMeasureMode = 'none' | 'distance' | 'area';
144
+ export interface GeoMapMeasureResult {
145
+ mode: Exclude<GeoMapMeasureMode, 'none'>;
146
+ /** Raw value in meters (distance) or m² (area). */
147
+ value: number;
148
+ /** Human-readable label (m/km or m²/ha). */
149
+ label: string;
150
+ geometry: Geometry | null;
151
+ }
152
+ export interface GeoMapToolbarAction {
153
+ id: string;
154
+ label?: string;
155
+ /** ng-zorro / geo-icon type (fallback when `iconSrc` is omitted). */
156
+ icon?: string;
157
+ /** Exported Figma / static asset URL (prefer over `icon`). */
158
+ iconSrc?: string;
159
+ active?: boolean;
160
+ checked?: boolean;
161
+ disabled?: boolean;
162
+ iconOnly?: boolean;
163
+ tooltip?: string;
164
+ /** Filled primary control (e.g. Home). */
165
+ variant?: 'default' | 'primary';
166
+ }
167
+ /** Search modes for portal tra cứu (TCQH.7–11). */
168
+ export type GeoMapSearchMode = 'owner' | 'certificate' | 'coordinates' | 'address' | 'parcel';
169
+ export interface GeoMapSearchQuery {
170
+ mode: GeoMapSearchMode;
171
+ /** Field values keyed by mode-specific input ids. */
172
+ values: Record<string, string>;
173
+ }
174
+ export interface GeoMapSearchResultItem {
175
+ id: string;
176
+ title: string;
177
+ subtitle?: string;
178
+ /** Lon/lat center for pan (EPSG:4326). */
179
+ center4326?: [number, number];
180
+ /** Lon/lat extent for fit (EPSG:4326). */
181
+ extent4326?: [number, number, number, number];
182
+ /** Optional GeoJSON Feature / FeatureCollection for map highlight. */
183
+ geojson?: object;
184
+ /** Detail payload for `geo-map-parcel-popup`. */
185
+ parcel?: GeoMapParcelDetail;
186
+ }
187
+ /** Audience controls which parcel fields are shown (TCQH.12). */
188
+ export type GeoMapParcelAudience = 'citizen' | 'specialist';
189
+ export interface GeoMapParcelDetail {
190
+ /** Mã thửa đất (hiển thị ở Thông tin chung). */
191
+ parcelCode?: string;
192
+ parcelNumber?: string;
193
+ sheetNumber?: string;
194
+ ward?: string;
195
+ province?: string;
196
+ area?: string;
197
+ legalArea?: string;
198
+ landUse?: string;
199
+ address?: string;
200
+ useForm?: string;
201
+ registrationStatus?: string;
202
+ /** Chuyên viên / mở rộng. */
203
+ shapeInfo?: string;
204
+ planningInfo?: string;
205
+ /** Giá đất — mặc định UI hiện «Đang cập nhật» nếu trống. */
206
+ landPrice?: string;
207
+ /** URL ảnh sơ đồ thửa (tuỳ chọn). */
208
+ diagramUrl?: string;
209
+ /** Extra rows when host needs more fields. */
210
+ extraFields?: Array<{
211
+ label: string;
212
+ value: string;
213
+ }>;
214
+ }
215
+ export interface GeoMapHighlightOptions {
216
+ dataProjection?: string;
217
+ /** Fit view to highlight extent (default true when features exist). */
218
+ fit?: boolean;
219
+ fitOptions?: {
220
+ padding?: number[];
221
+ maxZoom?: number;
222
+ duration?: number;
223
+ };
224
+ }
@@ -0,0 +1,42 @@
1
+ import type BaseLayer from 'ol/layer/Base';
2
+ import type { GeoMapBasemapInput, GeoMapLayerConfig, GeoMapLayerRuntimeState } from '../geo-map.types';
3
+ import * as i0 from "@angular/core";
4
+ export interface CreatedMapLayer {
5
+ id: string;
6
+ config: GeoMapLayerConfig;
7
+ layer: BaseLayer;
8
+ }
9
+ /**
10
+ * Builds and incrementally patches OpenLayers layers from typed configs.
11
+ * Visibility / opacity updates must not recreate sources.
12
+ */
13
+ export declare class GeoMapLayerService {
14
+ private readonly projection;
15
+ private readonly runtime;
16
+ getRuntimeState(layerId: string): GeoMapLayerRuntimeState | undefined;
17
+ getAllRuntimeStates(): GeoMapLayerRuntimeState[];
18
+ createFromBasemapInput(basemap: GeoMapBasemapInput): CreatedMapLayer;
19
+ createLayer(config: GeoMapLayerConfig): CreatedMapLayer;
20
+ /**
21
+ * Apply visibility/opacity/zIndex without recreating the OL layer.
22
+ * Returns true when structural fields changed and the layer should be recreated.
23
+ */
24
+ needsRecreate(previous: GeoMapLayerConfig, next: GeoMapLayerConfig): boolean;
25
+ patchLayer(layer: BaseLayer, config: GeoMapLayerConfig): void;
26
+ setVisible(layer: BaseLayer, visible: boolean): void;
27
+ setOpacity(layer: BaseLayer, opacity: number): void;
28
+ getLayerId(layer: BaseLayer): string | undefined;
29
+ isBasemap(layer: BaseLayer): boolean;
30
+ resolveBasemapExclusive(layers: CreatedMapLayer[], activeBasemapId: string): void;
31
+ private validateConfig;
32
+ private applyCommonOptions;
33
+ private wireSourceStatus;
34
+ private createOsmLayer;
35
+ private createXyzLayer;
36
+ private createWmsLayer;
37
+ private createWmtsLayer;
38
+ private createGeoJsonLayer;
39
+ private createVectorLayer;
40
+ static ɵfac: i0.ɵɵFactoryDeclaration<GeoMapLayerService, never>;
41
+ static ɵprov: i0.ɵɵInjectableDeclaration<GeoMapLayerService>;
42
+ }
@@ -0,0 +1,32 @@
1
+ import type { ProjectionConfig } from '../geo-map.types';
2
+ import * as i0 from "@angular/core";
3
+ export declare class GeoMapProjectionError extends Error {
4
+ constructor(message: string);
5
+ }
6
+ /**
7
+ * Central proj4 / OpenLayers projection registration and transforms.
8
+ * Keep all CRS logic here — components must not call proj4 directly.
9
+ */
10
+ export declare class GeoMapProjectionService {
11
+ private readonly registeredCodes;
12
+ isRegistered(code: string): boolean;
13
+ /**
14
+ * Register a custom CRS (e.g. local VN-2000). Definition must come from config/API.
15
+ */
16
+ registerProjection(config: ProjectionConfig): void;
17
+ ensureRegistered(code: string): void;
18
+ /**
19
+ * Transform a coordinate. Order is always [x, y] / [longitude, latitude].
20
+ */
21
+ transformCoordinate(coordinate: [number, number] | number[], fromProjection: string, toProjection: string): [number, number];
22
+ transformExtent(extent: [number, number, number, number], fromProjection: string, toProjection: string): [number, number, number, number];
23
+ /**
24
+ * Normalize user input: trim, upper-case EPSG codes, reject non-finite numbers.
25
+ */
26
+ normalizeCoordinate(value: unknown, options?: {
27
+ label?: string;
28
+ }): [number, number];
29
+ normalizeCode(code: string): string;
30
+ static ɵfac: i0.ɵɵFactoryDeclaration<GeoMapProjectionService, never>;
31
+ static ɵprov: i0.ɵɵInjectableDeclaration<GeoMapProjectionService>;
32
+ }
@@ -0,0 +1,99 @@
1
+ import OlMap from 'ol/Map';
2
+ import type { Coordinate } from 'ol/coordinate';
3
+ import type Feature from 'ol/Feature';
4
+ import type Geometry from 'ol/geom/Geometry';
5
+ import type { GeoMapBasemapInput, GeoMapClickEvent, GeoMapHighlightOptions, GeoMapLayerConfig, GeoMapViewChangeEvent, MapInitOptions } from '../geo-map.types';
6
+ import { CreatedMapLayer } from './geo-map-layer.service';
7
+ import * as i0 from "@angular/core";
8
+ export interface GeoMapCreateOptions extends MapInitOptions {
9
+ basemap?: GeoMapBasemapInput;
10
+ layers?: GeoMapLayerConfig[];
11
+ /** Show OL MousePosition control (raw; UI chrome may wrap later). */
12
+ showMousePosition?: boolean;
13
+ mousePositionProjection?: string;
14
+ /** When false, hide built-in OL zoom (use `geo-map-zoom` instead). */
15
+ showZoomControl?: boolean;
16
+ }
17
+ /**
18
+ * Owns a single OpenLayers Map instance for the providing component injector.
19
+ * Do not put Map/Layer objects into Angular template state.
20
+ */
21
+ export declare class GeoMapService {
22
+ private readonly layerService;
23
+ private readonly projection;
24
+ private map;
25
+ private managedLayers;
26
+ private listenerKeys;
27
+ private resizeObserver;
28
+ private resizeCleanup;
29
+ private activeBasemapId;
30
+ private highlightLayer;
31
+ private highlightSource;
32
+ getMap(): OlMap | null;
33
+ isInitialized(): boolean;
34
+ init(options: GeoMapCreateOptions): OlMap;
35
+ /**
36
+ * Sync layer stack with configs. Preserves OL layers when only visibility/opacity change.
37
+ */
38
+ syncLayers(configs: GeoMapLayerConfig[], options?: {
39
+ replaceBasemapShortcut?: boolean;
40
+ }): void;
41
+ setLayerVisibility(layerId: string, visible: boolean): void;
42
+ setLayerOpacity(layerId: string, opacity: number): void;
43
+ getManagedLayers(): CreatedMapLayer[];
44
+ setCenter(center: Coordinate, zoom?: number): void;
45
+ setZoom(zoom: number): void;
46
+ getZoom(): number | undefined;
47
+ zoomBy(delta: number): void;
48
+ /** Replace the shortcut basemap layer (`GEO_MAP_BASEMAP_LAYER_ID`). */
49
+ setBasemap(basemap: GeoMapBasemapInput): void;
50
+ fitExtent(extent: [number, number, number, number], options?: {
51
+ padding?: number[];
52
+ maxZoom?: number;
53
+ duration?: number;
54
+ }): void;
55
+ /** Fit lon/lat extent (EPSG:4326) after transforming to the active view projection. */
56
+ fitLonLatExtent(extent4326: [number, number, number, number], options?: {
57
+ padding?: number[];
58
+ maxZoom?: number;
59
+ duration?: number;
60
+ }): void;
61
+ /**
62
+ * Fit the default (or provided) province extent — TCQH.14 “xem toàn tỉnh”.
63
+ * Distinct from browser fullscreen (TCQH.15).
64
+ */
65
+ fitProvince(extent4326?: readonly [number, number, number, number], options?: {
66
+ padding?: number[];
67
+ maxZoom?: number;
68
+ duration?: number;
69
+ }): void;
70
+ /**
71
+ * Highlight search / select results (TCQH.7–12). Pass GeoJSON Feature or FeatureCollection.
72
+ */
73
+ setHighlightFromGeoJson(data: object, options?: GeoMapHighlightOptions): void;
74
+ setHighlightFeatures(features: Feature<Geometry>[], options?: GeoMapHighlightOptions): void;
75
+ clearHighlight(): void;
76
+ updateSize(): void;
77
+ onClick(handler: (event: GeoMapClickEvent) => void): () => void;
78
+ /**
79
+ * Emit after the view settles (`moveend`), not on every resolution tick —
80
+ * continuous emitters flood Storybook Actions / host bindings and cause UI flicker.
81
+ */
82
+ onViewChange(handler: (event: GeoMapViewChangeEvent) => void): () => void;
83
+ /**
84
+ * Tear down map, listeners, and resize observer. Safe to call multiple times.
85
+ */
86
+ destroy(): void;
87
+ private ensureHighlightLayer;
88
+ private createHighlightStyle;
89
+ /** Inline SVG map pin for clicked / selected points. */
90
+ private createPinIconDataUri;
91
+ /** Resolve a design token for OpenLayers canvas styles. */
92
+ private cssColor;
93
+ private withAlpha;
94
+ private addManagedLayer;
95
+ private enforceSingleBasemap;
96
+ private observeResize;
97
+ static ɵfac: i0.ɵɵFactoryDeclaration<GeoMapService, never>;
98
+ static ɵprov: i0.ɵɵInjectableDeclaration<GeoMapService>;
99
+ }
@@ -0,0 +1,13 @@
1
+ import type { OverlayContainer } from '@angular/cdk/overlay';
2
+ /**
3
+ * CDK / ng-zorro overlays (drawer, dropdown, tooltip, modal) mount under
4
+ * `.cdk-overlay-container` on `document.body`. While an ancestor is in
5
+ * Fullscreen API mode, only its descendants are painted — so overlays on
6
+ * `body` become invisible / untouchable.
7
+ *
8
+ * Call on `fullscreenchange` to move the overlay container into the
9
+ * fullscreen element, then restore to `body` when exiting.
10
+ */
11
+ export declare function syncOverlayContainerToFullscreen(overlayContainer: OverlayContainer, scopeRoot?: HTMLElement | null): void;
12
+ /** Always put the CDK overlay host back on `document.body`. */
13
+ export declare function restoreOverlayContainerToBody(overlayContainer: OverlayContainer): void;
@@ -0,0 +1,9 @@
1
+ import type OlMap from 'ol/Map';
2
+ /**
3
+ * Temporarily disables map navigation interactions that conflict with
4
+ * Draw / DragBox tools. Call `resume()` when the tool ends.
5
+ */
6
+ export declare function pauseConflictingInteractions(map: OlMap, options?: {
7
+ dragPan?: boolean;
8
+ doubleClickZoom?: boolean;
9
+ }): () => void;
@@ -0,0 +1,18 @@
1
+ import type { GeoOverlapResultRow } from './geo-overlap-result.types';
2
+ import * as i0 from "@angular/core";
3
+ /**
4
+ * Planning overlap analysis result table (TCQH.27).
5
+ *
6
+ * @summary Bảng kết quả phân tích chồng lấn quy hoạch (diện tích giao / %).
7
+ * @whenToUse Màn Phân tích chồng lấn — kết quả sau khi chạy phân tích.
8
+ * @doNotUseWhen Generic CRUD lists — use geo-table.
9
+ */
10
+ export declare class GeoOverlapResultComponent {
11
+ readonly title: import("@angular/core").InputSignal<string>;
12
+ readonly rows: import("@angular/core").InputSignal<GeoOverlapResultRow[]>;
13
+ readonly areaUnit: import("@angular/core").InputSignal<string>;
14
+ readonly emptyText: import("@angular/core").InputSignal<string>;
15
+ readonly rowClick: import("@angular/core").OutputEmitterRef<GeoOverlapResultRow>;
16
+ static ɵfac: i0.ɵɵFactoryDeclaration<GeoOverlapResultComponent, never>;
17
+ static ɵcmp: i0.ɵɵComponentDeclaration<GeoOverlapResultComponent, "geo-overlap-result", never, { "title": { "alias": "title"; "required": false; "isSignal": true; }; "rows": { "alias": "rows"; "required": false; "isSignal": true; }; "areaUnit": { "alias": "areaUnit"; "required": false; "isSignal": true; }; "emptyText": { "alias": "emptyText"; "required": false; "isSignal": true; }; }, { "rowClick": "rowClick"; }, never, never, true, never>;
18
+ }
@@ -0,0 +1,7 @@
1
+ export interface GeoOverlapResultRow {
2
+ id: string;
3
+ planningType: string;
4
+ intersectionArea: number | string;
5
+ percent: number | string;
6
+ color?: string;
7
+ }
@@ -0,0 +1,16 @@
1
+ import type { GeoBreadcrumbItem } from '../geo-breadcrumb/geo-breadcrumb.types';
2
+ import * as i0 from "@angular/core";
3
+ /**
4
+ * List / admin page chrome: breadcrumb + title + action / filter slots.
5
+ *
6
+ * @summary Header trang danh sách / quản trị / thống kê.
7
+ * @whenToUse Đầu trang ngoài màn bản đồ (dashboard, QL người dùng, thống kê).
8
+ * @doNotUseWhen Map chrome — use geo-map-shell tools.
9
+ */
10
+ export declare class GeoPageHeaderComponent {
11
+ readonly title: import("@angular/core").InputSignal<string>;
12
+ readonly breadcrumb: import("@angular/core").InputSignal<GeoBreadcrumbItem[]>;
13
+ readonly uppercase: import("@angular/core").InputSignal<boolean>;
14
+ static ɵfac: i0.ɵɵFactoryDeclaration<GeoPageHeaderComponent, never>;
15
+ static ɵcmp: i0.ɵɵComponentDeclaration<GeoPageHeaderComponent, "geo-page-header", never, { "title": { "alias": "title"; "required": false; "isSignal": true; }; "breadcrumb": { "alias": "breadcrumb"; "required": false; "isSignal": true; }; "uppercase": { "alias": "uppercase"; "required": false; "isSignal": true; }; }, {}, never, ["[geoPageActions]", "[geoPageFilters]"], true, never>;
16
+ }