@geoit/ui 0.0.4 → 0.0.6

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 +94 -66
  3. package/ai/AGENTS.md +106 -16
  4. package/ai/README.md +35 -1
  5. package/ai/catalog.json +2855 -275
  6. package/ai/components/geo-alert.md +3 -3
  7. package/ai/components/geo-back-button.md +2 -2
  8. package/ai/components/geo-breadcrumb.md +1 -1
  9. package/ai/components/geo-button.md +3 -3
  10. package/ai/components/geo-chart.md +115 -0
  11. package/ai/components/geo-checkbox.md +4 -6
  12. package/ai/components/geo-column-picker.md +3 -3
  13. package/ai/components/geo-confirm-modal.md +4 -5
  14. package/ai/components/geo-dashboard.md +102 -0
  15. package/ai/components/geo-date-picker.md +5 -3
  16. package/ai/components/geo-date-range-picker.md +5 -3
  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 +4 -2
  20. package/ai/components/geo-forgot-password.md +81 -0
  21. package/ai/components/geo-form-modal.md +9 -10
  22. package/ai/components/geo-icon.md +3 -3
  23. package/ai/components/geo-input.md +8 -6
  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 +75 -0
  30. package/ai/components/geo-login.md +106 -0
  31. package/ai/components/geo-map-admin-filter.md +85 -0
  32. package/ai/components/geo-map-basemap-switcher.md +79 -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 +84 -0
  43. package/ai/components/geo-map-search.md +89 -0
  44. package/ai/components/geo-map-shell.md +146 -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 +81 -0
  48. package/ai/components/geo-map-zoom.md +74 -0
  49. package/ai/components/geo-map.md +212 -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 +1 -1
  53. package/ai/components/geo-pagination.md +4 -7
  54. package/ai/components/geo-radio.md +3 -1
  55. package/ai/components/geo-row-actions.md +3 -3
  56. package/ai/components/geo-select.md +4 -2
  57. package/ai/components/geo-slider.md +6 -8
  58. package/ai/components/geo-stat-card.md +98 -0
  59. package/ai/components/geo-status-tag.md +2 -2
  60. package/ai/components/geo-step-form-layout.md +7 -8
  61. package/ai/components/geo-stepper.md +3 -4
  62. package/ai/components/geo-table-filter.md +4 -5
  63. package/ai/components/geo-table-pagination.md +4 -7
  64. package/ai/components/geo-table-toolbar.md +7 -7
  65. package/ai/components/geo-table.md +17 -20
  66. package/ai/components/geo-tabs.md +4 -6
  67. package/ai/components/geo-textarea.md +4 -2
  68. package/ai/components/geo-toast.md +4 -4
  69. package/ai/components/geo-tree.md +4 -6
  70. package/ai/components/geo-typography.md +1 -1
  71. package/ai/components/geo-upload.md +9 -10
  72. package/ai/mockup.html +1194 -0
  73. package/ai/recipes.md +184 -85
  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,40 @@
1
+ import { GeoMapController } from '../../geo-map.controller';
2
+ import type { GeoMapLayerConfig } from '../../geo-map.types';
3
+ import * as i0 from "@angular/core";
4
+ interface LayerGroupSection {
5
+ key: string;
6
+ title: string;
7
+ selection: 'single' | 'multi';
8
+ layers: GeoMapLayerConfig[];
9
+ }
10
+ /**
11
+ * Toggle layer visibility / opacity by accordion groups.
12
+ *
13
+ * @summary Panel bật/tắt lớp bản đồ theo nhóm (radio / checkbox + độ mờ).
14
+ * @whenToUse Map chrome popover «Lớp bản đồ».
15
+ * @doNotUseWhen Non-map lists — use geo-tree/geo-checkbox.
16
+ */
17
+ export declare class GeoMapLayerPanelComponent {
18
+ readonly controller: import("@angular/core").InputSignal<GeoMapController | null>;
19
+ readonly title: import("@angular/core").InputSignal<string>;
20
+ /** When true, hide the panel's own header (host popover provides title). */
21
+ readonly embedded: import("@angular/core").InputSignal<boolean>;
22
+ readonly layers: import("@angular/core").ModelSignal<GeoMapLayerConfig[]>;
23
+ readonly layersChange: import("@angular/core").OutputEmitterRef<GeoMapLayerConfig[]>;
24
+ private readonly tick;
25
+ readonly expandedKeys: import("@angular/core").WritableSignal<Record<string, boolean>>;
26
+ readonly sections: import("@angular/core").Signal<LayerGroupSection[]>;
27
+ constructor();
28
+ isExpanded(key: string): boolean;
29
+ toggleSection(key: string): void;
30
+ isVisible(layer: GeoMapLayerConfig): boolean;
31
+ opacityPercent(layer: GeoMapLayerConfig): number;
32
+ onToggleMulti(layer: GeoMapLayerConfig, checked: boolean): void;
33
+ onSelectSingle(section: LayerGroupSection, layer: GeoMapLayerConfig): void;
34
+ onOpacityChange(layer: GeoMapLayerConfig, percent: number): void;
35
+ private resolveLayers;
36
+ private applyLayers;
37
+ static ɵfac: i0.ɵɵFactoryDeclaration<GeoMapLayerPanelComponent, never>;
38
+ static ɵcmp: i0.ɵɵComponentDeclaration<GeoMapLayerPanelComponent, "geo-map-layer-panel", never, { "controller": { "alias": "controller"; "required": false; "isSignal": true; }; "title": { "alias": "title"; "required": false; "isSignal": true; }; "embedded": { "alias": "embedded"; "required": false; "isSignal": true; }; "layers": { "alias": "layers"; "required": false; "isSignal": true; }; }, { "layers": "layersChange"; "layersChange": "layersChange"; }, never, never, true, never>;
39
+ }
40
+ export {};
@@ -0,0 +1,25 @@
1
+ import { GeoMapController } from '../../geo-map.controller';
2
+ import type { GeoMapLayerConfig, GeoMapLegendItem } from '../../geo-map.types';
3
+ import * as i0 from "@angular/core";
4
+ /**
5
+ * Floating popover for map layer visibility / opacity.
6
+ *
7
+ * @summary Popover lớp bản đồ (accordion + radio/checkbox + độ mờ).
8
+ * @whenToUse Opened from toolbar layers action.
9
+ * @doNotUseWhen Always-visible panels that crowd the map.
10
+ */
11
+ export declare class GeoMapLayersDrawerComponent {
12
+ readonly controller: import("@angular/core").InputSignal<GeoMapController | null>;
13
+ readonly open: import("@angular/core").ModelSignal<boolean>;
14
+ readonly title: import("@angular/core").InputSignal<string>;
15
+ readonly legendItems: import("@angular/core").InputSignal<GeoMapLegendItem[]>;
16
+ /** Kept for API compat — opacity is per-layer in the new panel. */
17
+ readonly showOpacity: import("@angular/core").InputSignal<boolean>;
18
+ /** Kept for API compat — legend lives outside this popover. */
19
+ readonly showLegend: import("@angular/core").InputSignal<boolean>;
20
+ readonly layers: import("@angular/core").ModelSignal<GeoMapLayerConfig[]>;
21
+ readonly closed: import("@angular/core").OutputEmitterRef<void>;
22
+ onClose(): void;
23
+ static ɵfac: i0.ɵɵFactoryDeclaration<GeoMapLayersDrawerComponent, never>;
24
+ static ɵcmp: i0.ɵɵComponentDeclaration<GeoMapLayersDrawerComponent, "geo-map-layers-drawer", never, { "controller": { "alias": "controller"; "required": false; "isSignal": true; }; "open": { "alias": "open"; "required": false; "isSignal": true; }; "title": { "alias": "title"; "required": false; "isSignal": true; }; "legendItems": { "alias": "legendItems"; "required": false; "isSignal": true; }; "showOpacity": { "alias": "showOpacity"; "required": false; "isSignal": true; }; "showLegend": { "alias": "showLegend"; "required": false; "isSignal": true; }; "layers": { "alias": "layers"; "required": false; "isSignal": true; }; }, { "open": "openChange"; "layers": "layersChange"; "closed": "closed"; }, never, never, true, never>;
25
+ }
@@ -0,0 +1,18 @@
1
+ import type { GeoMapLegendItem } from '../../geo-map.types';
2
+ import * as i0 from "@angular/core";
3
+ /**
4
+ * Floating legend popover (color/swatch + label).
5
+ *
6
+ * @summary Popover chú giải loại đất.
7
+ * @whenToUse Opened from toolbar legend action.
8
+ * @doNotUseWhen Form field labels.
9
+ */
10
+ export declare class GeoMapLegendComponent {
11
+ readonly title: import("@angular/core").InputSignal<string>;
12
+ readonly items: import("@angular/core").InputSignal<GeoMapLegendItem[]>;
13
+ readonly open: import("@angular/core").ModelSignal<boolean>;
14
+ readonly closed: import("@angular/core").OutputEmitterRef<void>;
15
+ onClose(): void;
16
+ static ɵfac: i0.ɵɵFactoryDeclaration<GeoMapLegendComponent, never>;
17
+ static ɵcmp: i0.ɵɵComponentDeclaration<GeoMapLegendComponent, "geo-map-legend", never, { "title": { "alias": "title"; "required": false; "isSignal": true; }; "items": { "alias": "items"; "required": false; "isSignal": true; }; "open": { "alias": "open"; "required": false; "isSignal": true; }; }, { "open": "openChange"; "closed": "closed"; }, never, never, true, never>;
18
+ }
@@ -0,0 +1,24 @@
1
+ import { GeoMapController } from '../../geo-map.controller';
2
+ import type { GeoMapLocateErrorReason } from '../../geo-map.types';
3
+ import * as i0 from "@angular/core";
4
+ /**
5
+ * Geolocation button: center map on user after permission.
6
+ *
7
+ * @summary Geolocation button: center map on user after permission.
8
+ * @whenToUse Vị trí của tôi trên bản đồ.
9
+ * @doNotUseWhen Server-side tracking.
10
+ */
11
+ export declare class GeoMapLocateComponent {
12
+ readonly controller: import("@angular/core").InputSignal<GeoMapController | null>;
13
+ readonly label: import("@angular/core").InputSignal<string>;
14
+ readonly located: import("@angular/core").OutputEmitterRef<[number, number]>;
15
+ readonly denied: import("@angular/core").OutputEmitterRef<void>;
16
+ readonly locateError: import("@angular/core").OutputEmitterRef<{
17
+ reason: GeoMapLocateErrorReason;
18
+ message?: string;
19
+ }>;
20
+ readonly busy: import("@angular/core").WritableSignal<boolean>;
21
+ locate(): void;
22
+ static ɵfac: i0.ɵɵFactoryDeclaration<GeoMapLocateComponent, never>;
23
+ static ɵcmp: i0.ɵɵComponentDeclaration<GeoMapLocateComponent, "geo-map-locate", never, { "controller": { "alias": "controller"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; }, { "located": "located"; "denied": "denied"; "locateError": "locateError"; }, never, never, true, never>;
24
+ }
@@ -0,0 +1,14 @@
1
+ import * as i0 from "@angular/core";
2
+ /**
3
+ * Bottom pill showing current administrative location.
4
+ *
5
+ * @summary Bottom pill showing current administrative location.
6
+ * @whenToUse Display resolved address / ĐVHC under the map.
7
+ * @doNotUseWhen Form address fields.
8
+ */
9
+ export declare class GeoMapLocationChipComponent {
10
+ readonly label: import("@angular/core").InputSignal<string>;
11
+ readonly icon: import("@angular/core").InputSignal<string>;
12
+ static ɵfac: i0.ɵɵFactoryDeclaration<GeoMapLocationChipComponent, never>;
13
+ static ɵcmp: i0.ɵɵComponentDeclaration<GeoMapLocationChipComponent, "geo-map-location-chip", never, { "label": { "alias": "label"; "required": false; "isSignal": true; }; "icon": { "alias": "icon"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
14
+ }
@@ -0,0 +1,49 @@
1
+ import { OnDestroy } from '@angular/core';
2
+ import { GeoMapController } from '../../geo-map.controller';
3
+ import type { GeoMapMeasureMode, GeoMapMeasureResult } from '../../geo-map.types';
4
+ import * as i0 from "@angular/core";
5
+ /**
6
+ * Distance / area measure tools on the map.
7
+ *
8
+ * @summary Distance / area measure tools on the map.
9
+ * @whenToUse Đo khoảng cách / diện tích (E-tien-ich).
10
+ * @doNotUseWhen Permanent vector editing — app-owned draw tools.
11
+ */
12
+ export declare class GeoMapMeasureComponent implements OnDestroy {
13
+ private readonly destroyRef;
14
+ readonly controller: import("@angular/core").InputSignal<GeoMapController | null>;
15
+ readonly mode: import("@angular/core").ModelSignal<GeoMapMeasureMode>;
16
+ readonly showResult: import("@angular/core").InputSignal<boolean>;
17
+ readonly measureChange: import("@angular/core").OutputEmitterRef<GeoMapMeasureResult | null>;
18
+ readonly result: import("@angular/core").WritableSignal<GeoMapMeasureResult | null>;
19
+ private source;
20
+ private layer;
21
+ private draw;
22
+ private boundMap;
23
+ private resumeInteractions;
24
+ constructor();
25
+ ngOnDestroy(): void;
26
+ clear(): void;
27
+ private syncInteraction;
28
+ private ensureLayer;
29
+ private createStyle;
30
+ /** Dashed stroke, numbered vertices, segment labels (distance + area). */
31
+ private buildMeasureStyles;
32
+ private openRing;
33
+ private vertexStyles;
34
+ private numberBadgeDataUrl;
35
+ private segmentLabelStyle;
36
+ private areaCentroidLabel;
37
+ private formatLengthLabel;
38
+ private formatAreaLabel;
39
+ /** Resolve a design token for OpenLayers canvas styles. */
40
+ private cssColor;
41
+ private cssFontFamily;
42
+ private withAlpha;
43
+ private formatResult;
44
+ private removeDraw;
45
+ private setMapCursor;
46
+ private teardown;
47
+ static ɵfac: i0.ɵɵFactoryDeclaration<GeoMapMeasureComponent, never>;
48
+ static ɵcmp: i0.ɵɵComponentDeclaration<GeoMapMeasureComponent, "geo-map-measure", never, { "controller": { "alias": "controller"; "required": false; "isSignal": true; }; "mode": { "alias": "mode"; "required": false; "isSignal": true; }; "showResult": { "alias": "showResult"; "required": false; "isSignal": true; }; }, { "mode": "modeChange"; "measureChange": "measureChange"; }, never, never, true, never>;
49
+ }
@@ -0,0 +1,30 @@
1
+ import { GeoMapController } from '../../geo-map.controller';
2
+ import * as i0 from "@angular/core";
3
+ /**
4
+ * Pick a layer and adjust opacity 0–100%.
5
+ *
6
+ * @summary Layer opacity slider for map chrome.
7
+ * @whenToUse Điều chỉnh độ trong suốt khi so sánh lớp.
8
+ * @doNotUseWhen Generic sliders outside map — use geo-slider.
9
+ */
10
+ export declare class GeoMapOpacityComponent {
11
+ readonly controller: import("@angular/core").InputSignal<GeoMapController | null>;
12
+ readonly title: import("@angular/core").InputSignal<string>;
13
+ readonly layerId: import("@angular/core").ModelSignal<string | null>;
14
+ /** Opacity percent 0–100. */
15
+ readonly opacity: import("@angular/core").ModelSignal<number>;
16
+ readonly variant: import("@angular/core").InputSignal<"panel" | "compact">;
17
+ /** When compact and no layerId, apply to first non-basemap overlay. */
18
+ readonly applyToFirstLayer: import("@angular/core").InputSignal<boolean>;
19
+ readonly open: import("@angular/core").WritableSignal<boolean>;
20
+ readonly layerOptions: import("@angular/core").Signal<{
21
+ id: string;
22
+ title: string;
23
+ }[]>;
24
+ constructor();
25
+ onVisible(visible: boolean): void;
26
+ selectLayer(id: string): void;
27
+ private resolveTargetId;
28
+ static ɵfac: i0.ɵɵFactoryDeclaration<GeoMapOpacityComponent, never>;
29
+ static ɵcmp: i0.ɵɵComponentDeclaration<GeoMapOpacityComponent, "geo-map-opacity", never, { "controller": { "alias": "controller"; "required": false; "isSignal": true; }; "title": { "alias": "title"; "required": false; "isSignal": true; }; "layerId": { "alias": "layerId"; "required": false; "isSignal": true; }; "opacity": { "alias": "opacity"; "required": false; "isSignal": true; }; "variant": { "alias": "variant"; "required": false; "isSignal": true; }; "applyToFirstLayer": { "alias": "applyToFirstLayer"; "required": false; "isSignal": true; }; }, { "layerId": "layerIdChange"; "opacity": "opacityChange"; }, never, never, true, never>;
30
+ }
@@ -0,0 +1,44 @@
1
+ import type { GeoMapParcelAudience, GeoMapParcelDetail } from '../../geo-map.types';
2
+ import * as i0 from "@angular/core";
3
+ interface ParcelFieldRow {
4
+ label: string;
5
+ value: string;
6
+ }
7
+ interface ParcelSection {
8
+ id: string;
9
+ title: string;
10
+ icon: string;
11
+ /** Key-value rows (Thông tin chung, Địa chỉ). */
12
+ rows?: ParcelFieldRow[];
13
+ /** Single value under section title (Loại đất, Trạng thái, Giá đất). */
14
+ value?: string;
15
+ /** Sơ đồ thửa. */
16
+ diagram?: boolean;
17
+ }
18
+ /**
19
+ * Parcel / planning result detail panel (TCQH.12).
20
+ *
21
+ * @summary Popup / panel chi tiết kết quả tra cứu thửa đất.
22
+ * @whenToUse Hiển thị thông tin thửa + quy hoạch sau khi chọn kết quả.
23
+ * @doNotUseWhen Full CADASTRE edit forms.
24
+ */
25
+ export declare class GeoMapParcelPopupComponent {
26
+ readonly open: import("@angular/core").ModelSignal<boolean>;
27
+ readonly title: import("@angular/core").InputSignal<string>;
28
+ readonly parcel: import("@angular/core").InputSignal<GeoMapParcelDetail | null>;
29
+ readonly audience: import("@angular/core").InputSignal<GeoMapParcelAudience>;
30
+ /** Giữ tương thích API cũ; footer xuất file không còn trong layout thiết kế. */
31
+ readonly showExport: import("@angular/core").InputSignal<boolean>;
32
+ readonly closed: import("@angular/core").OutputEmitterRef<void>;
33
+ readonly back: import("@angular/core").OutputEmitterRef<void>;
34
+ readonly exportClick: import("@angular/core").OutputEmitterRef<GeoMapParcelDetail>;
35
+ readonly diagramClick: import("@angular/core").OutputEmitterRef<GeoMapParcelDetail>;
36
+ readonly sections: import("@angular/core").Signal<ParcelSection[]>;
37
+ close(): void;
38
+ onBack(): void;
39
+ onExport(): void;
40
+ onDiagramDetail(): void;
41
+ static ɵfac: i0.ɵɵFactoryDeclaration<GeoMapParcelPopupComponent, never>;
42
+ static ɵcmp: i0.ɵɵComponentDeclaration<GeoMapParcelPopupComponent, "geo-map-parcel-popup", never, { "open": { "alias": "open"; "required": false; "isSignal": true; }; "title": { "alias": "title"; "required": false; "isSignal": true; }; "parcel": { "alias": "parcel"; "required": false; "isSignal": true; }; "audience": { "alias": "audience"; "required": false; "isSignal": true; }; "showExport": { "alias": "showExport"; "required": false; "isSignal": true; }; }, { "open": "openChange"; "closed": "closed"; "back": "back"; "exportClick": "exportClick"; "diagramClick": "diagramClick"; }, never, never, true, never>;
43
+ }
44
+ export {};
@@ -0,0 +1,56 @@
1
+ import type { GeoMapSearchMode, GeoMapSearchQuery, GeoMapSearchResultItem } from '../../geo-map.types';
2
+ import * as i0 from "@angular/core";
3
+ interface SearchFieldDef {
4
+ key: string;
5
+ label: string;
6
+ placeholder: string;
7
+ type?: 'text' | 'number';
8
+ }
9
+ interface SearchModeTile {
10
+ id: GeoMapSearchMode;
11
+ label: string;
12
+ icon: string;
13
+ }
14
+ /**
15
+ * Map search panel for TCQH.7–11 (host supplies results / API).
16
+ *
17
+ * @summary Panel tra cứu thửa đất theo nhiều tiêu chí.
18
+ * @whenToUse Cổng / màn tra cứu bản đồ quy hoạch.
19
+ * @doNotUseWhen Global site search outside the map context.
20
+ */
21
+ export declare class GeoMapSearchComponent {
22
+ readonly open: import("@angular/core").ModelSignal<boolean>;
23
+ readonly title: import("@angular/core").InputSignal<string>;
24
+ readonly mode: import("@angular/core").ModelSignal<GeoMapSearchMode>;
25
+ readonly results: import("@angular/core").InputSignal<GeoMapSearchResultItem[]>;
26
+ readonly loading: import("@angular/core").InputSignal<boolean>;
27
+ readonly pageIndex: import("@angular/core").ModelSignal<number>;
28
+ readonly pageSize: import("@angular/core").ModelSignal<number>;
29
+ readonly total: import("@angular/core").InputSignal<number>;
30
+ readonly emptyText: import("@angular/core").InputSignal<string>;
31
+ readonly search: import("@angular/core").OutputEmitterRef<GeoMapSearchQuery>;
32
+ readonly reset: import("@angular/core").OutputEmitterRef<void>;
33
+ readonly resultSelect: import("@angular/core").OutputEmitterRef<GeoMapSearchResultItem>;
34
+ readonly closed: import("@angular/core").OutputEmitterRef<void>;
35
+ readonly modeTiles: SearchModeTile[];
36
+ readonly values: import("@angular/core").WritableSignal<Record<string, string>>;
37
+ /** Form dưới lưới icon — thu gọn bằng X cạnh tiêu đề form. */
38
+ readonly formOpen: import("@angular/core").WritableSignal<boolean>;
39
+ readonly hasSearched: import("@angular/core").WritableSignal<boolean>;
40
+ readonly fields: import("@angular/core").Signal<SearchFieldDef[]>;
41
+ readonly modeHeading: import("@angular/core").Signal<string>;
42
+ readonly fieldsInline: import("@angular/core").Signal<boolean>;
43
+ readonly resolvedTotal: import("@angular/core").Signal<number>;
44
+ selectMode(mode: GeoMapSearchMode): void;
45
+ collapseForm(): void;
46
+ setField(key: string, value: string): void;
47
+ fieldValue(key: string): string;
48
+ submit(): void;
49
+ onReset(): void;
50
+ selectResult(item: GeoMapSearchResultItem): void;
51
+ mapLabel(item: GeoMapSearchResultItem): string;
52
+ close(): void;
53
+ static ɵfac: i0.ɵɵFactoryDeclaration<GeoMapSearchComponent, never>;
54
+ static ɵcmp: i0.ɵɵComponentDeclaration<GeoMapSearchComponent, "geo-map-search", never, { "open": { "alias": "open"; "required": false; "isSignal": true; }; "title": { "alias": "title"; "required": false; "isSignal": true; }; "mode": { "alias": "mode"; "required": false; "isSignal": true; }; "results": { "alias": "results"; "required": false; "isSignal": true; }; "loading": { "alias": "loading"; "required": false; "isSignal": true; }; "pageIndex": { "alias": "pageIndex"; "required": false; "isSignal": true; }; "pageSize": { "alias": "pageSize"; "required": false; "isSignal": true; }; "total": { "alias": "total"; "required": false; "isSignal": true; }; "emptyText": { "alias": "emptyText"; "required": false; "isSignal": true; }; }, { "open": "openChange"; "mode": "modeChange"; "pageIndex": "pageIndexChange"; "pageSize": "pageSizeChange"; "search": "search"; "reset": "reset"; "resultSelect": "resultSelect"; "closed": "closed"; }, never, never, true, never>;
55
+ }
56
+ export {};
@@ -0,0 +1,103 @@
1
+ import { GeoMapController } from '../../geo-map.controller';
2
+ import type { GeoTreeNode } from '../../../geo-tree/geo-tree.types';
3
+ import type { GeoMapBasemap, GeoMapBasemapOption, GeoMapClickEvent, GeoMapLayerConfig, GeoMapLegendItem, GeoMapMeasureMode, GeoMapParcelAudience, GeoMapParcelDetail, GeoMapSearchQuery, GeoMapSearchResultItem, GeoMapToolbarAction } from '../../geo-map.types';
4
+ import * as i0 from "@angular/core";
5
+ /**
6
+ * Map viewport + portal chrome (toolbar, layers drawer, legend, help, swipe, …).
7
+ *
8
+ * @summary Composed map shell with chrome tools for Storybook / portal.
9
+ * @whenToUse Public map page chrome (cổng công khai).
10
+ * @doNotUseWhen Need only the raw OL host — use geo-map.
11
+ */
12
+ export declare class GeoMapShellComponent {
13
+ private readonly destroyRef;
14
+ private readonly snapshotRef;
15
+ private readonly zoomRef;
16
+ readonly center: import("@angular/core").InputSignal<number[]>;
17
+ readonly zoom: import("@angular/core").InputSignal<number>;
18
+ readonly height: import("@angular/core").InputSignal<string>;
19
+ readonly showMousePosition: import("@angular/core").InputSignal<boolean>;
20
+ readonly basemapOptions: import("@angular/core").InputSignal<GeoMapBasemapOption[]>;
21
+ readonly toolbarActions: import("@angular/core").InputSignal<GeoMapToolbarAction[]>;
22
+ /** Extra overlays merged after demo thematic + traffic. */
23
+ readonly layers: import("@angular/core").InputSignal<GeoMapLayerConfig[]>;
24
+ readonly legendItems: import("@angular/core").InputSignal<GeoMapLegendItem[]>;
25
+ readonly showNav: import("@angular/core").InputSignal<boolean>;
26
+ readonly includeDemoLayers: import("@angular/core").InputSignal<boolean>;
27
+ readonly adminNodes: import("@angular/core").InputSignal<GeoTreeNode[]>;
28
+ readonly locationLabel: import("@angular/core").InputSignal<string>;
29
+ readonly parcelAudience: import("@angular/core").InputSignal<GeoMapParcelAudience>;
30
+ readonly provinceExtent: import("@angular/core").InputSignal<readonly [number, number, number, number]>;
31
+ /** When true, shell seeds mock search results (Storybook / demos). */
32
+ readonly demoSearch: import("@angular/core").InputSignal<boolean>;
33
+ /**
34
+ * `location` — Home opens ĐVHC filter (default).
35
+ * `emit` — Home only emits `actionClick` (e.g. portal navigates to login/dashboard).
36
+ */
37
+ readonly homeMode: import("@angular/core").InputSignal<"location" | "emit">;
38
+ readonly basemapId: import("@angular/core").ModelSignal<string>;
39
+ readonly measureMode: import("@angular/core").ModelSignal<GeoMapMeasureMode>;
40
+ readonly checkedMap: import("@angular/core").ModelSignal<Record<string, boolean>>;
41
+ readonly layersOpen: import("@angular/core").ModelSignal<boolean>;
42
+ readonly legendOpen: import("@angular/core").ModelSignal<boolean>;
43
+ readonly helpOpen: import("@angular/core").ModelSignal<boolean>;
44
+ readonly swipeActive: import("@angular/core").ModelSignal<boolean>;
45
+ readonly searchOpen: import("@angular/core").ModelSignal<boolean>;
46
+ readonly adminFilterOpen: import("@angular/core").ModelSignal<boolean>;
47
+ readonly parcelOpen: import("@angular/core").ModelSignal<boolean>;
48
+ readonly managedLayers: import("@angular/core").ModelSignal<GeoMapLayerConfig[]>;
49
+ readonly searchResults: import("@angular/core").ModelSignal<GeoMapSearchResultItem[]>;
50
+ readonly selectedParcel: import("@angular/core").ModelSignal<GeoMapParcelDetail | null>;
51
+ readonly adminCheckedKeys: import("@angular/core").ModelSignal<(string | number)[]>;
52
+ readonly adminExpandedKeys: import("@angular/core").ModelSignal<(string | number)[]>;
53
+ readonly mapReady: import("@angular/core").OutputEmitterRef<GeoMapController>;
54
+ readonly mapClick: import("@angular/core").OutputEmitterRef<GeoMapClickEvent>;
55
+ readonly locateDenied: import("@angular/core").OutputEmitterRef<void>;
56
+ readonly actionClick: import("@angular/core").OutputEmitterRef<GeoMapToolbarAction>;
57
+ readonly search: import("@angular/core").OutputEmitterRef<GeoMapSearchQuery>;
58
+ readonly searchReset: import("@angular/core").OutputEmitterRef<void>;
59
+ readonly resultSelect: import("@angular/core").OutputEmitterRef<GeoMapSearchResultItem>;
60
+ readonly parcelExport: import("@angular/core").OutputEmitterRef<GeoMapParcelDetail>;
61
+ readonly adminApply: import("@angular/core").OutputEmitterRef<(string | number)[]>;
62
+ readonly controller: import("@angular/core").WritableSignal<GeoMapController | null>;
63
+ /** Active map pointer tool (`none` = default arrow cursor). */
64
+ readonly toolMode: import("@angular/core").WritableSignal<"area" | "none" | "distance" | "pan">;
65
+ /** When true, parcel Back returns to search popover. */
66
+ private readonly parcelFromSearch;
67
+ private panCursorBound;
68
+ private readonly onPanPointerDown;
69
+ private readonly onPanPointerUp;
70
+ constructor();
71
+ readonly basemap: import("@angular/core").Signal<import("../../geo-map.types").GeoMapBasemapInput>;
72
+ readonly resolvedToolbarActions: import("@angular/core").Signal<GeoMapToolbarAction[]>;
73
+ readonly resolvedLayers: import("@angular/core").Signal<GeoMapLayerConfig[]>;
74
+ onMapReady(ctrl: GeoMapController): void;
75
+ onMapClick(event: GeoMapClickEvent): void;
76
+ onBasemapChange(basemap: GeoMapBasemap): void;
77
+ onToolbarAction(action: GeoMapToolbarAction): void;
78
+ onToolbarToggle(event: {
79
+ action: GeoMapToolbarAction;
80
+ checked: boolean;
81
+ }): void;
82
+ onSearch(query: GeoMapSearchQuery): void;
83
+ onSearchReset(): void;
84
+ onParcelClosed(): void;
85
+ onParcelBack(): void;
86
+ onResultSelect(item: GeoMapSearchResultItem): void;
87
+ onAdminApply(keys: Array<string | number>): void;
88
+ onFitProvince(): void;
89
+ onAdminClosed(): void;
90
+ /** Open one left chrome popover; close the others to avoid stacked scroll. */
91
+ private openPanel;
92
+ private closePanelsExcept;
93
+ private enterPanMode;
94
+ private exitToolMode;
95
+ private applyPanCursor;
96
+ private setMapCursor;
97
+ private bindPanCursor;
98
+ private unbindPanCursor;
99
+ private buildDemoSearchResults;
100
+ private ensureSwipeOverlayVisible;
101
+ static ɵfac: i0.ɵɵFactoryDeclaration<GeoMapShellComponent, never>;
102
+ static ɵcmp: i0.ɵɵComponentDeclaration<GeoMapShellComponent, "geo-map-shell", never, { "center": { "alias": "center"; "required": false; "isSignal": true; }; "zoom": { "alias": "zoom"; "required": false; "isSignal": true; }; "height": { "alias": "height"; "required": false; "isSignal": true; }; "showMousePosition": { "alias": "showMousePosition"; "required": false; "isSignal": true; }; "basemapOptions": { "alias": "basemapOptions"; "required": false; "isSignal": true; }; "toolbarActions": { "alias": "toolbarActions"; "required": false; "isSignal": true; }; "layers": { "alias": "layers"; "required": false; "isSignal": true; }; "legendItems": { "alias": "legendItems"; "required": false; "isSignal": true; }; "showNav": { "alias": "showNav"; "required": false; "isSignal": true; }; "includeDemoLayers": { "alias": "includeDemoLayers"; "required": false; "isSignal": true; }; "adminNodes": { "alias": "adminNodes"; "required": false; "isSignal": true; }; "locationLabel": { "alias": "locationLabel"; "required": false; "isSignal": true; }; "parcelAudience": { "alias": "parcelAudience"; "required": false; "isSignal": true; }; "provinceExtent": { "alias": "provinceExtent"; "required": false; "isSignal": true; }; "demoSearch": { "alias": "demoSearch"; "required": false; "isSignal": true; }; "homeMode": { "alias": "homeMode"; "required": false; "isSignal": true; }; "basemapId": { "alias": "basemapId"; "required": false; "isSignal": true; }; "measureMode": { "alias": "measureMode"; "required": false; "isSignal": true; }; "checkedMap": { "alias": "checkedMap"; "required": false; "isSignal": true; }; "layersOpen": { "alias": "layersOpen"; "required": false; "isSignal": true; }; "legendOpen": { "alias": "legendOpen"; "required": false; "isSignal": true; }; "helpOpen": { "alias": "helpOpen"; "required": false; "isSignal": true; }; "swipeActive": { "alias": "swipeActive"; "required": false; "isSignal": true; }; "searchOpen": { "alias": "searchOpen"; "required": false; "isSignal": true; }; "adminFilterOpen": { "alias": "adminFilterOpen"; "required": false; "isSignal": true; }; "parcelOpen": { "alias": "parcelOpen"; "required": false; "isSignal": true; }; "managedLayers": { "alias": "managedLayers"; "required": false; "isSignal": true; }; "searchResults": { "alias": "searchResults"; "required": false; "isSignal": true; }; "selectedParcel": { "alias": "selectedParcel"; "required": false; "isSignal": true; }; "adminCheckedKeys": { "alias": "adminCheckedKeys"; "required": false; "isSignal": true; }; "adminExpandedKeys": { "alias": "adminExpandedKeys"; "required": false; "isSignal": true; }; }, { "basemapId": "basemapIdChange"; "measureMode": "measureModeChange"; "checkedMap": "checkedMapChange"; "layersOpen": "layersOpenChange"; "legendOpen": "legendOpenChange"; "helpOpen": "helpOpenChange"; "swipeActive": "swipeActiveChange"; "searchOpen": "searchOpenChange"; "adminFilterOpen": "adminFilterOpenChange"; "parcelOpen": "parcelOpenChange"; "managedLayers": "managedLayersChange"; "searchResults": "searchResultsChange"; "selectedParcel": "selectedParcelChange"; "adminCheckedKeys": "adminCheckedKeysChange"; "adminExpandedKeys": "adminExpandedKeysChange"; "mapReady": "mapReady"; "mapClick": "mapClick"; "locateDenied": "locateDenied"; "actionClick": "actionClick"; "search": "search"; "searchReset": "searchReset"; "resultSelect": "resultSelect"; "parcelExport": "parcelExport"; "adminApply": "adminApply"; }, never, ["[geoMapShellTopRight]"], true, never>;
103
+ }
@@ -0,0 +1,21 @@
1
+ import { GeoMapController } from '../../geo-map.controller';
2
+ import * as i0 from "@angular/core";
3
+ /**
4
+ * Export current map view as PNG download.
5
+ *
6
+ * @summary Export current map view as PNG download.
7
+ * @whenToUse Chụp ảnh bản đồ.
8
+ * @doNotUseWhen Server-side print/PDF pipelines.
9
+ */
10
+ export declare class GeoMapSnapshotComponent {
11
+ readonly controller: import("@angular/core").InputSignal<GeoMapController | null>;
12
+ readonly label: import("@angular/core").InputSignal<string>;
13
+ readonly filename: import("@angular/core").InputSignal<string>;
14
+ readonly captured: import("@angular/core").OutputEmitterRef<void>;
15
+ readonly captureError: import("@angular/core").OutputEmitterRef<unknown>;
16
+ readonly busy: import("@angular/core").WritableSignal<boolean>;
17
+ /** Public so shell/toolbar can trigger capture without a visible button. */
18
+ capture(): void;
19
+ static ɵfac: i0.ɵɵFactoryDeclaration<GeoMapSnapshotComponent, never>;
20
+ static ɵcmp: i0.ɵɵComponentDeclaration<GeoMapSnapshotComponent, "geo-map-snapshot", never, { "controller": { "alias": "controller"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "filename": { "alias": "filename"; "required": false; "isSignal": true; }; }, { "captured": "captured"; "captureError": "captureError"; }, never, never, true, never>;
21
+ }
@@ -0,0 +1,33 @@
1
+ import { OnDestroy } from '@angular/core';
2
+ import { GeoMapController } from '../../geo-map.controller';
3
+ import * as i0 from "@angular/core";
4
+ /**
5
+ * Swipe compare between basemap and the top visible thematic overlay.
6
+ *
7
+ * @summary Layer swipe compare control.
8
+ * @whenToUse So sánh chồng xếp trực quan (UC-17 UX).
9
+ * @doNotUseWhen Full geometry intersection analysis — use analysis tools.
10
+ */
11
+ export declare class GeoMapSwipeComponent implements OnDestroy {
12
+ private readonly destroyRef;
13
+ readonly controller: import("@angular/core").InputSignal<GeoMapController | null>;
14
+ /** When true, swipe mode is on. */
15
+ readonly active: import("@angular/core").ModelSignal<boolean>;
16
+ /** 0–100, left portion shows clipped overlay. */
17
+ readonly position: import("@angular/core").ModelSignal<number>;
18
+ /** Optional explicit overlay layer id; defaults to top visible non-basemap. */
19
+ readonly layerId: import("@angular/core").InputSignal<string | null>;
20
+ readonly dragging: import("@angular/core").WritableSignal<boolean>;
21
+ private keys;
22
+ private boundLayer;
23
+ constructor();
24
+ ngOnDestroy(): void;
25
+ onPointerDown(event: PointerEvent): void;
26
+ onPointerMove(event: PointerEvent): void;
27
+ onPointerUp(): void;
28
+ private updateFromEvent;
29
+ private attachClip;
30
+ private teardownClip;
31
+ static ɵfac: i0.ɵɵFactoryDeclaration<GeoMapSwipeComponent, never>;
32
+ static ɵcmp: i0.ɵɵComponentDeclaration<GeoMapSwipeComponent, "geo-map-swipe", never, { "controller": { "alias": "controller"; "required": false; "isSignal": true; }; "active": { "alias": "active"; "required": false; "isSignal": true; }; "position": { "alias": "position"; "required": false; "isSignal": true; }; "layerId": { "alias": "layerId"; "required": false; "isSignal": true; }; }, { "active": "activeChange"; "position": "positionChange"; }, never, never, true, never>;
33
+ }
@@ -0,0 +1,30 @@
1
+ import { GeoMapController } from '../../geo-map.controller';
2
+ import type { GeoMapToolbarAction } from '../../geo-map.types';
3
+ import * as i0 from "@angular/core";
4
+ /**
5
+ * Floating pill action bar for map chrome (measure / snapshot / …).
6
+ *
7
+ * @summary Floating pill action bar (measure, traffic, …).
8
+ * @whenToUse Top-center map chrome like cổng công khai; pass actions + (actionClick).
9
+ * @doNotUseWhen Need only one tool — use individual geo-map-* components.
10
+ */
11
+ export declare class GeoMapToolbarComponent {
12
+ readonly controller: import("@angular/core").InputSignal<GeoMapController | null>;
13
+ /** When empty, uses built-in portal action set. */
14
+ readonly actions: import("@angular/core").InputSignal<GeoMapToolbarAction[]>;
15
+ readonly compact: import("@angular/core").InputSignal<boolean>;
16
+ /** Two-way checked map keyed by action id (for checkbox-style actions). */
17
+ readonly checkedMap: import("@angular/core").ModelSignal<Record<string, boolean>>;
18
+ readonly actionClick: import("@angular/core").OutputEmitterRef<GeoMapToolbarAction>;
19
+ readonly actionToggle: import("@angular/core").OutputEmitterRef<{
20
+ action: GeoMapToolbarAction;
21
+ checked: boolean;
22
+ }>;
23
+ readonly resolvedActions: import("@angular/core").Signal<GeoMapToolbarAction[]>;
24
+ tooltipOf(action: GeoMapToolbarAction): string;
25
+ isToggleAction(action: GeoMapToolbarAction): boolean;
26
+ isChecked(action: GeoMapToolbarAction): boolean;
27
+ onActionClick(action: GeoMapToolbarAction): void;
28
+ static ɵfac: i0.ɵɵFactoryDeclaration<GeoMapToolbarComponent, never>;
29
+ static ɵcmp: i0.ɵɵComponentDeclaration<GeoMapToolbarComponent, "geo-map-toolbar", never, { "controller": { "alias": "controller"; "required": false; "isSignal": true; }; "actions": { "alias": "actions"; "required": false; "isSignal": true; }; "compact": { "alias": "compact"; "required": false; "isSignal": true; }; "checkedMap": { "alias": "checkedMap"; "required": false; "isSignal": true; }; }, { "checkedMap": "checkedMapChange"; "actionClick": "actionClick"; "actionToggle": "actionToggle"; }, never, never, true, never>;
30
+ }
@@ -0,0 +1,67 @@
1
+ import { OnDestroy } from '@angular/core';
2
+ import { GeoMapController } from '../../geo-map.controller';
3
+ import * as i0 from "@angular/core";
4
+ type BoxZoomMode = 'none' | 'in' | 'out';
5
+ /**
6
+ * Stacked +/- zoom control for map chrome.
7
+ *
8
+ * @summary Stacked +/- zoom control.
9
+ * @whenToUse Right-side map chrome.
10
+ * @doNotUseWhen Browser/native scroll zoom only.
11
+ */
12
+ export declare class GeoMapZoomComponent implements OnDestroy {
13
+ private readonly destroyRef;
14
+ private readonly host;
15
+ private readonly overlayContainer;
16
+ readonly controller: import("@angular/core").InputSignal<GeoMapController | null>;
17
+ /** Show prev / next zoom + fullscreen + box zoom (UC-15). */
18
+ readonly showNav: import("@angular/core").InputSignal<boolean>;
19
+ /** Show “xem toàn tỉnh” (TCQH.14 GD5) — fit province extent, not fullscreen. */
20
+ readonly showFitProvince: import("@angular/core").InputSignal<boolean>;
21
+ /**
22
+ * Province extent in EPSG:4326. Defaults to Lâm Đồng placeholder when omitted.
23
+ */
24
+ readonly provinceExtent: import("@angular/core").InputSignal<readonly [number, number, number, number] | null>;
25
+ /**
26
+ * Element to put in Fullscreen API.
27
+ * Defaults to closest `.geo-map-shell`, then the OL map target.
28
+ */
29
+ readonly fullscreenTarget: import("@angular/core").InputSignal<HTMLElement | null>;
30
+ readonly boxMode: import("@angular/core").WritableSignal<BoxZoomMode>;
31
+ readonly canZoomPrev: import("@angular/core").WritableSignal<boolean>;
32
+ readonly canZoomNext: import("@angular/core").WritableSignal<boolean>;
33
+ readonly isFullscreen: import("@angular/core").WritableSignal<boolean>;
34
+ /** Visited zoom levels; `historyIndex` points at the current level. */
35
+ private readonly history;
36
+ private readonly historyIndex;
37
+ private navigatingHistory;
38
+ private dragBox;
39
+ private resumeInteractions;
40
+ private commitTimer;
41
+ private readonly onFullscreenChange;
42
+ constructor();
43
+ ngOnDestroy(): void;
44
+ zoomIn(): void;
45
+ zoomOut(): void;
46
+ zoomPrev(): void;
47
+ zoomNext(): void;
48
+ /** Fit tỉnh / toàn cảnh (TCQH.14) — distinct from fullscreen. */
49
+ fitProvince(): void;
50
+ /** Toggle browser fullscreen for the map shell / target. */
51
+ toggleFullscreen(): void;
52
+ toggleBoxZoom(mode: Exclude<BoxZoomMode, 'none'>): void;
53
+ /** Exit box-zoom / temporary interaction so map returns to pan. */
54
+ resetInteractionMode(): void;
55
+ private runZoomAction;
56
+ private startBoxZoom;
57
+ private clearBoxZoom;
58
+ private resolveFullscreenElement;
59
+ private syncFullscreenState;
60
+ private seedHistory;
61
+ private scheduleCommit;
62
+ private commitHistory;
63
+ private refreshNavState;
64
+ static ɵfac: i0.ɵɵFactoryDeclaration<GeoMapZoomComponent, never>;
65
+ static ɵcmp: i0.ɵɵComponentDeclaration<GeoMapZoomComponent, "geo-map-zoom", never, { "controller": { "alias": "controller"; "required": false; "isSignal": true; }; "showNav": { "alias": "showNav"; "required": false; "isSignal": true; }; "showFitProvince": { "alias": "showFitProvince"; "required": false; "isSignal": true; }; "provinceExtent": { "alias": "provinceExtent"; "required": false; "isSignal": true; }; "fullscreenTarget": { "alias": "fullscreenTarget"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
66
+ }
67
+ export {};
@@ -0,0 +1,17 @@
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 declare const GEO_MAP_TOOLBAR_ASSET_BASE = "/geo-map-assets/toolbar";
7
+ export declare const GEO_MAP_TOOLBAR_ICONS: {
8
+ readonly home: "/geo-map-assets/toolbar/home.svg";
9
+ readonly search: "/geo-map-assets/toolbar/search.svg";
10
+ readonly pan: "/geo-map-assets/toolbar/pan.svg";
11
+ readonly zoomIn: "/geo-map-assets/toolbar/zoom-in.svg";
12
+ readonly zoomOut: "/geo-map-assets/toolbar/zoom-out.svg";
13
+ readonly fullscreen: "/geo-map-assets/toolbar/fullscreen.svg";
14
+ readonly measureDistance: "/geo-map-assets/toolbar/measure-distance.svg";
15
+ readonly measureArea: "/geo-map-assets/toolbar/measure-area.svg";
16
+ readonly layers: "/geo-map-assets/toolbar/layers.svg";
17
+ };