@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
@@ -1 +1 @@
1
- {"version":3,"file":"geoit-ui.mjs","sources":["../../../projects/geo-ui/src/lib/styles/tokens.ts","../../../projects/geo-ui/src/lib/ng-zorro/ng-zorro-antd.module.ts","../../../projects/geo-ui/src/lib/figma/geo-alert/geo-alert.types.ts","../../../projects/geo-ui/src/lib/figma/geo-alert/geo-alert.component.ts","../../../projects/geo-ui/src/lib/figma/geo-alert/geo-alert.component.html","../../../projects/geo-ui/src/lib/figma/geo-back-button/geo-back-button.component.ts","../../../projects/geo-ui/src/lib/figma/geo-back-button/geo-back-button.component.html","../../../projects/geo-ui/src/lib/figma/geo-breadcrumb/geo-breadcrumb.component.ts","../../../projects/geo-ui/src/lib/figma/geo-breadcrumb/geo-breadcrumb.component.html","../../../projects/geo-ui/src/lib/figma/geo-button/geo-button.component.ts","../../../projects/geo-ui/src/lib/figma/geo-button/geo-button.component.html","../../../projects/geo-ui/src/lib/figma/geo-checkbox/geo-checkbox.component.ts","../../../projects/geo-ui/src/lib/figma/geo-checkbox/geo-checkbox.component.html","../../../projects/geo-ui/src/lib/figma/geo-confirm-modal/geo-confirm-modal.component.ts","../../../projects/geo-ui/src/lib/figma/geo-confirm-modal/geo-confirm-modal.component.html","../../../projects/geo-ui/src/lib/figma/geo-date-picker/geo-date-picker.component.ts","../../../projects/geo-ui/src/lib/figma/geo-date-picker/geo-date-picker.component.html","../../../projects/geo-ui/src/lib/figma/geo-date-range-picker/geo-date-range-picker.component.ts","../../../projects/geo-ui/src/lib/figma/geo-date-range-picker/geo-date-range-picker.component.html","../../../projects/geo-ui/src/lib/figma/geo-file-picker/geo-file-picker.component.ts","../../../projects/geo-ui/src/lib/figma/geo-file-picker/geo-file-picker.component.html","../../../projects/geo-ui/src/lib/figma/geo-upload/geo-upload.types.ts","../../../projects/geo-ui/src/lib/figma/geo-upload/geo-upload.component.ts","../../../projects/geo-ui/src/lib/figma/geo-upload/geo-upload.component.html","../../../projects/geo-ui/src/lib/figma/geo-form-modal/geo-form-modal.component.ts","../../../projects/geo-ui/src/lib/figma/geo-form-modal/geo-form-modal.component.html","../../../projects/geo-ui/src/lib/figma/geo-icon/geo-icon.types.ts","../../../projects/geo-ui/src/lib/figma/geo-icon/geo-icon.component.ts","../../../projects/geo-ui/src/lib/figma/geo-icon/geo-icon.component.html","../../../projects/geo-ui/src/lib/figma/geo-input/geo-input.component.ts","../../../projects/geo-ui/src/lib/figma/geo-input/geo-input.component.html","../../../projects/geo-ui/src/lib/figma/geo-pagination/geo-pagination.component.ts","../../../projects/geo-ui/src/lib/figma/geo-pagination/geo-pagination.component.html","../../../projects/geo-ui/src/lib/figma/geo-typography/geo-typography.types.ts","../../../projects/geo-ui/src/lib/figma/geo-typography/geo-typography.component.ts","../../../projects/geo-ui/src/lib/figma/geo-page-title/geo-page-title.component.ts","../../../projects/geo-ui/src/lib/figma/geo-page-title/geo-page-title.component.html","../../../projects/geo-ui/src/lib/figma/geo-radio/geo-radio.component.ts","../../../projects/geo-ui/src/lib/figma/geo-radio/geo-radio.component.html","../../../projects/geo-ui/src/lib/figma/geo-select/geo-select.component.ts","../../../projects/geo-ui/src/lib/figma/geo-select/geo-select.component.html","../../../projects/geo-ui/src/lib/figma/geo-slider/geo-slider.component.ts","../../../projects/geo-ui/src/lib/figma/geo-slider/geo-slider.component.html","../../../projects/geo-ui/src/lib/figma/geo-status-tag/geo-status-tag.types.ts","../../../projects/geo-ui/src/lib/figma/geo-status-tag/geo-status-tag.component.ts","../../../projects/geo-ui/src/lib/figma/geo-status-tag/geo-status-tag.component.html","../../../projects/geo-ui/src/lib/figma/geo-stepper/geo-stepper.component.ts","../../../projects/geo-ui/src/lib/figma/geo-stepper/geo-stepper.component.html","../../../projects/geo-ui/src/lib/figma/geo-step-form-layout/geo-step-form-layout.component.ts","../../../projects/geo-ui/src/lib/figma/geo-step-form-layout/geo-step-form-layout.component.html","../../../projects/geo-ui/src/lib/figma/geo-tabs/geo-tabs.component.ts","../../../projects/geo-ui/src/lib/figma/geo-tabs/geo-tabs.component.html","../../../projects/geo-ui/src/lib/figma/geo-table/geo-row-actions/geo-row-actions.types.ts","../../../projects/geo-ui/src/lib/figma/geo-table/geo-row-actions/geo-row-actions.component.ts","../../../projects/geo-ui/src/lib/figma/geo-table/geo-row-actions/geo-row-actions.component.html","../../../projects/geo-ui/src/lib/figma/geo-table/geo-table.types.ts","../../../projects/geo-ui/src/lib/figma/geo-table/geo-table-pagination/geo-table-pagination.component.ts","../../../projects/geo-ui/src/lib/figma/geo-table/geo-table-pagination/geo-table-pagination.component.html","../../../projects/geo-ui/src/lib/figma/geo-table/geo-table.component.ts","../../../projects/geo-ui/src/lib/figma/geo-table/geo-table.component.html","../../../projects/geo-ui/src/lib/figma/geo-table/geo-table-filter/geo-table-filter.component.ts","../../../projects/geo-ui/src/lib/figma/geo-table/geo-table-filter/geo-table-filter.component.html","../../../projects/geo-ui/src/lib/figma/geo-textarea/geo-textarea.component.ts","../../../projects/geo-ui/src/lib/figma/geo-textarea/geo-textarea.component.html","../../../projects/geo-ui/src/lib/figma/geo-toast/geo-toast.types.ts","../../../projects/geo-ui/src/lib/figma/geo-toast/geo-toast.component.ts","../../../projects/geo-ui/src/lib/figma/geo-toast/geo-toast.component.html","../../../projects/geo-ui/src/lib/figma/geo-toast/geo-toast.service.ts","../../../projects/geo-ui/src/lib/figma/geo-tree/geo-tree.component.ts","../../../projects/geo-ui/src/lib/figma/geo-tree/geo-tree.component.html","../../../projects/geo-ui/src/lib/figma/geo-table/geo-column-picker/geo-column-picker.storage.ts","../../../projects/geo-ui/src/lib/figma/geo-table/geo-column-picker/geo-column-picker.component.ts","../../../projects/geo-ui/src/lib/figma/geo-table/geo-column-picker/geo-column-picker.component.html","../../../projects/geo-ui/src/lib/figma/geo-table/geo-table-toolbar/geo-table-toolbar.component.ts","../../../projects/geo-ui/src/lib/figma/geo-table/geo-table-toolbar/geo-table-toolbar.component.html","../../../projects/geo-ui/src/public-api.ts","../../../projects/geo-ui/src/geoit-ui.ts"],"sourcesContent":["/**\n * GEO UI design tokens (TypeScript).\n * Mirror of CSS variables in design-tokens.scss — use for JS/theme config only.\n */\nexport const geoColorTokens = {\n primary: {\n default: '#9A4828',\n hover: '#7D3A20',\n light: '#B5643F',\n dark: '#2C1810',\n background: '#FAF5ED',\n backgroundAlt: '#F5F0E8',\n border: '#E8E0D8',\n surfaceLight: '#F8E6DE',\n secondaryHover: '#FAF5ED',\n },\n neutral: {\n 900: '#111827',\n 800: '#212121',\n 700: '#374151',\n 500: '#6B7280',\n 400: '#9CA3AF',\n 300: '#D1D5DB',\n 200: '#E5E7EB',\n 100: '#F3F4F6',\n white: '#FFFFFF',\n disabledText: '#8F9294',\n },\n success: {\n dark: '#166534',\n default: '#22C55E',\n light: '#DCFCE7',\n },\n error: {\n dark: '#991B1B',\n default: '#DC2626',\n light: '#FEE2E2',\n },\n warning: {\n dark: '#92400E',\n default: '#F59E0B',\n light: '#FEF3C7',\n },\n info: {\n dark: '#1E40AF',\n default: '#3B82F6',\n light: '#DBEAFE',\n },\n teal: {\n dark: '#0F766E',\n default: '#14B8A6',\n light: '#CCFBF1',\n },\n} as const;\n\nexport type GeoColorTokens = typeof geoColorTokens;\n\n/** CSS custom property names for each token path. */\nexport const geoColorCssVars = {\n primary: {\n default: '--geo-color-primary-default',\n hover: '--geo-color-primary-hover',\n light: '--geo-color-primary-light',\n dark: '--geo-color-primary-dark',\n background: '--geo-color-primary-background',\n backgroundAlt: '--geo-color-primary-background-alt',\n border: '--geo-color-primary-border',\n surfaceLight: '--geo-color-primary-surface-light',\n secondaryHover: '--geo-color-primary-secondary-hover',\n },\n neutral: {\n 900: '--geo-color-neutral-900',\n 800: '--geo-color-neutral-800',\n 700: '--geo-color-neutral-700',\n 500: '--geo-color-neutral-500',\n 400: '--geo-color-neutral-400',\n 300: '--geo-color-neutral-300',\n 200: '--geo-color-neutral-200',\n 100: '--geo-color-neutral-100',\n white: '--geo-color-neutral-white',\n disabledText: '--geo-color-neutral-disabled-text',\n },\n success: {\n dark: '--geo-color-success-dark',\n default: '--geo-color-success-default',\n light: '--geo-color-success-light',\n },\n error: {\n dark: '--geo-color-error-dark',\n default: '--geo-color-error-default',\n light: '--geo-color-error-light',\n },\n warning: {\n dark: '--geo-color-warning-dark',\n default: '--geo-color-warning-default',\n light: '--geo-color-warning-light',\n },\n info: {\n dark: '--geo-color-info-dark',\n default: '--geo-color-info-default',\n light: '--geo-color-info-light',\n },\n teal: {\n dark: '--geo-color-teal-dark',\n default: '--geo-color-teal-default',\n light: '--geo-color-teal-light',\n },\n} as const;\n\nexport function cssVar(name: string): string {\n return `var(${name})`;\n}\n\n/** Typography design tokens (Inter + type scale). */\nexport const geoTypographyTokens = {\n fontFamily: \"'Inter', system-ui, -apple-system, 'Segoe UI', Roboto, sans-serif\",\n weight: {\n regular: 400,\n medium: 500,\n semibold: 600,\n bold: 700,\n },\n scale: {\n h1: { size: '28px', weight: 700, lineHeight: '36px' },\n h2: { size: '24px', weight: 700, lineHeight: '32px' },\n h3: { size: '20px', weight: 700, lineHeight: '28px' },\n h4: { size: '16px', weight: 700, lineHeight: '24px' },\n subtitle: { size: '14px', weight: 600, lineHeight: '20px' },\n body: { size: '14px', weight: 400, lineHeight: '20px' },\n bodySmall: { size: '13px', weight: 400, lineHeight: '18px' },\n caption: { size: '12px', weight: 400, lineHeight: '16px' },\n overline: { size: '11px', weight: 600, lineHeight: '16px' },\n tiny: { size: '10px', weight: 400, lineHeight: '14px' },\n },\n} as const;\n\nexport type GeoTypographyTokens = typeof geoTypographyTokens;\n\n/** Border radius design tokens (default 6px). */\nexport const geoRadiusTokens = {\n default: '6px',\n sm: '6px',\n md: '6px',\n lg: '6px',\n} as const;\n\nexport const geoRadiusCssVars = {\n default: '--geo-radius',\n sm: '--geo-radius-sm',\n md: '--geo-radius-md',\n lg: '--geo-radius-lg',\n} as const;\n\nexport type GeoRadiusTokens = typeof geoRadiusTokens;\n\n","import { NgModule } from '@angular/core';\n\nimport { NzAffixModule } from 'ng-zorro-antd/affix';\nimport { NzAlertModule } from 'ng-zorro-antd/alert';\nimport { NzAnchorModule } from 'ng-zorro-antd/anchor';\nimport { NzAutocompleteModule } from 'ng-zorro-antd/auto-complete';\nimport { NzAvatarModule } from 'ng-zorro-antd/avatar';\nimport { NzBackTopModule } from 'ng-zorro-antd/back-top';\nimport { NzBadgeModule } from 'ng-zorro-antd/badge';\nimport { NzBreadCrumbModule } from 'ng-zorro-antd/breadcrumb';\nimport { NzButtonModule } from 'ng-zorro-antd/button';\nimport { NzCalendarModule } from 'ng-zorro-antd/calendar';\nimport { NzCardModule } from 'ng-zorro-antd/card';\nimport { NzCarouselModule } from 'ng-zorro-antd/carousel';\nimport { NzCascaderModule } from 'ng-zorro-antd/cascader';\nimport { NzCheckboxModule } from 'ng-zorro-antd/checkbox';\nimport { NzCollapseModule } from 'ng-zorro-antd/collapse';\nimport { NzCommentModule } from 'ng-zorro-antd/comment';\nimport { NzNoAnimationModule } from 'ng-zorro-antd/core/no-animation';\nimport { NzTransButtonModule } from 'ng-zorro-antd/core/trans-button';\nimport { NzWaveModule } from 'ng-zorro-antd/core/wave';\nimport { NzDatePickerModule } from 'ng-zorro-antd/date-picker';\nimport { NzDescriptionsModule } from 'ng-zorro-antd/descriptions';\nimport { NzDividerModule } from 'ng-zorro-antd/divider';\nimport { NzDrawerModule } from 'ng-zorro-antd/drawer';\nimport { NzDropDownModule } from 'ng-zorro-antd/dropdown';\nimport { NzEmptyModule } from 'ng-zorro-antd/empty';\nimport { NzFormModule } from 'ng-zorro-antd/form';\nimport { NzGridModule } from 'ng-zorro-antd/grid';\nimport { NzI18nModule } from 'ng-zorro-antd/i18n';\nimport { NzIconModule } from 'ng-zorro-antd/icon';\nimport { NzImageModule } from 'ng-zorro-antd/image';\nimport { NzInputModule } from 'ng-zorro-antd/input';\nimport { NzInputNumberModule } from 'ng-zorro-antd/input-number';\nimport { NzLayoutModule } from 'ng-zorro-antd/layout';\nimport { NzListModule } from 'ng-zorro-antd/list';\nimport { NzMentionModule } from 'ng-zorro-antd/mention';\nimport { NzMenuModule } from 'ng-zorro-antd/menu';\nimport { NzMessageModule } from 'ng-zorro-antd/message';\nimport { NzModalModule } from 'ng-zorro-antd/modal';\nimport { NzNotificationModule } from 'ng-zorro-antd/notification';\nimport { NzPageHeaderModule } from 'ng-zorro-antd/page-header';\nimport { NzPaginationModule } from 'ng-zorro-antd/pagination';\nimport { NzPopconfirmModule } from 'ng-zorro-antd/popconfirm';\nimport { NzPopoverModule } from 'ng-zorro-antd/popover';\nimport { NzProgressModule } from 'ng-zorro-antd/progress';\nimport { NzRadioModule } from 'ng-zorro-antd/radio';\nimport { NzRateModule } from 'ng-zorro-antd/rate';\nimport { NzResultModule } from 'ng-zorro-antd/result';\nimport { NzSelectModule } from 'ng-zorro-antd/select';\nimport { NzSkeletonModule } from 'ng-zorro-antd/skeleton';\nimport { NzSliderModule } from 'ng-zorro-antd/slider';\nimport { NzSpinModule } from 'ng-zorro-antd/spin';\nimport { NzStatisticModule } from 'ng-zorro-antd/statistic';\nimport { NzStepsModule } from 'ng-zorro-antd/steps';\nimport { NzSwitchModule } from 'ng-zorro-antd/switch';\nimport { NzTableModule } from 'ng-zorro-antd/table';\nimport { NzTabsModule } from 'ng-zorro-antd/tabs';\nimport { NzTagModule } from 'ng-zorro-antd/tag';\nimport { NzTimePickerModule } from 'ng-zorro-antd/time-picker';\nimport { NzTimelineModule } from 'ng-zorro-antd/timeline';\nimport { NzToolTipModule } from 'ng-zorro-antd/tooltip';\nimport { NzTransferModule } from 'ng-zorro-antd/transfer';\nimport { NzTreeModule } from 'ng-zorro-antd/tree';\nimport { NzTreeViewModule } from 'ng-zorro-antd/tree-view';\nimport { NzTreeSelectModule } from 'ng-zorro-antd/tree-select';\nimport { NzTypographyModule } from 'ng-zorro-antd/typography';\nimport { NzUploadModule } from 'ng-zorro-antd/upload';\nimport { NzResizableModule } from 'ng-zorro-antd/resizable';\nimport { NzPipesModule } from 'ng-zorro-antd/pipes';\nimport { NzSpaceModule } from 'ng-zorro-antd/space';\nimport { NzSegmentedModule } from 'ng-zorro-antd/segmented';\n\n@NgModule({\n exports: [\n NzAffixModule,\n NzAlertModule,\n NzAnchorModule,\n NzAutocompleteModule,\n NzAvatarModule,\n NzBackTopModule,\n NzBadgeModule,\n NzButtonModule,\n NzBreadCrumbModule,\n NzCalendarModule,\n NzCardModule,\n NzCarouselModule,\n NzCascaderModule,\n NzCheckboxModule,\n NzCollapseModule,\n NzCommentModule,\n NzDatePickerModule,\n NzDescriptionsModule,\n NzDividerModule,\n NzDrawerModule,\n NzDropDownModule,\n NzEmptyModule,\n NzFormModule,\n NzGridModule,\n NzI18nModule,\n NzIconModule,\n NzImageModule,\n NzInputModule,\n NzInputNumberModule,\n NzLayoutModule,\n NzListModule,\n NzMentionModule,\n NzMenuModule,\n NzMessageModule,\n NzModalModule,\n NzNoAnimationModule,\n NzNotificationModule,\n NzPageHeaderModule,\n NzPaginationModule,\n NzPopconfirmModule,\n NzPopoverModule,\n NzProgressModule,\n NzRadioModule,\n NzRateModule,\n NzResultModule,\n NzSelectModule,\n NzSkeletonModule,\n NzSliderModule,\n NzSpinModule,\n NzStatisticModule,\n NzStepsModule,\n NzSwitchModule,\n NzTableModule,\n NzTabsModule,\n NzTagModule,\n NzTimePickerModule,\n NzTimelineModule,\n NzToolTipModule,\n NzTransButtonModule,\n NzTransferModule,\n NzTreeModule,\n NzTreeViewModule,\n NzTreeSelectModule,\n NzTypographyModule,\n NzUploadModule,\n NzWaveModule,\n NzResizableModule,\n NzPipesModule,\n NzSpaceModule,\n NzSegmentedModule,\n ],\n})\nexport class NgZorroAntdModule {}\n","export type GeoAlertType = 'success' | 'error' | 'warning' | 'info';\n\nexport const UI_ALERT_DEFAULT_TITLES: Record<GeoAlertType, string> = {\n success: 'Thành công!',\n error: 'Lỗi!',\n warning: 'Cảnh báo!',\n info: 'Thông tin!',\n};\n","import {\n Component,\n EventEmitter,\n Input,\n Output,\n ViewEncapsulation,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { NzIconModule } from 'ng-zorro-antd/icon';\nimport { UI_ALERT_DEFAULT_TITLES, GeoAlertType } from './geo-alert.types';\n\n@Component({\n selector: 'geo-alert',\n standalone: true,\n imports: [CommonModule, NzIconModule],\n templateUrl: './geo-alert.component.html',\n styleUrl: './geo-alert.component.scss',\n encapsulation: ViewEncapsulation.None,\n host: {\n class: 'geo-alert-host',\n '[class.geo-alert-host--hidden]': '!visible',\n },\n})\nexport class GeoAlertComponent {\n @Input() type: GeoAlertType = 'info';\n @Input() title = '';\n @Input() message = '';\n @Input() closable = true;\n @Input() visible = true;\n @Input() showIcon = true;\n\n @Output() closed = new EventEmitter<void>();\n\n get displayTitle(): string {\n return this.title || UI_ALERT_DEFAULT_TITLES[this.type];\n }\n\n get iconType(): string {\n switch (this.type) {\n case 'success':\n return 'check-circle';\n case 'error':\n return 'close-circle';\n case 'warning':\n return 'exclamation-circle';\n default:\n return 'info-circle';\n }\n }\n\n onClose(): void {\n this.visible = false;\n this.closed.emit();\n }\n}\n","@if (visible) {\n <div class=\"geo-alert\" [class]=\"'geo-alert--' + type\" role=\"alert\">\n <div class=\"geo-alert__main\">\n @if (showIcon) {\n <span class=\"geo-alert__icon\" nz-icon [nzType]=\"iconType\" nzTheme=\"outline\"></span>\n }\n\n <div class=\"geo-alert__content\">\n <p class=\"geo-alert__title\">{{ displayTitle }}</p>\n @if (message) {\n <p class=\"geo-alert__message\">{{ message }}</p>\n }\n </div>\n </div>\n\n @if (closable) {\n <button type=\"button\" class=\"geo-alert__close\" aria-label=\"Đóng thông báo\" (click)=\"onClose()\">\n <span nz-icon nzType=\"close\" nzTheme=\"outline\"></span>\n </button>\n }\n </div>\n}\n","import { CommonModule, Location } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n EventEmitter,\n Input,\n Output,\n inject,\n} from '@angular/core';\nimport { NzIconModule } from 'ng-zorro-antd/icon';\n\n/**\n * Nút quay lại dùng chung cho các page form/detail.\n * Mặc định `history.back()` (−1). Set `[historyBack]=\"false\"` nếu parent tự navigate.\n */\n@Component({\n selector: 'geo-back-button',\n standalone: true,\n imports: [CommonModule, NzIconModule],\n templateUrl: './geo-back-button.component.html',\n styleUrl: './geo-back-button.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'geo-back-button-host',\n },\n})\nexport class GeoBackButtonComponent {\n private readonly location = inject(Location);\n\n @Input() ariaLabel = 'Quay lại';\n @Input() title = 'Quay lại';\n @Input() disabled = false;\n /** `true` (mặc định): `Location.back()` — về trang trước trong history. */\n @Input() historyBack = true;\n\n @Output() clicked = new EventEmitter<MouseEvent>();\n\n onClick(event: MouseEvent): void {\n if (this.disabled) {\n return;\n }\n\n event.preventDefault();\n event.stopPropagation();\n this.clicked.emit(event);\n\n if (this.historyBack) {\n this.location.back();\n }\n }\n}\n","<button\n type=\"button\"\n class=\"geo-back-button\"\n [attr.aria-label]=\"ariaLabel\"\n [attr.title]=\"title || ariaLabel\"\n [disabled]=\"disabled\"\n (click)=\"onClick($event)\"\n>\n <span nz-icon nzType=\"arrow-left\" nzTheme=\"outline\" aria-hidden=\"true\"></span>\n</button>\n","import { Component, Input, ViewEncapsulation } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { RouterModule } from '@angular/router';\nimport { NzBreadCrumbModule } from 'ng-zorro-antd/breadcrumb';\nimport { NzIconModule } from 'ng-zorro-antd/icon';\nimport { GeoBreadcrumbItem } from './geo-breadcrumb.types';\n\n/**\n * Breadcrumb GEO — dựa trên `nz-breadcrumb`.\n * Item thường: neutral gray; item active (cuối): primary + semibold.\n */\n@Component({\n selector: 'geo-breadcrumb',\n standalone: true,\n imports: [CommonModule, RouterModule, NzBreadCrumbModule, NzIconModule],\n templateUrl: './geo-breadcrumb.component.html',\n styleUrl: './geo-breadcrumb.component.scss',\n encapsulation: ViewEncapsulation.None,\n host: {\n class: 'geo-breadcrumb-host',\n },\n})\nexport class GeoBreadcrumbComponent {\n @Input() items: GeoBreadcrumbItem[] = [];\n\n isActive(item: GeoBreadcrumbItem, index: number): boolean {\n if (item.active != null) {\n return item.active;\n }\n return index === this.items.length - 1;\n }\n}\n","<nav class=\"geo-breadcrumb\" aria-label=\"Breadcrumb\">\n <nz-breadcrumb class=\"geo-breadcrumb__antd\" [nzSeparator]=\"separatorTpl\">\n @for (item of items; track $index) {\n <nz-breadcrumb-item>\n @if (item.link && !isActive(item, $index)) {\n <a\n class=\"geo-breadcrumb__link\"\n [routerLink]=\"item.link\"\n [queryParams]=\"item.queryParams || null\"\n >\n {{ item.label }}\n </a>\n } @else {\n <span\n class=\"geo-breadcrumb__text\"\n [class.geo-breadcrumb__text--active]=\"isActive(item, $index)\"\n [attr.aria-current]=\"isActive(item, $index) ? 'page' : null\"\n >\n {{ item.label }}\n </span>\n }\n </nz-breadcrumb-item>\n }\n </nz-breadcrumb>\n</nav>\n\n<ng-template #separatorTpl>\n <span class=\"geo-breadcrumb__separator\" nz-icon nzType=\"right\" nzTheme=\"outline\"></span>\n</ng-template>\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { NzIconModule } from 'ng-zorro-antd/icon';\nimport { NzToolTipModule } from 'ng-zorro-antd/tooltip';\nimport { GeoButtonAppearance, GeoButtonColor, GeoButtonTooltipPlacement } from './geo-button.types';\n\n@Component({\n selector: 'geo-button',\n standalone: true,\n imports: [CommonModule, NzIconModule, NzToolTipModule],\n templateUrl: './geo-button.component.html',\n styleUrl: './geo-button.component.scss',\n})\nexport class GeoButtonComponent {\n @Input() appearance: GeoButtonAppearance = 'primary';\n @Input() color: GeoButtonColor = 'brand';\n @Input() icon?: string;\n @Input() iconTheme: 'outline' | 'fill' | 'twotone' = 'outline';\n /** Vị trí icon: `start` (trái) hoặc `end` (phải). */\n @Input() iconPlacement: 'start' | 'end' = 'start';\n @Input() iconOnly = false;\n @Input() type: 'button' | 'submit' = 'button';\n @Input() disabled = false;\n /** Tooltip Ant Design (`nz-tooltip`). Ưu tiên hơn `title` native. */\n @Input() tooltip = '';\n @Input() tooltipPlacement: GeoButtonTooltipPlacement = 'top';\n /** Trạng thái active (vd. toolbar toggle đang bật). */\n @Input() active = false;\n /** Native `title` — fallback khi không set `tooltip`. */\n @Input() title = '';\n\n @Output() clicked = new EventEmitter<MouseEvent>();\n\n get tooltipTitle(): string {\n return this.tooltip || this.title || '';\n }\n\n get classNames(): Record<string, boolean> {\n return {\n [`geo-button--${this.appearance}`]: true,\n [`geo-button--${this.color}`]: true,\n 'geo-button--icon-only': this.iconOnly,\n 'geo-button--icon-end': !!this.icon && this.iconPlacement === 'end',\n 'geo-button--active': this.active,\n };\n }\n\n onClick(event: MouseEvent): void {\n if (!this.disabled) {\n this.clicked.emit(event);\n }\n }\n}\n","<button\n [type]=\"type\"\n [disabled]=\"disabled\"\n class=\"geo-button\"\n [ngClass]=\"classNames\"\n [nz-tooltip]=\"tooltipTitle\"\n [nzTooltipPlacement]=\"tooltipPlacement\"\n [nzTooltipTrigger]=\"tooltipTitle ? 'hover' : null\"\n [attr.aria-label]=\"tooltipTitle || null\"\n [attr.aria-pressed]=\"active ? true : null\"\n (click)=\"onClick($event)\"\n>\n @if (icon && iconPlacement === 'start') {\n <span class=\"geo-button__icon\">\n <span nz-icon [nzType]=\"icon\" [nzTheme]=\"iconTheme\"></span>\n </span>\n }\n @if (!iconOnly) {\n <span class=\"geo-button__label\">\n <ng-content></ng-content>\n </span>\n }\n @if (icon && iconPlacement === 'end') {\n <span class=\"geo-button__icon\">\n <span nz-icon [nzType]=\"icon\" [nzTheme]=\"iconTheme\"></span>\n </span>\n }\n</button>\n","import { Component, EventEmitter, Input, Output, ViewEncapsulation } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { NgZorroAntdModule } from '../../ng-zorro/ng-zorro-antd.module';\n\n@Component({\n selector: 'geo-checkbox',\n standalone: true,\n imports: [NgZorroAntdModule, FormsModule],\n templateUrl: './geo-checkbox.component.html',\n styleUrl: './geo-checkbox.component.scss',\n encapsulation: ViewEncapsulation.None,\n})\nexport class GeoCheckboxComponent {\n @Input() label = '';\n @Input() checked = false;\n @Input() disabled = false;\n @Input() indeterminate = false;\n\n @Output() checkedChange = new EventEmitter<boolean>();\n\n onChange(value: boolean): void {\n this.checked = value;\n this.checkedChange.emit(value);\n }\n}\n","<label\n nz-checkbox\n class=\"geo-checkbox\"\n [nzDisabled]=\"disabled\"\n [nzIndeterminate]=\"indeterminate\"\n [(ngModel)]=\"checked\"\n (ngModelChange)=\"onChange($event)\"\n>{{ label }}</label>\n","import {\n Component,\n EventEmitter,\n Input,\n Output,\n ViewEncapsulation,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { NgZorroAntdModule } from '../../ng-zorro/ng-zorro-antd.module';\nimport { NzIconModule } from 'ng-zorro-antd/icon';\nimport { GeoButtonComponent } from '../geo-button/geo-button.component';\n\n@Component({\n selector: 'geo-confirm-modal',\n standalone: true,\n imports: [CommonModule, NgZorroAntdModule, NzIconModule, GeoButtonComponent],\n templateUrl: './geo-confirm-modal.component.html',\n styleUrl: './geo-confirm-modal.component.scss',\n encapsulation: ViewEncapsulation.None,\n})\nexport class GeoConfirmModalComponent {\n @Input() visible = false;\n @Input() title = 'Xác nhận xoá';\n @Input() message = '';\n @Input() highlight = '';\n @Input() description = 'Hành động không thể hoàn tác, bạn chắc chắn muốn thực hiện?';\n @Input() cancelText = 'Hủy';\n @Input() confirmText = 'Xác nhận';\n @Input() confirmLoading = false;\n @Input() width: number | string = 445;\n @Input() maskClosable = false;\n @Input() closable = true;\n\n @Output() visibleChange = new EventEmitter<boolean>();\n @Output() confirm = new EventEmitter<void>();\n @Output() cancel = new EventEmitter<void>();\n\n get hasDefaultBody(): boolean {\n return !!(this.message || this.highlight || this.description);\n }\n\n onVisibleChange(visible: boolean): void {\n if (this.visible === visible) {\n return;\n }\n\n this.visibleChange.emit(visible);\n }\n\n onCancel(): void {\n this.visibleChange.emit(false);\n this.cancel.emit();\n }\n\n onConfirm(): void {\n this.confirm.emit();\n }\n}\n","<nz-modal\n [nzVisible]=\"visible\"\n [nzTitle]=\"''\"\n [nzFooter]=\"null\"\n [nzClosable]=\"false\"\n [nzMaskClosable]=\"maskClosable\"\n [nzWidth]=\"width\"\n nzWrapClassName=\"geo-confirm-modal-wrap\"\n nzClassName=\"geo-confirm-modal\"\n (nzVisibleChange)=\"onVisibleChange($event)\"\n>\n <ng-container *nzModalContent>\n <div class=\"geo-confirm-modal__content\">\n <div class=\"geo-confirm-modal__header\">\n <h2 class=\"geo-confirm-modal__title\">{{ title }}</h2>\n @if (closable) {\n <button\n type=\"button\"\n class=\"geo-confirm-modal__close\"\n aria-label=\"Đóng\"\n (click)=\"onCancel()\"\n >\n <span nz-icon nzType=\"close\" nzTheme=\"outline\"></span>\n </button>\n }\n </div>\n\n <div class=\"geo-confirm-modal__body\">\n @if (hasDefaultBody) {\n <div class=\"geo-confirm-modal__message\">\n @if (message || highlight) {\n <p class=\"geo-confirm-modal__paragraph\">\n @if (message) {\n <span>{{ message }}</span>\n }\n @if (highlight) {\n <strong class=\"geo-confirm-modal__highlight\">“{{ highlight }}”</strong>\n }\n </p>\n }\n @if (description) {\n <p class=\"geo-confirm-modal__paragraph\">{{ description }}</p>\n }\n </div>\n } @else {\n <div class=\"geo-confirm-modal__message\">\n <ng-content></ng-content>\n </div>\n }\n </div>\n\n <div class=\"geo-confirm-modal__footer\">\n <geo-button appearance=\"secondary\" color=\"brand\" (clicked)=\"onCancel()\">\n {{ cancelText }}\n </geo-button>\n <geo-button\n appearance=\"primary\"\n color=\"brand\"\n [disabled]=\"confirmLoading\"\n (clicked)=\"onConfirm()\"\n >\n {{ confirmText }}\n </geo-button>\n </div>\n </div>\n </ng-container>\n</nz-modal>\n","import {\n Component,\n EventEmitter,\n forwardRef,\n Input,\n Output,\n ViewEncapsulation,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { ControlValueAccessor, FormsModule, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { NgZorroAntdModule } from '../../ng-zorro/ng-zorro-antd.module';\nimport { GeoDatePickerMode, GeoDatePickerSize } from './geo-date-picker.types';\n\nlet uiDatePickerErrorId = 0;\n\n@Component({\n selector: 'geo-date-picker',\n standalone: true,\n imports: [CommonModule, FormsModule, NgZorroAntdModule],\n templateUrl: './geo-date-picker.component.html',\n styleUrl: './geo-date-picker.component.scss',\n encapsulation: ViewEncapsulation.None,\n host: {\n class: 'geo-date-picker-host',\n '[class.geo-date-picker-host--default]': 'size === \"default\"',\n '[class.geo-date-picker-host--small]': 'size === \"small\"',\n '[class.geo-date-picker-host--block]': 'block',\n '[class.geo-date-picker-host--error]': 'error',\n '[style.width]': 'hostWidth',\n },\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => GeoDatePickerComponent),\n multi: true,\n },\n ],\n})\nexport class GeoDatePickerComponent implements ControlValueAccessor {\n @Input() label = '';\n @Input() placeholder = 'Chọn ngày';\n @Input() format = 'dd/MM/yyyy';\n @Input() mode: GeoDatePickerMode = 'date';\n @Input() size: GeoDatePickerSize = 'default';\n @Input() disabled = false;\n @Input() required = false;\n @Input() error = false;\n @Input() errorMessage = '';\n @Input() allowClear = true;\n @Input() showToday = true;\n @Input() showTime = false;\n @Input() block = false;\n @Input() width?: number | string;\n @Input() disabledDate?: (current: Date) => boolean;\n\n @Output() valueChange = new EventEmitter<Date | null>();\n\n readonly errorMessageId = `geo-date-picker-error-${++uiDatePickerErrorId}`;\n\n value: Date | null = null;\n\n private onChange: (value: Date | null) => void = () => undefined;\n private onTouched: () => void = () => undefined;\n\n get hostWidth(): string | null {\n if (this.block || this.width == null) {\n return null;\n }\n\n return typeof this.width === 'number' ? `${this.width}px` : this.width;\n }\n\n get controlClassNames(): Record<string, boolean> {\n return {\n 'geo-date-picker': true,\n [`geo-date-picker--${this.size}`]: true,\n };\n }\n\n onValueChange(value: Date | null): void {\n this.value = value;\n this.onChange(value);\n this.onTouched();\n this.valueChange.emit(value);\n }\n\n writeValue(value: Date | null): void {\n this.value = value ?? null;\n }\n\n registerOnChange(fn: (value: Date | null) => void): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n this.disabled = isDisabled;\n }\n}\n","@if (label) {\n <div class=\"geo-date-picker__label\">\n <span>{{ label }}</span>\n @if (required) {\n <span class=\"geo-date-picker__required\" aria-hidden=\"true\">*</span>\n }\n </div>\n}\n\n<nz-date-picker\n [ngClass]=\"controlClassNames\"\n nzDropdownClassName=\"geo-date-picker__dropdown\"\n [nzPlaceHolder]=\"placeholder\"\n [nzFormat]=\"format\"\n [nzMode]=\"mode\"\n [nzDisabled]=\"disabled\"\n [nzAllowClear]=\"allowClear\"\n [nzShowToday]=\"showToday\"\n [nzShowTime]=\"showTime\"\n [nzDisabledDate]=\"disabledDate\"\n [ngModel]=\"value\"\n [attr.aria-invalid]=\"error ? 'true' : null\"\n [attr.aria-describedby]=\"error && errorMessage ? errorMessageId : null\"\n (ngModelChange)=\"onValueChange($event)\"\n></nz-date-picker>\n\n@if (error && errorMessage) {\n <p class=\"geo-date-picker__error\" [id]=\"errorMessageId\" role=\"alert\">{{ errorMessage }}</p>\n}\n","import {\n Component,\n EventEmitter,\n forwardRef,\n Input,\n Output,\n ViewEncapsulation,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { ControlValueAccessor, FormsModule, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { NgZorroAntdModule } from '../../ng-zorro/ng-zorro-antd.module';\nimport { GeoDateRangeSize, GeoDateRangeValue } from './geo-date-range-picker.types';\n\nlet uiDateRangeErrorId = 0;\n\n@Component({\n selector: 'geo-date-range-picker',\n standalone: true,\n imports: [CommonModule, FormsModule, NgZorroAntdModule],\n templateUrl: './geo-date-range-picker.component.html',\n styleUrl: './geo-date-range-picker.component.scss',\n encapsulation: ViewEncapsulation.None,\n host: {\n class: 'geo-date-range-picker-host',\n '[class.geo-date-range-picker-host--default]': 'size === \"default\"',\n '[class.geo-date-range-picker-host--small]': 'size === \"small\"',\n '[class.geo-date-range-picker-host--block]': 'block',\n '[class.geo-date-range-picker-host--error]': 'error',\n '[style.width]': 'hostWidth',\n },\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => GeoDateRangePickerComponent),\n multi: true,\n },\n ],\n})\nexport class GeoDateRangePickerComponent implements ControlValueAccessor {\n @Input() label = '';\n @Input() placeholder: [string, string] = ['Từ ngày', 'Đến ngày'];\n @Input() format = 'dd/MM/yyyy';\n @Input() size: GeoDateRangeSize = 'default';\n @Input() disabled = false;\n @Input() required = false;\n @Input() error = false;\n @Input() errorMessage = '';\n @Input() allowClear = true;\n @Input() showTime = false;\n @Input() block = false;\n @Input() width?: number | string;\n @Input() disabledDate?: (current: Date) => boolean;\n @Input() separator = '→';\n\n @Output() valueChange = new EventEmitter<GeoDateRangeValue>();\n\n readonly errorMessageId = `geo-date-range-picker-error-${++uiDateRangeErrorId}`;\n\n value: GeoDateRangeValue = null;\n\n private onChange: (value: GeoDateRangeValue) => void = () => undefined;\n private onTouched: () => void = () => undefined;\n\n get hostWidth(): string | null {\n if (this.block || this.width == null) {\n return null;\n }\n\n return typeof this.width === 'number' ? `${this.width}px` : this.width;\n }\n\n get controlClassNames(): Record<string, boolean> {\n return {\n 'geo-date-range-picker': true,\n [`geo-date-range-picker--${this.size}`]: true,\n };\n }\n\n onValueChange(value: GeoDateRangeValue): void {\n this.value = value;\n this.onChange(value);\n this.onTouched();\n this.valueChange.emit(value);\n }\n\n writeValue(value: GeoDateRangeValue): void {\n this.value = value ?? null;\n }\n\n registerOnChange(fn: (value: GeoDateRangeValue) => void): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n this.disabled = isDisabled;\n }\n}\n","@if (label) {\n <div class=\"geo-date-range-picker__label\">\n <span>{{ label }}</span>\n @if (required) {\n <span class=\"geo-date-range-picker__required\" aria-hidden=\"true\">*</span>\n }\n </div>\n}\n\n<nz-range-picker\n [ngClass]=\"controlClassNames\"\n nzDropdownClassName=\"geo-date-range-picker__dropdown\"\n [nzPlaceHolder]=\"placeholder\"\n [nzFormat]=\"format\"\n [nzDisabled]=\"disabled\"\n [nzAllowClear]=\"allowClear\"\n [nzShowTime]=\"showTime\"\n [nzDisabledDate]=\"disabledDate\"\n [nzSeparator]=\"separator\"\n [ngModel]=\"value\"\n [attr.aria-invalid]=\"error ? 'true' : null\"\n [attr.aria-describedby]=\"error && errorMessage ? errorMessageId : null\"\n (ngModelChange)=\"onValueChange($event)\"\n></nz-range-picker>\n\n@if (error && errorMessage) {\n <p class=\"geo-date-range-picker__error\" [id]=\"errorMessageId\" role=\"alert\">{{ errorMessage }}</p>\n}\n","import {\n Component,\n ElementRef,\n EventEmitter,\n forwardRef,\n Input,\n Output,\n ViewChild,\n ViewEncapsulation,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { GeoButtonComponent } from '../geo-button/geo-button.component';\n\nlet uiFilePickerErrorId = 0;\n\n@Component({\n selector: 'geo-file-picker',\n standalone: true,\n imports: [CommonModule, GeoButtonComponent],\n templateUrl: './geo-file-picker.component.html',\n styleUrl: './geo-file-picker.component.scss',\n encapsulation: ViewEncapsulation.None,\n host: {\n class: 'geo-file-picker-host',\n '[class.geo-file-picker-host--block]': 'block',\n '[class.geo-file-picker-host--error]': 'error',\n '[class.geo-file-picker-host--disabled]': 'disabled',\n '[style.width]': 'hostWidth',\n },\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => GeoFilePickerComponent),\n multi: true,\n },\n ],\n})\nexport class GeoFilePickerComponent implements ControlValueAccessor {\n @ViewChild('fileInput') fileInput?: ElementRef<HTMLInputElement>;\n\n @Input() label = 'Tải file';\n @Input() placeholder = 'Chọn giá trị';\n @Input() buttonText = 'Chọn file';\n @Input() required = false;\n @Input() disabled = false;\n @Input() accept = '';\n @Input() multiple = false;\n @Input() error = false;\n @Input() errorMessage = '';\n @Input() block = false;\n @Input() width?: number | string;\n /**\n * Tên file đã upload (server) — hiện khi chưa có File local trong CVA.\n * Dùng cho flow: chọn file → upload → giữ tên từ API.\n */\n @Input() selectedName = '';\n\n @Output() fileChange = new EventEmitter<File | File[] | null>();\n\n readonly errorMessageId = `geo-file-picker-error-${++uiFilePickerErrorId}`;\n\n value: File | File[] | null = null;\n\n private onChange: (value: File | File[] | null) => void = () => undefined;\n private onTouched: () => void = () => undefined;\n\n get hostWidth(): string | null {\n if (this.block || this.width == null) {\n return null;\n }\n\n return typeof this.width === 'number' ? `${this.width}px` : this.width;\n }\n\n get displayValue(): string {\n if (Array.isArray(this.value) && this.value.length > 0) {\n return this.value.map((file) => file.name).join(', ');\n }\n\n if (this.value && !Array.isArray(this.value)) {\n return this.value.name;\n }\n\n if (this.selectedName) {\n return this.selectedName;\n }\n\n return this.placeholder;\n }\n\n get hasValue(): boolean {\n if (Array.isArray(this.value)) {\n return this.value.length > 0;\n }\n\n if (this.value != null) {\n return true;\n }\n\n return !!this.selectedName;\n }\n\n openFilePicker(): void {\n if (this.disabled) {\n return;\n }\n\n this.fileInput?.nativeElement.click();\n }\n\n onFileSelected(event: Event): void {\n const input = event.target as HTMLInputElement;\n const files = input.files;\n\n if (!files || files.length === 0) {\n return;\n }\n\n const nextValue = this.multiple ? Array.from(files) : files[0];\n this.setValue(nextValue);\n input.value = '';\n }\n\n private setValue(value: File | File[] | null): void {\n this.value = value;\n this.onChange(value);\n this.onTouched();\n this.fileChange.emit(value);\n }\n\n writeValue(value: File | File[] | null): void {\n this.value = value;\n }\n\n registerOnChange(fn: (value: File | File[] | null) => void): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n this.disabled = isDisabled;\n }\n}\n","@if (label) {\n <div class=\"geo-file-picker__label\">\n <span>{{ label }}</span>\n @if (required) {\n <span class=\"geo-file-picker__required\" aria-hidden=\"true\">*</span>\n }\n </div>\n}\n\n<div\n class=\"geo-file-picker__control\"\n [attr.aria-invalid]=\"error ? 'true' : null\"\n [attr.aria-describedby]=\"error && errorMessage ? errorMessageId : null\"\n>\n <span\n class=\"geo-file-picker__value\"\n [class.geo-file-picker__value--placeholder]=\"!hasValue\"\n >\n {{ displayValue }}\n </span>\n\n <input\n #fileInput\n class=\"geo-file-picker__input\"\n type=\"file\"\n tabindex=\"-1\"\n [accept]=\"accept\"\n [multiple]=\"multiple\"\n [disabled]=\"disabled\"\n (change)=\"onFileSelected($event)\"\n />\n\n <geo-button\n class=\"geo-file-picker__button\"\n appearance=\"primary\"\n color=\"brand\"\n icon=\"plus\"\n [disabled]=\"disabled\"\n (clicked)=\"openFilePicker()\"\n >\n {{ buttonText }}\n </geo-button>\n</div>\n\n@if (error && errorMessage) {\n <p class=\"geo-file-picker__error\" [id]=\"errorMessageId\" role=\"alert\">{{ errorMessage }}</p>\n}\n","import { NzUploadFile, NzUploadXHRArgs } from 'ng-zorro-antd/upload';\nimport { Subscription } from 'rxjs';\n\n/** Extends Ant Design upload file with progress metadata for GEO UI. */\nexport interface GeoUploadFile extends NzUploadFile {\n /** Bytes uploaded so far (for \"100Kb / 200Kb\"). */\n loaded?: number;\n /** Upload speed in bytes/sec (for \"870kb/sec\"). */\n speed?: number;\n}\n\nexport type GeoUploadCustomRequest = (item: NzUploadXHRArgs) => Subscription;\n\nexport function geoFormatBytes(bytes?: number | null): string {\n if (bytes == null || Number.isNaN(bytes)) {\n return '0Kb';\n }\n const kb = bytes / 1024;\n if (kb < 1024) {\n return `${Math.round(kb)}Kb`;\n }\n return `${(kb / 1024).toFixed(kb >= 10240 ? 0 : 1)}Mb`;\n}\n\nexport function geoFormatSpeed(bytesPerSec?: number | null): string {\n if (bytesPerSec == null || bytesPerSec <= 0) {\n return '';\n }\n const kb = bytesPerSec / 1024;\n if (kb < 1024) {\n return `${Math.round(kb)}kb/sec`;\n }\n return `${(kb / 1024).toFixed(1)}Mb/sec`;\n}\n\nexport function geoUploadPercent(file: GeoUploadFile): number {\n if (file.percent != null) {\n return Math.max(0, Math.min(100, Math.round(file.percent)));\n }\n if (file.status === 'done' || file.status === 'success') {\n return 100;\n }\n return 0;\n}\n","import {\n ChangeDetectorRef,\n Component,\n EventEmitter,\n Input,\n Output,\n ViewEncapsulation,\n inject,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { NzIconModule } from 'ng-zorro-antd/icon';\nimport { NzUploadModule, NzUploadChangeParam, NzUploadFile, NzUploadXHRArgs } from 'ng-zorro-antd/upload';\nimport { Observable, Subscription } from 'rxjs';\nimport {\n GeoUploadCustomRequest,\n GeoUploadFile,\n geoFormatBytes,\n geoFormatSpeed,\n geoUploadPercent,\n} from './geo-upload.types';\n\n/**\n * Upload kéo-thả theo design GEO (dropzone + danh sách file có progress).\n * Dựa trên `nz-upload` (Ant Design). Form field gọn dùng `geo-file-picker`.\n */\n@Component({\n selector: 'geo-upload',\n standalone: true,\n imports: [CommonModule, NzIconModule, NzUploadModule],\n templateUrl: './geo-upload.component.html',\n styleUrl: './geo-upload.component.scss',\n encapsulation: ViewEncapsulation.None,\n host: {\n class: 'geo-upload-host',\n '[class.geo-upload-host--disabled]': 'disabled',\n '[class.geo-upload-host--error]': 'error',\n },\n})\nexport class GeoUploadComponent {\n private readonly cdr = inject(ChangeDetectorRef);\n\n /** Upload endpoint — bỏ trống nếu dùng `customRequest` / chỉ chọn file local. */\n @Input() action: string | ((file: NzUploadFile) => string | Observable<string>) = '';\n @Input() accept = '.png,.jpg,.jpeg,.svg';\n /** Max size (bytes). Default 1MB. `0` = không giới hạn. */\n @Input() maxSize = 1024 * 1024;\n @Input() multiple = true;\n @Input() disabled = false;\n @Input() error = false;\n @Input() errorMessage = '';\n @Input() hint =\n 'Chỉ cho phép file dạng .png, .jpg, .jpeg, .svg và dung lượng không quá 1Mb';\n @Input() titlePrefix = 'Kéo thả ảnh hoặc';\n @Input() selectText = 'Chọn file';\n @Input() titleSuffix = 'để tải lên';\n @Input() listTitle = 'Tập tin đính kèm';\n @Input() showListTitle = true;\n /** Controlled file list. */\n @Input() fileList: GeoUploadFile[] = [];\n @Input() headers?: {} | ((file: NzUploadFile) => {} | Observable<{}>);\n @Input() data?: {} | ((file: NzUploadFile) => {} | Observable<{}>);\n @Input() name = 'file';\n @Input() withCredentials = false;\n @Input() directory = false;\n /** Custom XHR — mặc định simulate progress khi không có `action`. */\n @Input() customRequest?: GeoUploadCustomRequest;\n @Input() beforeUpload?: (\n file: NzUploadFile,\n fileList: NzUploadFile[]\n ) => boolean | Observable<boolean>;\n\n @Output() fileListChange = new EventEmitter<GeoUploadFile[]>();\n @Output() change = new EventEmitter<NzUploadChangeParam>();\n @Output() remove = new EventEmitter<GeoUploadFile>();\n @Output() reject = new EventEmitter<{ file: File; reason: 'type' | 'size' }>();\n\n readonly formatBytes = geoFormatBytes;\n readonly formatSpeed = geoFormatSpeed;\n readonly percentOf = geoUploadPercent;\n\n get resolvedCustomRequest(): GeoUploadCustomRequest | undefined {\n if (this.customRequest) {\n return this.customRequest;\n }\n if (!this.action) {\n return (item) => this.simulateUpload(item);\n }\n return undefined;\n }\n\n onFileListChange(list: NzUploadFile[]): void {\n this.fileList = list as GeoUploadFile[];\n this.fileListChange.emit(this.fileList);\n }\n\n onChange(event: NzUploadChangeParam): void {\n this.fileList = event.fileList as GeoUploadFile[];\n this.fileListChange.emit(this.fileList);\n this.change.emit(event);\n }\n\n handleBeforeUpload = (\n file: NzUploadFile,\n _fileList: NzUploadFile[]\n ): boolean | Observable<boolean> => {\n if (this.beforeUpload) {\n return this.beforeUpload(file, _fileList);\n }\n\n const raw = file as unknown as File;\n const name = (file.name || raw.name || '').toLowerCase();\n if (this.accept) {\n const tokens = this.accept\n .split(',')\n .map((t) => t.trim().toLowerCase())\n .filter(Boolean);\n const ok = tokens.some((token) => {\n if (token.startsWith('.')) {\n return name.endsWith(token);\n }\n if (token.includes('/*')) {\n const prefix = token.replace('/*', '');\n return (file.type || raw.type || '').startsWith(prefix);\n }\n return (file.type || raw.type || '') === token;\n });\n if (!ok) {\n this.reject.emit({ file: raw, reason: 'type' });\n return false;\n }\n }\n\n const size = file.size ?? raw.size ?? 0;\n if (this.maxSize > 0 && size > this.maxSize) {\n this.reject.emit({ file: raw, reason: 'size' });\n return false;\n }\n\n return true;\n };\n\n onRemove = (file: NzUploadFile): boolean => {\n this.remove.emit(file as GeoUploadFile);\n return true;\n };\n\n removeFile(file: GeoUploadFile, event: Event): void {\n event.preventDefault();\n event.stopPropagation();\n if (this.disabled) {\n return;\n }\n if (this.onRemove(file) === false) {\n return;\n }\n this.fileList = this.fileList.filter((item) => item.uid !== file.uid);\n this.fileListChange.emit(this.fileList);\n }\n\n progressLabel(file: GeoUploadFile): string {\n const total = file.size ?? file.originFileObj?.size ?? 0;\n const percent = this.percentOf(file);\n const loaded =\n file.loaded != null\n ? file.loaded\n : Math.round((percent / 100) * total);\n return `${this.formatBytes(loaded)}/ ${this.formatBytes(total)} (${percent}%)`;\n }\n\n speedLabel(file: GeoUploadFile): string {\n return this.formatSpeed(file.speed);\n }\n\n /** Demo / local upload khi không có action. */\n private simulateUpload(item: NzUploadXHRArgs): Subscription {\n const file = item.file as GeoUploadFile;\n const total = file.size ?? file.originFileObj?.size ?? 0;\n let loaded = 0;\n const started = Date.now();\n\n file.status = 'uploading';\n file.percent = 0;\n file.loaded = 0;\n file.speed = 0;\n\n const timer = window.setInterval(() => {\n const step = Math.max(total * 0.08, 16 * 1024);\n loaded = Math.min(total, loaded + step);\n const elapsedSec = Math.max((Date.now() - started) / 1000, 0.001);\n const percent = total > 0 ? Math.round((loaded / total) * 100) : 100;\n\n file.loaded = loaded;\n file.percent = percent;\n file.speed = loaded / elapsedSec;\n item.onProgress?.({ percent }, file);\n this.cdr.markForCheck();\n\n if (loaded >= total) {\n window.clearInterval(timer);\n file.status = 'done';\n file.percent = 100;\n file.loaded = total;\n item.onSuccess?.({}, file, null);\n this.cdr.markForCheck();\n }\n }, 200);\n\n return new Subscription(() => window.clearInterval(timer));\n }\n}\n","<div class=\"geo-upload\">\n <nz-upload\n class=\"geo-upload__dragger\"\n nzType=\"drag\"\n [nzAction]=\"action\"\n [nzAccept]=\"accept\"\n [nzMultiple]=\"multiple\"\n [nzDisabled]=\"disabled\"\n [nzDirectory]=\"directory\"\n [nzName]=\"name\"\n [nzHeaders]=\"headers\"\n [nzData]=\"data\"\n [nzWithCredentials]=\"withCredentials\"\n [nzFileList]=\"fileList\"\n [nzShowUploadList]=\"false\"\n [nzBeforeUpload]=\"handleBeforeUpload\"\n [nzCustomRequest]=\"resolvedCustomRequest\"\n [nzRemove]=\"onRemove\"\n (nzFileListChange)=\"onFileListChange($event)\"\n (nzChange)=\"onChange($event)\"\n >\n <div class=\"geo-upload__dropzone\">\n <span class=\"geo-upload__icon-wrap\" aria-hidden=\"true\">\n <span class=\"geo-upload__icon\" nz-icon nzType=\"cloud-upload\" nzTheme=\"outline\"></span>\n </span>\n\n <div class=\"geo-upload__copy\">\n <p class=\"geo-upload__title\">\n <span>{{ titlePrefix }} </span>\n <span class=\"geo-upload__select\">{{ selectText }}</span>\n <span> {{ titleSuffix }}</span>\n </p>\n\n @if (hint) {\n <p class=\"geo-upload__hint\">{{ hint }}</p>\n }\n </div>\n </div>\n </nz-upload>\n\n @if (fileList.length > 0) {\n <div class=\"geo-upload__list\">\n @if (showListTitle) {\n <h4 class=\"geo-upload__list-title\">{{ listTitle }}</h4>\n }\n\n <ul class=\"geo-upload__files\">\n @for (file of fileList; track file.uid) {\n <li class=\"geo-upload__file\" [class.geo-upload__file--error]=\"file.status === 'error'\">\n <div class=\"geo-upload__file-icon\" aria-hidden=\"true\">\n <span nz-icon nzType=\"file\" nzTheme=\"outline\"></span>\n </div>\n\n <div class=\"geo-upload__file-main\">\n <div class=\"geo-upload__file-row\">\n <span class=\"geo-upload__file-name\" [title]=\"file.name\">{{ file.name }}</span>\n <button\n type=\"button\"\n class=\"geo-upload__file-remove\"\n aria-label=\"Xóa tập tin\"\n [disabled]=\"disabled\"\n (click)=\"removeFile(file, $event)\"\n >\n <span nz-icon nzType=\"close\" nzTheme=\"outline\"></span>\n </button>\n </div>\n\n <div class=\"geo-upload__progress\" role=\"progressbar\" [attr.aria-valuenow]=\"percentOf(file)\" aria-valuemin=\"0\" aria-valuemax=\"100\">\n <div class=\"geo-upload__progress-bar\" [style.width.%]=\"percentOf(file)\"></div>\n </div>\n\n <div class=\"geo-upload__file-meta\">\n <span>{{ progressLabel(file) }}</span>\n <span>{{ speedLabel(file) }}</span>\n </div>\n </div>\n </li>\n }\n </ul>\n </div>\n }\n\n @if (error && errorMessage) {\n <p class=\"geo-upload__error\" role=\"alert\">{{ errorMessage }}</p>\n }\n</div>\n","import {\n Component,\n EventEmitter,\n Input,\n Output,\n ViewEncapsulation,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { NgZorroAntdModule } from '../../ng-zorro/ng-zorro-antd.module';\nimport { NzIconModule } from 'ng-zorro-antd/icon';\nimport { GeoButtonComponent } from '../geo-button/geo-button.component';\n\n/**\n * Modal form dùng chung — API bám Ant Design Modal / ng-zorro nz-modal.\n * Header + footer cố định; body có thể scroll (`bodyScroll`).\n */\n@Component({\n selector: 'geo-form-modal',\n standalone: true,\n imports: [CommonModule, NgZorroAntdModule, NzIconModule, GeoButtonComponent],\n templateUrl: './geo-form-modal.component.html',\n styleUrl: './geo-form-modal.component.scss',\n encapsulation: ViewEncapsulation.None,\n})\nexport class GeoFormModalComponent {\n /** Tương đương `open` (antd) / `nzVisible` (ng-zorro). */\n @Input() open = false;\n @Input() title = '';\n /** Title chữ in hoa. Default `true` theo design. */\n @Input() titleUppercase = true;\n @Input() okText = 'Lưu';\n @Input() cancelText = 'Hủy';\n /** Icon nút cancel (vd. `left` cho Quay lại). */\n @Input() cancelIcon?: string;\n @Input() cancelIconPlacement: 'start' | 'end' = 'start';\n /** Icon nút OK (vd. `right` cho Tiếp theo). */\n @Input() okIcon?: string;\n @Input() okIconPlacement: 'start' | 'end' = 'end';\n /** Nút phụ (vd. Lưu và khởi tạo lại). Chỉ hiện khi có text và không readonly. */\n @Input() secondaryOkText = '';\n /** Loading trên nút OK — giống antd `confirmLoading` / nz `nzOkLoading`. */\n @Input() confirmLoading = false;\n /** Disable nút OK — giống antd `okButtonProps.disabled` / nz `nzOkDisabled`. */\n @Input() okDisabled = false;\n /** Ẩn nút OK (xem chi tiết). */\n @Input() readonly = false;\n @Input() width: number | string = 720;\n @Input() closable = true;\n @Input() mask = true;\n @Input() maskClosable = false;\n @Input() keyboard = true;\n @Input() centered = true;\n @Input() zIndex = 1000;\n @Input() className = '';\n @Input() wrapClassName = '';\n /** Body cuộn, header/footer cố định. */\n @Input() bodyScroll = true;\n /** Max-height của vùng body khi `bodyScroll` (vd `'60vh'`, `400`). */\n @Input() bodyMaxHeight: string | number = '60vh';\n\n @Output() openChange = new EventEmitter<boolean>();\n @Output() ok = new EventEmitter<void>();\n @Output() secondaryOk = new EventEmitter<void>();\n @Output() cancel = new EventEmitter<void>();\n @Output() afterOpen = new EventEmitter<void>();\n @Output() afterClose = new EventEmitter<void>();\n\n get resolvedWrapClassName(): string {\n return ['geo-form-modal-wrap', this.wrapClassName].filter(Boolean).join(' ');\n }\n\n get resolvedClassName(): string {\n return ['geo-form-modal', this.className].filter(Boolean).join(' ');\n }\n\n get bodyMaxHeightCss(): string {\n return typeof this.bodyMaxHeight === 'number'\n ? `${this.bodyMaxHeight}px`\n : this.bodyMaxHeight;\n }\n\n onOpenChange(open: boolean): void {\n if (this.open === open) {\n return;\n }\n this.openChange.emit(open);\n }\n\n onCancel(): void {\n this.openChange.emit(false);\n this.cancel.emit();\n }\n\n onOk(): void {\n if (!this.okDisabled && !this.confirmLoading) {\n this.ok.emit();\n }\n }\n\n onSecondaryOk(): void {\n if (!this.okDisabled && !this.confirmLoading) {\n this.secondaryOk.emit();\n }\n }\n}\n","<nz-modal\n [nzVisible]=\"open\"\n [nzTitle]=\"''\"\n [nzFooter]=\"null\"\n [nzClosable]=\"false\"\n [nzMask]=\"mask\"\n [nzMaskClosable]=\"maskClosable\"\n [nzKeyboard]=\"keyboard\"\n [nzCentered]=\"centered\"\n [nzWidth]=\"width\"\n [nzZIndex]=\"zIndex\"\n [nzWrapClassName]=\"resolvedWrapClassName\"\n [nzClassName]=\"resolvedClassName\"\n (nzVisibleChange)=\"onOpenChange($event)\"\n (nzAfterOpen)=\"afterOpen.emit()\"\n (nzAfterClose)=\"afterClose.emit()\"\n>\n <ng-container *nzModalContent>\n <div\n class=\"geo-form-modal__content\"\n [class.geo-form-modal__content--body-scroll]=\"bodyScroll\"\n >\n <div class=\"geo-form-modal__header\">\n <h2\n class=\"geo-form-modal__title\"\n [class.geo-form-modal__title--uppercase]=\"titleUppercase\"\n >\n {{ title }}\n </h2>\n @if (closable) {\n <button\n type=\"button\"\n class=\"geo-form-modal__close\"\n aria-label=\"Đóng\"\n (click)=\"onCancel()\"\n >\n <span nz-icon nzType=\"close\" nzTheme=\"outline\"></span>\n </button>\n }\n </div>\n\n <div\n class=\"geo-form-modal__body\"\n [style.--geo-form-modal-body-max-height]=\"bodyScroll ? bodyMaxHeightCss : null\"\n >\n <ng-content></ng-content>\n </div>\n\n <div class=\"geo-form-modal__footer\">\n <ng-content select=\"[footerStart]\"></ng-content>\n\n <div class=\"geo-form-modal__footer-actions\">\n <geo-button\n appearance=\"secondary\"\n color=\"brand\"\n [icon]=\"cancelIcon\"\n [iconPlacement]=\"cancelIconPlacement\"\n (clicked)=\"onCancel()\"\n >\n {{ readonly ? 'Đóng' : cancelText }}\n </geo-button>\n @if (!readonly && secondaryOkText) {\n <geo-button\n appearance=\"secondary\"\n color=\"brand\"\n icon=\"save\"\n [disabled]=\"okDisabled || confirmLoading\"\n (clicked)=\"onSecondaryOk()\"\n >\n {{ secondaryOkText }}\n </geo-button>\n }\n @if (!readonly) {\n <geo-button\n appearance=\"primary\"\n color=\"brand\"\n [icon]=\"confirmLoading ? 'loading' : okIcon\"\n [iconPlacement]=\"okIconPlacement\"\n [disabled]=\"okDisabled || confirmLoading\"\n (clicked)=\"onOk()\"\n >\n {{ okText }}\n </geo-button>\n }\n </div>\n </div>\n </div>\n </ng-container>\n</nz-modal>\n","export type GeoIconTheme = 'outline' | 'fill' | 'twotone';\n\nexport type GeoIconSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl' | number | string;\n\nexport const GEO_ICON_SIZE_MAP: Record<'xs' | 'sm' | 'md' | 'lg' | 'xl', string> = {\n xs: '12px',\n sm: '14px',\n md: '16px',\n lg: '20px',\n xl: '24px',\n};\n","import { Component, Input, ViewEncapsulation } from '@angular/core';\nimport { NzIconModule } from 'ng-zorro-antd/icon';\nimport { GEO_ICON_SIZE_MAP, GeoIconSize, GeoIconTheme } from './geo-icon.types';\n\n/**\n * Icon wrapper — domain dùng `geo-icon`, không dùng `nz-icon` trực tiếp.\n * Wrap Ant Design icons (đã register qua `NZ_ICONS` ở app/Storybook).\n */\n@Component({\n selector: 'geo-icon',\n standalone: true,\n imports: [NzIconModule],\n templateUrl: './geo-icon.component.html',\n styleUrl: './geo-icon.component.scss',\n encapsulation: ViewEncapsulation.None,\n host: {\n class: 'geo-icon-host',\n '[style.--geo-icon-size]': 'resolvedSize',\n '[style.color]': 'color || null',\n '[class.geo-icon-host--spin]': 'spin',\n },\n})\nexport class GeoIconComponent {\n /** Tên icon Ant Design (vd. `close`, `search`, `appstore`). */\n @Input({ required: true }) type!: string;\n @Input() theme: GeoIconTheme = 'outline';\n @Input() spin = false;\n /** xs | sm | md | lg | xl | number(px) | CSS size string */\n @Input() size: GeoIconSize = 'md';\n /** CSS color — ưu tiên design token, vd. `var(--geo-color-primary-default)` */\n @Input() color?: string;\n\n get resolvedSize(): string {\n if (typeof this.size === 'number') {\n return `${this.size}px`;\n }\n if (this.size in GEO_ICON_SIZE_MAP) {\n return GEO_ICON_SIZE_MAP[this.size as keyof typeof GEO_ICON_SIZE_MAP];\n }\n return String(this.size);\n }\n}\n","<span\n class=\"geo-icon\"\n nz-icon\n [nzType]=\"type\"\n [nzTheme]=\"theme\"\n [nzSpin]=\"spin\"\n></span>\n","import {\n Component,\n EventEmitter,\n forwardRef,\n Input,\n Output,\n ViewEncapsulation,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { ControlValueAccessor, FormsModule, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { NzIconModule } from 'ng-zorro-antd/icon';\n\nlet uiInputErrorId = 0;\n\nexport type GeoInputType = 'text' | 'number' | 'password' | 'email';\n\n@Component({\n selector: 'geo-input',\n standalone: true,\n imports: [CommonModule, FormsModule, NzIconModule],\n templateUrl: './geo-input.component.html',\n styleUrl: './geo-input.component.scss',\n encapsulation: ViewEncapsulation.None,\n host: {\n class: 'geo-input-host',\n '[class.geo-input-host--block]': 'block',\n '[class.geo-input-host--error]': 'error',\n '[style.width]': 'hostWidth',\n },\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => GeoInputComponent),\n multi: true,\n },\n ],\n})\nexport class GeoInputComponent implements ControlValueAccessor {\n @Input() label = '';\n @Input() placeholder = '';\n @Input() type: GeoInputType = 'text';\n @Input() disabled = false;\n @Input() readonly = false;\n @Input() required = false;\n @Input() error = false;\n @Input() errorMessage = '';\n @Input() maxlength?: number;\n @Input() prefixIcon?: string;\n @Input() suffixIcon?: string;\n @Input() allowClear = false;\n @Input() block = false;\n @Input() width?: number | string;\n\n @Output() valueChange = new EventEmitter<string>();\n @Output() enterPressed = new EventEmitter<void>();\n\n readonly errorMessageId = `geo-input-error-${++uiInputErrorId}`;\n\n value = '';\n\n private onChange: (value: string) => void = () => undefined;\n private onTouched: () => void = () => undefined;\n\n get hostWidth(): string | null {\n if (this.block || this.width == null) {\n return null;\n }\n\n return typeof this.width === 'number' ? `${this.width}px` : this.width;\n }\n\n get showClear(): boolean {\n return this.allowClear && !this.disabled && !this.readonly && !!this.value;\n }\n\n onInput(value: string): void {\n this.value = value;\n this.onChange(value);\n this.valueChange.emit(value);\n }\n\n onBlur(): void {\n this.onTouched();\n }\n\n onClear(): void {\n this.onInput('');\n }\n\n writeValue(value: string | number | null): void {\n this.value = value == null ? '' : String(value);\n }\n\n registerOnChange(fn: (value: string) => void): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n this.disabled = isDisabled;\n }\n}\n","@if (label) {\n <div class=\"geo-input__label\">\n <span>{{ label }}</span>\n @if (required) {\n <span class=\"geo-input__required\" aria-hidden=\"true\">*</span>\n }\n </div>\n}\n\n<div\n class=\"geo-input__control\"\n [class.geo-input__control--disabled]=\"disabled\"\n [class.geo-input__control--error]=\"error\"\n>\n @if (prefixIcon) {\n <span class=\"geo-input__icon\" nz-icon [nzType]=\"prefixIcon\" nzTheme=\"outline\"></span>\n }\n\n <input\n class=\"geo-input__field\"\n [type]=\"type\"\n [placeholder]=\"placeholder\"\n [disabled]=\"disabled\"\n [readonly]=\"readonly\"\n [attr.maxlength]=\"maxlength ?? null\"\n [attr.aria-invalid]=\"error ? 'true' : null\"\n [attr.aria-describedby]=\"error && errorMessage ? errorMessageId : null\"\n [ngModel]=\"value\"\n (ngModelChange)=\"onInput($event)\"\n (blur)=\"onBlur()\"\n (keyup.enter)=\"enterPressed.emit()\"\n />\n\n @if (showClear) {\n <button type=\"button\" class=\"geo-input__clear\" aria-label=\"Xóa nội dung\" (click)=\"onClear()\">\n <span nz-icon nzType=\"close-circle\" nzTheme=\"fill\"></span>\n </button>\n }\n\n @if (suffixIcon) {\n <span class=\"geo-input__icon\" nz-icon [nzType]=\"suffixIcon\" nzTheme=\"outline\"></span>\n }\n</div>\n\n@if (error && errorMessage) {\n <p class=\"geo-input__error\" [id]=\"errorMessageId\" role=\"alert\">{{ errorMessage }}</p>\n}\n","import { Component, EventEmitter, Input, Output, ViewEncapsulation } from '@angular/core';\nimport { NzPaginationModule } from 'ng-zorro-antd/pagination';\n\n/**\n * Pagination gọn — wrap `nz-pagination`. Dùng cho panel/map (không kèm size changer như `geo-table-pagination`).\n */\n@Component({\n selector: 'geo-pagination',\n standalone: true,\n imports: [NzPaginationModule],\n templateUrl: './geo-pagination.component.html',\n styleUrl: './geo-pagination.component.scss',\n encapsulation: ViewEncapsulation.None,\n host: { class: 'geo-pagination-host' },\n})\nexport class GeoPaginationComponent {\n @Input() pageIndex = 1;\n @Input() pageSize = 10;\n @Input() total = 0;\n @Input() size: 'default' | 'small' = 'default';\n @Input() simple = false;\n @Input() hideOnSinglePage = false;\n @Input() showSizeChanger = false;\n @Input() pageSizeOptions: number[] = [5, 10, 20, 50];\n\n @Output() pageIndexChange = new EventEmitter<number>();\n @Output() pageSizeChange = new EventEmitter<number>();\n\n onPageIndexChange(page: number): void {\n this.pageIndex = page;\n this.pageIndexChange.emit(page);\n }\n\n onPageSizeChange(size: number): void {\n this.pageSize = size;\n this.pageSizeChange.emit(size);\n }\n}\n","<div class=\"geo-pagination\">\n <nz-pagination\n [nzSize]=\"size\"\n [nzSimple]=\"simple\"\n [nzPageIndex]=\"pageIndex\"\n [nzPageSize]=\"pageSize\"\n [nzTotal]=\"total\"\n [nzHideOnSinglePage]=\"hideOnSinglePage\"\n [nzShowSizeChanger]=\"showSizeChanger\"\n [nzPageSizeOptions]=\"pageSizeOptions\"\n (nzPageIndexChange)=\"onPageIndexChange($event)\"\n (nzPageSizeChange)=\"onPageSizeChange($event)\"\n ></nz-pagination>\n</div>\n","export type GeoTypographyVariant =\n | 'h1'\n | 'h2'\n | 'h3'\n | 'h4'\n | 'subtitle'\n | 'body'\n | 'body-small'\n | 'caption'\n | 'overline'\n | 'tiny';\n\nexport type GeoTypographyColor =\n | 'default'\n | 'secondary'\n | 'primary'\n | 'success'\n | 'warning'\n | 'danger'\n | 'disabled';\n\n/** Semantic HTML element rendered for each variant. */\nexport const GEO_TYPOGRAPHY_TAG: Record<GeoTypographyVariant, string> = {\n h1: 'h1',\n h2: 'h2',\n h3: 'h3',\n h4: 'h4',\n subtitle: 'p',\n body: 'p',\n 'body-small': 'p',\n caption: 'span',\n overline: 'span',\n tiny: 'span',\n};\n\nexport const GEO_TYPOGRAPHY_VARIANTS: {\n variant: GeoTypographyVariant;\n label: string;\n size: string;\n weight: string;\n lineHeight: string;\n usage: string;\n}[] = [\n {\n variant: 'h1',\n label: 'Heading 1',\n size: '28px',\n weight: 'Bold (700)',\n lineHeight: '36px',\n usage: 'Tiêu đề trang chính',\n },\n {\n variant: 'h2',\n label: 'Heading 2',\n size: '24px',\n weight: 'Bold (700)',\n lineHeight: '32px',\n usage: 'Tiêu đề section',\n },\n {\n variant: 'h3',\n label: 'Heading 3',\n size: '20px',\n weight: 'Bold (700)',\n lineHeight: '28px',\n usage: 'Tiêu đề component, section header',\n },\n {\n variant: 'h4',\n label: 'Heading 4',\n size: '16px',\n weight: 'Bold (700)',\n lineHeight: '24px',\n usage: 'Tiêu đề card, form section',\n },\n {\n variant: 'subtitle',\n label: 'Subtitle',\n size: '14px',\n weight: 'Semi Bold (600)',\n lineHeight: '20px',\n usage: 'Label, form label, table header',\n },\n {\n variant: 'body',\n label: 'Body',\n size: '14px',\n weight: 'Regular (400)',\n lineHeight: '20px',\n usage: 'Nội dung chính, input text',\n },\n {\n variant: 'body-small',\n label: 'Body Small',\n size: '13px',\n weight: 'Regular (400)',\n lineHeight: '18px',\n usage: 'Mô tả phụ, toast message',\n },\n {\n variant: 'caption',\n label: 'Caption',\n size: '12px',\n weight: 'Regular (400)',\n lineHeight: '16px',\n usage: 'Helper text, timestamp',\n },\n {\n variant: 'overline',\n label: 'Overline',\n size: '11px',\n weight: 'Semi Bold (600)',\n lineHeight: '16px',\n usage: 'Badge text, status label',\n },\n {\n variant: 'tiny',\n label: 'Tiny',\n size: '10px',\n weight: 'Regular (400)',\n lineHeight: '14px',\n usage: 'Hex code, footnote',\n },\n];\n","import { Component, Input, ViewEncapsulation } from '@angular/core';\nimport {\n GEO_TYPOGRAPHY_TAG,\n GeoTypographyColor,\n GeoTypographyVariant,\n} from './geo-typography.types';\n\n/**\n * Typography based on Ant Design Typography, styled with GEO type scale (Inter).\n *\n * @example\n * ```html\n * <geo-typography variant=\"h1\">Page title</geo-typography>\n * <geo-typography variant=\"body\" color=\"secondary\">Helper</geo-typography>\n * ```\n */\n@Component({\n selector: 'geo-typography',\n standalone: true,\n template: `<ng-content></ng-content>`,\n styleUrl: './geo-typography.component.scss',\n encapsulation: ViewEncapsulation.None,\n host: {\n '[class]': 'hostClassList',\n '[attr.role]': 'headingRole',\n '[attr.aria-level]': 'headingLevel',\n },\n})\nexport class GeoTypographyComponent {\n /** Type scale variant from the design system. */\n @Input() variant: GeoTypographyVariant = 'body';\n /** Semantic text color. */\n @Input() color: GeoTypographyColor = 'default';\n /** Force bold weight (overrides variant weight when true). */\n @Input() strong = false;\n /** Underline text decoration. */\n @Input() underline = false;\n /** Strikethrough text decoration. */\n @Input() delete = false;\n /** Mark / highlight background. */\n @Input() mark = false;\n /** Monospace code appearance. */\n @Input() code = false;\n /** Disabled appearance */\n @Input() disabled = false;\n\n get hostClassList(): string {\n const classes = [\n 'geo-typography',\n 'ant-typography',\n `geo-typography--${this.variant}`,\n `geo-typography--color-${this.color}`,\n ];\n if (this.strong) classes.push('geo-typography--strong');\n if (this.underline) classes.push('geo-typography--underline');\n if (this.delete) classes.push('geo-typography--delete');\n if (this.mark) classes.push('geo-typography--mark');\n if (this.code) classes.push('geo-typography--code');\n if (this.disabled) classes.push('geo-typography--disabled', 'ant-typography-disabled');\n if (this.nzType) classes.push(`ant-typography-${this.nzType}`);\n return classes.join(' ');\n }\n\n get headingRole(): string | null {\n const tag = GEO_TYPOGRAPHY_TAG[this.variant];\n return tag.startsWith('h') ? 'heading' : null;\n }\n\n get headingLevel(): number | null {\n switch (this.variant) {\n case 'h1':\n return 1;\n case 'h2':\n return 2;\n case 'h3':\n return 3;\n case 'h4':\n return 4;\n default:\n return null;\n }\n }\n\n get nzType(): 'secondary' | 'success' | 'warning' | 'danger' | undefined {\n switch (this.color) {\n case 'secondary':\n return 'secondary';\n case 'success':\n return 'success';\n case 'warning':\n return 'warning';\n case 'danger':\n return 'danger';\n default:\n return undefined;\n }\n }\n}\n","import { Component, Input, ViewEncapsulation } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { GeoTypographyComponent } from '../geo-typography/geo-typography.component';\nimport { GeoTypographyVariant } from '../geo-typography/geo-typography.types';\n\n/**\n * Page title GEO — chữ in hoa đậm + gạch chân ngắn màu primary (theo design).\n */\n@Component({\n selector: 'geo-page-title',\n standalone: true,\n imports: [CommonModule, GeoTypographyComponent],\n templateUrl: './geo-page-title.component.html',\n styleUrl: './geo-page-title.component.scss',\n encapsulation: ViewEncapsulation.None,\n host: {\n class: 'geo-page-title-host',\n },\n})\nexport class GeoPageTitleComponent {\n /** Nội dung tiêu đề. */\n @Input() title = '';\n /** Tự chuyển uppercase. Default `true`. */\n @Input() uppercase = true;\n /** Chiều rộng gạch chân (px hoặc CSS size). Default `56px`. */\n @Input() accentWidth: number | string = 56;\n /** Độ dày gạch chân. Default `4px`. */\n @Input() accentHeight: number | string = 4;\n /** Heading level → geo-typography variant. */\n @Input() level: 1 | 2 | 3 | 4 = 3;\n\n get typographyVariant(): GeoTypographyVariant {\n return `h${this.level}` as GeoTypographyVariant;\n }\n\n get accentWidthCss(): string {\n return typeof this.accentWidth === 'number'\n ? `${this.accentWidth}px`\n : this.accentWidth;\n }\n\n get accentHeightCss(): string {\n return typeof this.accentHeight === 'number'\n ? `${this.accentHeight}px`\n : this.accentHeight;\n }\n}\n","<div\n class=\"geo-page-title\"\n [class.geo-page-title--uppercase]=\"uppercase\"\n>\n <geo-typography [variant]=\"typographyVariant\">\n @if (title) {\n {{ title }}\n } @else {\n <ng-content></ng-content>\n }\n </geo-typography>\n <span\n class=\"geo-page-title__accent\"\n aria-hidden=\"true\"\n [style.width]=\"accentWidthCss\"\n [style.height]=\"accentHeightCss\"\n ></span>\n</div>\n","import {\n Component,\n EventEmitter,\n forwardRef,\n Input,\n Output,\n ViewEncapsulation,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { ControlValueAccessor, FormsModule, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { NgZorroAntdModule } from '../../ng-zorro/ng-zorro-antd.module';\nimport {\n GeoRadioButtonAppearance,\n GeoRadioLayout,\n GeoRadioOption,\n GeoRadioSize,\n} from './geo-radio.types';\n\nlet uiRadioErrorId = 0;\n\n@Component({\n selector: 'geo-radio',\n standalone: true,\n imports: [CommonModule, FormsModule, NgZorroAntdModule],\n templateUrl: './geo-radio.component.html',\n styleUrl: './geo-radio.component.scss',\n encapsulation: ViewEncapsulation.None,\n host: {\n class: 'geo-radio-host',\n '[class.geo-radio-host--block]': 'block',\n '[class.geo-radio-host--error]': 'error',\n '[class.geo-radio-host--vertical]': 'layout === \"vertical\"',\n '[class.geo-radio-host--button]': 'buttonStyle',\n },\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => GeoRadioComponent),\n multi: true,\n },\n ],\n})\nexport class GeoRadioComponent implements ControlValueAccessor {\n @Input() options: GeoRadioOption[] = [];\n @Input() label = '';\n @Input() size: GeoRadioSize = 'default';\n @Input() layout: GeoRadioLayout = 'horizontal';\n /** `true` → dùng `nz-radio-button` thay vì `nz-radio` */\n @Input() buttonStyle = false;\n /** Chỉ áp dụng khi `buttonStyle: true` */\n @Input() buttonAppearance: GeoRadioButtonAppearance = 'outline';\n @Input() disabled = false;\n @Input() required = false;\n @Input() error = false;\n @Input() errorMessage = '';\n @Input() block = false;\n\n @Output() valueChange = new EventEmitter<string | number | null>();\n\n readonly errorMessageId = `geo-radio-error-${++uiRadioErrorId}`;\n\n value: string | number | null = null;\n\n private onChange: (value: string | number | null) => void = () => undefined;\n private onTouched: () => void = () => undefined;\n\n onValueChange(value: string | number | null): void {\n this.value = value;\n this.onChange(value);\n this.onTouched();\n this.valueChange.emit(value);\n }\n\n writeValue(value: string | number | null): void {\n this.value = value ?? null;\n }\n\n registerOnChange(fn: (value: string | number | null) => void): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n this.disabled = isDisabled;\n }\n}\n","@if (label) {\n <div class=\"geo-radio__label\">\n <span>{{ label }}</span>\n @if (required) {\n <span class=\"geo-radio__required\" aria-hidden=\"true\">*</span>\n }\n </div>\n}\n\n<nz-radio-group\n class=\"geo-radio\"\n [class.geo-radio--vertical]=\"layout === 'vertical'\"\n [nzSize]=\"size\"\n [nzDisabled]=\"disabled\"\n [nzButtonStyle]=\"buttonAppearance\"\n [ngModel]=\"value\"\n [attr.aria-invalid]=\"error ? 'true' : null\"\n [attr.aria-describedby]=\"error && errorMessage ? errorMessageId : null\"\n (ngModelChange)=\"onValueChange($event)\"\n>\n @for (option of options; track option.value) {\n @if (buttonStyle) {\n <label\n nz-radio-button\n class=\"geo-radio__item\"\n [nzValue]=\"option.value\"\n [nzDisabled]=\"option.disabled ?? false\"\n >\n {{ option.label }}\n </label>\n } @else {\n <label\n nz-radio\n class=\"geo-radio__item\"\n [nzValue]=\"option.value\"\n [nzDisabled]=\"option.disabled ?? false\"\n >\n {{ option.label }}\n </label>\n }\n }\n</nz-radio-group>\n\n@if (error && errorMessage) {\n <p class=\"geo-radio__error\" [id]=\"errorMessageId\" role=\"alert\">{{ errorMessage }}</p>\n}\n","import {\n Component,\n EventEmitter,\n forwardRef,\n Input,\n Output,\n ViewEncapsulation,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { ControlValueAccessor, FormsModule, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { NgZorroAntdModule } from '../../ng-zorro/ng-zorro-antd.module';\nimport { GeoSelectMode, GeoSelectOption, GeoSelectSize } from './geo-select.types';\n\nlet uiSelectErrorId = 0;\n\n@Component({\n selector: 'geo-select',\n standalone: true,\n imports: [CommonModule, FormsModule, NgZorroAntdModule],\n templateUrl: './geo-select.component.html',\n styleUrl: './geo-select.component.scss',\n encapsulation: ViewEncapsulation.None,\n host: {\n class: 'geo-select-host',\n '[class.geo-select-host--default]': 'size === \"default\"',\n '[class.geo-select-host--small]': 'size === \"small\"',\n '[class.geo-select-host--block]': 'block',\n '[class.geo-select-host--error]': 'error',\n '[style.width]': 'hostWidth',\n },\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => GeoSelectComponent),\n multi: true,\n },\n ],\n})\nexport class GeoSelectComponent implements ControlValueAccessor {\n @Input() options: GeoSelectOption[] = [];\n @Input() label = '';\n @Input() placeholder = 'Chọn giá trị';\n @Input() size: GeoSelectSize = 'default';\n @Input() mode: GeoSelectMode = 'default';\n @Input() disabled = false;\n @Input() required = false;\n @Input() error = false;\n @Input() errorMessage = '';\n @Input() allowClear = true;\n @Input() showSearch = false;\n @Input() block = false;\n @Input() width?: number | string;\n\n @Output() valueChange = new EventEmitter<string | number | Array<string | number> | null>();\n\n readonly errorMessageId = `geo-select-error-${++uiSelectErrorId}`;\n\n value: string | number | Array<string | number> | null = null;\n\n private onChange: (value: string | number | Array<string | number> | null) => void = () => undefined;\n private onTouched: () => void = () => undefined;\n\n get hostWidth(): string | null {\n if (this.block || this.width == null) {\n return null;\n }\n\n return typeof this.width === 'number' ? `${this.width}px` : this.width;\n }\n\n get controlClassNames(): Record<string, boolean> {\n return {\n 'geo-select': true,\n [`geo-select--${this.size}`]: true,\n };\n }\n\n onValueChange(value: string | number | Array<string | number> | null): void {\n this.value = value;\n this.onChange(value);\n this.onTouched();\n this.valueChange.emit(value);\n }\n\n writeValue(value: string | number | Array<string | number> | null): void {\n this.value = value;\n }\n\n registerOnChange(fn: (value: string | number | Array<string | number> | null) => void): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n this.disabled = isDisabled;\n }\n}\n","@if (label) {\n <div class=\"geo-select__label\">\n <span>{{ label }}</span>\n @if (required) {\n <span class=\"geo-select__required\" aria-hidden=\"true\">*</span>\n }\n </div>\n}\n\n<nz-select\n [ngClass]=\"controlClassNames\"\n nzDropdownClassName=\"geo-select__dropdown\"\n [nzPlaceHolder]=\"placeholder\"\n [nzDisabled]=\"disabled\"\n [nzAllowClear]=\"allowClear\"\n [nzShowSearch]=\"showSearch\"\n [nzMode]=\"mode\"\n [nzOptionHeightPx]=\"36\"\n [nzOptionOverflowSize]=\"10\"\n [ngModel]=\"value\"\n [attr.aria-invalid]=\"error ? 'true' : null\"\n [attr.aria-describedby]=\"error && errorMessage ? errorMessageId : null\"\n (ngModelChange)=\"onValueChange($event)\"\n>\n @for (option of options; track option.value) {\n <nz-option\n [nzLabel]=\"option.label\"\n [nzValue]=\"option.value\"\n [nzDisabled]=\"option.disabled ?? false\"\n ></nz-option>\n }\n</nz-select>\n\n@if (error && errorMessage) {\n <p class=\"geo-select__error\" [id]=\"errorMessageId\" role=\"alert\">{{ errorMessage }}</p>\n}\n","import { Component, EventEmitter, Input, Output, ViewEncapsulation } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { NzSliderModule } from 'ng-zorro-antd/slider';\n\n/**\n * Slider (opacity / range) — wrap `nz-slider`. Domain dùng `geo-slider`, không import NzSliderModule.\n */\n@Component({\n selector: 'geo-slider',\n standalone: true,\n imports: [FormsModule, NzSliderModule],\n templateUrl: './geo-slider.component.html',\n styleUrl: './geo-slider.component.scss',\n encapsulation: ViewEncapsulation.None,\n host: { class: 'geo-slider-host' },\n})\nexport class GeoSliderComponent {\n @Input() value = 0;\n @Input() min = 0;\n @Input() max = 100;\n @Input() step = 1;\n @Input() disabled = false;\n @Input() tipFormatter?: (value: number) => string;\n\n @Output() valueChange = new EventEmitter<number>();\n\n onChange(next: number): void {\n this.value = next;\n this.valueChange.emit(next);\n }\n}\n","<div class=\"geo-slider\">\n <nz-slider\n [ngModel]=\"value\"\n (ngModelChange)=\"onChange($event)\"\n [nzMin]=\"min\"\n [nzMax]=\"max\"\n [nzStep]=\"step\"\n [nzDisabled]=\"disabled\"\n [nzTipFormatter]=\"tipFormatter\"\n ></nz-slider>\n</div>\n","/**\n * Semantic color variants for status badges (design: Status Badge Colors).\n */\nexport type GeoStatusColor =\n | 'success'\n | 'primary'\n | 'error'\n | 'warning'\n | 'info'\n | 'teal'\n | 'neutral';\n\n/**\n * Preset keys — semantic colors + legacy aliases used by tables/forms.\n */\nexport type GeoStatusPreset =\n | GeoStatusColor\n | 'completed'\n | 'cancelled'\n | 'in_progress'\n | 'adjusting';\n\n/** Map legacy / alias presets → semantic color. */\nexport const GEO_STATUS_COLOR_MAP: Record<GeoStatusPreset, GeoStatusColor> = {\n success: 'success',\n primary: 'primary',\n error: 'error',\n warning: 'warning',\n info: 'info',\n teal: 'teal',\n neutral: 'neutral',\n completed: 'success',\n cancelled: 'error',\n in_progress: 'primary',\n adjusting: 'warning',\n};\n\nexport const GEO_STATUS_LABELS: Record<GeoStatusPreset, string> = {\n success: 'Sẵn sàng',\n primary: 'Đang mượn',\n error: 'Từ chối',\n warning: 'Bản nháp',\n info: 'Đã nộp',\n teal: 'Trả kết quả',\n neutral: 'Chưa xử lý',\n completed: 'Hoàn thành',\n cancelled: 'Hủy bỏ',\n in_progress: 'Đang thực hiện',\n adjusting: 'Đang điều chỉnh',\n};\n\n/** @deprecated Use GEO_STATUS_LABELS */\nexport const UI_STATUS_LABELS = GEO_STATUS_LABELS;\n","import { Component, Input } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport {\n GEO_STATUS_COLOR_MAP,\n GEO_STATUS_LABELS,\n GeoStatusColor,\n GeoStatusPreset,\n} from './geo-status-tag.types';\n\n@Component({\n selector: 'geo-status-tag',\n standalone: true,\n imports: [CommonModule],\n templateUrl: './geo-status-tag.component.html',\n styleUrl: './geo-status-tag.component.scss',\n})\nexport class GeoStatusTagComponent {\n /**\n * Status preset or free-form string.\n * Semantic: success | primary | error | warning | info | teal | neutral\n * Legacy: completed | cancelled | in_progress | adjusting\n */\n @Input() status: GeoStatusPreset | string = 'success';\n /** Override label text. */\n @Input() label?: string;\n /** Show leading status dot (design default). */\n @Input() showDot = true;\n\n get resolvedColor(): GeoStatusColor {\n if (this.status in GEO_STATUS_COLOR_MAP) {\n return GEO_STATUS_COLOR_MAP[this.status as GeoStatusPreset];\n }\n\n const normalized = this.status\n .toLowerCase()\n .replace(/\\s+/g, '_')\n .normalize('NFD')\n .replace(/[\\u0300-\\u036f]/g, '');\n\n if (normalized.includes('san_sang') || normalized.includes('hoan')) return 'success';\n if (normalized.includes('tu_choi') || normalized.includes('huy')) return 'error';\n if (normalized.includes('ban_thao') || normalized.includes('dieu_chinh')) return 'warning';\n if (normalized.includes('da_nop') || normalized.includes('nop')) return 'info';\n if (normalized.includes('tra_ket_qua') || normalized.includes('ket_qua')) return 'teal';\n if (normalized.includes('chua_xu_ly') || normalized.includes('cho')) return 'neutral';\n if (normalized.includes('muon') || normalized.includes('thuc_hien')) return 'primary';\n return 'primary';\n }\n\n get displayLabel(): string {\n if (this.label) return this.label;\n if (this.status in GEO_STATUS_LABELS) {\n return GEO_STATUS_LABELS[this.status as GeoStatusPreset];\n }\n return this.status;\n }\n}\n","<span\n class=\"geo-status-tag\"\n [class]=\"'geo-status-tag geo-status-tag--' + resolvedColor\"\n>\n @if (showDot) {\n <span class=\"geo-status-tag__dot\" aria-hidden=\"true\"></span>\n }\n <span class=\"geo-status-tag__label\">{{ displayLabel }}</span>\n</span>\n","import { CommonModule } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n EventEmitter,\n Input,\n Output,\n ViewEncapsulation,\n} from '@angular/core';\nimport { NzIconModule } from 'ng-zorro-antd/icon';\nimport { GeoStepperOrientation, GeoStepperStep } from './geo-stepper.types';\n\n/**\n * Steps / Stepper GEO — horizontal (mặc định) hoặc vertical.\n *\n * Custom qua `steps`, `activeIndex`, `orientation`, `clickable`.\n * Trong form modal: đặt `<geo-stepper>` vào body (content projection).\n *\n * @example\n * ```html\n * <geo-stepper\n * [steps]=\"[\n * { key: 'a', label: 'Bước 1' },\n * { key: 'b', label: 'Bước 2' }\n * ]\"\n * [activeIndex]=\"0\"\n * orientation=\"horizontal\"\n * (activeIndexChange)=\"onStep($event)\"\n * ></geo-stepper>\n * ```\n */\n@Component({\n selector: 'geo-stepper',\n standalone: true,\n imports: [CommonModule, NzIconModule],\n templateUrl: './geo-stepper.component.html',\n styleUrl: './geo-stepper.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {\n class: 'geo-stepper-host',\n '[class.geo-stepper-host--vertical]': 'orientation === \"vertical\"',\n '[class.geo-stepper-host--horizontal]': 'orientation === \"horizontal\"',\n },\n})\nexport class GeoStepperComponent {\n @Input() steps: GeoStepperStep[] = [];\n @Input() activeIndex = 0;\n /** Mặc định horizontal theo design form modal. */\n @Input() orientation: GeoStepperOrientation = 'horizontal';\n /** Cho phép click để đổi bước. */\n @Input() clickable = true;\n\n @Output() activeIndexChange = new EventEmitter<number>();\n @Output() stepSelect = new EventEmitter<{ index: number; step: GeoStepperStep }>();\n\n trackByIndex(index: number): number {\n return index;\n }\n\n isActive(index: number): boolean {\n return index === this.activeIndex;\n }\n\n isCompleted(index: number): boolean {\n return index < this.activeIndex;\n }\n\n isPending(index: number): boolean {\n return index > this.activeIndex;\n }\n\n onSelect(index: number, step: GeoStepperStep): void {\n if (!this.clickable || step.disabled || index === this.activeIndex) {\n return;\n }\n this.activeIndex = index;\n this.activeIndexChange.emit(index);\n this.stepSelect.emit({ index, step });\n }\n}\n","<nav class=\"geo-stepper\" [attr.aria-label]=\"'Các bước'\">\n <ol class=\"geo-stepper__list\">\n @for (step of steps; track trackByIndex($index); let i = $index; let last = $last) {\n <li\n class=\"geo-stepper__item\"\n [class.geo-stepper__item--active]=\"isActive(i)\"\n [class.geo-stepper__item--completed]=\"isCompleted(i)\"\n [class.geo-stepper__item--pending]=\"isPending(i)\"\n [class.geo-stepper__item--disabled]=\"step.disabled\"\n [class.geo-stepper__item--last]=\"last\"\n >\n <button\n type=\"button\"\n class=\"geo-stepper__button\"\n [disabled]=\"!clickable || step.disabled\"\n [attr.aria-current]=\"isActive(i) ? 'step' : null\"\n (click)=\"onSelect(i, step)\"\n >\n <span class=\"geo-stepper__index\" aria-hidden=\"true\">\n @if (isCompleted(i)) {\n <span nz-icon nzType=\"check\" nzTheme=\"outline\"></span>\n } @else {\n {{ i + 1 }}\n }\n </span>\n <span class=\"geo-stepper__label\">{{ step.label }}</span>\n </button>\n\n @if (!last) {\n <span\n class=\"geo-stepper__connector\"\n [class.geo-stepper__connector--done]=\"isCompleted(i)\"\n aria-hidden=\"true\"\n ></span>\n }\n </li>\n }\n </ol>\n</nav>\n","import { CommonModule } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n EventEmitter,\n Input,\n Output,\n ViewEncapsulation,\n} from '@angular/core';\nimport { NzIconModule } from 'ng-zorro-antd/icon';\nimport { GeoButtonComponent } from '../geo-button/geo-button.component';\nimport { GeoStepperComponent } from '../geo-stepper/geo-stepper.component';\nimport { GeoStepperStep } from '../geo-stepper/geo-stepper.types';\n\n/**\n * Layout form page multi-step: cột trái stepper + cột phải form card.\n *\n * ```html\n * <geo-step-form-layout\n * title=\"Thêm mới ...\"\n * [steps]=\"steps\"\n * [activeIndex]=\"activeIndex\"\n * [showScrollButtons]=\"true\"\n * (cancel)=\"onCancel()\"\n * (save)=\"onSave()\"\n * (next)=\"onNext()\"\n * >\n * <form>...</form>\n * </geo-step-form-layout>\n * ```\n */\n@Component({\n selector: 'geo-step-form-layout',\n standalone: true,\n imports: [CommonModule, NzIconModule, GeoButtonComponent, GeoStepperComponent],\n templateUrl: './geo-step-form-layout.component.html',\n styleUrl: './geo-step-form-layout.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {\n class: 'geo-step-form-layout-host',\n },\n})\nexport class GeoStepFormLayoutComponent {\n @Input() steps: GeoStepperStep[] = [];\n @Input() activeIndex = 0;\n @Input() title = '';\n @Input() clickableSteps = true;\n /** Hiện nút ↑/↓ góc phải card (chuyển bước). Mặc định `true`. */\n @Input() showScrollButtons = true;\n\n @Input() showCancel = true;\n @Input() showPrevious = true;\n @Input() showSave = true;\n @Input() showNext = true;\n @Input() cancelLabel = 'Hủy';\n @Input() previousLabel = 'Trở lại';\n @Input() saveLabel = 'Lưu';\n @Input() nextLabel = 'Tiếp theo';\n @Input() finishLabel = 'Hoàn thành';\n @Input() saveLoading = false;\n @Input() nextLoading = false;\n /** Ẩn footer actions (dùng slot `[footer]` hoặc không cần nút). */\n @Input() hideDefaultFooter = false;\n\n @Output() activeIndexChange = new EventEmitter<number>();\n @Output() stepSelect = new EventEmitter<{ index: number; step: GeoStepperStep }>();\n @Output() cancel = new EventEmitter<void>();\n @Output() previous = new EventEmitter<void>();\n @Output() save = new EventEmitter<void>();\n @Output() next = new EventEmitter<void>();\n\n get isLastStep(): boolean {\n return this.steps.length > 0 && this.activeIndex >= this.steps.length - 1;\n }\n\n get canGoPreviousStep(): boolean {\n return this.findAdjacentStepIndex(-1) != null;\n }\n\n get canGoNextStep(): boolean {\n return this.findAdjacentStepIndex(1) != null;\n }\n\n get resolvedNextLabel(): string {\n return this.isLastStep ? this.finishLabel : this.nextLabel;\n }\n\n onActiveIndexChange(index: number): void {\n this.activeIndex = index;\n this.activeIndexChange.emit(index);\n }\n\n onStepSelect(event: { index: number; step: GeoStepperStep }): void {\n this.stepSelect.emit(event);\n }\n\n onCancel(): void {\n this.cancel.emit();\n }\n\n onPrevious(): void {\n this.previous.emit();\n }\n\n onSave(): void {\n this.save.emit();\n }\n\n onNext(): void {\n this.next.emit();\n }\n\n goAdjacentStep(direction: 'up' | 'down'): void {\n const delta = direction === 'up' ? -1 : 1;\n const nextIndex = this.findAdjacentStepIndex(delta);\n if (nextIndex == null) return;\n\n const step = this.steps[nextIndex];\n this.activeIndex = nextIndex;\n this.activeIndexChange.emit(nextIndex);\n this.stepSelect.emit({ index: nextIndex, step });\n }\n\n private findAdjacentStepIndex(delta: -1 | 1): number | null {\n let index = this.activeIndex + delta;\n while (index >= 0 && index < this.steps.length) {\n if (!this.steps[index]?.disabled) {\n return index;\n }\n index += delta;\n }\n return null;\n }\n}\n","<div class=\"geo-step-form-layout\">\n <aside class=\"geo-step-form-layout__aside\">\n <div class=\"geo-step-form-layout__step-card\">\n <geo-stepper\n [steps]=\"steps\"\n [activeIndex]=\"activeIndex\"\n [clickable]=\"clickableSteps\"\n orientation=\"vertical\"\n (activeIndexChange)=\"onActiveIndexChange($event)\"\n (stepSelect)=\"onStepSelect($event)\"\n ></geo-stepper>\n\n <ng-content select=\"[sidebarExtra]\"></ng-content>\n </div>\n </aside>\n\n <div\n class=\"geo-step-form-layout__main-wrap\"\n [class.geo-step-form-layout__main-wrap--with-fab]=\"showScrollButtons\"\n >\n @if (showScrollButtons) {\n <div class=\"geo-step-form-layout__scroll-fab\">\n <button\n type=\"button\"\n class=\"geo-step-form-layout__fab\"\n aria-label=\"Bước trước\"\n [disabled]=\"!canGoPreviousStep\"\n (click)=\"goAdjacentStep('up')\"\n >\n <span nz-icon nzType=\"arrow-up\" nzTheme=\"outline\"></span>\n </button>\n <button\n type=\"button\"\n class=\"geo-step-form-layout__fab\"\n aria-label=\"Bước sau\"\n [disabled]=\"!canGoNextStep\"\n (click)=\"goAdjacentStep('down')\"\n >\n <span nz-icon nzType=\"arrow-down\" nzTheme=\"outline\"></span>\n </button>\n </div>\n }\n\n <section class=\"geo-step-form-layout__card\">\n @if (title) {\n <h1 class=\"geo-step-form-layout__title\">{{ title }}</h1>\n }\n\n <div class=\"geo-step-form-layout__body\">\n <ng-content></ng-content>\n </div>\n\n @if (!hideDefaultFooter) {\n <footer class=\"geo-step-form-layout__footer\">\n <ng-content select=\"[footer]\"></ng-content>\n\n <div class=\"geo-step-form-layout__footer-default\">\n <div class=\"geo-step-form-layout__footer-start\">\n @if (showCancel) {\n <geo-button appearance=\"secondary\" color=\"brand\" (clicked)=\"onCancel()\">\n {{ cancelLabel }}\n </geo-button>\n }\n </div>\n\n <div class=\"geo-step-form-layout__footer-end\">\n @if (showPrevious && activeIndex > 0) {\n <geo-button\n appearance=\"secondary\"\n color=\"brand\"\n icon=\"left\"\n (clicked)=\"onPrevious()\"\n >\n {{ previousLabel }}\n </geo-button>\n }\n @if (showSave) {\n <geo-button\n appearance=\"secondary\"\n color=\"brand\"\n icon=\"save\"\n [disabled]=\"saveLoading\"\n (clicked)=\"onSave()\"\n >\n {{ saveLabel }}\n </geo-button>\n }\n @if (showNext) {\n <geo-button\n appearance=\"primary\"\n color=\"brand\"\n [icon]=\"isLastStep ? 'check' : 'right'\"\n [disabled]=\"nextLoading\"\n (clicked)=\"onNext()\"\n >\n {{ resolvedNextLabel }}\n </geo-button>\n }\n </div>\n </div>\n </footer>\n } @else {\n <ng-content select=\"[footer]\"></ng-content>\n }\n </section>\n </div>\n</div>\n","import {\n Component,\n ContentChildren,\n Directive,\n EventEmitter,\n Input,\n Output,\n QueryList,\n TemplateRef,\n ViewEncapsulation,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { NgZorroAntdModule } from '../../ng-zorro/ng-zorro-antd.module';\nimport { GeoTabItem, GeoTabsSize, GeoTabsType } from './geo-tabs.types';\n\n@Directive({\n selector: '[uiTab]',\n standalone: true,\n})\nexport class GeoTabDirective {\n @Input('uiTab') key!: string;\n\n constructor(public template: TemplateRef<unknown>) {}\n}\n\n@Component({\n selector: 'geo-tabs',\n standalone: true,\n imports: [CommonModule, NgZorroAntdModule],\n templateUrl: './geo-tabs.component.html',\n styleUrl: './geo-tabs.component.scss',\n encapsulation: ViewEncapsulation.None,\n host: {\n class: 'geo-tabs-host',\n '[class.geo-tabs-host--card]': 'type === \"card\"',\n '[class.geo-tabs-host--line]': 'type === \"line\"',\n },\n})\nexport class GeoTabsComponent {\n @Input() items: GeoTabItem[] = [];\n @Input() type: GeoTabsType = 'line';\n @Input() size: GeoTabsSize = 'default';\n @Input() selectedIndex = 0;\n @Input() selectedKey?: string;\n @Input() centered = false;\n @Input() animated = true;\n\n @Output() selectedIndexChange = new EventEmitter<number>();\n @Output() selectedKeyChange = new EventEmitter<string>();\n @Output() tabChange = new EventEmitter<{ index: number; key: string }>();\n\n @ContentChildren(GeoTabDirective) tabTemplates!: QueryList<GeoTabDirective>;\n\n get resolvedSelectedIndex(): number {\n if (this.selectedKey) {\n const index = this.items.findIndex((item) => item.key === this.selectedKey);\n if (index >= 0) {\n return index;\n }\n }\n\n return this.selectedIndex;\n }\n\n getTemplate(key: string): TemplateRef<unknown> | null {\n return this.tabTemplates?.find((tab) => tab.key === key)?.template ?? null;\n }\n\n onSelectedIndexChange(index: number): void {\n this.selectedIndex = index;\n const key = this.items[index]?.key ?? '';\n this.selectedKey = key || undefined;\n this.selectedIndexChange.emit(index);\n if (key) {\n this.selectedKeyChange.emit(key);\n this.tabChange.emit({ index, key });\n }\n }\n}\n","<nz-tabset\n class=\"geo-tabs\"\n [class.geo-tabs--card]=\"type === 'card'\"\n [class.geo-tabs--line]=\"type === 'line'\"\n [nzType]=\"type\"\n [nzSize]=\"size\"\n [nzSelectedIndex]=\"resolvedSelectedIndex\"\n [nzCentered]=\"centered\"\n [nzAnimated]=\"animated\"\n (nzSelectedIndexChange)=\"onSelectedIndexChange($event)\"\n>\n @for (item of items; track item.key) {\n <nz-tab [nzTitle]=\"item.title\" [nzDisabled]=\"item.disabled ?? false\">\n @if (getTemplate(item.key); as tpl) {\n <ng-container [ngTemplateOutlet]=\"tpl\"></ng-container>\n }\n </nz-tab>\n }\n</nz-tabset>\n","export interface GeoRowAction {\n key: string;\n icon: string;\n label?: string;\n title?: string;\n iconTheme?: 'outline' | 'fill' | 'twotone';\n disabled?: boolean;\n danger?: boolean;\n}\n\nexport const DEFAULT_UI_ROW_ACTIONS: GeoRowAction[] = [\n { key: 'edit', icon: 'edit', title: 'Chỉnh sửa' },\n { key: 'more', icon: 'more', title: 'Thêm thao tác' },\n];\n\n/** ≤2: hiện hết; >2: primary + danger (vd. Sửa + Xóa), còn lại vào menu. */\nexport function pickInlineRowActions(\n actions: GeoRowAction[],\n primaryActionKey = 'edit'\n): GeoRowAction[] {\n const list = actions.filter((action) => !action.disabled);\n if (list.length <= 2) {\n return list;\n }\n\n const primary =\n list.find((action) => action.key === primaryActionKey) ?? list[0];\n const secondary =\n list.find((action) => action.key !== primary.key && action.danger) ??\n list.find((action) => action.key !== primary.key);\n\n return secondary ? [primary, secondary] : [primary];\n}\n\nexport function pickOverflowRowActions(\n actions: GeoRowAction[],\n primaryActionKey = 'edit'\n): GeoRowAction[] {\n const list = actions.filter((action) => !action.disabled);\n if (list.length <= 2) {\n return [];\n }\n\n const inlineKeys = new Set(\n pickInlineRowActions(list, primaryActionKey).map((action) => action.key)\n );\n return list.filter((action) => !inlineKeys.has(action.key));\n}\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { NgZorroAntdModule } from '../../../ng-zorro/ng-zorro-antd.module';\nimport {\n DEFAULT_UI_ROW_ACTIONS,\n pickInlineRowActions,\n pickOverflowRowActions,\n GeoRowAction,\n} from './geo-row-actions.types';\n\n@Component({\n selector: 'geo-row-actions',\n standalone: true,\n imports: [CommonModule, NgZorroAntdModule],\n templateUrl: './geo-row-actions.component.html',\n styleUrl: './geo-row-actions.component.scss',\n})\nexport class GeoRowActionsComponent {\n @Input() actions: GeoRowAction[] | null = null;\n /** Action ưu tiên hiển thị khi có > 2 thao tác (mặc định: edit) */\n @Input() primaryActionKey = 'edit';\n\n @Output() actionClick = new EventEmitter<string>();\n /** @deprecated Dùng `actionClick` với key `edit` */\n @Output() edit = new EventEmitter<void>();\n /** @deprecated Dùng `actionClick` với key `more` */\n @Output() more = new EventEmitter<void>();\n\n get resolvedActions(): GeoRowAction[] {\n return this.actions?.length ? this.actions : DEFAULT_UI_ROW_ACTIONS;\n }\n\n get enabledActions(): GeoRowAction[] {\n return this.resolvedActions.filter((action) => !action.disabled);\n }\n\n get inlineActions(): GeoRowAction[] {\n return pickInlineRowActions(this.enabledActions, this.primaryActionKey);\n }\n\n get overflowActions(): GeoRowAction[] {\n return pickOverflowRowActions(this.enabledActions, this.primaryActionKey);\n }\n\n get hasOverflow(): boolean {\n return this.overflowActions.length > 0;\n }\n\n onActionClick(event: Event, action: GeoRowAction): void {\n if (action.disabled) {\n return;\n }\n\n event.stopPropagation();\n this.actionClick.emit(action.key);\n\n if (action.key === 'edit') {\n this.edit.emit();\n }\n\n if (action.key === 'more') {\n this.more.emit();\n }\n }\n}\n","<div class=\"geo-row-actions\">\n @for (action of inlineActions; track action.key) {\n <button\n type=\"button\"\n class=\"geo-row-actions__btn\"\n [class.geo-row-actions__btn--danger]=\"action.danger\"\n [nz-tooltip]=\"action.title ?? action.label ?? ''\"\n [disabled]=\"action.disabled\"\n [attr.aria-label]=\"action.label ?? action.title ?? action.key\"\n (click)=\"onActionClick($event, action)\"\n >\n <span nz-icon [nzType]=\"action.icon\" [nzTheme]=\"action.iconTheme ?? 'outline'\"></span>\n </button>\n }\n\n @if (hasOverflow) {\n <button\n type=\"button\"\n class=\"geo-row-actions__btn\"\n nz-dropdown\n [nzDropdownMenu]=\"overflowMenu\"\n nzTrigger=\"click\"\n nzPlacement=\"bottomRight\"\n nz-tooltip=\"Thêm thao tác\"\n aria-label=\"Thêm thao tác\"\n (click)=\"$event.stopPropagation()\"\n >\n <span nz-icon nzType=\"more\" nzTheme=\"outline\"></span>\n </button>\n\n <nz-dropdown-menu #overflowMenu=\"nzDropdownMenu\">\n <div class=\"geo-row-actions__panel\" (click)=\"$event.stopPropagation()\">\n @for (action of overflowActions; track action.key) {\n <button\n type=\"button\"\n class=\"geo-row-actions__panel-item\"\n [class.geo-row-actions__panel-item--danger]=\"action.danger\"\n [attr.aria-label]=\"action.label ?? action.title ?? action.key\"\n (click)=\"onActionClick($event, action)\"\n >\n <span\n class=\"geo-row-actions__panel-icon\"\n nz-icon\n [nzType]=\"action.icon\"\n [nzTheme]=\"action.iconTheme ?? 'outline'\"\n ></span>\n <span class=\"geo-row-actions__panel-label\">\n {{ action.label ?? action.title ?? action.key }}\n </span>\n </button>\n }\n </div>\n </nz-dropdown-menu>\n }\n</div>\n","import type { GeoRowAction } from './geo-row-actions/geo-row-actions.types';\n\nexport interface GeoTableFilter {\n text: string;\n value: string;\n}\n\nexport type GeoTableCellRender = 'text' | 'index' | 'status' | 'actions';\n\n/** Quy tắc căn lề dữ liệu: text → trái, number → phải, date → giữa */\nexport type GeoTableColumnDataType = 'text' | 'number' | 'date';\n\nexport interface GeoTableColumn {\n key: string;\n title: string;\n width?: string;\n /** Căn lề ô dữ liệu — nếu không set sẽ suy ra từ `dataType` / `renderAs` */\n align?: 'left' | 'center' | 'right';\n /** Kiểu dữ liệu để áp dụng quy tắc căn lề mặc định */\n dataType?: GeoTableColumnDataType;\n sortable?: boolean;\n sortOrder?: 'ascend' | 'descend' | null;\n sortFn?: (a: Record<string, unknown>, b: Record<string, unknown>) => number;\n filters?: GeoTableFilter[];\n filterMultiple?: boolean;\n fixed?: 'left' | 'right';\n ellipsis?: boolean;\n wrap?: boolean;\n renderAs?: GeoTableCellRender;\n statusLabelKey?: string;\n actions?: GeoRowAction[];\n /**\n * Resolve actions theo từng dòng (vd. ẩn/hiện theo trạng thái).\n * Nếu có thì ưu tiên hơn `actions`.\n */\n resolveActions?: (row: Record<string, unknown>) => GeoRowAction[];\n /** Action key ưu tiên hiển thị khi có > 2 thao tác (mặc định: edit) */\n primaryActionKey?: string;\n visible?: boolean;\n /**\n * Mobile card: dùng cột này làm tiêu đề card.\n * Nếu không cột nào set, lấy cột dữ liệu đầu tiên (không phải index/actions).\n */\n mobileTitle?: boolean;\n /** Mobile card: ẩn cột khỏi body card. */\n mobileHidden?: boolean;\n}\n\n/** Breakpoint chuyển bảng → danh sách card (khớp layout mobile). */\nexport const UI_TABLE_MOBILE_BREAKPOINT = 767.98;\n\nexport type GeoTablePaginationPosition = 'top' | 'bottom' | 'both';\n\nexport const DEFAULT_UI_TABLE_PAGE_SIZE_OPTIONS = [10, 20, 50, 100];\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport { NgZorroAntdModule } from '../../../ng-zorro/ng-zorro-antd.module';\nimport { GeoSelectOption } from '../../geo-select/geo-select.types';\nimport { GeoSelectComponent } from '../../geo-select/geo-select.component';\nimport { DEFAULT_UI_TABLE_PAGE_SIZE_OPTIONS } from '../geo-table.types';\n\nexport type GeoTablePaginationPageItem = number | 'ellipsis';\n\n@Component({\n selector: 'geo-table-pagination',\n standalone: true,\n imports: [CommonModule, FormsModule, NgZorroAntdModule, GeoSelectComponent],\n templateUrl: './geo-table-pagination.component.html',\n styleUrl: './geo-table-pagination.component.scss',\n})\nexport class GeoTablePaginationComponent {\n @Input() pageIndex = 1;\n @Input() pageSize = 10;\n @Input() total = 0;\n @Input() pageSizeOptions: number[] = DEFAULT_UI_TABLE_PAGE_SIZE_OPTIONS;\n @Input() showSizeChanger = true;\n @Input() hideOnSinglePage = false;\n @Input() showTotalRange = true;\n @Input() sizeLabel = 'Hiển thị';\n\n @Output() pageIndexChange = new EventEmitter<number>();\n @Output() pageSizeChange = new EventEmitter<number>();\n\n get rangeStart(): number {\n if (this.total === 0) {\n return 0;\n }\n\n return (this.pageIndex - 1) * this.pageSize + 1;\n }\n\n get rangeEnd(): number {\n if (this.total === 0) {\n return 0;\n }\n\n return Math.min(this.pageIndex * this.pageSize, this.total);\n }\n\n get totalPages(): number {\n return Math.max(1, Math.ceil(this.total / this.pageSize));\n }\n\n get sizeOptions(): GeoSelectOption<number>[] {\n return this.pageSizeOptions.map((size) => ({\n label: size.toString(),\n value: size,\n }));\n }\n\n get visible(): boolean {\n if (this.hideOnSinglePage && this.total <= this.pageSize) {\n return false;\n }\n\n return this.total > 0;\n }\n\n get pages(): GeoTablePaginationPageItem[] {\n return this.buildPageList(this.pageIndex, this.totalPages);\n }\n\n get isFirstPage(): boolean {\n return this.pageIndex <= 1;\n }\n\n get isLastPage(): boolean {\n return this.pageIndex >= this.totalPages;\n }\n\n onPageSizeChange(value: string | number | Array<string | number> | null): void {\n if (typeof value === 'number') {\n this.pageSizeChange.emit(value);\n }\n }\n\n goToFirst(): void {\n this.goToPage(1);\n }\n\n goToPrev(): void {\n this.goToPage(this.pageIndex - 1);\n }\n\n goToNext(): void {\n this.goToPage(this.pageIndex + 1);\n }\n\n goToLast(): void {\n this.goToPage(this.totalPages);\n }\n\n goToPage(page: number): void {\n const next = Math.min(Math.max(page, 1), this.totalPages);\n if (next !== this.pageIndex) {\n this.pageIndexChange.emit(next);\n }\n }\n\n private buildPageList(current: number, total: number): GeoTablePaginationPageItem[] {\n if (total <= 5) {\n return Array.from({ length: total }, (_, index) => index + 1);\n }\n\n if (current <= 3) {\n return [1, 2, 3, 'ellipsis', total];\n }\n\n if (current >= total - 2) {\n return [1, 'ellipsis', total - 2, total - 1, total];\n }\n\n return [1, 'ellipsis', current - 1, current, current + 1, 'ellipsis', total];\n }\n}\n","@if (visible) {\n <div class=\"geo-table-pagination\">\n <div class=\"geo-table-pagination__left\">\n @if (showTotalRange) {\n <p class=\"geo-table-pagination__total\">\n <strong>{{ rangeStart }}-{{ rangeEnd }}</strong> trên tổng <strong>{{ total }}</strong>\n </p>\n }\n\n @if (showSizeChanger) {\n <div class=\"geo-table-pagination__size\">\n <span class=\"geo-table-pagination__size-label\">{{ sizeLabel }}</span>\n <geo-select\n class=\"geo-table-pagination__size-select\"\n size=\"small\"\n [options]=\"sizeOptions\"\n [allowClear]=\"false\"\n [ngModel]=\"pageSize\"\n (valueChange)=\"onPageSizeChange($event)\"\n ></geo-select>\n </div>\n }\n </div>\n\n <div class=\"geo-table-pagination__nav\" role=\"navigation\" aria-label=\"Phân trang\">\n <button\n type=\"button\"\n class=\"geo-table-pagination__btn\"\n title=\"Trang đầu\"\n [disabled]=\"isFirstPage\"\n (click)=\"goToFirst()\"\n >\n <span aria-hidden=\"true\">&laquo;</span>\n </button>\n\n <button\n type=\"button\"\n class=\"geo-table-pagination__btn\"\n title=\"Trang trước\"\n [disabled]=\"isFirstPage\"\n (click)=\"goToPrev()\"\n >\n <span aria-hidden=\"true\">&lsaquo;</span>\n </button>\n\n @for (page of pages; track $index) {\n @if (page === 'ellipsis') {\n <span class=\"geo-table-pagination__ellipsis\" aria-hidden=\"true\">...</span>\n } @else {\n <button\n type=\"button\"\n class=\"geo-table-pagination__btn geo-table-pagination__btn--page\"\n [class.geo-table-pagination__btn--active]=\"page === pageIndex\"\n [attr.aria-current]=\"page === pageIndex ? 'page' : null\"\n [attr.aria-label]=\"'Trang ' + page\"\n (click)=\"goToPage(page)\"\n >\n {{ page }}\n </button>\n }\n }\n\n <button\n type=\"button\"\n class=\"geo-table-pagination__btn\"\n title=\"Trang kế\"\n [disabled]=\"isLastPage\"\n (click)=\"goToNext()\"\n >\n <span aria-hidden=\"true\">&rsaquo;</span>\n </button>\n\n <button\n type=\"button\"\n class=\"geo-table-pagination__btn\"\n title=\"Trang cuối\"\n [disabled]=\"isLastPage\"\n (click)=\"goToLast()\"\n >\n <span aria-hidden=\"true\">&raquo;</span>\n </button>\n </div>\n </div>\n}\n","import { Component, EventEmitter, Input, OnChanges, Output, SimpleChanges } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { NgZorroAntdModule } from '../../ng-zorro/ng-zorro-antd.module';\nimport { NzTableQueryParams, NzTableSize } from 'ng-zorro-antd/table';\nimport { GeoRowActionsComponent } from './geo-row-actions/geo-row-actions.component';\nimport {\n pickInlineRowActions,\n pickOverflowRowActions,\n type GeoRowAction,\n} from './geo-row-actions/geo-row-actions.types';\nimport { GeoStatusTagComponent } from '../geo-status-tag/geo-status-tag.component';\nimport { GeoCheckboxComponent } from '../geo-checkbox/geo-checkbox.component';\nimport { GeoTablePaginationComponent } from './geo-table-pagination/geo-table-pagination.component';\nimport {\n DEFAULT_UI_TABLE_PAGE_SIZE_OPTIONS,\n GeoTableColumn,\n GeoTablePaginationPosition,\n} from './geo-table.types';\n\n@Component({\n selector: 'geo-table',\n standalone: true,\n imports: [\n CommonModule,\n NgZorroAntdModule,\n GeoStatusTagComponent,\n GeoRowActionsComponent,\n GeoCheckboxComponent,\n GeoTablePaginationComponent,\n ],\n templateUrl: './geo-table.component.html',\n styleUrl: './geo-table.component.scss',\n})\nexport class GeoTableComponent implements OnChanges {\n @Input() columns: GeoTableColumn[] = [];\n @Input() data: Record<string, unknown>[] = [];\n @Input() loading = false;\n @Input() bordered = true;\n @Input() outerBordered = false;\n @Input() size: NzTableSize = 'middle';\n @Input() striped = true;\n @Input() clickable = true;\n @Input() tableLayout: 'auto' | 'fixed' = 'auto';\n\n @Input() showPagination = true;\n @Input() frontPagination = true;\n @Input() pageIndex = 1;\n @Input() pageSize = 10;\n @Input() total?: number;\n @Input() pageSizeOptions: number[] = DEFAULT_UI_TABLE_PAGE_SIZE_OPTIONS;\n @Input() showSizeChanger = false;\n @Input() showQuickJumper = false;\n @Input() hideOnSinglePage = false;\n @Input() simplePagination = false;\n @Input() paginationPosition: GeoTablePaginationPosition = 'bottom';\n\n @Input() scroll: { x?: string; y?: string } = {};\n @Input() scrollY?: string;\n /**\n * Tự bật scroll ngang theo tổng width cột.\n * Khi có cột `fixed`, scroll.x luôn được tính (bắt buộc với nz-table fixed).\n */\n @Input() autoScroll = false;\n\n @Input() tableTitle?: string;\n @Input() footer?: string;\n @Input() emptyText = 'Không có dữ liệu';\n\n @Input() showTotalRange = false;\n\n @Input() selectable = false;\n @Input() rowKey = 'id';\n @Input() selectedKeys: string[] = [];\n\n /**\n * Mobile card: key cột làm tiêu đề.\n * Ưu tiên hơn `column.mobileTitle`; nếu không set thì lấy cột dữ liệu đầu tiên.\n */\n @Input() mobileTitleKey?: string;\n /** Bật/tắt chuyển card trên mobile (mặc định bật). */\n @Input() mobileCardView = true;\n\n @Output() rowClick = new EventEmitter<Record<string, unknown>>();\n @Output() rowEdit = new EventEmitter<Record<string, unknown>>();\n @Output() rowMore = new EventEmitter<Record<string, unknown>>();\n @Output() rowAction = new EventEmitter<{ row: Record<string, unknown>; action: string }>();\n @Output() pageIndexChange = new EventEmitter<number>();\n @Output() pageSizeChange = new EventEmitter<number>();\n @Output() queryParams = new EventEmitter<NzTableQueryParams>();\n @Output() currentPageDataChange = new EventEmitter<readonly Record<string, unknown>[]>();\n @Output() selectedKeysChange = new EventEmitter<string[]>();\n @Output() selectionChange = new EventEmitter<Record<string, unknown>[]>();\n\n allChecked = false;\n indeterminate = false;\n\n private sortFnCache = new Map<string, (a: Record<string, unknown>, b: Record<string, unknown>) => number>();\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['columns']) {\n this.sortFnCache.clear();\n }\n }\n\n get visibleColumns(): GeoTableColumn[] {\n return this.columns.filter((col) => col.visible !== false);\n }\n\n get computedTotal(): number {\n return this.total ?? this.data.length;\n }\n\n get paginatedData(): Record<string, unknown>[] {\n if (!this.showPagination || !this.frontPagination) {\n return this.data;\n }\n\n const start = (this.pageIndex - 1) * this.pageSize;\n return this.data.slice(start, start + this.pageSize);\n }\n\n get shouldShowPagination(): boolean {\n return this.showPagination;\n }\n\n get hasFixedColumns(): boolean {\n return this.visibleColumns.some((col) => col.fixed === 'left' || col.fixed === 'right');\n }\n\n /** Có cột fixed → table-layout fixed để header/body cùng width cột. */\n get computedTableLayout(): 'auto' | 'fixed' {\n return this.hasFixedColumns ? 'fixed' : this.tableLayout;\n }\n\n /** Đồng bộ width cột khi scrollY tách header/body thành 2 bảng. */\n get widthConfig(): Array<string | null> {\n const widths = this.visibleColumns.map((col) => col.width ?? null);\n return this.selectable ? ['48px', ...widths] : widths;\n }\n\n get computedScroll(): { x?: string; y?: string } {\n const scroll = { ...this.scroll };\n\n if (this.scrollY) {\n scroll.y = this.scrollY;\n }\n\n // nz-table cần scroll.x để fixed left/right hoạt động.\n if (!scroll.x && (this.autoScroll || this.hasFixedColumns)) {\n const minWidth = this.computeMinTableWidth();\n if (minWidth > 0) {\n scroll.x = `${minWidth}px`;\n }\n }\n\n return scroll;\n }\n\n get mobileTitleColumn(): GeoTableColumn | null {\n if (this.mobileTitleKey) {\n return this.visibleColumns.find((col) => col.key === this.mobileTitleKey) ?? null;\n }\n\n const marked = this.visibleColumns.find((col) => col.mobileTitle);\n if (marked) return marked;\n\n return (\n this.visibleColumns.find(\n (col) =>\n col.renderAs !== 'index' &&\n col.renderAs !== 'actions' &&\n !col.mobileHidden\n ) ?? null\n );\n }\n\n get mobileBodyColumns(): GeoTableColumn[] {\n const titleKey = this.mobileTitleColumn?.key;\n return this.visibleColumns.filter(\n (col) =>\n col.renderAs !== 'actions' &&\n col.renderAs !== 'index' &&\n !col.mobileHidden &&\n col.key !== titleKey\n );\n }\n\n get mobileActionsColumn(): GeoTableColumn | null {\n return this.visibleColumns.find((col) => col.renderAs === 'actions') ?? null;\n }\n\n getRowActions(col: GeoTableColumn, row: Record<string, unknown>): GeoRowAction[] {\n if (col.resolveActions) {\n return col.resolveActions(row) ?? [];\n }\n return col.actions ?? [];\n }\n\n getMobileHeaderActions(\n col: GeoTableColumn,\n row: Record<string, unknown>\n ): GeoRowAction[] {\n return pickInlineRowActions(\n this.getRowActions(col, row),\n col.primaryActionKey ?? 'edit'\n );\n }\n\n getMobileFooterActions(\n col: GeoTableColumn,\n row: Record<string, unknown>\n ): GeoRowAction[] {\n return pickOverflowRowActions(\n this.getRowActions(col, row),\n col.primaryActionKey ?? 'edit'\n );\n }\n\n hasFilters(col: GeoTableColumn): boolean {\n return (col.filters?.length ?? 0) > 0;\n }\n\n getSortFn(col: GeoTableColumn): (a: Record<string, unknown>, b: Record<string, unknown>) => number {\n if (col.sortFn) {\n return col.sortFn;\n }\n\n const cached = this.sortFnCache.get(col.key);\n if (cached) {\n return cached;\n }\n\n const fn = (a: Record<string, unknown>, b: Record<string, unknown>) => {\n const av = a[col.key];\n const bv = b[col.key];\n if (av == null || bv == null) return 0;\n return String(av).localeCompare(String(bv), 'vi');\n };\n\n this.sortFnCache.set(col.key, fn);\n return fn;\n }\n\n getCellValue(row: Record<string, unknown>, key: string): string {\n const value = row[key];\n return value == null ? '' : String(value);\n }\n\n /** Tiêu đề cột luôn căn giữa theo quy tắc accessibility */\n getHeaderAlign(_col: GeoTableColumn): 'left' | 'center' | 'right' {\n return 'center';\n }\n\n /**\n * Căn lề ô dữ liệu:\n * - text → trái, number → phải, date → giữa\n * - index / status / actions → giữa\n */\n getCellAlign(col: GeoTableColumn): 'left' | 'center' | 'right' {\n if (col.align) {\n return col.align;\n }\n\n if (col.renderAs === 'index' || col.renderAs === 'status' || col.renderAs === 'actions') {\n return 'center';\n }\n\n if (col.dataType === 'number') {\n return 'right';\n }\n\n if (col.dataType === 'date') {\n return 'center';\n }\n\n return 'left';\n }\n\n getRowIndex(rowIndex: number): number {\n return (this.pageIndex - 1) * this.pageSize + rowIndex + 1;\n }\n\n trackRow(index: number, row: Record<string, unknown>): string {\n const key = row[this.rowKey];\n return key != null ? String(key) : String(index);\n }\n\n isRowSelected(row: Record<string, unknown>): boolean {\n const key = String(row[this.rowKey] ?? '');\n return this.selectedKeys.includes(key);\n }\n\n onAllChecked(checked: boolean): void {\n const rows = this.selectionRows;\n const keys = rows.map((row) => String(row[this.rowKey] ?? ''));\n\n if (checked) {\n this.selectedKeys = [...new Set([...this.selectedKeys, ...keys])];\n } else {\n this.selectedKeys = this.selectedKeys.filter((key) => !keys.includes(key));\n }\n\n this.refreshSelectionState();\n this.emitSelection();\n }\n\n onItemChecked(row: Record<string, unknown>, checked: boolean): void {\n const key = String(row[this.rowKey] ?? '');\n this.selectedKeys = checked\n ? [...this.selectedKeys, key]\n : this.selectedKeys.filter((k) => k !== key);\n this.refreshSelectionState();\n this.emitSelection();\n }\n\n onPageIndexChange(index: number): void {\n this.pageIndex = index;\n this.refreshSelectionState();\n this.pageIndexChange.emit(index);\n }\n\n onPageSizeChange(size: number): void {\n this.pageSize = size;\n this.pageIndex = 1;\n this.refreshSelectionState();\n this.pageSizeChange.emit(size);\n }\n\n onRowActionClick(row: Record<string, unknown>, actionKey: string): void {\n this.rowAction.emit({ row, action: actionKey });\n\n if (actionKey === 'edit') {\n this.rowEdit.emit(row);\n }\n\n if (actionKey === 'more') {\n this.rowMore.emit(row);\n }\n }\n\n onMobileCardClick(row: Record<string, unknown>, event: Event): void {\n if (!this.clickable) return;\n const target = event.target as HTMLElement | null;\n if (target?.closest('button, a, .geo-row-actions, .geo-checkbox, .geo-table-card__footer')) {\n return;\n }\n this.rowClick.emit(row);\n }\n\n private computeMinTableWidth(): number {\n let total = this.selectable ? 48 : 0;\n\n for (const col of this.visibleColumns) {\n const width = col.width;\n if (width?.endsWith('px')) {\n total += Number.parseInt(width, 10);\n } else {\n total += 160;\n }\n }\n\n return total;\n }\n\n private refreshSelectionState(): void {\n const rows = this.selectionRows;\n const selectedOnPage = rows.filter((row) =>\n this.selectedKeys.includes(String(row[this.rowKey] ?? ''))\n ).length;\n\n this.allChecked = selectedOnPage > 0 && selectedOnPage === rows.length;\n this.indeterminate = selectedOnPage > 0 && selectedOnPage < rows.length;\n this.selectedKeysChange.emit([...this.selectedKeys]);\n }\n\n private get selectionRows(): Record<string, unknown>[] {\n return this.showPagination && this.frontPagination ? this.paginatedData : this.data;\n }\n\n private emitSelection(): void {\n const selected = this.data.filter((row) =>\n this.selectedKeys.includes(String(row[this.rowKey] ?? ''))\n );\n this.selectionChange.emit(selected);\n }\n}\n","<div\n class=\"geo-table\"\n [class.geo-table--striped]=\"striped\"\n [class.geo-table--mobile-cards]=\"mobileCardView\"\n>\n @if (shouldShowPagination && (paginationPosition === 'top' || paginationPosition === 'both')) {\n <geo-table-pagination\n [pageIndex]=\"pageIndex\"\n [pageSize]=\"pageSize\"\n [total]=\"computedTotal\"\n [pageSizeOptions]=\"pageSizeOptions\"\n [showSizeChanger]=\"showSizeChanger\"\n [hideOnSinglePage]=\"hideOnSinglePage\"\n [showTotalRange]=\"showTotalRange\"\n (pageIndexChange)=\"onPageIndexChange($event)\"\n (pageSizeChange)=\"onPageSizeChange($event)\"\n ></geo-table-pagination>\n }\n\n <div class=\"geo-table__desktop\">\n <nz-table\n #uiTable\n [nzData]=\"paginatedData\"\n [nzLoading]=\"loading\"\n [nzBordered]=\"bordered\"\n [nzOuterBordered]=\"outerBordered\"\n [nzSize]=\"size\"\n [nzTitle]=\"tableTitle ?? null\"\n [nzFooter]=\"footer ?? null\"\n [nzShowPagination]=\"false\"\n [nzFrontPagination]=\"false\"\n [nzScroll]=\"computedScroll\"\n [nzNoResult]=\"emptyText\"\n [nzTableLayout]=\"computedTableLayout\"\n [nzWidthConfig]=\"widthConfig\"\n (nzQueryParams)=\"queryParams.emit($event)\"\n (nzCurrentPageDataChange)=\"currentPageDataChange.emit($event)\"\n >\n <thead>\n <tr>\n @if (selectable) {\n <th\n class=\"geo-table__checkbox-cell\"\n nzWidth=\"48px\"\n [nzLeft]=\"hasFixedColumns\"\n >\n <geo-checkbox\n [checked]=\"allChecked\"\n [indeterminate]=\"indeterminate\"\n (checkedChange)=\"onAllChecked($event)\"\n ></geo-checkbox>\n </th>\n }\n @for (col of visibleColumns; track col.key) {\n <th\n [nzWidth]=\"col.width ?? null\"\n [nzAlign]=\"getHeaderAlign(col)\"\n [nzColumnKey]=\"col.key\"\n [nzShowSort]=\"col.sortable ?? false\"\n [nzSortOrder]=\"col.sortOrder ?? null\"\n [nzSortFn]=\"col.sortable ? getSortFn(col) : null\"\n [nzShowFilter]=\"hasFilters(col)\"\n [nzFilters]=\"col.filters ?? []\"\n [nzFilterMultiple]=\"col.filterMultiple ?? true\"\n [nzLeft]=\"col.fixed === 'left'\"\n [nzRight]=\"col.fixed === 'right'\"\n >{{ col.title }}</th>\n }\n </tr>\n </thead>\n <tbody>\n @for (row of uiTable.data; track trackRow($index, row); let rowIndex = $index) {\n <tr\n class=\"geo-table__row\"\n [class.geo-table__row--selected]=\"isRowSelected(row)\"\n [class.geo-table__row--clickable]=\"clickable\"\n (click)=\"clickable && rowClick.emit(row)\"\n >\n @if (selectable) {\n <td\n class=\"geo-table__checkbox-cell\"\n [nzLeft]=\"hasFixedColumns\"\n (click)=\"$event.stopPropagation()\"\n >\n <geo-checkbox\n [checked]=\"isRowSelected(row)\"\n (checkedChange)=\"onItemChecked(row, $event)\"\n ></geo-checkbox>\n </td>\n }\n @for (col of visibleColumns; track col.key) {\n <td\n [nzAlign]=\"getCellAlign(col)\"\n [nzEllipsis]=\"col.wrap ? false : (col.ellipsis ?? false)\"\n [class.geo-table__cell--wrap]=\"col.wrap\"\n [nzLeft]=\"col.fixed === 'left'\"\n [nzRight]=\"col.fixed === 'right'\"\n [style.width]=\"col.width || null\"\n [style.minWidth]=\"col.width || null\"\n [style.maxWidth]=\"col.fixed ? (col.width || null) : null\"\n >\n @if (col.renderAs === 'index') {\n {{ getRowIndex(rowIndex) }}\n } @else if (col.renderAs === 'status') {\n <geo-status-tag\n [status]=\"getCellValue(row, col.key)\"\n [label]=\"col.statusLabelKey ? getCellValue(row, col.statusLabelKey) || undefined : undefined\"\n ></geo-status-tag>\n } @else if (col.renderAs === 'actions') {\n <geo-row-actions\n [actions]=\"getRowActions(col, row)\"\n [primaryActionKey]=\"col.primaryActionKey ?? 'edit'\"\n (actionClick)=\"onRowActionClick(row, $event)\"\n ></geo-row-actions>\n } @else {\n {{ getCellValue(row, col.key) }}\n }\n </td>\n }\n </tr>\n }\n </tbody>\n </nz-table>\n </div>\n\n @if (mobileCardView) {\n <div\n class=\"geo-table__mobile\"\n [class.geo-table__mobile--loading]=\"loading\"\n [attr.aria-busy]=\"loading ? 'true' : null\"\n >\n @if (selectable && paginatedData.length) {\n <div class=\"geo-table-card__select-all\">\n <geo-checkbox\n [checked]=\"allChecked\"\n [indeterminate]=\"indeterminate\"\n (checkedChange)=\"onAllChecked($event)\"\n ></geo-checkbox>\n <span>Chọn tất cả trên trang</span>\n </div>\n }\n\n @if (!paginatedData.length && !loading) {\n <div class=\"geo-table__mobile-empty\">{{ emptyText }}</div>\n }\n\n @for (row of paginatedData; track trackRow($index, row); let rowIndex = $index) {\n <article\n class=\"geo-table-card\"\n [class.geo-table-card--selected]=\"isRowSelected(row)\"\n [class.geo-table-card--clickable]=\"clickable\"\n (click)=\"onMobileCardClick(row, $event)\"\n >\n <header class=\"geo-table-card__header\">\n <div class=\"geo-table-card__title-wrap\">\n @if (selectable) {\n <geo-checkbox\n class=\"geo-table-card__checkbox\"\n [checked]=\"isRowSelected(row)\"\n (checkedChange)=\"onItemChecked(row, $event)\"\n (click)=\"$event.stopPropagation()\"\n ></geo-checkbox>\n }\n @if (mobileTitleColumn; as titleCol) {\n <h3 class=\"geo-table-card__title\">\n <span class=\"geo-table-card__title-label\">{{ titleCol.title }}</span>\n <span class=\"geo-table-card__title-sep\">:</span>\n <span class=\"geo-table-card__title-value\">\n @if (titleCol.renderAs === 'index') {\n {{ getRowIndex(rowIndex) }}\n } @else {\n {{ getCellValue(row, titleCol.key) }}\n }\n </span>\n </h3>\n }\n </div>\n\n @if (mobileActionsColumn; as actionsCol) {\n <div class=\"geo-table-card__actions\" (click)=\"$event.stopPropagation()\">\n <geo-row-actions\n [actions]=\"getMobileHeaderActions(actionsCol, row)\"\n [primaryActionKey]=\"actionsCol.primaryActionKey ?? 'edit'\"\n (actionClick)=\"onRowActionClick(row, $event)\"\n ></geo-row-actions>\n </div>\n }\n </header>\n\n @if (mobileBodyColumns.length) {\n <div class=\"geo-table-card__body\">\n @for (col of mobileBodyColumns; track col.key) {\n <div class=\"geo-table-card__row\">\n <span class=\"geo-table-card__label\">{{ col.title }}</span>\n <span class=\"geo-table-card__sep\">:</span>\n <span class=\"geo-table-card__value\">\n @if (col.renderAs === 'index') {\n {{ getRowIndex(rowIndex) }}\n } @else if (col.renderAs === 'status') {\n <geo-status-tag\n [status]=\"getCellValue(row, col.key)\"\n [label]=\"col.statusLabelKey ? getCellValue(row, col.statusLabelKey) || undefined : undefined\"\n ></geo-status-tag>\n } @else {\n {{ getCellValue(row, col.key) }}\n }\n </span>\n </div>\n }\n </div>\n }\n\n @if (mobileActionsColumn; as actionsCol) {\n @if (getMobileFooterActions(actionsCol, row); as footerActions) {\n @if (footerActions.length) {\n <footer class=\"geo-table-card__footer\" (click)=\"$event.stopPropagation()\">\n @for (action of footerActions; track action.key) {\n <button\n type=\"button\"\n class=\"geo-table-card__footer-btn\"\n [class.geo-table-card__footer-btn--danger]=\"action.danger\"\n [disabled]=\"action.disabled\"\n (click)=\"onRowActionClick(row, action.key)\"\n >\n {{ action.label ?? action.title ?? action.key }}\n </button>\n }\n </footer>\n }\n }\n }\n </article>\n }\n </div>\n }\n\n @if (shouldShowPagination && (paginationPosition === 'bottom' || paginationPosition === 'both')) {\n <geo-table-pagination\n [pageIndex]=\"pageIndex\"\n [pageSize]=\"pageSize\"\n [total]=\"computedTotal\"\n [pageSizeOptions]=\"pageSizeOptions\"\n [showSizeChanger]=\"showSizeChanger\"\n [hideOnSinglePage]=\"hideOnSinglePage\"\n [showTotalRange]=\"showTotalRange\"\n (pageIndexChange)=\"onPageIndexChange($event)\"\n (pageSizeChange)=\"onPageSizeChange($event)\"\n ></geo-table-pagination>\n }\n</div>\n","import {\n AfterViewInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ElementRef,\n EventEmitter,\n HostBinding,\n Input,\n NgZone,\n OnChanges,\n OnDestroy,\n Output,\n SimpleChanges,\n inject,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { GeoButtonComponent } from '../../geo-button/geo-button.component';\n\n/** Breakpoint (px) → số cột tối đa khi `responsiveColumns` bật. */\nconst COL_BREAKPOINTS: readonly { minWidth: number; cols: number }[] = [\n { minWidth: 1400, cols: 4 },\n { minWidth: 1200, cols: 4 },\n { minWidth: 1024, cols: 3 },\n { minWidth: 768, cols: 2 },\n { minWidth: 0, cols: 1 },\n];\n\n/**\n * Thanh lọc phía trên bảng: field chính + actions (Tìm kiếm / Bộ lọc nâng cao / Reset).\n *\n * ## Số cột hiển thị\n * - `[columns]=\"4\"` — 4 cột field + 1 cột actions = grid 5 cột đều.\n * - `[responsiveColumns]=\"false\"` — giữ đúng `columns`, không giảm theo breakpoint.\n *\n * ## Layout\n * - Grid đều `columns + 1`: field cột 1..N, actions cột cuối.\n * - Advanced span full width (`1 / -1`) với cùng `columns + 1` cột → phủ cả cột button.\n * - Stacked (màn hẹp): actions → fields → advanced.\n *\n * ## Content projection\n * - Default: luôn hiện. Slot `[advanced]`: chỉ hiện khi `advancedExpanded`.\n */\n@Component({\n selector: 'geo-table-filter',\n standalone: true,\n imports: [CommonModule, GeoButtonComponent],\n templateUrl: './geo-table-filter.component.html',\n styleUrl: './geo-table-filter.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class GeoTableFilterComponent implements AfterViewInit, OnChanges, OnDestroy {\n private readonly host = inject(ElementRef<HTMLElement>);\n private readonly ngZone = inject(NgZone);\n private readonly cdr = inject(ChangeDetectorRef);\n\n /**\n * Số cột field mỗi hàng (mặc định 4 → tổng 5 cột gồm actions).\n * Ví dụ: 4 field + columns=2 → 2 hàng × 2 cột field (+ 1 cột actions).\n */\n @Input() columns = 4;\n /**\n * Khi `true` (mặc định): số cột thực tế ≤ `columns` theo breakpoint.\n * Khi `false`: luôn dùng đúng `columns`.\n */\n @Input() responsiveColumns = true;\n /** Đưa actions lên hàng đầu khi màn hẹp (stacked). */\n @Input() responsiveCollapse = true;\n /** Breakpoint chuyển layout stacked (px). */\n @Input() mobileBreakpoint = 1024;\n /** Khoảng cách grid (px). */\n @Input() gap = 15;\n\n @Input() searchLabel = 'Tìm kiếm';\n @Input() searchLoading = false;\n /** Hiện nút mở/đóng slot `[advanced]`. */\n @Input() showAdvancedToggle = true;\n @Input() showReset = true;\n /** Mở panel field nâng cao (`[advanced]`). */\n @Input() advancedExpanded = false;\n /**\n * Số field advanced đang có giá trị — hiện badge trên nút expand.\n * Parent tự tính (vd. `countFilledFilters(query, ADVANCED_KEYS)`).\n */\n @Input() advancedFilterCount = 0;\n @Input() filterToggleTitle = 'Bộ lọc nâng cao';\n @Input() resetTitle = 'Xóa bộ lọc';\n\n @Output() search = new EventEmitter<void>();\n @Output() reset = new EventEmitter<void>();\n @Output() advancedExpandedChange = new EventEmitter<boolean>();\n\n effectiveCols = 4;\n stackedLayout = false;\n\n private resizeObserver?: ResizeObserver;\n private layoutFrame?: number;\n\n @HostBinding('style.--geo-table-filter-cols')\n get hostColumns(): number {\n return this.effectiveCols;\n }\n\n /** Tổng cột grid = field cols + 1 cột actions. */\n @HostBinding('style.--geo-table-filter-total-cols')\n get hostTotalColumns(): number {\n return this.effectiveCols + 1;\n }\n\n @HostBinding('style.--geo-table-filter-gap.px')\n get hostGap(): number {\n return this.gap;\n }\n\n @HostBinding('class.geo-table-filter--stacked')\n get stackedLayoutClass(): boolean {\n return this.stackedLayout;\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (\n changes['columns'] ||\n changes['responsiveColumns'] ||\n changes['responsiveCollapse'] ||\n changes['mobileBreakpoint']\n ) {\n this.scheduleLayout();\n }\n }\n\n ngAfterViewInit(): void {\n this.ngZone.runOutsideAngular(() => {\n this.resizeObserver = new ResizeObserver(() => this.scheduleLayout());\n this.resizeObserver.observe(this.host.nativeElement);\n });\n this.scheduleLayout();\n }\n\n ngOnDestroy(): void {\n this.resizeObserver?.disconnect();\n if (this.layoutFrame) {\n cancelAnimationFrame(this.layoutFrame);\n }\n }\n\n toggleAdvanced(): void {\n const next = !this.advancedExpanded;\n this.advancedExpanded = next;\n this.advancedExpandedChange.emit(next);\n }\n\n onSearch(): void {\n this.search.emit();\n }\n\n onReset(): void {\n this.reset.emit();\n }\n\n private scheduleLayout(): void {\n if (this.layoutFrame) {\n cancelAnimationFrame(this.layoutFrame);\n }\n this.layoutFrame = requestAnimationFrame(() => {\n this.ngZone.run(() => {\n this.updateResponsiveLayout();\n this.cdr.markForCheck();\n });\n });\n }\n\n private updateResponsiveLayout(): void {\n const hostWidth = this.host.nativeElement.clientWidth || 0;\n this.effectiveCols = this.getEffectiveCols(hostWidth);\n // 1 cột / dưới breakpoint: stacked — actions lên hàng đầu.\n this.stackedLayout =\n this.effectiveCols === 1 ||\n (this.responsiveCollapse && hostWidth > 0 && hostWidth < this.mobileBreakpoint);\n }\n\n private getEffectiveCols(width: number): number {\n const requested = Math.max(1, Math.floor(this.columns) || 1);\n if (!this.responsiveColumns) {\n return requested;\n }\n if (width <= 0) {\n return requested;\n }\n const preset = COL_BREAKPOINTS.find((bp) => width >= bp.minWidth)?.cols ?? 1;\n return Math.min(requested, preset);\n }\n}\n","<div\n class=\"geo-table-filter\"\n [class.geo-table-filter--expanded]=\"advancedExpanded\"\n [class.geo-table-filter--no-desktop-toggle]=\"!showAdvancedToggle\"\n>\n <div class=\"geo-table-filter__layout\">\n <div class=\"geo-table-filter__fields\">\n <ng-content></ng-content>\n </div>\n\n <div class=\"geo-table-filter__actions\">\n <geo-button\n appearance=\"primary\"\n color=\"brand\"\n icon=\"search\"\n [disabled]=\"searchLoading\"\n (clicked)=\"onSearch()\"\n >\n {{ searchLabel }}\n </geo-button>\n\n @if (showAdvancedToggle) {\n <span\n class=\"geo-table-filter__toggle\"\n [class.geo-table-filter__toggle--active]=\"advancedExpanded\"\n [class.geo-table-filter__toggle--has-count]=\"advancedFilterCount > 0\"\n >\n <geo-button\n appearance=\"secondary\"\n color=\"brand\"\n icon=\"filter\"\n [iconOnly]=\"true\"\n [title]=\"filterToggleTitle\"\n [attr.aria-expanded]=\"advancedExpanded\"\n (clicked)=\"toggleAdvanced()\"\n ></geo-button>\n @if (advancedFilterCount > 0) {\n <span class=\"geo-table-filter__toggle-badge\" aria-hidden=\"true\">\n {{ advancedFilterCount > 99 ? '99+' : advancedFilterCount }}\n </span>\n }\n </span>\n }\n\n @if (showReset) {\n <geo-button\n appearance=\"secondary\"\n color=\"brand\"\n icon=\"reload\"\n [iconOnly]=\"true\"\n [title]=\"resetTitle\"\n (clicked)=\"onReset()\"\n ></geo-button>\n }\n </div>\n\n <div\n class=\"geo-table-filter__advanced\"\n [class.geo-table-filter__advanced--visible]=\"advancedExpanded\"\n >\n <ng-content select=\"[advanced]\"></ng-content>\n </div>\n </div>\n</div>\n","import {\n Component,\n EventEmitter,\n forwardRef,\n Input,\n Output,\n ViewEncapsulation,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { ControlValueAccessor, FormsModule, NG_VALUE_ACCESSOR } from '@angular/forms';\n\nlet uiTextareaErrorId = 0;\n\n@Component({\n selector: 'geo-textarea',\n standalone: true,\n imports: [CommonModule, FormsModule],\n templateUrl: './geo-textarea.component.html',\n styleUrl: './geo-textarea.component.scss',\n encapsulation: ViewEncapsulation.None,\n host: {\n class: 'geo-textarea-host',\n '[class.geo-textarea-host--block]': 'block',\n '[class.geo-textarea-host--error]': 'error',\n },\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => GeoTextareaComponent),\n multi: true,\n },\n ],\n})\nexport class GeoTextareaComponent implements ControlValueAccessor {\n @Input() label = '';\n @Input() placeholder = '';\n @Input() rows = 3;\n @Input() disabled = false;\n @Input() required = false;\n @Input() error = false;\n @Input() errorMessage = '';\n @Input() maxlength?: number;\n @Input() block = true;\n\n @Output() valueChange = new EventEmitter<string>();\n\n readonly errorMessageId = `geo-textarea-error-${++uiTextareaErrorId}`;\n\n value = '';\n\n private onChange: (value: string) => void = () => undefined;\n private onTouched: () => void = () => undefined;\n\n onInput(value: string): void {\n this.value = value;\n this.onChange(value);\n this.valueChange.emit(value);\n }\n\n onBlur(): void {\n this.onTouched();\n }\n\n writeValue(value: string | null): void {\n this.value = value ?? '';\n }\n\n registerOnChange(fn: (value: string) => void): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n this.disabled = isDisabled;\n }\n}\n","@if (label) {\n <div class=\"geo-textarea__label\">\n <span>{{ label }}</span>\n @if (required) {\n <span class=\"geo-textarea__required\" aria-hidden=\"true\">*</span>\n }\n </div>\n}\n\n<textarea\n class=\"geo-textarea__field\"\n [class.geo-textarea__field--error]=\"error\"\n [rows]=\"rows\"\n [placeholder]=\"placeholder\"\n [disabled]=\"disabled\"\n [attr.maxlength]=\"maxlength ?? null\"\n [attr.aria-invalid]=\"error ? 'true' : null\"\n [attr.aria-describedby]=\"error && errorMessage ? errorMessageId : null\"\n [ngModel]=\"value\"\n (ngModelChange)=\"onInput($event)\"\n (blur)=\"onBlur()\"\n></textarea>\n\n@if (error && errorMessage) {\n <p class=\"geo-textarea__error\" [id]=\"errorMessageId\" role=\"alert\">{{ errorMessage }}</p>\n}\n","import { NgClassInterface, NgStyleInterface } from 'ng-zorro-antd/core/types';\nimport { NzNotificationPlacement } from 'ng-zorro-antd/notification';\n\nexport type GeoToastType = 'success' | 'error' | 'warning' | 'info';\n\nexport type GeoToastPlacement = NzNotificationPlacement;\n\nexport const GEO_TOAST_DEFAULT_TITLES: Record<GeoToastType, string> = {\n success: 'Thành công!',\n error: 'Thất bại!',\n warning: 'Cảnh báo!',\n info: 'Thông tin!',\n};\n\nexport const GEO_TOAST_ICONS: Record<GeoToastType, string> = {\n success: 'check-circle',\n error: 'close-circle',\n warning: 'warning',\n info: 'info-circle',\n};\n\n/** Options khi gọi GeoToastService (map sang NzNotificationDataOptions). */\nexport interface GeoToastOptions {\n /** Auto close duration (ms). `0` = không tự đóng. Default `4500`. */\n duration?: number;\n /** Vị trí toast. Default `topRight`. */\n placement?: GeoToastPlacement;\n /** Pause countdown khi hover. Default `true`. */\n pauseOnHover?: boolean;\n /** Animate enter/leave. Default `true`. */\n animate?: boolean;\n /** Unique key — toast cùng key sẽ được thay thế. */\n key?: string;\n /** Hiện icon trạng thái. Default `true`. */\n showIcon?: boolean;\n /** Hiện nút đóng. Default `true`. */\n closable?: boolean;\n /** Custom icon type (Ant Design). */\n icon?: string;\n /** Inline style trên notice. */\n style?: NgStyleInterface;\n /** Extra CSS class. */\n className?: NgClassInterface | string;\n /** Arbitrary data gắn vào notice. */\n data?: unknown;\n}\n\nexport interface GeoToastConfig extends GeoToastOptions {\n type: GeoToastType;\n title?: string;\n message?: string;\n}\n\nexport interface GeoToastGlobalConfig {\n duration?: number;\n placement?: GeoToastPlacement;\n pauseOnHover?: boolean;\n animate?: boolean;\n maxStack?: number;\n top?: number;\n bottom?: number;\n}\n","import {\n Component,\n EventEmitter,\n Input,\n Output,\n ViewEncapsulation,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { NzIconModule } from 'ng-zorro-antd/icon';\nimport {\n GEO_TOAST_DEFAULT_TITLES,\n GEO_TOAST_ICONS,\n GeoToastType,\n} from './geo-toast.types';\n\n/**\n * Toast / notification UI theo design GEO (left accent bar + icon + title + message).\n * Dùng trực tiếp trong template, hoặc qua `GeoToastService` (Ant Design notification).\n */\n@Component({\n selector: 'geo-toast',\n standalone: true,\n imports: [CommonModule, NzIconModule],\n templateUrl: './geo-toast.component.html',\n styleUrl: './geo-toast.component.scss',\n encapsulation: ViewEncapsulation.None,\n host: {\n class: 'geo-toast-host',\n '[class.geo-toast-host--hidden]': '!visible',\n },\n})\nexport class GeoToastComponent {\n @Input() type: GeoToastType = 'info';\n @Input() title = '';\n @Input() message = '';\n @Input() closable = true;\n @Input() showIcon = true;\n @Input() visible = true;\n /** Override Ant Design icon type. */\n @Input() icon?: string;\n\n @Output() closed = new EventEmitter<void>();\n\n get displayTitle(): string {\n return this.title || GEO_TOAST_DEFAULT_TITLES[this.type];\n }\n\n get iconType(): string {\n return this.icon || GEO_TOAST_ICONS[this.type];\n }\n\n onClose(): void {\n this.visible = false;\n this.closed.emit();\n }\n}\n","@if (visible) {\n <div\n class=\"geo-toast\"\n [class]=\"'geo-toast geo-toast--' + type\"\n role=\"status\"\n [attr.aria-live]=\"type === 'error' ? 'assertive' : 'polite'\"\n >\n <span class=\"geo-toast__accent\" aria-hidden=\"true\"></span>\n\n <div class=\"geo-toast__body\">\n @if (showIcon) {\n <span class=\"geo-toast__icon\" nz-icon [nzType]=\"iconType\" nzTheme=\"fill\"></span>\n }\n\n <div class=\"geo-toast__content\">\n <p class=\"geo-toast__title\">{{ displayTitle }}</p>\n @if (message) {\n <p class=\"geo-toast__message\">{{ message }}</p>\n }\n </div>\n\n @if (closable) {\n <button\n type=\"button\"\n class=\"geo-toast__close\"\n aria-label=\"Đóng thông báo\"\n (click)=\"onClose()\"\n >\n <span nz-icon nzType=\"close\" nzTheme=\"outline\"></span>\n </button>\n }\n </div>\n </div>\n}\n","import { Injectable, inject } from '@angular/core';\nimport { NzConfigService } from 'ng-zorro-antd/core/config';\nimport {\n NzNotificationService,\n NzNotificationRef,\n} from 'ng-zorro-antd/notification';\nimport {\n GEO_TOAST_DEFAULT_TITLES,\n GeoToastConfig,\n GeoToastGlobalConfig,\n GeoToastOptions,\n GeoToastType,\n} from './geo-toast.types';\n\n/**\n * Toast service dựa trên `NzNotificationService` (Ant Design).\n *\n * @example\n * ```ts\n * this.toast.success('Thành công!', 'Lưu hồ sơ thành công');\n * this.toast.error('Thất bại!', 'Vui lòng kiểm tra lại', { duration: 0 });\n * ```\n */\n@Injectable({ providedIn: 'root' })\nexport class GeoToastService {\n private readonly notification = inject(NzNotificationService);\n private readonly nzConfig = inject(NzConfigService, { optional: true });\n\n private defaults: Required<\n Pick<GeoToastOptions, 'duration' | 'placement' | 'pauseOnHover' | 'animate' | 'showIcon' | 'closable'>\n > = {\n duration: 4500,\n placement: 'topRight',\n pauseOnHover: true,\n animate: true,\n showIcon: true,\n closable: true,\n };\n\n /** Cấu hình mặc định toàn cục (duration, placement, …). */\n config(options: GeoToastGlobalConfig): void {\n if (options.duration != null) this.defaults.duration = options.duration;\n if (options.placement != null) this.defaults.placement = options.placement;\n if (options.pauseOnHover != null) this.defaults.pauseOnHover = options.pauseOnHover;\n if (options.animate != null) this.defaults.animate = options.animate;\n\n this.nzConfig?.set('notification', {\n nzDuration: this.defaults.duration,\n nzPlacement: this.defaults.placement,\n nzMaxStack: options.maxStack,\n nzTop: options.top,\n nzBottom: options.bottom,\n nzPauseOnHover: this.defaults.pauseOnHover,\n nzAnimate: this.defaults.animate,\n });\n }\n\n success(title?: string, message?: string, options?: GeoToastOptions): NzNotificationRef {\n return this.create('success', title, message, options);\n }\n\n error(title?: string, message?: string, options?: GeoToastOptions): NzNotificationRef {\n return this.create('error', title, message, options);\n }\n\n warning(title?: string, message?: string, options?: GeoToastOptions): NzNotificationRef {\n return this.create('warning', title, message, options);\n }\n\n info(title?: string, message?: string, options?: GeoToastOptions): NzNotificationRef {\n return this.create('info', title, message, options);\n }\n\n /** API tổng quát — đầy đủ type + options. */\n create(\n type: GeoToastType,\n title?: string,\n message?: string,\n options?: GeoToastOptions\n ): NzNotificationRef {\n return this.open({\n type,\n title: title ?? GEO_TOAST_DEFAULT_TITLES[type],\n message: message ?? '',\n ...options,\n });\n }\n\n /** Mở toast từ config object. */\n open(config: GeoToastConfig): NzNotificationRef {\n const type = config.type;\n const title = config.title ?? GEO_TOAST_DEFAULT_TITLES[type];\n const message = config.message ?? '';\n const duration = config.duration ?? this.defaults.duration;\n const placement = config.placement ?? this.defaults.placement;\n const pauseOnHover = config.pauseOnHover ?? this.defaults.pauseOnHover;\n const animate = config.animate ?? this.defaults.animate;\n const showIcon = config.showIcon ?? this.defaults.showIcon;\n const closable = config.closable ?? this.defaults.closable;\n\n const classList = [\n 'geo-toast-notice',\n `geo-toast-notice--${type}`,\n showIcon ? '' : 'geo-toast-notice--no-icon',\n closable ? '' : 'geo-toast-notice--no-close',\n typeof config.className === 'string' ? config.className : '',\n ]\n .filter(Boolean)\n .join(' ');\n\n // blank + custom class khi không show icon (ẩn icon mặc định của antd)\n const nzType = showIcon ? type : 'blank';\n\n return this.notification.create(nzType, title, message, {\n nzDuration: duration,\n nzPlacement: placement,\n nzPauseOnHover: pauseOnHover,\n nzAnimate: animate,\n nzKey: config.key,\n nzStyle: config.style,\n nzClass: classList,\n nzData: config.data as object | undefined,\n nzCloseIcon: closable ? undefined : ' ',\n });\n }\n\n /** Đóng 1 toast theo messageId (từ NzNotificationRef). */\n remove(id?: string): void {\n this.notification.remove(id);\n }\n\n /** Đóng tất cả toast đang mở. */\n removeAll(): void {\n this.notification.remove();\n }\n}\n","import { Component, EventEmitter, Input, Output, ViewEncapsulation } from '@angular/core';\nimport { NzTreeModule, NzFormatEmitEvent } from 'ng-zorro-antd/tree';\nimport { GeoTreeNode } from './geo-tree.types';\n\n/**\n * Tree checkable — wrap `nz-tree`. Domain dùng `geo-tree`, không import NzTreeModule.\n * API chính: `nodes` + `checkedKeys` / `checkedKeysChange` (giống pattern ILIS → nz-tree).\n */\n@Component({\n selector: 'geo-tree',\n standalone: true,\n imports: [NzTreeModule],\n templateUrl: './geo-tree.component.html',\n styleUrl: './geo-tree.component.scss',\n encapsulation: ViewEncapsulation.None,\n host: { class: 'geo-tree-host' },\n})\nexport class GeoTreeComponent {\n @Input() nodes: GeoTreeNode[] = [];\n @Input() checkable = false;\n @Input() checkedKeys: Array<string | number> = [];\n @Input() expandedKeys: Array<string | number> = [];\n @Input() showLine = false;\n @Input() blockNode = false;\n\n @Output() checkedKeysChange = new EventEmitter<Array<string | number>>();\n @Output() expandedKeysChange = new EventEmitter<Array<string | number>>();\n @Output() nodeClick = new EventEmitter<NzFormatEmitEvent>();\n\n onCheckedKeysChange(keys: Array<string | number>): void {\n this.checkedKeys = keys;\n this.checkedKeysChange.emit(keys);\n }\n\n onExpandedKeysChange(keys: Array<string | number>): void {\n this.expandedKeys = keys;\n this.expandedKeysChange.emit(keys);\n }\n}\n","<div class=\"geo-tree\">\n <nz-tree\n [nzData]=\"nodes\"\n [nzCheckable]=\"checkable\"\n [nzCheckedKeys]=\"checkedKeys\"\n [nzExpandedKeys]=\"expandedKeys\"\n [nzShowLine]=\"showLine\"\n [nzBlockNode]=\"blockNode\"\n (nzCheckedKeysChange)=\"onCheckedKeysChange($event)\"\n (nzExpandedKeysChange)=\"onExpandedKeysChange($event)\"\n (nzClick)=\"nodeClick.emit($event)\"\n ></nz-tree>\n</div>\n","import {\n GeoColumnPickerApplyPayload,\n GeoColumnPickerItem,\n} from './geo-column-picker.types';\n\nconst STORAGE_PREFIX = 'geo-column-picker:';\n\nexport function loadColumnPickerState(key: string): GeoColumnPickerApplyPayload | null {\n try {\n const raw = sessionStorage.getItem(`${STORAGE_PREFIX}${key}`);\n if (!raw) {\n return null;\n }\n\n return JSON.parse(raw) as GeoColumnPickerApplyPayload;\n } catch {\n return null;\n }\n}\n\nexport function saveColumnPickerState(key: string, payload: GeoColumnPickerApplyPayload): void {\n sessionStorage.setItem(`${STORAGE_PREFIX}${key}`, JSON.stringify(payload));\n}\n\nexport function applyColumnPickerState(\n items: GeoColumnPickerItem[],\n state: GeoColumnPickerApplyPayload\n): GeoColumnPickerItem[] {\n return items.map((item) => ({\n ...item,\n visible: state.visibility[item.key] ?? item.visible,\n pinned: state.pinned[item.key] ?? item.pinned ?? null,\n }));\n}\n\nexport function mergeColumnPickerItems(\n items: GeoColumnPickerItem[],\n key?: string\n): GeoColumnPickerItem[] {\n if (!key) {\n return items;\n }\n\n const saved = loadColumnPickerState(key);\n return saved ? applyColumnPickerState(items, saved) : items;\n}\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { NgZorroAntdModule } from '../../../ng-zorro/ng-zorro-antd.module';\nimport { GeoButtonComponent } from '../../geo-button/geo-button.component';\nimport { GeoCheckboxComponent } from '../../geo-checkbox/geo-checkbox.component';\nimport { GeoColumnPickerApplyPayload, GeoColumnPickerItem } from './geo-column-picker.types';\nimport { saveColumnPickerState } from './geo-column-picker.storage';\n\n@Component({\n selector: 'geo-column-picker',\n standalone: true,\n imports: [CommonModule, NgZorroAntdModule, GeoButtonComponent, GeoCheckboxComponent],\n templateUrl: './geo-column-picker.component.html',\n styleUrl: './geo-column-picker.component.scss',\n})\nexport class GeoColumnPickerComponent {\n @Input() triggerLabel = 'Ẩn hiện cột';\n @Input() hint = 'Chọn cột hiển thị trên bảng.';\n @Input() items: GeoColumnPickerItem[] = [];\n /** Lưu trạng thái ẩn/hiện cột theo session khi người dùng áp dụng */\n @Input() storageKey?: string;\n\n @Output() apply = new EventEmitter<GeoColumnPickerApplyPayload>();\n\n dropdownVisible = false;\n draftItems: GeoColumnPickerItem[] = [];\n\n onDropdownVisibleChange(visible: boolean): void {\n if (visible) {\n this.syncDraft();\n }\n }\n\n onItemChange(key: string, visible: boolean): void {\n this.draftItems = this.draftItems.map((item) =>\n item.key === key ? { ...item, visible } : item\n );\n }\n\n onApply(): void {\n const visibility: Record<string, boolean> = {};\n\n for (const item of this.draftItems) {\n visibility[item.key] = item.visible;\n }\n\n /** `pinned` giữ empty để tương thích payload/storage cũ — không còn UI ghim/di chuyển cột. */\n const payload: GeoColumnPickerApplyPayload = { visibility, pinned: {} };\n this.apply.emit(payload);\n\n if (this.storageKey) {\n saveColumnPickerState(this.storageKey, payload);\n }\n\n this.dropdownVisible = false;\n }\n\n onReset(): void {\n this.syncDraft();\n }\n\n private syncDraft(): void {\n this.draftItems = this.items.map((item) => ({ ...item }));\n }\n}\n","<div\n class=\"geo-column-picker__trigger\"\n nz-dropdown\n [nzDropdownMenu]=\"menu\"\n nzTrigger=\"click\"\n nzPlacement=\"bottomRight\"\n [(nzVisible)]=\"dropdownVisible\"\n (nzVisibleChange)=\"onDropdownVisibleChange($event)\"\n>\n <geo-button\n appearance=\"secondary\"\n color=\"brand\"\n icon=\"eye-invisible\"\n [title]=\"triggerLabel\"\n >\n {{ triggerLabel }}\n </geo-button>\n</div>\n\n<nz-dropdown-menu #menu=\"nzDropdownMenu\">\n <div class=\"geo-column-picker__panel\" (click)=\"$event.stopPropagation()\">\n <p class=\"geo-column-picker__hint\">{{ hint }}</p>\n\n <div class=\"geo-column-picker__list\">\n @for (item of draftItems; track item.key) {\n <div class=\"geo-column-picker__row\">\n <geo-checkbox\n class=\"geo-column-picker__item\"\n [label]=\"item.title\"\n [checked]=\"item.visible\"\n [disabled]=\"item.locked ?? false\"\n (checkedChange)=\"onItemChange(item.key, $event)\"\n ></geo-checkbox>\n </div>\n }\n </div>\n\n <div class=\"geo-column-picker__actions\">\n <button nz-button nzType=\"default\" nzSize=\"small\" (click)=\"onReset()\">Đặt lại</button>\n <button nz-button nzType=\"primary\" nzSize=\"small\" (click)=\"onApply()\">Áp dụng</button>\n </div>\n </div>\n</nz-dropdown-menu>\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { NgZorroAntdModule } from '../../../ng-zorro/ng-zorro-antd.module';\nimport { GeoButtonComponent } from '../../geo-button/geo-button.component';\nimport { GeoColumnPickerComponent } from '../geo-column-picker/geo-column-picker.component';\nimport { GeoColumnPickerApplyPayload, GeoColumnPickerItem } from '../geo-column-picker/geo-column-picker.types';\n\n@Component({\n selector: 'geo-table-toolbar',\n standalone: true,\n imports: [CommonModule, NgZorroAntdModule, GeoButtonComponent, GeoColumnPickerComponent],\n templateUrl: './geo-table-toolbar.component.html',\n styleUrl: './geo-table-toolbar.component.scss',\n})\nexport class GeoTableToolbarComponent {\n @Input() resultLabel = '';\n @Input() resultCount: number | null = null;\n @Input() selectedCount = 0;\n @Input() showDelete = true;\n @Input() showExport = true;\n @Input() showColumnToggle = true;\n @Input() showAdd = true;\n @Input() addLabel = 'Thêm mới';\n @Input() columnItems: GeoColumnPickerItem[] = [];\n /** Key lưu trạng thái ẩn/hiện cột trong sessionStorage */\n @Input() columnStorageKey?: string;\n\n @Output() deleteClick = new EventEmitter<void>();\n @Output() exportClick = new EventEmitter<void>();\n @Output() toggleColumns = new EventEmitter<void>();\n @Output() columnApply = new EventEmitter<GeoColumnPickerApplyPayload>();\n @Output() addClick = new EventEmitter<void>();\n\n get displayResultLabel(): string {\n if (this.resultLabel) {\n return this.resultLabel;\n }\n\n const count = this.resultCount ?? 0;\n return `Kết quả tìm kiếm (${count} kết quả)`;\n }\n}\n","<div class=\"geo-table-toolbar\">\n <div class=\"geo-table-toolbar__info\">{{ displayResultLabel }}</div>\n\n <div class=\"geo-table-toolbar__actions\">\n @if (showDelete && selectedCount > 0) {\n <geo-button\n appearance=\"secondary\"\n color=\"danger\"\n icon=\"delete\"\n title=\"Xóa\"\n (clicked)=\"deleteClick.emit()\"\n >\n Xóa ({{ selectedCount }})\n </geo-button>\n }\n\n @if (showExport) {\n <geo-button\n appearance=\"secondary\"\n color=\"brand\"\n icon=\"download\"\n title=\"Xuất dữ liệu\"\n (clicked)=\"exportClick.emit()\"\n >\n Xuất dữ liệu\n </geo-button>\n }\n\n @if (showColumnToggle) {\n @if (columnItems.length) {\n <geo-column-picker\n [items]=\"columnItems\"\n [storageKey]=\"columnStorageKey\"\n (apply)=\"columnApply.emit($event)\"\n ></geo-column-picker>\n } @else {\n <geo-button\n appearance=\"secondary\"\n color=\"brand\"\n icon=\"eye-invisible\"\n title=\"Ẩn hiện cột\"\n (clicked)=\"toggleColumns.emit()\"\n >\n Ẩn hiện cột\n </geo-button>\n }\n }\n\n @if (showAdd) {\n <geo-button\n appearance=\"primary\"\n color=\"brand\"\n icon=\"plus\"\n [title]=\"addLabel\"\n (clicked)=\"addClick.emit()\"\n >\n {{ addLabel }}\n </geo-button>\n }\n </div>\n</div>\n","/*\n * Public API Surface of geo-ui\n */\n\nexport * from './lib/styles/tokens';\nexport * from './lib/ng-zorro/ng-zorro-antd.module';\nexport * from './lib/figma';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1","i3","i2","i4"],"mappings":"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"}
1
+ {"version":3,"file":"geoit-ui.mjs","sources":["../../../projects/geo-ui/src/lib/styles/tokens.ts","../../../projects/geo-ui/src/lib/ng-zorro/ng-zorro-antd.module.ts","../../../projects/geo-ui/src/lib/figma/geo-alert/geo-alert.types.ts","../../../projects/geo-ui/src/lib/figma/geo-alert/geo-alert.component.ts","../../../projects/geo-ui/src/lib/figma/geo-alert/geo-alert.component.html","../../../projects/geo-ui/src/lib/figma/geo-back-button/geo-back-button.component.ts","../../../projects/geo-ui/src/lib/figma/geo-back-button/geo-back-button.component.html","../../../projects/geo-ui/src/lib/figma/geo-breadcrumb/geo-breadcrumb.component.ts","../../../projects/geo-ui/src/lib/figma/geo-breadcrumb/geo-breadcrumb.component.html","../../../projects/geo-ui/src/lib/figma/geo-button/geo-button.component.ts","../../../projects/geo-ui/src/lib/figma/geo-button/geo-button.component.html","../../../projects/geo-ui/src/lib/figma/geo-checkbox/geo-checkbox.component.ts","../../../projects/geo-ui/src/lib/figma/geo-checkbox/geo-checkbox.component.html","../../../projects/geo-ui/src/lib/figma/geo-confirm-modal/geo-confirm-modal.component.ts","../../../projects/geo-ui/src/lib/figma/geo-confirm-modal/geo-confirm-modal.component.html","../../../projects/geo-ui/src/lib/figma/geo-date-picker/geo-date-picker.component.ts","../../../projects/geo-ui/src/lib/figma/geo-date-picker/geo-date-picker.component.html","../../../projects/geo-ui/src/lib/figma/geo-date-range-picker/geo-date-range-picker.component.ts","../../../projects/geo-ui/src/lib/figma/geo-date-range-picker/geo-date-range-picker.component.html","../../../projects/geo-ui/src/lib/figma/geo-file-picker/geo-file-picker.component.ts","../../../projects/geo-ui/src/lib/figma/geo-file-picker/geo-file-picker.component.html","../../../projects/geo-ui/src/lib/figma/geo-upload/geo-upload.types.ts","../../../projects/geo-ui/src/lib/figma/geo-upload/geo-upload.component.ts","../../../projects/geo-ui/src/lib/figma/geo-upload/geo-upload.component.html","../../../projects/geo-ui/src/lib/figma/geo-form-modal/geo-form-modal.component.ts","../../../projects/geo-ui/src/lib/figma/geo-form-modal/geo-form-modal.component.html","../../../projects/geo-ui/src/lib/figma/geo-icon/geo-icon.types.ts","../../../projects/geo-ui/src/lib/figma/geo-icon/geo-icon.component.ts","../../../projects/geo-ui/src/lib/figma/geo-icon/geo-icon.component.html","../../../projects/geo-ui/src/lib/figma/geo-input/geo-input.component.ts","../../../projects/geo-ui/src/lib/figma/geo-input/geo-input.component.html","../../../projects/geo-ui/src/lib/figma/geo-pagination/geo-pagination.component.ts","../../../projects/geo-ui/src/lib/figma/geo-pagination/geo-pagination.component.html","../../../projects/geo-ui/src/lib/figma/geo-typography/geo-typography.types.ts","../../../projects/geo-ui/src/lib/figma/geo-typography/geo-typography.component.ts","../../../projects/geo-ui/src/lib/figma/geo-page-title/geo-page-title.component.ts","../../../projects/geo-ui/src/lib/figma/geo-page-title/geo-page-title.component.html","../../../projects/geo-ui/src/lib/figma/geo-radio/geo-radio.component.ts","../../../projects/geo-ui/src/lib/figma/geo-radio/geo-radio.component.html","../../../projects/geo-ui/src/lib/figma/geo-select/geo-select.component.ts","../../../projects/geo-ui/src/lib/figma/geo-select/geo-select.component.html","../../../projects/geo-ui/src/lib/figma/geo-slider/geo-slider.component.ts","../../../projects/geo-ui/src/lib/figma/geo-slider/geo-slider.component.html","../../../projects/geo-ui/src/lib/figma/geo-status-tag/geo-status-tag.types.ts","../../../projects/geo-ui/src/lib/figma/geo-status-tag/geo-status-tag.component.ts","../../../projects/geo-ui/src/lib/figma/geo-status-tag/geo-status-tag.component.html","../../../projects/geo-ui/src/lib/figma/geo-stepper/geo-stepper.component.ts","../../../projects/geo-ui/src/lib/figma/geo-stepper/geo-stepper.component.html","../../../projects/geo-ui/src/lib/figma/geo-step-form-layout/geo-step-form-layout.component.ts","../../../projects/geo-ui/src/lib/figma/geo-step-form-layout/geo-step-form-layout.component.html","../../../projects/geo-ui/src/lib/figma/geo-layout/footer/geo-layout-footer.component.ts","../../../projects/geo-ui/src/lib/figma/geo-layout/footer/geo-layout-footer.component.html","../../../projects/geo-ui/src/lib/figma/geo-layout/geo-layout-actions.directive.ts","../../../projects/geo-ui/src/lib/figma/geo-layout/geo-layout.types.ts","../../../projects/geo-ui/src/lib/figma/geo-layout/header-actions/geo-layout-header-actions.component.ts","../../../projects/geo-ui/src/lib/figma/geo-layout/header-actions/geo-layout-header-actions.component.html","../../../projects/geo-ui/src/lib/figma/geo-layout/header/geo-layout-header.component.ts","../../../projects/geo-ui/src/lib/figma/geo-layout/header/geo-layout-header.component.html","../../../projects/geo-ui/src/lib/figma/geo-layout/sidebar/geo-layout-sidebar.component.ts","../../../projects/geo-ui/src/lib/figma/geo-layout/sidebar/geo-layout-sidebar.component.html","../../../projects/geo-ui/src/lib/figma/geo-layout/geo-layout.component.ts","../../../projects/geo-ui/src/lib/figma/geo-layout/geo-layout.component.html","../../../projects/geo-ui/src/lib/figma/geo-tabs/geo-tabs.component.ts","../../../projects/geo-ui/src/lib/figma/geo-tabs/geo-tabs.component.html","../../../projects/geo-ui/src/lib/figma/geo-table/geo-row-actions/geo-row-actions.types.ts","../../../projects/geo-ui/src/lib/figma/geo-table/geo-row-actions/geo-row-actions.component.ts","../../../projects/geo-ui/src/lib/figma/geo-table/geo-row-actions/geo-row-actions.component.html","../../../projects/geo-ui/src/lib/figma/geo-table/geo-table.types.ts","../../../projects/geo-ui/src/lib/figma/geo-table/geo-table-pagination/geo-table-pagination.component.ts","../../../projects/geo-ui/src/lib/figma/geo-table/geo-table-pagination/geo-table-pagination.component.html","../../../projects/geo-ui/src/lib/figma/geo-table/geo-table.component.ts","../../../projects/geo-ui/src/lib/figma/geo-table/geo-table.component.html","../../../projects/geo-ui/src/lib/figma/geo-table/geo-table-filter/geo-table-filter.component.ts","../../../projects/geo-ui/src/lib/figma/geo-table/geo-table-filter/geo-table-filter.component.html","../../../projects/geo-ui/src/lib/figma/geo-textarea/geo-textarea.component.ts","../../../projects/geo-ui/src/lib/figma/geo-textarea/geo-textarea.component.html","../../../projects/geo-ui/src/lib/figma/geo-toast/geo-toast.types.ts","../../../projects/geo-ui/src/lib/figma/geo-toast/geo-toast.component.ts","../../../projects/geo-ui/src/lib/figma/geo-toast/geo-toast.component.html","../../../projects/geo-ui/src/lib/figma/geo-toast/geo-toast.service.ts","../../../projects/geo-ui/src/lib/figma/geo-tree/geo-tree.component.ts","../../../projects/geo-ui/src/lib/figma/geo-tree/geo-tree.component.html","../../../projects/geo-ui/src/lib/figma/geo-table/geo-column-picker/geo-column-picker.storage.ts","../../../projects/geo-ui/src/lib/figma/geo-table/geo-column-picker/geo-column-picker.component.ts","../../../projects/geo-ui/src/lib/figma/geo-table/geo-column-picker/geo-column-picker.component.html","../../../projects/geo-ui/src/lib/figma/geo-table/geo-table-toolbar/geo-table-toolbar.component.ts","../../../projects/geo-ui/src/lib/figma/geo-table/geo-table-toolbar/geo-table-toolbar.component.html","../../../projects/geo-ui/src/lib/figma/geo-stat-card/geo-stat-card.component.ts","../../../projects/geo-ui/src/lib/figma/geo-stat-card/geo-stat-card.component.html","../../../projects/geo-ui/src/lib/figma/geo-empty-state/geo-empty-state.component.ts","../../../projects/geo-ui/src/lib/figma/geo-empty-state/geo-empty-state.component.html","../../../projects/geo-ui/src/lib/figma/geo-chart/geo-chart.component.ts","../../../projects/geo-ui/src/lib/figma/geo-chart/geo-chart.component.html","../../../projects/geo-ui/src/lib/figma/geo-page-header/geo-page-header.component.ts","../../../projects/geo-ui/src/lib/figma/geo-page-header/geo-page-header.component.html","../../../projects/geo-ui/src/lib/figma/geo-login/geo-login.component.ts","../../../projects/geo-ui/src/lib/figma/geo-login/geo-login.component.html","../../../projects/geo-ui/src/lib/figma/geo-forgot-password/geo-forgot-password.component.ts","../../../projects/geo-ui/src/lib/figma/geo-forgot-password/geo-forgot-password.component.html","../../../projects/geo-ui/src/lib/figma/geo-feedback-form/geo-feedback-form.component.ts","../../../projects/geo-ui/src/lib/figma/geo-feedback-form/geo-feedback-form.component.html","../../../projects/geo-ui/src/lib/figma/geo-overlap-result/geo-overlap-result.component.ts","../../../projects/geo-ui/src/lib/figma/geo-overlap-result/geo-overlap-result.component.html","../../../projects/geo-ui/src/lib/figma/geo-dashboard/geo-dashboard.component.ts","../../../projects/geo-ui/src/lib/figma/geo-dashboard/geo-dashboard.component.html","../../../projects/geo-ui/src/lib/figma/geo-list-page/geo-list-page.component.ts","../../../projects/geo-ui/src/lib/figma/geo-list-page/geo-list-page.component.html","../../../projects/geo-ui/src/lib/figma/geo-map/geo-map-toolbar.icons.ts","../../../projects/geo-ui/src/lib/figma/geo-map/geo-map.constants.ts","../../../projects/geo-ui/src/lib/figma/geo-map/geo-map.controller.ts","../../../projects/geo-ui/src/lib/figma/geo-map/services/geo-map-projection.service.ts","../../../projects/geo-ui/src/lib/figma/geo-map/services/geo-map-layer.service.ts","../../../projects/geo-ui/src/lib/figma/geo-map/services/geo-map.service.ts","../../../projects/geo-ui/src/lib/figma/geo-map/geo-map.component.ts","../../../projects/geo-ui/src/lib/figma/geo-map/geo-map.component.html","../../../projects/geo-ui/src/lib/figma/geo-map/chrome/geo-map-toolbar/geo-map-toolbar.component.ts","../../../projects/geo-ui/src/lib/figma/geo-map/chrome/geo-map-toolbar/geo-map-toolbar.component.html","../../../projects/geo-ui/src/lib/figma/geo-map/utils/geo-map-fullscreen-overlay.util.ts","../../../projects/geo-ui/src/lib/figma/geo-map/utils/geo-map-interactions.util.ts","../../../projects/geo-ui/src/lib/figma/geo-map/chrome/geo-map-zoom/geo-map-zoom.component.ts","../../../projects/geo-ui/src/lib/figma/geo-map/chrome/geo-map-zoom/geo-map-zoom.component.html","../../../projects/geo-ui/src/lib/figma/geo-map/chrome/geo-map-locate/geo-map-locate.component.ts","../../../projects/geo-ui/src/lib/figma/geo-map/chrome/geo-map-locate/geo-map-locate.component.html","../../../projects/geo-ui/src/lib/figma/geo-map/chrome/geo-map-snapshot/geo-map-snapshot.component.ts","../../../projects/geo-ui/src/lib/figma/geo-map/chrome/geo-map-snapshot/geo-map-snapshot.component.html","../../../projects/geo-ui/src/lib/figma/geo-map/chrome/geo-map-basemap-switcher/geo-map-basemap-switcher.component.ts","../../../projects/geo-ui/src/lib/figma/geo-map/chrome/geo-map-basemap-switcher/geo-map-basemap-switcher.component.html","../../../projects/geo-ui/src/lib/figma/geo-map/chrome/geo-map-measure/geo-map-measure.component.ts","../../../projects/geo-ui/src/lib/figma/geo-map/chrome/geo-map-measure/geo-map-measure.component.html","../../../projects/geo-ui/src/lib/figma/geo-map/chrome/geo-map-opacity/geo-map-opacity.component.ts","../../../projects/geo-ui/src/lib/figma/geo-map/chrome/geo-map-opacity/geo-map-opacity.component.html","../../../projects/geo-ui/src/lib/figma/geo-map/chrome/geo-map-legend/geo-map-legend.component.ts","../../../projects/geo-ui/src/lib/figma/geo-map/chrome/geo-map-legend/geo-map-legend.component.html","../../../projects/geo-ui/src/lib/figma/geo-map/chrome/geo-map-layer-panel/geo-map-layer-panel.component.ts","../../../projects/geo-ui/src/lib/figma/geo-map/chrome/geo-map-layer-panel/geo-map-layer-panel.component.html","../../../projects/geo-ui/src/lib/figma/geo-map/chrome/geo-map-layer-card/geo-map-layer-card.component.ts","../../../projects/geo-ui/src/lib/figma/geo-map/chrome/geo-map-layer-card/geo-map-layer-card.component.html","../../../projects/geo-ui/src/lib/figma/geo-map/chrome/geo-map-layers-drawer/geo-map-layers-drawer.component.ts","../../../projects/geo-ui/src/lib/figma/geo-map/chrome/geo-map-layers-drawer/geo-map-layers-drawer.component.html","../../../projects/geo-ui/src/lib/figma/geo-map/chrome/geo-map-help/geo-map-help.component.ts","../../../projects/geo-ui/src/lib/figma/geo-map/chrome/geo-map-help/geo-map-help.component.html","../../../projects/geo-ui/src/lib/figma/geo-map/chrome/geo-map-swipe/geo-map-swipe.component.ts","../../../projects/geo-ui/src/lib/figma/geo-map/chrome/geo-map-swipe/geo-map-swipe.component.html","../../../projects/geo-ui/src/lib/figma/geo-map/chrome/geo-map-admin-filter/geo-map-admin-filter.component.ts","../../../projects/geo-ui/src/lib/figma/geo-map/chrome/geo-map-admin-filter/geo-map-admin-filter.component.html","../../../projects/geo-ui/src/lib/figma/geo-map/chrome/geo-map-location-chip/geo-map-location-chip.component.ts","../../../projects/geo-ui/src/lib/figma/geo-map/chrome/geo-map-location-chip/geo-map-location-chip.component.html","../../../projects/geo-ui/src/lib/figma/geo-map/chrome/geo-map-parcel-popup/geo-map-parcel-popup.component.ts","../../../projects/geo-ui/src/lib/figma/geo-map/chrome/geo-map-parcel-popup/geo-map-parcel-popup.component.html","../../../projects/geo-ui/src/lib/figma/geo-map/chrome/geo-map-search/geo-map-search.component.ts","../../../projects/geo-ui/src/lib/figma/geo-map/chrome/geo-map-search/geo-map-search.component.html","../../../projects/geo-ui/src/lib/figma/geo-map/chrome/geo-map-shell/geo-map-shell.component.ts","../../../projects/geo-ui/src/lib/figma/geo-map/chrome/geo-map-shell/geo-map-shell.component.html","../../../projects/geo-ui/src/public-api.ts","../../../projects/geo-ui/src/geoit-ui.ts"],"sourcesContent":["/**\n * GEO UI design tokens (TypeScript).\n * Mirror of CSS variables in design-tokens.scss — use for JS/theme config only.\n */\nexport const geoColorTokens = {\n primary: {\n default: '#9A4828',\n hover: '#7D3A20',\n light: '#B5643F',\n dark: '#2C1810',\n background: '#FAF6F2',\n backgroundAlt: '#F4EFE9',\n border: '#E7DFD6',\n surfaceLight: '#F7E8E0',\n secondaryHover: '#FAF6F2',\n },\n neutral: {\n 900: '#16141F',\n 800: '#23212A',\n 700: '#3D3A45',\n 600: '#565360',\n 500: '#6F6B78',\n 400: '#9894A0',\n 300: '#CDC9D2',\n 200: '#E6E3EA',\n 100: '#F4F3F6',\n 50: '#FAF9FB',\n white: '#FFFFFF',\n disabledText: '#8F8C96',\n },\n success: {\n dark: '#166534',\n default: '#16A34A',\n light: '#DCFCE7',\n },\n error: {\n dark: '#991B1B',\n default: '#DC2626',\n light: '#FEE2E2',\n },\n warning: {\n dark: '#92400E',\n default: '#D97706',\n light: '#FEF3C7',\n },\n info: {\n dark: '#1E40AF',\n default: '#2563EB',\n light: '#DBEAFE',\n },\n teal: {\n dark: '#0F766E',\n default: '#0D9488',\n light: '#CCFBF1',\n },\n} as const;\n\nexport type GeoColorTokens = typeof geoColorTokens;\n\n/** CSS custom property names for each token path. */\nexport const geoColorCssVars = {\n primary: {\n default: '--geo-color-primary-default',\n hover: '--geo-color-primary-hover',\n light: '--geo-color-primary-light',\n dark: '--geo-color-primary-dark',\n background: '--geo-color-primary-background',\n backgroundAlt: '--geo-color-primary-background-alt',\n border: '--geo-color-primary-border',\n surfaceLight: '--geo-color-primary-surface-light',\n secondaryHover: '--geo-color-primary-secondary-hover',\n soft: '--geo-color-primary-soft',\n softHover: '--geo-color-primary-soft-hover',\n softActive: '--geo-color-primary-soft-active',\n softStrong: '--geo-color-primary-soft-strong',\n focusRing: '--geo-color-primary-focus-ring',\n },\n neutral: {\n 900: '--geo-color-neutral-900',\n 800: '--geo-color-neutral-800',\n 700: '--geo-color-neutral-700',\n 600: '--geo-color-neutral-600',\n 500: '--geo-color-neutral-500',\n 400: '--geo-color-neutral-400',\n 300: '--geo-color-neutral-300',\n 200: '--geo-color-neutral-200',\n 100: '--geo-color-neutral-100',\n 50: '--geo-color-neutral-50',\n white: '--geo-color-neutral-white',\n disabledText: '--geo-color-neutral-disabled-text',\n },\n surface: {\n page: '--geo-color-surface-page',\n elevated: '--geo-color-surface-elevated',\n header: '--geo-color-surface-header',\n muted: '--geo-color-surface-muted',\n subtle: '--geo-color-surface-subtle',\n },\n success: {\n dark: '--geo-color-success-dark',\n default: '--geo-color-success-default',\n light: '--geo-color-success-light',\n },\n error: {\n dark: '--geo-color-error-dark',\n default: '--geo-color-error-default',\n light: '--geo-color-error-light',\n },\n warning: {\n dark: '--geo-color-warning-dark',\n default: '--geo-color-warning-default',\n light: '--geo-color-warning-light',\n },\n info: {\n dark: '--geo-color-info-dark',\n default: '--geo-color-info-default',\n light: '--geo-color-info-light',\n },\n teal: {\n dark: '--geo-color-teal-dark',\n default: '--geo-color-teal-default',\n light: '--geo-color-teal-light',\n },\n} as const;\n\nexport function cssVar(name: string): string {\n return `var(${name})`;\n}\n\n/** Typography design tokens (Inter + type scale). */\nexport const geoTypographyTokens = {\n fontFamily: \"'Inter', system-ui, -apple-system, 'Segoe UI', Roboto, sans-serif\",\n weight: {\n regular: 400,\n medium: 500,\n semibold: 600,\n bold: 700,\n },\n scale: {\n h1: { size: '28px', weight: 700, lineHeight: '36px' },\n h2: { size: '24px', weight: 700, lineHeight: '32px' },\n h3: { size: '20px', weight: 700, lineHeight: '28px' },\n h4: { size: '16px', weight: 700, lineHeight: '24px' },\n subtitle: { size: '14px', weight: 600, lineHeight: '20px' },\n body: { size: '14px', weight: 400, lineHeight: '20px' },\n bodySmall: { size: '13px', weight: 400, lineHeight: '18px' },\n caption: { size: '12px', weight: 400, lineHeight: '16px' },\n overline: { size: '11px', weight: 600, lineHeight: '16px' },\n tiny: { size: '10px', weight: 400, lineHeight: '14px' },\n },\n} as const;\n\nexport type GeoTypographyTokens = typeof geoTypographyTokens;\n\n/** Border radius design tokens (default 8px, layout-aligned scale). */\nexport const geoRadiusTokens = {\n xs: '4px',\n sm: '6px',\n default: '8px',\n md: '10px',\n lg: '12px',\n xl: '14px',\n '2xl': '16px',\n full: '999px',\n} as const;\n\nexport const geoRadiusCssVars = {\n xs: '--geo-radius-xs',\n sm: '--geo-radius-sm',\n default: '--geo-radius',\n md: '--geo-radius-md',\n lg: '--geo-radius-lg',\n xl: '--geo-radius-xl',\n '2xl': '--geo-radius-2xl',\n full: '--geo-radius-full',\n} as const;\n\nexport type GeoRadiusTokens = typeof geoRadiusTokens;\n\n/** Elevation / shadow tokens. */\nexport const geoShadowTokens = {\n xs: 'var(--geo-shadow-xs)',\n sm: 'var(--geo-shadow-sm)',\n md: 'var(--geo-shadow-md)',\n lg: 'var(--geo-shadow-lg)',\n drawer: 'var(--geo-shadow-drawer)',\n} as const;\n\nexport type GeoShadowTokens = typeof geoShadowTokens;\n","import { NgModule } from '@angular/core';\n\nimport { NzAffixModule } from 'ng-zorro-antd/affix';\nimport { NzAlertModule } from 'ng-zorro-antd/alert';\nimport { NzAnchorModule } from 'ng-zorro-antd/anchor';\nimport { NzAutocompleteModule } from 'ng-zorro-antd/auto-complete';\nimport { NzAvatarModule } from 'ng-zorro-antd/avatar';\nimport { NzBackTopModule } from 'ng-zorro-antd/back-top';\nimport { NzBadgeModule } from 'ng-zorro-antd/badge';\nimport { NzBreadCrumbModule } from 'ng-zorro-antd/breadcrumb';\nimport { NzButtonModule } from 'ng-zorro-antd/button';\nimport { NzCalendarModule } from 'ng-zorro-antd/calendar';\nimport { NzCardModule } from 'ng-zorro-antd/card';\nimport { NzCarouselModule } from 'ng-zorro-antd/carousel';\nimport { NzCascaderModule } from 'ng-zorro-antd/cascader';\nimport { NzCheckboxModule } from 'ng-zorro-antd/checkbox';\nimport { NzCollapseModule } from 'ng-zorro-antd/collapse';\nimport { NzCommentModule } from 'ng-zorro-antd/comment';\nimport { NzNoAnimationModule } from 'ng-zorro-antd/core/no-animation';\nimport { NzTransButtonModule } from 'ng-zorro-antd/core/trans-button';\nimport { NzWaveModule } from 'ng-zorro-antd/core/wave';\nimport { NzDatePickerModule } from 'ng-zorro-antd/date-picker';\nimport { NzDescriptionsModule } from 'ng-zorro-antd/descriptions';\nimport { NzDividerModule } from 'ng-zorro-antd/divider';\nimport { NzDrawerModule } from 'ng-zorro-antd/drawer';\nimport { NzDropDownModule } from 'ng-zorro-antd/dropdown';\nimport { NzEmptyModule } from 'ng-zorro-antd/empty';\nimport { NzFormModule } from 'ng-zorro-antd/form';\nimport { NzGridModule } from 'ng-zorro-antd/grid';\nimport { NzI18nModule } from 'ng-zorro-antd/i18n';\nimport { NzIconModule } from 'ng-zorro-antd/icon';\nimport { NzImageModule } from 'ng-zorro-antd/image';\nimport { NzInputModule } from 'ng-zorro-antd/input';\nimport { NzInputNumberModule } from 'ng-zorro-antd/input-number';\nimport { NzLayoutModule } from 'ng-zorro-antd/layout';\nimport { NzListModule } from 'ng-zorro-antd/list';\nimport { NzMentionModule } from 'ng-zorro-antd/mention';\nimport { NzMenuModule } from 'ng-zorro-antd/menu';\nimport { NzMessageModule } from 'ng-zorro-antd/message';\nimport { NzModalModule } from 'ng-zorro-antd/modal';\nimport { NzNotificationModule } from 'ng-zorro-antd/notification';\nimport { NzPageHeaderModule } from 'ng-zorro-antd/page-header';\nimport { NzPaginationModule } from 'ng-zorro-antd/pagination';\nimport { NzPopconfirmModule } from 'ng-zorro-antd/popconfirm';\nimport { NzPopoverModule } from 'ng-zorro-antd/popover';\nimport { NzProgressModule } from 'ng-zorro-antd/progress';\nimport { NzRadioModule } from 'ng-zorro-antd/radio';\nimport { NzRateModule } from 'ng-zorro-antd/rate';\nimport { NzResultModule } from 'ng-zorro-antd/result';\nimport { NzSelectModule } from 'ng-zorro-antd/select';\nimport { NzSkeletonModule } from 'ng-zorro-antd/skeleton';\nimport { NzSliderModule } from 'ng-zorro-antd/slider';\nimport { NzSpinModule } from 'ng-zorro-antd/spin';\nimport { NzStatisticModule } from 'ng-zorro-antd/statistic';\nimport { NzStepsModule } from 'ng-zorro-antd/steps';\nimport { NzSwitchModule } from 'ng-zorro-antd/switch';\nimport { NzTableModule } from 'ng-zorro-antd/table';\nimport { NzTabsModule } from 'ng-zorro-antd/tabs';\nimport { NzTagModule } from 'ng-zorro-antd/tag';\nimport { NzTimePickerModule } from 'ng-zorro-antd/time-picker';\nimport { NzTimelineModule } from 'ng-zorro-antd/timeline';\nimport { NzToolTipModule } from 'ng-zorro-antd/tooltip';\nimport { NzTransferModule } from 'ng-zorro-antd/transfer';\nimport { NzTreeModule } from 'ng-zorro-antd/tree';\nimport { NzTreeViewModule } from 'ng-zorro-antd/tree-view';\nimport { NzTreeSelectModule } from 'ng-zorro-antd/tree-select';\nimport { NzTypographyModule } from 'ng-zorro-antd/typography';\nimport { NzUploadModule } from 'ng-zorro-antd/upload';\nimport { NzResizableModule } from 'ng-zorro-antd/resizable';\nimport { NzPipesModule } from 'ng-zorro-antd/pipes';\nimport { NzSpaceModule } from 'ng-zorro-antd/space';\nimport { NzSegmentedModule } from 'ng-zorro-antd/segmented';\n\n@NgModule({\n exports: [\n NzAffixModule,\n NzAlertModule,\n NzAnchorModule,\n NzAutocompleteModule,\n NzAvatarModule,\n NzBackTopModule,\n NzBadgeModule,\n NzButtonModule,\n NzBreadCrumbModule,\n NzCalendarModule,\n NzCardModule,\n NzCarouselModule,\n NzCascaderModule,\n NzCheckboxModule,\n NzCollapseModule,\n NzCommentModule,\n NzDatePickerModule,\n NzDescriptionsModule,\n NzDividerModule,\n NzDrawerModule,\n NzDropDownModule,\n NzEmptyModule,\n NzFormModule,\n NzGridModule,\n NzI18nModule,\n NzIconModule,\n NzImageModule,\n NzInputModule,\n NzInputNumberModule,\n NzLayoutModule,\n NzListModule,\n NzMentionModule,\n NzMenuModule,\n NzMessageModule,\n NzModalModule,\n NzNoAnimationModule,\n NzNotificationModule,\n NzPageHeaderModule,\n NzPaginationModule,\n NzPopconfirmModule,\n NzPopoverModule,\n NzProgressModule,\n NzRadioModule,\n NzRateModule,\n NzResultModule,\n NzSelectModule,\n NzSkeletonModule,\n NzSliderModule,\n NzSpinModule,\n NzStatisticModule,\n NzStepsModule,\n NzSwitchModule,\n NzTableModule,\n NzTabsModule,\n NzTagModule,\n NzTimePickerModule,\n NzTimelineModule,\n NzToolTipModule,\n NzTransButtonModule,\n NzTransferModule,\n NzTreeModule,\n NzTreeViewModule,\n NzTreeSelectModule,\n NzTypographyModule,\n NzUploadModule,\n NzWaveModule,\n NzResizableModule,\n NzPipesModule,\n NzSpaceModule,\n NzSegmentedModule,\n ],\n})\nexport class NgZorroAntdModule {}\n","export type GeoAlertType = 'success' | 'error' | 'warning' | 'info';\n\nexport const UI_ALERT_DEFAULT_TITLES: Record<GeoAlertType, string> = {\n success: 'Thành công!',\n error: 'Lỗi!',\n warning: 'Cảnh báo!',\n info: 'Thông tin!',\n};\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n input,\n model,\n output,\n ViewEncapsulation,\n} from '@angular/core';\nimport { NzIconModule } from 'ng-zorro-antd/icon';\nimport { UI_ALERT_DEFAULT_TITLES, GeoAlertType } from './geo-alert.types';\n\n@Component({\n selector: 'geo-alert',\n standalone: true,\n imports: [NzIconModule],\n templateUrl: './geo-alert.component.html',\n styleUrl: './geo-alert.component.scss',\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'geo-alert-host',\n '[class.geo-alert-host--hidden]': '!visible()',\n },\n})\nexport class GeoAlertComponent {\n readonly type = input<GeoAlertType>('info');\n readonly title = input('');\n readonly message = input('');\n readonly closable = input(true);\n readonly visible = model(true);\n readonly showIcon = input(true);\n\n readonly closed = output<void>();\n\n readonly displayTitle = computed(\n () => this.title() || UI_ALERT_DEFAULT_TITLES[this.type()]\n );\n\n readonly iconType = computed(() => {\n switch (this.type()) {\n case 'success':\n return 'check-circle';\n case 'error':\n return 'close-circle';\n case 'warning':\n return 'exclamation-circle';\n default:\n return 'info-circle';\n }\n });\n\n onClose(): void {\n this.visible.set(false);\n this.closed.emit();\n }\n}\n","@if (visible()) {\n <div class=\"geo-alert\" [class]=\"'geo-alert--' + type()\" role=\"alert\">\n <div class=\"geo-alert__main\">\n @if (showIcon()) {\n <span class=\"geo-alert__icon\" nz-icon [nzType]=\"iconType()\" nzTheme=\"outline\"></span>\n }\n\n <div class=\"geo-alert__content\">\n <p class=\"geo-alert__title\">{{ displayTitle() }}</p>\n @if (message()) {\n <p class=\"geo-alert__message\">{{ message() }}</p>\n }\n </div>\n </div>\n\n @if (closable()) {\n <button type=\"button\" class=\"geo-alert__close\" aria-label=\"Đóng thông báo\" (click)=\"onClose()\">\n <span nz-icon nzType=\"close\" nzTheme=\"outline\"></span>\n </button>\n }\n </div>\n}\n","import { Location } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n inject,\n input,\n output,\n} from '@angular/core';\nimport { NzIconModule } from 'ng-zorro-antd/icon';\n\n/**\n * Nút quay lại dùng chung cho các page form/detail.\n * Mặc định `history.back()` (−1). Set `[historyBack]=\"false\"` nếu parent tự navigate.\n */\n@Component({\n selector: 'geo-back-button',\n standalone: true,\n imports: [NzIconModule],\n templateUrl: './geo-back-button.component.html',\n styleUrl: './geo-back-button.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'geo-back-button-host',\n },\n})\nexport class GeoBackButtonComponent {\n private readonly location = inject(Location);\n\n readonly ariaLabel = input('Quay lại');\n readonly title = input('Quay lại');\n readonly disabled = input(false);\n /** `true` (mặc định): `Location.back()` — về trang trước trong history. */\n readonly historyBack = input(true);\n\n readonly clicked = output<MouseEvent>();\n\n onClick(event: MouseEvent): void {\n if (this.disabled()) {\n return;\n }\n\n event.preventDefault();\n event.stopPropagation();\n this.clicked.emit(event);\n\n if (this.historyBack()) {\n this.location.back();\n }\n }\n}\n","<button\n type=\"button\"\n class=\"geo-back-button\"\n [attr.aria-label]=\"ariaLabel()\"\n [attr.title]=\"title() || ariaLabel()\"\n [disabled]=\"disabled()\"\n (click)=\"onClick($event)\"\n>\n <span nz-icon nzType=\"arrow-left\" nzTheme=\"outline\" aria-hidden=\"true\"></span>\n</button>\n","import { ChangeDetectionStrategy, Component, input, ViewEncapsulation } from '@angular/core';\nimport { RouterModule } from '@angular/router';\nimport { NzBreadCrumbModule } from 'ng-zorro-antd/breadcrumb';\nimport { NzIconModule } from 'ng-zorro-antd/icon';\nimport { GeoBreadcrumbItem } from './geo-breadcrumb.types';\n\n/**\n * Breadcrumb GEO — dựa trên `nz-breadcrumb`.\n * Item thường: neutral gray; item active (cuối): primary + semibold.\n */\n@Component({\n selector: 'geo-breadcrumb',\n standalone: true,\n imports: [RouterModule, NzBreadCrumbModule, NzIconModule],\n templateUrl: './geo-breadcrumb.component.html',\n styleUrl: './geo-breadcrumb.component.scss',\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'geo-breadcrumb-host',\n },\n})\nexport class GeoBreadcrumbComponent {\n readonly items = input<GeoBreadcrumbItem[]>([]);\n\n isActive(item: GeoBreadcrumbItem, index: number): boolean {\n if (item.active != null) {\n return item.active;\n }\n return index === this.items().length - 1;\n }\n}\n","<nav class=\"geo-breadcrumb\" aria-label=\"Breadcrumb\">\n <nz-breadcrumb class=\"geo-breadcrumb__antd\" [nzSeparator]=\"separatorTpl\">\n @for (item of items(); track $index) {\n <nz-breadcrumb-item>\n @if (item.link && !isActive(item, $index)) {\n <a\n class=\"geo-breadcrumb__link\"\n [routerLink]=\"item.link\"\n [queryParams]=\"item.queryParams || null\"\n >\n {{ item.label }}\n </a>\n } @else {\n <span\n class=\"geo-breadcrumb__text\"\n [class.geo-breadcrumb__text--active]=\"isActive(item, $index)\"\n [attr.aria-current]=\"isActive(item, $index) ? 'page' : null\"\n >\n {{ item.label }}\n </span>\n }\n </nz-breadcrumb-item>\n }\n </nz-breadcrumb>\n</nav>\n\n<ng-template #separatorTpl>\n <span class=\"geo-breadcrumb__separator\" nz-icon nzType=\"right\" nzTheme=\"outline\"></span>\n</ng-template>\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n input,\n output,\n} from '@angular/core';\nimport { NzIconModule } from 'ng-zorro-antd/icon';\nimport { NzToolTipModule } from 'ng-zorro-antd/tooltip';\nimport { GeoButtonAppearance, GeoButtonColor, GeoButtonTooltipPlacement } from './geo-button.types';\n\n@Component({\n selector: 'geo-button',\n standalone: true,\n imports: [NzIconModule, NzToolTipModule],\n templateUrl: './geo-button.component.html',\n styleUrl: './geo-button.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class GeoButtonComponent {\n readonly appearance = input<GeoButtonAppearance>('primary');\n readonly color = input<GeoButtonColor>('brand');\n readonly icon = input<string | undefined>(undefined);\n readonly iconTheme = input<'outline' | 'fill' | 'twotone'>('outline');\n /** Vị trí icon: `start` (trái) hoặc `end` (phải). */\n readonly iconPlacement = input<'start' | 'end'>('start');\n readonly iconOnly = input(false);\n readonly type = input<'button' | 'submit'>('button');\n readonly disabled = input(false);\n /** Tooltip Ant Design (`nz-tooltip`). Ưu tiên hơn `title` native. */\n readonly tooltip = input('');\n readonly tooltipPlacement = input<GeoButtonTooltipPlacement>('top');\n /** Trạng thái active (vd. toolbar toggle đang bật). */\n readonly active = input(false);\n /** Native `title` — fallback khi không set `tooltip`. */\n readonly title = input('');\n\n readonly clicked = output<MouseEvent>();\n\n readonly tooltipTitle = computed(() => this.tooltip() || this.title() || '');\n\n readonly classNames = computed(() => {\n const icon = this.icon();\n return {\n [`geo-button--${this.appearance()}`]: true,\n [`geo-button--${this.color()}`]: true,\n 'geo-button--icon-only': this.iconOnly(),\n 'geo-button--icon-end': !!icon && this.iconPlacement() === 'end',\n 'geo-button--active': this.active(),\n };\n });\n\n onClick(event: MouseEvent): void {\n if (!this.disabled()) {\n this.clicked.emit(event);\n }\n }\n}\n","<button\n [type]=\"type()\"\n [disabled]=\"disabled()\"\n class=\"geo-button\"\n [class]=\"classNames()\"\n [nz-tooltip]=\"tooltipTitle()\"\n [nzTooltipPlacement]=\"tooltipPlacement()\"\n [nzTooltipTrigger]=\"tooltipTitle() ? 'hover' : null\"\n [attr.aria-label]=\"tooltipTitle() || null\"\n [attr.aria-pressed]=\"active() ? true : null\"\n (click)=\"onClick($event)\"\n>\n @if (icon(); as iconName) {\n @if (iconPlacement() === 'start') {\n <span class=\"geo-button__icon\">\n <span nz-icon [nzType]=\"iconName\" [nzTheme]=\"iconTheme()\"></span>\n </span>\n }\n }\n @if (!iconOnly()) {\n <span class=\"geo-button__label\">\n <ng-content></ng-content>\n </span>\n }\n @if (icon(); as iconName) {\n @if (iconPlacement() === 'end') {\n <span class=\"geo-button__icon\">\n <span nz-icon [nzType]=\"iconName\" [nzTheme]=\"iconTheme()\"></span>\n </span>\n }\n }\n</button>\n","import {\n ChangeDetectionStrategy,\n Component,\n input,\n model,\n ViewEncapsulation,\n} from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { NgZorroAntdModule } from '../../ng-zorro/ng-zorro-antd.module';\n\n@Component({\n selector: 'geo-checkbox',\n standalone: true,\n imports: [NgZorroAntdModule, FormsModule],\n templateUrl: './geo-checkbox.component.html',\n styleUrl: './geo-checkbox.component.scss',\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class GeoCheckboxComponent {\n readonly label = input('');\n /** Two-way: `[(checked)]`. */\n readonly checked = model(false);\n readonly disabled = input(false);\n readonly indeterminate = input(false);\n\n onChange(value: boolean): void {\n this.checked.set(value);\n }\n}\n","<label\n nz-checkbox\n class=\"geo-checkbox\"\n [nzDisabled]=\"disabled()\"\n [nzIndeterminate]=\"indeterminate()\"\n [ngModel]=\"checked()\"\n (ngModelChange)=\"onChange($event)\"\n>{{ label() }}</label>\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n input,\n model,\n output,\n ViewEncapsulation,\n} from '@angular/core';\nimport { NgZorroAntdModule } from '../../ng-zorro/ng-zorro-antd.module';\nimport { NzIconModule } from 'ng-zorro-antd/icon';\nimport { GeoButtonComponent } from '../geo-button/geo-button.component';\n\n@Component({\n selector: 'geo-confirm-modal',\n standalone: true,\n imports: [NgZorroAntdModule, NzIconModule, GeoButtonComponent],\n templateUrl: './geo-confirm-modal.component.html',\n styleUrl: './geo-confirm-modal.component.scss',\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class GeoConfirmModalComponent {\n readonly visible = model(false);\n readonly title = input('Xác nhận xoá');\n readonly message = input('');\n readonly highlight = input('');\n readonly description = input('Hành động không thể hoàn tác, bạn chắc chắn muốn thực hiện?');\n readonly cancelText = input('Hủy');\n readonly confirmText = input('Xác nhận');\n readonly confirmLoading = input(false);\n readonly width = input<number | string>(445);\n readonly maskClosable = input(false);\n readonly closable = input(true);\n\n readonly confirm = output<void>();\n readonly cancel = output<void>();\n\n readonly hasDefaultBody = computed(\n () => !!(this.message() || this.highlight() || this.description())\n );\n\n onVisibleChange(visible: boolean): void {\n if (this.visible() === visible) {\n return;\n }\n\n this.visible.set(visible);\n }\n\n onCancel(): void {\n this.visible.set(false);\n this.cancel.emit();\n }\n\n onConfirm(): void {\n this.confirm.emit();\n }\n}\n","<nz-modal\n [nzVisible]=\"visible()\"\n [nzTitle]=\"''\"\n [nzFooter]=\"null\"\n [nzClosable]=\"false\"\n [nzMaskClosable]=\"maskClosable()\"\n [nzWidth]=\"width()\"\n nzWrapClassName=\"geo-confirm-modal-wrap\"\n nzClassName=\"geo-confirm-modal\"\n (nzVisibleChange)=\"onVisibleChange($event)\"\n>\n <ng-container *nzModalContent>\n <div class=\"geo-confirm-modal__content\">\n <div class=\"geo-confirm-modal__header\">\n <h2 class=\"geo-confirm-modal__title\">{{ title() }}</h2>\n @if (closable()) {\n <button\n type=\"button\"\n class=\"geo-confirm-modal__close\"\n aria-label=\"Đóng\"\n (click)=\"onCancel()\"\n >\n <span nz-icon nzType=\"close\" nzTheme=\"outline\"></span>\n </button>\n }\n </div>\n\n <div class=\"geo-confirm-modal__body\">\n @if (hasDefaultBody()) {\n <div class=\"geo-confirm-modal__message\">\n @if (message() || highlight()) {\n <p class=\"geo-confirm-modal__paragraph\">\n @if (message()) {\n <span>{{ message() }}</span>\n }\n @if (highlight()) {\n <strong class=\"geo-confirm-modal__highlight\">“{{ highlight() }}”</strong>\n }\n </p>\n }\n @if (description()) {\n <p class=\"geo-confirm-modal__paragraph\">{{ description() }}</p>\n }\n </div>\n } @else {\n <div class=\"geo-confirm-modal__message\">\n <ng-content></ng-content>\n </div>\n }\n </div>\n\n <div class=\"geo-confirm-modal__footer\">\n <geo-button appearance=\"secondary\" color=\"brand\" (clicked)=\"onCancel()\">\n {{ cancelText() }}\n </geo-button>\n <geo-button\n appearance=\"primary\"\n color=\"brand\"\n [disabled]=\"confirmLoading()\"\n (clicked)=\"onConfirm()\"\n >\n {{ confirmText() }}\n </geo-button>\n </div>\n </div>\n </ng-container>\n</nz-modal>\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n computed,\n forwardRef,\n inject,\n input,\n output,\n signal,\n ViewEncapsulation,\n} from '@angular/core';\nimport { ControlValueAccessor, FormsModule, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { NgZorroAntdModule } from '../../ng-zorro/ng-zorro-antd.module';\nimport { GeoDatePickerMode, GeoDatePickerSize } from './geo-date-picker.types';\n\nlet uiDatePickerErrorId = 0;\n\n@Component({\n selector: 'geo-date-picker',\n standalone: true,\n imports: [FormsModule, NgZorroAntdModule],\n templateUrl: './geo-date-picker.component.html',\n styleUrl: './geo-date-picker.component.scss',\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'geo-date-picker-host',\n '[class.geo-date-picker-host--default]': 'size() === \"default\"',\n '[class.geo-date-picker-host--small]': 'size() === \"small\"',\n '[class.geo-date-picker-host--block]': 'block()',\n '[class.geo-date-picker-host--error]': 'error()',\n '[style.width]': 'hostWidth()',\n },\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => GeoDatePickerComponent),\n multi: true,\n },\n ],\n})\nexport class GeoDatePickerComponent implements ControlValueAccessor {\n private readonly cdr = inject(ChangeDetectorRef);\n\n readonly label = input('');\n readonly placeholder = input('Chọn ngày');\n readonly format = input('dd/MM/yyyy');\n readonly mode = input<GeoDatePickerMode>('date');\n readonly size = input<GeoDatePickerSize>('default');\n readonly disabled = input(false);\n readonly required = input(false);\n readonly error = input(false);\n readonly errorMessage = input('');\n readonly allowClear = input(true);\n readonly showToday = input(true);\n readonly showTime = input(false);\n readonly block = input(false);\n readonly width = input<number | string | undefined>(undefined);\n readonly disabledDate = input<((current: Date) => boolean) | undefined>(undefined);\n\n readonly valueChange = output<Date | null>();\n\n readonly errorMessageId = `geo-date-picker-error-${++uiDatePickerErrorId}`;\n\n private readonly disabledFromCva = signal(false);\n readonly isDisabled = computed(() => this.disabled() || this.disabledFromCva());\n\n protected readonly value = signal<Date | null>(null);\n\n private onChange: (value: Date | null) => void = () => undefined;\n private onTouched: () => void = () => undefined;\n\n readonly hostWidth = computed(() => {\n const width = this.width();\n if (this.block() || width == null) {\n return null;\n }\n\n return typeof width === 'number' ? `${width}px` : width;\n });\n\n readonly controlClassNames = computed(() => ({\n 'geo-date-picker': true,\n [`geo-date-picker--${this.size()}`]: true,\n }));\n\n onValueChange(value: Date | null): void {\n this.value.set(value);\n this.onChange(value);\n this.onTouched();\n this.valueChange.emit(value);\n }\n\n writeValue(value: Date | null): void {\n this.value.set(value ?? null);\n this.cdr.markForCheck();\n }\n\n registerOnChange(fn: (value: Date | null) => void): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n this.disabledFromCva.set(isDisabled);\n this.cdr.markForCheck();\n }\n}\n","@if (label()) {\n <div class=\"geo-date-picker__label\">\n <span>{{ label() }}</span>\n @if (required()) {\n <span class=\"geo-date-picker__required\" aria-hidden=\"true\">*</span>\n }\n </div>\n}\n\n<nz-date-picker\n [class]=\"controlClassNames()\"\n nzDropdownClassName=\"geo-date-picker__dropdown\"\n [nzPlaceHolder]=\"placeholder()\"\n [nzFormat]=\"format()\"\n [nzMode]=\"mode()\"\n [nzDisabled]=\"isDisabled()\"\n [nzAllowClear]=\"allowClear()\"\n [nzShowToday]=\"showToday()\"\n [nzShowTime]=\"showTime()\"\n [nzDisabledDate]=\"disabledDate()\"\n [ngModel]=\"value()\"\n [attr.aria-invalid]=\"error() ? 'true' : null\"\n [attr.aria-describedby]=\"error() && errorMessage() ? errorMessageId : null\"\n (ngModelChange)=\"onValueChange($event)\"\n></nz-date-picker>\n\n@if (error() && errorMessage()) {\n <p class=\"geo-date-picker__error\" [id]=\"errorMessageId\" role=\"alert\">{{ errorMessage() }}</p>\n}\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n computed,\n forwardRef,\n inject,\n input,\n output,\n signal,\n ViewEncapsulation,\n} from '@angular/core';\nimport { ControlValueAccessor, FormsModule, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { NgZorroAntdModule } from '../../ng-zorro/ng-zorro-antd.module';\nimport { GeoDateRangeSize, GeoDateRangeValue } from './geo-date-range-picker.types';\n\nlet uiDateRangeErrorId = 0;\n\n@Component({\n selector: 'geo-date-range-picker',\n standalone: true,\n imports: [FormsModule, NgZorroAntdModule],\n templateUrl: './geo-date-range-picker.component.html',\n styleUrl: './geo-date-range-picker.component.scss',\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'geo-date-range-picker-host',\n '[class.geo-date-range-picker-host--default]': 'size() === \"default\"',\n '[class.geo-date-range-picker-host--small]': 'size() === \"small\"',\n '[class.geo-date-range-picker-host--block]': 'block()',\n '[class.geo-date-range-picker-host--error]': 'error()',\n '[style.width]': 'hostWidth()',\n },\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => GeoDateRangePickerComponent),\n multi: true,\n },\n ],\n})\nexport class GeoDateRangePickerComponent implements ControlValueAccessor {\n private readonly cdr = inject(ChangeDetectorRef);\n\n readonly label = input('');\n readonly placeholder = input<[string, string]>(['Từ ngày', 'Đến ngày']);\n readonly format = input('dd/MM/yyyy');\n readonly size = input<GeoDateRangeSize>('default');\n readonly disabled = input(false);\n readonly required = input(false);\n readonly error = input(false);\n readonly errorMessage = input('');\n readonly allowClear = input(true);\n readonly showTime = input(false);\n readonly block = input(false);\n readonly width = input<number | string | undefined>(undefined);\n readonly disabledDate = input<((current: Date) => boolean) | undefined>(undefined);\n readonly separator = input('→');\n\n readonly valueChange = output<GeoDateRangeValue>();\n\n readonly errorMessageId = `geo-date-range-picker-error-${++uiDateRangeErrorId}`;\n\n private readonly disabledFromCva = signal(false);\n readonly isDisabled = computed(() => this.disabled() || this.disabledFromCva());\n\n protected readonly value = signal<GeoDateRangeValue>(null);\n\n private onChange: (value: GeoDateRangeValue) => void = () => undefined;\n private onTouched: () => void = () => undefined;\n\n readonly hostWidth = computed(() => {\n const width = this.width();\n if (this.block() || width == null) {\n return null;\n }\n\n return typeof width === 'number' ? `${width}px` : width;\n });\n\n readonly controlClassNames = computed(() => ({\n 'geo-date-range-picker': true,\n [`geo-date-range-picker--${this.size()}`]: true,\n }));\n\n onValueChange(value: GeoDateRangeValue): void {\n this.value.set(value);\n this.onChange(value);\n this.onTouched();\n this.valueChange.emit(value);\n }\n\n writeValue(value: GeoDateRangeValue): void {\n this.value.set(value ?? null);\n this.cdr.markForCheck();\n }\n\n registerOnChange(fn: (value: GeoDateRangeValue) => void): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n this.disabledFromCva.set(isDisabled);\n this.cdr.markForCheck();\n }\n}\n","@if (label()) {\n <div class=\"geo-date-range-picker__label\">\n <span>{{ label() }}</span>\n @if (required()) {\n <span class=\"geo-date-range-picker__required\" aria-hidden=\"true\">*</span>\n }\n </div>\n}\n\n<nz-range-picker\n [class]=\"controlClassNames()\"\n nzDropdownClassName=\"geo-date-range-picker__dropdown\"\n [nzPlaceHolder]=\"placeholder()\"\n [nzFormat]=\"format()\"\n [nzDisabled]=\"isDisabled()\"\n [nzAllowClear]=\"allowClear()\"\n [nzShowTime]=\"showTime()\"\n [nzDisabledDate]=\"disabledDate()\"\n [nzSeparator]=\"separator()\"\n [ngModel]=\"value()\"\n [attr.aria-invalid]=\"error() ? 'true' : null\"\n [attr.aria-describedby]=\"error() && errorMessage() ? errorMessageId : null\"\n (ngModelChange)=\"onValueChange($event)\"\n></nz-range-picker>\n\n@if (error() && errorMessage()) {\n <p class=\"geo-date-range-picker__error\" [id]=\"errorMessageId\" role=\"alert\">{{ errorMessage() }}</p>\n}\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n computed,\n ElementRef,\n forwardRef,\n inject,\n input,\n output,\n signal,\n viewChild,\n ViewEncapsulation,\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { GeoButtonComponent } from '../geo-button/geo-button.component';\n\nlet uiFilePickerErrorId = 0;\n\n@Component({\n selector: 'geo-file-picker',\n standalone: true,\n imports: [GeoButtonComponent],\n templateUrl: './geo-file-picker.component.html',\n styleUrl: './geo-file-picker.component.scss',\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'geo-file-picker-host',\n '[class.geo-file-picker-host--block]': 'block()',\n '[class.geo-file-picker-host--error]': 'error()',\n '[class.geo-file-picker-host--disabled]': 'isDisabled()',\n '[style.width]': 'hostWidth()',\n },\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => GeoFilePickerComponent),\n multi: true,\n },\n ],\n})\nexport class GeoFilePickerComponent implements ControlValueAccessor {\n private readonly cdr = inject(ChangeDetectorRef);\n\n readonly fileInput = viewChild<ElementRef<HTMLInputElement>>('fileInput');\n\n readonly label = input('Tải file');\n readonly placeholder = input('Chọn giá trị');\n readonly buttonText = input('Chọn file');\n readonly required = input(false);\n readonly disabled = input(false);\n readonly accept = input('');\n readonly multiple = input(false);\n readonly error = input(false);\n readonly errorMessage = input('');\n readonly block = input(false);\n readonly width = input<number | string | undefined>(undefined);\n /**\n * Tên file đã upload (server) — hiện khi chưa có File local trong CVA.\n * Dùng cho flow: chọn file → upload → giữ tên từ API.\n */\n readonly selectedName = input('');\n\n readonly fileChange = output<File | File[] | null>();\n\n readonly errorMessageId = `geo-file-picker-error-${++uiFilePickerErrorId}`;\n\n private readonly disabledFromCva = signal(false);\n readonly isDisabled = computed(() => this.disabled() || this.disabledFromCva());\n\n protected readonly value = signal<File | File[] | null>(null);\n\n private onChange: (value: File | File[] | null) => void = () => undefined;\n private onTouched: () => void = () => undefined;\n\n readonly hostWidth = computed(() => {\n const width = this.width();\n if (this.block() || width == null) {\n return null;\n }\n\n return typeof width === 'number' ? `${width}px` : width;\n });\n\n readonly displayValue = computed(() => {\n const value = this.value();\n\n if (Array.isArray(value) && value.length > 0) {\n return value.map((file) => file.name).join(', ');\n }\n\n if (value && !Array.isArray(value)) {\n return value.name;\n }\n\n if (this.selectedName()) {\n return this.selectedName();\n }\n\n return this.placeholder();\n });\n\n readonly hasValue = computed(() => {\n const value = this.value();\n\n if (Array.isArray(value)) {\n return value.length > 0;\n }\n\n if (value != null) {\n return true;\n }\n\n return !!this.selectedName();\n });\n\n openFilePicker(): void {\n if (this.isDisabled()) {\n return;\n }\n\n this.fileInput()?.nativeElement.click();\n }\n\n onFileSelected(event: Event): void {\n const input = event.target as HTMLInputElement;\n const files = input.files;\n\n if (!files || files.length === 0) {\n return;\n }\n\n const nextValue = this.multiple() ? Array.from(files) : files[0];\n this.setValue(nextValue);\n input.value = '';\n }\n\n private setValue(value: File | File[] | null): void {\n this.value.set(value);\n this.onChange(value);\n this.onTouched();\n this.fileChange.emit(value);\n }\n\n writeValue(value: File | File[] | null): void {\n this.value.set(value);\n this.cdr.markForCheck();\n }\n\n registerOnChange(fn: (value: File | File[] | null) => void): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n this.disabledFromCva.set(isDisabled);\n this.cdr.markForCheck();\n }\n}\n","@if (label()) {\n <div class=\"geo-file-picker__label\">\n <span>{{ label() }}</span>\n @if (required()) {\n <span class=\"geo-file-picker__required\" aria-hidden=\"true\">*</span>\n }\n </div>\n}\n\n<div\n class=\"geo-file-picker__control\"\n [attr.aria-invalid]=\"error() ? 'true' : null\"\n [attr.aria-describedby]=\"error() && errorMessage() ? errorMessageId : null\"\n>\n <span\n class=\"geo-file-picker__value\"\n [class.geo-file-picker__value--placeholder]=\"!hasValue()\"\n >\n {{ displayValue() }}\n </span>\n\n <input\n #fileInput\n class=\"geo-file-picker__input\"\n type=\"file\"\n tabindex=\"-1\"\n [accept]=\"accept()\"\n [multiple]=\"multiple()\"\n [disabled]=\"isDisabled()\"\n (change)=\"onFileSelected($event)\"\n />\n\n <geo-button\n class=\"geo-file-picker__button\"\n appearance=\"primary\"\n color=\"brand\"\n icon=\"plus\"\n [disabled]=\"isDisabled()\"\n (clicked)=\"openFilePicker()\"\n >\n {{ buttonText() }}\n </geo-button>\n</div>\n\n@if (error() && errorMessage()) {\n <p class=\"geo-file-picker__error\" [id]=\"errorMessageId\" role=\"alert\">{{ errorMessage() }}</p>\n}\n","import { NzUploadFile, NzUploadXHRArgs } from 'ng-zorro-antd/upload';\nimport { Subscription } from 'rxjs';\n\n/** Extends Ant Design upload file with progress metadata for GEO UI. */\nexport interface GeoUploadFile extends NzUploadFile {\n /** Bytes uploaded so far (for \"100Kb / 200Kb\"). */\n loaded?: number;\n /** Upload speed in bytes/sec (for \"870kb/sec\"). */\n speed?: number;\n}\n\nexport type GeoUploadCustomRequest = (item: NzUploadXHRArgs) => Subscription;\n\nexport function geoFormatBytes(bytes?: number | null): string {\n if (bytes == null || Number.isNaN(bytes)) {\n return '0Kb';\n }\n const kb = bytes / 1024;\n if (kb < 1024) {\n return `${Math.round(kb)}Kb`;\n }\n return `${(kb / 1024).toFixed(kb >= 10240 ? 0 : 1)}Mb`;\n}\n\nexport function geoFormatSpeed(bytesPerSec?: number | null): string {\n if (bytesPerSec == null || bytesPerSec <= 0) {\n return '';\n }\n const kb = bytesPerSec / 1024;\n if (kb < 1024) {\n return `${Math.round(kb)}kb/sec`;\n }\n return `${(kb / 1024).toFixed(1)}Mb/sec`;\n}\n\nexport function geoUploadPercent(file: GeoUploadFile): number {\n if (file.percent != null) {\n return Math.max(0, Math.min(100, Math.round(file.percent)));\n }\n if (file.status === 'done' || file.status === 'success') {\n return 100;\n }\n return 0;\n}\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n computed,\n input,\n model,\n output,\n ViewEncapsulation,\n inject,\n} from '@angular/core';\nimport { NzIconModule } from 'ng-zorro-antd/icon';\nimport { NzUploadModule, NzUploadChangeParam, NzUploadFile, NzUploadXHRArgs } from 'ng-zorro-antd/upload';\nimport { Observable, Subscription } from 'rxjs';\nimport {\n GeoUploadCustomRequest,\n GeoUploadFile,\n geoFormatBytes,\n geoFormatSpeed,\n geoUploadPercent,\n} from './geo-upload.types';\n\n/**\n * Upload kéo-thả theo design GEO (dropzone + danh sách file có progress).\n * Dựa trên `nz-upload` (Ant Design). Form field gọn dùng `geo-file-picker`.\n */\n@Component({\n selector: 'geo-upload',\n standalone: true,\n imports: [NzIconModule, NzUploadModule],\n templateUrl: './geo-upload.component.html',\n styleUrl: './geo-upload.component.scss',\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'geo-upload-host',\n '[class.geo-upload-host--disabled]': 'disabled()',\n '[class.geo-upload-host--error]': 'error()',\n },\n})\nexport class GeoUploadComponent {\n private readonly cdr = inject(ChangeDetectorRef);\n\n /** Upload endpoint — bỏ trống nếu dùng `customRequest` / chỉ chọn file local. */\n readonly action = input<string | ((file: NzUploadFile) => string | Observable<string>)>('');\n readonly accept = input('.png,.jpg,.jpeg,.svg');\n /** Max size (bytes). Default 1MB. `0` = không giới hạn. */\n readonly maxSize = input(1024 * 1024);\n readonly multiple = input(true);\n readonly disabled = input(false);\n readonly error = input(false);\n readonly errorMessage = input('');\n readonly hint = input(\n 'Chỉ cho phép file dạng .png, .jpg, .jpeg, .svg và dung lượng không quá 1Mb'\n );\n readonly titlePrefix = input('Kéo thả ảnh hoặc');\n readonly selectText = input('Chọn file');\n readonly titleSuffix = input('để tải lên');\n readonly listTitle = input('Tập tin đính kèm');\n readonly showListTitle = input(true);\n /** Controlled file list. */\n readonly fileList = model<GeoUploadFile[]>([]);\n readonly headers = input<{} | ((file: NzUploadFile) => {} | Observable<{}>) | undefined>(undefined);\n readonly data = input<{} | ((file: NzUploadFile) => {} | Observable<{}>) | undefined>(undefined);\n readonly name = input('file');\n readonly withCredentials = input(false);\n readonly directory = input(false);\n /** Custom XHR — mặc định simulate progress khi không có `action`. */\n readonly customRequest = input<GeoUploadCustomRequest | undefined>(undefined);\n readonly beforeUpload = input<\n ((file: NzUploadFile, fileList: NzUploadFile[]) => boolean | Observable<boolean>) | undefined\n >(undefined);\n\n readonly change = output<NzUploadChangeParam>();\n readonly remove = output<GeoUploadFile>();\n readonly reject = output<{ file: File; reason: 'type' | 'size' }>();\n\n readonly formatBytes = geoFormatBytes;\n readonly formatSpeed = geoFormatSpeed;\n readonly percentOf = geoUploadPercent;\n\n readonly resolvedCustomRequest = computed<GeoUploadCustomRequest | undefined>(() => {\n const customRequest = this.customRequest();\n if (customRequest) {\n return customRequest;\n }\n if (!this.action()) {\n return (item) => this.simulateUpload(item);\n }\n return undefined;\n });\n\n onFileListChange(list: NzUploadFile[]): void {\n this.fileList.set(list as GeoUploadFile[]);\n }\n\n onChange(event: NzUploadChangeParam): void {\n this.fileList.set(event.fileList as GeoUploadFile[]);\n this.change.emit(event);\n }\n\n handleBeforeUpload = (\n file: NzUploadFile,\n _fileList: NzUploadFile[]\n ): boolean | Observable<boolean> => {\n const beforeUpload = this.beforeUpload();\n if (beforeUpload) {\n return beforeUpload(file, _fileList);\n }\n\n const raw = file as unknown as File;\n const name = (file.name || raw.name || '').toLowerCase();\n const accept = this.accept();\n if (accept) {\n const tokens = accept\n .split(',')\n .map((t) => t.trim().toLowerCase())\n .filter(Boolean);\n const ok = tokens.some((token) => {\n if (token.startsWith('.')) {\n return name.endsWith(token);\n }\n if (token.includes('/*')) {\n const prefix = token.replace('/*', '');\n return (file.type || raw.type || '').startsWith(prefix);\n }\n return (file.type || raw.type || '') === token;\n });\n if (!ok) {\n this.reject.emit({ file: raw, reason: 'type' });\n return false;\n }\n }\n\n const size = file.size ?? raw.size ?? 0;\n const maxSize = this.maxSize();\n if (maxSize > 0 && size > maxSize) {\n this.reject.emit({ file: raw, reason: 'size' });\n return false;\n }\n\n return true;\n };\n\n onRemove = (file: NzUploadFile): boolean => {\n this.remove.emit(file as GeoUploadFile);\n return true;\n };\n\n removeFile(file: GeoUploadFile, event: Event): void {\n event.preventDefault();\n event.stopPropagation();\n if (this.disabled()) {\n return;\n }\n if (this.onRemove(file) === false) {\n return;\n }\n this.fileList.set(this.fileList().filter((item) => item.uid !== file.uid));\n }\n\n progressLabel(file: GeoUploadFile): string {\n const total = file.size ?? file.originFileObj?.size ?? 0;\n const percent = this.percentOf(file);\n const loaded =\n file.loaded != null\n ? file.loaded\n : Math.round((percent / 100) * total);\n return `${this.formatBytes(loaded)}/ ${this.formatBytes(total)} (${percent}%)`;\n }\n\n speedLabel(file: GeoUploadFile): string {\n return this.formatSpeed(file.speed);\n }\n\n /** Demo / local upload khi không có action. */\n private simulateUpload(item: NzUploadXHRArgs): Subscription {\n const file = item.file as GeoUploadFile;\n const total = file.size ?? file.originFileObj?.size ?? 0;\n let loaded = 0;\n const started = Date.now();\n\n file.status = 'uploading';\n file.percent = 0;\n file.loaded = 0;\n file.speed = 0;\n\n const timer = window.setInterval(() => {\n const step = Math.max(total * 0.08, 16 * 1024);\n loaded = Math.min(total, loaded + step);\n const elapsedSec = Math.max((Date.now() - started) / 1000, 0.001);\n const percent = total > 0 ? Math.round((loaded / total) * 100) : 100;\n\n file.loaded = loaded;\n file.percent = percent;\n file.speed = loaded / elapsedSec;\n item.onProgress?.({ percent }, file);\n this.cdr.markForCheck();\n\n if (loaded >= total) {\n window.clearInterval(timer);\n file.status = 'done';\n file.percent = 100;\n file.loaded = total;\n item.onSuccess?.({}, file, null);\n this.cdr.markForCheck();\n }\n }, 200);\n\n return new Subscription(() => window.clearInterval(timer));\n }\n}\n","<div class=\"geo-upload\">\n <nz-upload\n class=\"geo-upload__dragger\"\n nzType=\"drag\"\n [nzAction]=\"action()\"\n [nzAccept]=\"accept()\"\n [nzMultiple]=\"multiple()\"\n [nzDisabled]=\"disabled()\"\n [nzDirectory]=\"directory()\"\n [nzName]=\"name()\"\n [nzHeaders]=\"headers()\"\n [nzData]=\"data()\"\n [nzWithCredentials]=\"withCredentials()\"\n [nzFileList]=\"fileList()\"\n [nzShowUploadList]=\"false\"\n [nzBeforeUpload]=\"handleBeforeUpload\"\n [nzCustomRequest]=\"resolvedCustomRequest()\"\n [nzRemove]=\"onRemove\"\n (nzFileListChange)=\"onFileListChange($event)\"\n (nzChange)=\"onChange($event)\"\n >\n <div class=\"geo-upload__dropzone\">\n <span class=\"geo-upload__icon-wrap\" aria-hidden=\"true\">\n <span class=\"geo-upload__icon\" nz-icon nzType=\"cloud-upload\" nzTheme=\"outline\"></span>\n </span>\n\n <div class=\"geo-upload__copy\">\n <p class=\"geo-upload__title\">\n <span>{{ titlePrefix() }} </span>\n <span class=\"geo-upload__select\">{{ selectText() }}</span>\n <span> {{ titleSuffix() }}</span>\n </p>\n\n @if (hint()) {\n <p class=\"geo-upload__hint\">{{ hint() }}</p>\n }\n </div>\n </div>\n </nz-upload>\n\n @if (fileList().length > 0) {\n <div class=\"geo-upload__list\">\n @if (showListTitle()) {\n <h4 class=\"geo-upload__list-title\">{{ listTitle() }}</h4>\n }\n\n <ul class=\"geo-upload__files\">\n @for (file of fileList(); track file.uid) {\n <li class=\"geo-upload__file\" [class.geo-upload__file--error]=\"file.status === 'error'\">\n <div class=\"geo-upload__file-icon\" aria-hidden=\"true\">\n <span nz-icon nzType=\"file\" nzTheme=\"outline\"></span>\n </div>\n\n <div class=\"geo-upload__file-main\">\n <div class=\"geo-upload__file-row\">\n <span class=\"geo-upload__file-name\" [title]=\"file.name\">{{ file.name }}</span>\n <button\n type=\"button\"\n class=\"geo-upload__file-remove\"\n aria-label=\"Xóa tập tin\"\n [disabled]=\"disabled()\"\n (click)=\"removeFile(file, $event)\"\n >\n <span nz-icon nzType=\"close\" nzTheme=\"outline\"></span>\n </button>\n </div>\n\n <div class=\"geo-upload__progress\" role=\"progressbar\" [attr.aria-valuenow]=\"percentOf(file)\" aria-valuemin=\"0\" aria-valuemax=\"100\">\n <div class=\"geo-upload__progress-bar\" [style.width.%]=\"percentOf(file)\"></div>\n </div>\n\n <div class=\"geo-upload__file-meta\">\n <span>{{ progressLabel(file) }}</span>\n <span>{{ speedLabel(file) }}</span>\n </div>\n </div>\n </li>\n }\n </ul>\n </div>\n }\n\n @if (error() && errorMessage()) {\n <p class=\"geo-upload__error\" role=\"alert\">{{ errorMessage() }}</p>\n }\n</div>\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n input,\n model,\n output,\n ViewEncapsulation,\n} from '@angular/core';\nimport { NgZorroAntdModule } from '../../ng-zorro/ng-zorro-antd.module';\nimport { NzIconModule } from 'ng-zorro-antd/icon';\nimport { GeoButtonComponent } from '../geo-button/geo-button.component';\n\n/**\n * Modal form dùng chung — API bám Ant Design Modal / ng-zorro nz-modal.\n * Header + footer cố định; body có thể scroll (`bodyScroll`).\n */\n@Component({\n selector: 'geo-form-modal',\n standalone: true,\n imports: [NgZorroAntdModule, NzIconModule, GeoButtonComponent],\n templateUrl: './geo-form-modal.component.html',\n styleUrl: './geo-form-modal.component.scss',\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class GeoFormModalComponent {\n /** Tương đương `open` (antd) / `nzVisible` (ng-zorro). */\n readonly open = model(false);\n readonly title = input('');\n /** Title chữ in hoa. Default `true` theo design. */\n readonly titleUppercase = input(true);\n readonly okText = input('Lưu');\n readonly cancelText = input('Hủy');\n /** Icon nút cancel (vd. `left` cho Quay lại). */\n readonly cancelIcon = input<string | undefined>(undefined);\n readonly cancelIconPlacement = input<'start' | 'end'>('start');\n /** Icon nút OK (vd. `right` cho Tiếp theo). */\n readonly okIcon = input<string | undefined>(undefined);\n readonly okIconPlacement = input<'start' | 'end'>('end');\n /** Nút phụ (vd. Lưu và khởi tạo lại). Chỉ hiện khi có text và không readonly. */\n readonly secondaryOkText = input('');\n /** Loading trên nút OK — giống antd `confirmLoading` / nz `nzOkLoading`. */\n readonly confirmLoading = input(false);\n /** Disable nút OK — giống antd `okButtonProps.disabled` / nz `nzOkDisabled`. */\n readonly okDisabled = input(false);\n /** Ẩn nút OK (xem chi tiết). */\n readonly readonly = input(false);\n readonly width = input<number | string>(720);\n readonly closable = input(true);\n readonly mask = input(true);\n readonly maskClosable = input(false);\n readonly keyboard = input(true);\n readonly centered = input(true);\n readonly zIndex = input(1000);\n readonly className = input('');\n readonly wrapClassName = input('');\n /** Body cuộn, header/footer cố định. */\n readonly bodyScroll = input(true);\n /** Max-height của vùng body khi `bodyScroll` (vd `'60vh'`, `400`). */\n readonly bodyMaxHeight = input<string | number>('60vh');\n\n readonly ok = output<void>();\n readonly secondaryOk = output<void>();\n readonly cancel = output<void>();\n readonly afterOpen = output<void>();\n readonly afterClose = output<void>();\n\n readonly resolvedWrapClassName = computed(() =>\n ['geo-form-modal-wrap', this.wrapClassName()].filter(Boolean).join(' ')\n );\n\n readonly resolvedClassName = computed(() =>\n ['geo-form-modal', this.className()].filter(Boolean).join(' ')\n );\n\n readonly bodyMaxHeightCss = computed(() => {\n const bodyMaxHeight = this.bodyMaxHeight();\n return typeof bodyMaxHeight === 'number' ? `${bodyMaxHeight}px` : bodyMaxHeight;\n });\n\n onOpenChange(open: boolean): void {\n if (this.open() === open) {\n return;\n }\n this.open.set(open);\n }\n\n onCancel(): void {\n this.open.set(false);\n this.cancel.emit();\n }\n\n onOk(): void {\n if (!this.okDisabled() && !this.confirmLoading()) {\n this.ok.emit();\n }\n }\n\n onSecondaryOk(): void {\n if (!this.okDisabled() && !this.confirmLoading()) {\n this.secondaryOk.emit();\n }\n }\n}\n","<nz-modal\n [nzVisible]=\"open()\"\n [nzTitle]=\"''\"\n [nzFooter]=\"null\"\n [nzClosable]=\"false\"\n [nzMask]=\"mask()\"\n [nzMaskClosable]=\"maskClosable()\"\n [nzKeyboard]=\"keyboard()\"\n [nzCentered]=\"centered()\"\n [nzWidth]=\"width()\"\n [nzZIndex]=\"zIndex()\"\n [nzWrapClassName]=\"resolvedWrapClassName()\"\n [nzClassName]=\"resolvedClassName()\"\n (nzVisibleChange)=\"onOpenChange($event)\"\n (nzAfterOpen)=\"afterOpen.emit()\"\n (nzAfterClose)=\"afterClose.emit()\"\n>\n <ng-container *nzModalContent>\n <div\n class=\"geo-form-modal__content\"\n [class.geo-form-modal__content--body-scroll]=\"bodyScroll()\"\n >\n <div class=\"geo-form-modal__header\">\n <h2\n class=\"geo-form-modal__title\"\n [class.geo-form-modal__title--uppercase]=\"titleUppercase()\"\n >\n {{ title() }}\n </h2>\n @if (closable()) {\n <button\n type=\"button\"\n class=\"geo-form-modal__close\"\n aria-label=\"Đóng\"\n (click)=\"onCancel()\"\n >\n <span nz-icon nzType=\"close\" nzTheme=\"outline\"></span>\n </button>\n }\n </div>\n\n <div\n class=\"geo-form-modal__body\"\n [style.--geo-form-modal-body-max-height]=\"bodyScroll() ? bodyMaxHeightCss() : null\"\n >\n <ng-content></ng-content>\n </div>\n\n <div class=\"geo-form-modal__footer\">\n <ng-content select=\"[footerStart]\"></ng-content>\n\n <div class=\"geo-form-modal__footer-actions\">\n <geo-button\n appearance=\"secondary\"\n color=\"brand\"\n [icon]=\"cancelIcon()\"\n [iconPlacement]=\"cancelIconPlacement()\"\n (clicked)=\"onCancel()\"\n >\n {{ readonly() ? 'Đóng' : cancelText() }}\n </geo-button>\n @if (!readonly() && secondaryOkText()) {\n <geo-button\n appearance=\"secondary\"\n color=\"brand\"\n icon=\"save\"\n [disabled]=\"okDisabled() || confirmLoading()\"\n (clicked)=\"onSecondaryOk()\"\n >\n {{ secondaryOkText() }}\n </geo-button>\n }\n @if (!readonly()) {\n <geo-button\n appearance=\"primary\"\n color=\"brand\"\n [icon]=\"confirmLoading() ? 'loading' : okIcon()\"\n [iconPlacement]=\"okIconPlacement()\"\n [disabled]=\"okDisabled() || confirmLoading()\"\n (clicked)=\"onOk()\"\n >\n {{ okText() }}\n </geo-button>\n }\n </div>\n </div>\n </div>\n </ng-container>\n</nz-modal>\n","export type GeoIconTheme = 'outline' | 'fill' | 'twotone';\n\nexport type GeoIconSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl' | number | string;\n\nexport const GEO_ICON_SIZE_MAP: Record<'xs' | 'sm' | 'md' | 'lg' | 'xl', string> = {\n xs: '12px',\n sm: '14px',\n md: '16px',\n lg: '20px',\n xl: '24px',\n};\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n input,\n ViewEncapsulation,\n} from '@angular/core';\nimport { NzIconModule } from 'ng-zorro-antd/icon';\nimport { GEO_ICON_SIZE_MAP, GeoIconSize, GeoIconTheme } from './geo-icon.types';\n\n/**\n * Icon wrapper — domain dùng `geo-icon`, không dùng `nz-icon` trực tiếp.\n * Wrap Ant Design icons (đã register qua `NZ_ICONS` ở app/Storybook).\n */\n@Component({\n selector: 'geo-icon',\n standalone: true,\n imports: [NzIconModule],\n templateUrl: './geo-icon.component.html',\n styleUrl: './geo-icon.component.scss',\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'geo-icon-host',\n '[style.--geo-icon-size]': 'resolvedSize()',\n '[style.color]': 'color() || null',\n '[class.geo-icon-host--spin]': 'spin()',\n },\n})\nexport class GeoIconComponent {\n /** Tên icon Ant Design (vd. `close`, `search`, `appstore`). */\n readonly type = input.required<string>();\n readonly theme = input<GeoIconTheme>('outline');\n readonly spin = input(false);\n /** xs | sm | md | lg | xl | number(px) | CSS size string */\n readonly size = input<GeoIconSize>('md');\n /** CSS color — ưu tiên design token, vd. `var(--geo-color-primary-default)` */\n readonly color = input<string | undefined>(undefined);\n\n readonly resolvedSize = computed(() => {\n const size = this.size();\n if (typeof size === 'number') {\n return `${size}px`;\n }\n if (size in GEO_ICON_SIZE_MAP) {\n return GEO_ICON_SIZE_MAP[size as keyof typeof GEO_ICON_SIZE_MAP];\n }\n return String(size);\n });\n}\n","<span\n class=\"geo-icon\"\n nz-icon\n [nzType]=\"type()\"\n [nzTheme]=\"theme()\"\n [nzSpin]=\"spin()\"\n></span>\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n computed,\n forwardRef,\n inject,\n input,\n output,\n signal,\n ViewEncapsulation,\n} from '@angular/core';\nimport { ControlValueAccessor, FormsModule, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { NzIconModule } from 'ng-zorro-antd/icon';\n\nlet uiInputErrorId = 0;\n\nexport type GeoInputType = 'text' | 'number' | 'password' | 'email';\n\n@Component({\n selector: 'geo-input',\n standalone: true,\n imports: [FormsModule, NzIconModule],\n templateUrl: './geo-input.component.html',\n styleUrl: './geo-input.component.scss',\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'geo-input-host',\n '[class.geo-input-host--block]': 'block()',\n '[class.geo-input-host--error]': 'error()',\n '[style.width]': 'hostWidth()',\n },\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => GeoInputComponent),\n multi: true,\n },\n ],\n})\nexport class GeoInputComponent implements ControlValueAccessor {\n private readonly cdr = inject(ChangeDetectorRef);\n\n readonly label = input('');\n readonly placeholder = input('');\n readonly type = input<GeoInputType>('text');\n readonly disabled = input(false);\n readonly readonly = input(false);\n readonly required = input(false);\n readonly error = input(false);\n readonly errorMessage = input('');\n readonly maxlength = input<number | undefined>(undefined);\n readonly prefixIcon = input<string | undefined>(undefined);\n readonly suffixIcon = input<string | undefined>(undefined);\n readonly allowClear = input(false);\n readonly block = input(false);\n readonly width = input<number | string | undefined>(undefined);\n\n readonly valueChange = output<string>();\n readonly enterPressed = output<void>();\n\n readonly errorMessageId = `geo-input-error-${++uiInputErrorId}`;\n\n private readonly disabledFromCva = signal(false);\n readonly isDisabled = computed(() => this.disabled() || this.disabledFromCva());\n\n protected readonly value = signal('');\n\n private onChange: (value: string) => void = () => undefined;\n private onTouched: () => void = () => undefined;\n\n readonly hostWidth = computed(() => {\n const width = this.width();\n if (this.block() || width == null) {\n return null;\n }\n\n return typeof width === 'number' ? `${width}px` : width;\n });\n\n readonly showClear = computed(\n () => this.allowClear() && !this.isDisabled() && !this.readonly() && !!this.value(),\n );\n\n onInput(value: string): void {\n this.value.set(value);\n this.onChange(value);\n this.valueChange.emit(value);\n }\n\n onBlur(): void {\n this.onTouched();\n }\n\n onClear(): void {\n this.onInput('');\n }\n\n writeValue(value: string | number | null): void {\n this.value.set(value == null ? '' : String(value));\n this.cdr.markForCheck();\n }\n\n registerOnChange(fn: (value: string) => void): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n this.disabledFromCva.set(isDisabled);\n this.cdr.markForCheck();\n }\n}\n","@if (label()) {\n <div class=\"geo-input__label\">\n <span>{{ label() }}</span>\n @if (required()) {\n <span class=\"geo-input__required\" aria-hidden=\"true\">*</span>\n }\n </div>\n}\n\n<div\n class=\"geo-input__control\"\n [class.geo-input__control--disabled]=\"isDisabled()\"\n [class.geo-input__control--error]=\"error()\"\n>\n @if (prefixIcon(); as prefix) {\n <span class=\"geo-input__icon\" nz-icon [nzType]=\"prefix\" nzTheme=\"outline\"></span>\n }\n\n <input\n class=\"geo-input__field\"\n [type]=\"type()\"\n [placeholder]=\"placeholder()\"\n [disabled]=\"isDisabled()\"\n [readonly]=\"readonly()\"\n [attr.maxlength]=\"maxlength() ?? null\"\n [attr.aria-invalid]=\"error() ? 'true' : null\"\n [attr.aria-describedby]=\"error() && errorMessage() ? errorMessageId : null\"\n [ngModel]=\"value()\"\n (ngModelChange)=\"onInput($event)\"\n (blur)=\"onBlur()\"\n (keyup.enter)=\"enterPressed.emit()\"\n />\n\n @if (showClear()) {\n <button type=\"button\" class=\"geo-input__clear\" aria-label=\"Xóa nội dung\" (click)=\"onClear()\">\n <span nz-icon nzType=\"close-circle\" nzTheme=\"fill\"></span>\n </button>\n }\n\n @if (suffixIcon(); as suffix) {\n <span class=\"geo-input__icon\" nz-icon [nzType]=\"suffix\" nzTheme=\"outline\"></span>\n }\n</div>\n\n@if (error() && errorMessage()) {\n <p class=\"geo-input__error\" [id]=\"errorMessageId\" role=\"alert\">{{ errorMessage() }}</p>\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n input,\n model,\n ViewEncapsulation,\n} from '@angular/core';\nimport { NzPaginationModule } from 'ng-zorro-antd/pagination';\n\n/**\n * Pagination gọn — wrap `nz-pagination`. Dùng cho panel/map (không kèm size changer như `geo-table-pagination`).\n */\n@Component({\n selector: 'geo-pagination',\n standalone: true,\n imports: [NzPaginationModule],\n templateUrl: './geo-pagination.component.html',\n styleUrl: './geo-pagination.component.scss',\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { class: 'geo-pagination-host' },\n})\nexport class GeoPaginationComponent {\n readonly pageIndex = model(1);\n readonly pageSize = model(10);\n readonly total = input(0);\n readonly size = input<'default' | 'small'>('default');\n readonly simple = input(false);\n readonly hideOnSinglePage = input(false);\n readonly showSizeChanger = input(false);\n readonly pageSizeOptions = input<number[]>([5, 10, 20, 50]);\n}\n","<div class=\"geo-pagination\">\n <nz-pagination\n [nzSize]=\"size()\"\n [nzSimple]=\"simple()\"\n [nzPageIndex]=\"pageIndex()\"\n [nzPageSize]=\"pageSize()\"\n [nzTotal]=\"total()\"\n [nzHideOnSinglePage]=\"hideOnSinglePage()\"\n [nzShowSizeChanger]=\"showSizeChanger()\"\n [nzPageSizeOptions]=\"pageSizeOptions()\"\n (nzPageIndexChange)=\"pageIndex.set($event)\"\n (nzPageSizeChange)=\"pageSize.set($event)\"\n ></nz-pagination>\n</div>\n","export type GeoTypographyVariant =\n | 'h1'\n | 'h2'\n | 'h3'\n | 'h4'\n | 'subtitle'\n | 'body'\n | 'body-small'\n | 'caption'\n | 'overline'\n | 'tiny';\n\nexport type GeoTypographyColor =\n | 'default'\n | 'secondary'\n | 'primary'\n | 'success'\n | 'warning'\n | 'danger'\n | 'disabled';\n\n/** Semantic HTML element rendered for each variant. */\nexport const GEO_TYPOGRAPHY_TAG: Record<GeoTypographyVariant, string> = {\n h1: 'h1',\n h2: 'h2',\n h3: 'h3',\n h4: 'h4',\n subtitle: 'p',\n body: 'p',\n 'body-small': 'p',\n caption: 'span',\n overline: 'span',\n tiny: 'span',\n};\n\nexport const GEO_TYPOGRAPHY_VARIANTS: {\n variant: GeoTypographyVariant;\n label: string;\n size: string;\n weight: string;\n lineHeight: string;\n usage: string;\n}[] = [\n {\n variant: 'h1',\n label: 'Heading 1',\n size: '28px',\n weight: 'Bold (700)',\n lineHeight: '36px',\n usage: 'Tiêu đề trang chính',\n },\n {\n variant: 'h2',\n label: 'Heading 2',\n size: '24px',\n weight: 'Bold (700)',\n lineHeight: '32px',\n usage: 'Tiêu đề section',\n },\n {\n variant: 'h3',\n label: 'Heading 3',\n size: '20px',\n weight: 'Bold (700)',\n lineHeight: '28px',\n usage: 'Tiêu đề component, section header',\n },\n {\n variant: 'h4',\n label: 'Heading 4',\n size: '16px',\n weight: 'Bold (700)',\n lineHeight: '24px',\n usage: 'Tiêu đề card, form section',\n },\n {\n variant: 'subtitle',\n label: 'Subtitle',\n size: '14px',\n weight: 'Semi Bold (600)',\n lineHeight: '20px',\n usage: 'Label, form label, table header',\n },\n {\n variant: 'body',\n label: 'Body',\n size: '14px',\n weight: 'Regular (400)',\n lineHeight: '20px',\n usage: 'Nội dung chính, input text',\n },\n {\n variant: 'body-small',\n label: 'Body Small',\n size: '13px',\n weight: 'Regular (400)',\n lineHeight: '18px',\n usage: 'Mô tả phụ, toast message',\n },\n {\n variant: 'caption',\n label: 'Caption',\n size: '12px',\n weight: 'Regular (400)',\n lineHeight: '16px',\n usage: 'Helper text, timestamp',\n },\n {\n variant: 'overline',\n label: 'Overline',\n size: '11px',\n weight: 'Semi Bold (600)',\n lineHeight: '16px',\n usage: 'Badge text, status label',\n },\n {\n variant: 'tiny',\n label: 'Tiny',\n size: '10px',\n weight: 'Regular (400)',\n lineHeight: '14px',\n usage: 'Hex code, footnote',\n },\n];\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n input,\n ViewEncapsulation,\n} from '@angular/core';\nimport {\n GEO_TYPOGRAPHY_TAG,\n GeoTypographyColor,\n GeoTypographyVariant,\n} from './geo-typography.types';\n\n/**\n * Typography based on Ant Design Typography, styled with GEO type scale (Inter).\n *\n * @example\n * ```html\n * <geo-typography variant=\"h1\">Page title</geo-typography>\n * <geo-typography variant=\"body\" color=\"secondary\">Helper</geo-typography>\n * ```\n */\n@Component({\n selector: 'geo-typography',\n standalone: true,\n template: `<ng-content></ng-content>`,\n styleUrl: './geo-typography.component.scss',\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '[class]': 'hostClassList()',\n '[attr.role]': 'headingRole()',\n '[attr.aria-level]': 'headingLevel()',\n },\n})\nexport class GeoTypographyComponent {\n /** Type scale variant from the design system. */\n readonly variant = input<GeoTypographyVariant>('body');\n /** Semantic text color. */\n readonly color = input<GeoTypographyColor>('default');\n /** Force bold weight (overrides variant weight when true). */\n readonly strong = input(false);\n /** Underline text decoration. */\n readonly underline = input(false);\n /** Strikethrough text decoration. */\n readonly delete = input(false);\n /** Mark / highlight background. */\n readonly mark = input(false);\n /** Monospace code appearance. */\n readonly code = input(false);\n /** Disabled appearance */\n readonly disabled = input(false);\n\n readonly nzType = computed<'secondary' | 'success' | 'warning' | 'danger' | undefined>(() => {\n switch (this.color()) {\n case 'secondary':\n return 'secondary';\n case 'success':\n return 'success';\n case 'warning':\n return 'warning';\n case 'danger':\n return 'danger';\n default:\n return undefined;\n }\n });\n\n readonly hostClassList = computed(() => {\n const classes = [\n 'geo-typography',\n 'ant-typography',\n `geo-typography--${this.variant()}`,\n `geo-typography--color-${this.color()}`,\n ];\n if (this.strong()) classes.push('geo-typography--strong');\n if (this.underline()) classes.push('geo-typography--underline');\n if (this.delete()) classes.push('geo-typography--delete');\n if (this.mark()) classes.push('geo-typography--mark');\n if (this.code()) classes.push('geo-typography--code');\n if (this.disabled()) classes.push('geo-typography--disabled', 'ant-typography-disabled');\n const nzType = this.nzType();\n if (nzType) classes.push(`ant-typography-${nzType}`);\n return classes.join(' ');\n });\n\n readonly headingRole = computed(() => {\n const tag = GEO_TYPOGRAPHY_TAG[this.variant()];\n return tag.startsWith('h') ? 'heading' : null;\n });\n\n readonly headingLevel = computed(() => {\n switch (this.variant()) {\n case 'h1':\n return 1;\n case 'h2':\n return 2;\n case 'h3':\n return 3;\n case 'h4':\n return 4;\n default:\n return null;\n }\n });\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n input,\n ViewEncapsulation,\n} from '@angular/core';\nimport { GeoTypographyComponent } from '../geo-typography/geo-typography.component';\nimport { GeoTypographyVariant } from '../geo-typography/geo-typography.types';\n\n/**\n * Page title GEO — chữ in hoa đậm + gạch chân ngắn màu primary (theo design).\n */\n@Component({\n selector: 'geo-page-title',\n standalone: true,\n imports: [GeoTypographyComponent],\n templateUrl: './geo-page-title.component.html',\n styleUrl: './geo-page-title.component.scss',\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'geo-page-title-host',\n },\n})\nexport class GeoPageTitleComponent {\n /** Nội dung tiêu đề. */\n readonly title = input('');\n /** Tự chuyển uppercase. Default `true`. */\n readonly uppercase = input(true);\n /** Chiều rộng gạch chân (px hoặc CSS size). Default `56px`. */\n readonly accentWidth = input<number | string>(56);\n /** Độ dày gạch chân. Default `4px`. */\n readonly accentHeight = input<number | string>(4);\n /** Heading level → geo-typography variant. */\n readonly level = input<1 | 2 | 3 | 4>(3);\n\n readonly typographyVariant = computed(\n () => `h${this.level()}` as GeoTypographyVariant\n );\n\n readonly accentWidthCss = computed(() => {\n const width = this.accentWidth();\n return typeof width === 'number' ? `${width}px` : width;\n });\n\n readonly accentHeightCss = computed(() => {\n const height = this.accentHeight();\n return typeof height === 'number' ? `${height}px` : height;\n });\n}\n","<div\n class=\"geo-page-title\"\n [class.geo-page-title--uppercase]=\"uppercase()\"\n>\n <geo-typography [variant]=\"typographyVariant()\">\n @if (title()) {\n {{ title() }}\n } @else {\n <ng-content></ng-content>\n }\n </geo-typography>\n <span\n class=\"geo-page-title__accent\"\n aria-hidden=\"true\"\n [style.width]=\"accentWidthCss()\"\n [style.height]=\"accentHeightCss()\"\n ></span>\n</div>\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n computed,\n forwardRef,\n inject,\n input,\n output,\n signal,\n ViewEncapsulation,\n} from '@angular/core';\nimport { ControlValueAccessor, FormsModule, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { NgZorroAntdModule } from '../../ng-zorro/ng-zorro-antd.module';\nimport {\n GeoRadioButtonAppearance,\n GeoRadioLayout,\n GeoRadioOption,\n GeoRadioSize,\n} from './geo-radio.types';\n\nlet uiRadioErrorId = 0;\n\n@Component({\n selector: 'geo-radio',\n standalone: true,\n imports: [FormsModule, NgZorroAntdModule],\n templateUrl: './geo-radio.component.html',\n styleUrl: './geo-radio.component.scss',\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'geo-radio-host',\n '[class.geo-radio-host--block]': 'block()',\n '[class.geo-radio-host--error]': 'error()',\n '[class.geo-radio-host--vertical]': 'layout() === \"vertical\"',\n '[class.geo-radio-host--button]': 'buttonStyle()',\n },\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => GeoRadioComponent),\n multi: true,\n },\n ],\n})\nexport class GeoRadioComponent implements ControlValueAccessor {\n private readonly cdr = inject(ChangeDetectorRef);\n\n readonly options = input<GeoRadioOption[]>([]);\n readonly label = input('');\n readonly size = input<GeoRadioSize>('default');\n readonly layout = input<GeoRadioLayout>('horizontal');\n /** `true` → dùng `nz-radio-button` thay vì `nz-radio` */\n readonly buttonStyle = input(false);\n /** Chỉ áp dụng khi `buttonStyle: true` */\n readonly buttonAppearance = input<GeoRadioButtonAppearance>('outline');\n readonly disabled = input(false);\n readonly required = input(false);\n readonly error = input(false);\n readonly errorMessage = input('');\n readonly block = input(false);\n\n readonly valueChange = output<string | number | null>();\n\n readonly errorMessageId = `geo-radio-error-${++uiRadioErrorId}`;\n\n private readonly disabledFromCva = signal(false);\n readonly isDisabled = computed(() => this.disabled() || this.disabledFromCva());\n\n protected readonly value = signal<string | number | null>(null);\n\n private onChange: (value: string | number | null) => void = () => undefined;\n private onTouched: () => void = () => undefined;\n\n onValueChange(value: string | number | null): void {\n this.value.set(value);\n this.onChange(value);\n this.onTouched();\n this.valueChange.emit(value);\n }\n\n writeValue(value: string | number | null): void {\n this.value.set(value ?? null);\n this.cdr.markForCheck();\n }\n\n registerOnChange(fn: (value: string | number | null) => void): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n this.disabledFromCva.set(isDisabled);\n this.cdr.markForCheck();\n }\n}\n","@if (label()) {\n <div class=\"geo-radio__label\">\n <span>{{ label() }}</span>\n @if (required()) {\n <span class=\"geo-radio__required\" aria-hidden=\"true\">*</span>\n }\n </div>\n}\n\n<nz-radio-group\n class=\"geo-radio\"\n [class.geo-radio--vertical]=\"layout() === 'vertical'\"\n [nzSize]=\"size()\"\n [nzDisabled]=\"isDisabled()\"\n [nzButtonStyle]=\"buttonAppearance()\"\n [ngModel]=\"value()\"\n [attr.aria-invalid]=\"error() ? 'true' : null\"\n [attr.aria-describedby]=\"error() && errorMessage() ? errorMessageId : null\"\n (ngModelChange)=\"onValueChange($event)\"\n>\n @for (option of options(); track option.value) {\n @if (buttonStyle()) {\n <label\n nz-radio-button\n class=\"geo-radio__item\"\n [nzValue]=\"option.value\"\n [nzDisabled]=\"option.disabled ?? false\"\n >\n {{ option.label }}\n </label>\n } @else {\n <label\n nz-radio\n class=\"geo-radio__item\"\n [nzValue]=\"option.value\"\n [nzDisabled]=\"option.disabled ?? false\"\n >\n {{ option.label }}\n </label>\n }\n }\n</nz-radio-group>\n\n@if (error() && errorMessage()) {\n <p class=\"geo-radio__error\" [id]=\"errorMessageId\" role=\"alert\">{{ errorMessage() }}</p>\n}\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n computed,\n forwardRef,\n inject,\n input,\n output,\n signal,\n ViewEncapsulation,\n} from '@angular/core';\nimport { ControlValueAccessor, FormsModule, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { NgZorroAntdModule } from '../../ng-zorro/ng-zorro-antd.module';\nimport { GeoSelectMode, GeoSelectOption, GeoSelectSize } from './geo-select.types';\n\nlet uiSelectErrorId = 0;\n\n@Component({\n selector: 'geo-select',\n standalone: true,\n imports: [FormsModule, NgZorroAntdModule],\n templateUrl: './geo-select.component.html',\n styleUrl: './geo-select.component.scss',\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'geo-select-host',\n '[class.geo-select-host--default]': 'size() === \"default\"',\n '[class.geo-select-host--small]': 'size() === \"small\"',\n '[class.geo-select-host--block]': 'block()',\n '[class.geo-select-host--error]': 'error()',\n '[style.width]': 'hostWidth()',\n },\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => GeoSelectComponent),\n multi: true,\n },\n ],\n})\nexport class GeoSelectComponent implements ControlValueAccessor {\n private readonly cdr = inject(ChangeDetectorRef);\n\n readonly options = input<GeoSelectOption[]>([]);\n readonly label = input('');\n readonly placeholder = input('Chọn giá trị');\n readonly size = input<GeoSelectSize>('default');\n readonly mode = input<GeoSelectMode>('default');\n readonly disabled = input(false);\n readonly required = input(false);\n readonly error = input(false);\n readonly errorMessage = input('');\n readonly allowClear = input(true);\n readonly showSearch = input(false);\n readonly block = input(false);\n readonly width = input<number | string | undefined>(undefined);\n\n readonly valueChange = output<string | number | Array<string | number> | null>();\n\n readonly errorMessageId = `geo-select-error-${++uiSelectErrorId}`;\n\n private readonly disabledFromCva = signal(false);\n readonly isDisabled = computed(() => this.disabled() || this.disabledFromCva());\n\n protected readonly value = signal<string | number | Array<string | number> | null>(null);\n\n private onChange: (value: string | number | Array<string | number> | null) => void = () => undefined;\n private onTouched: () => void = () => undefined;\n\n readonly hostWidth = computed(() => {\n const width = this.width();\n if (this.block() || width == null) {\n return null;\n }\n\n return typeof width === 'number' ? `${width}px` : width;\n });\n\n readonly controlClassNames = computed(() => ({\n 'geo-select': true,\n [`geo-select--${this.size()}`]: true,\n }));\n\n onValueChange(value: string | number | Array<string | number> | null): void {\n this.value.set(value);\n this.onChange(value);\n this.onTouched();\n this.valueChange.emit(value);\n }\n\n writeValue(value: string | number | Array<string | number> | null): void {\n this.value.set(value);\n this.cdr.markForCheck();\n }\n\n registerOnChange(fn: (value: string | number | Array<string | number> | null) => void): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n this.disabledFromCva.set(isDisabled);\n this.cdr.markForCheck();\n }\n}\n","@if (label()) {\n <div class=\"geo-select__label\">\n <span>{{ label() }}</span>\n @if (required()) {\n <span class=\"geo-select__required\" aria-hidden=\"true\">*</span>\n }\n </div>\n}\n\n<nz-select\n [class]=\"controlClassNames()\"\n nzDropdownClassName=\"geo-select__dropdown\"\n [nzPlaceHolder]=\"placeholder()\"\n [nzDisabled]=\"isDisabled()\"\n [nzAllowClear]=\"allowClear()\"\n [nzShowSearch]=\"showSearch()\"\n [nzMode]=\"mode()\"\n [nzOptionHeightPx]=\"36\"\n [nzOptionOverflowSize]=\"10\"\n [ngModel]=\"value()\"\n [attr.aria-invalid]=\"error() ? 'true' : null\"\n [attr.aria-describedby]=\"error() && errorMessage() ? errorMessageId : null\"\n (ngModelChange)=\"onValueChange($event)\"\n>\n @for (option of options(); track option.value) {\n <nz-option\n [nzLabel]=\"option.label\"\n [nzValue]=\"option.value\"\n [nzDisabled]=\"option.disabled ?? false\"\n ></nz-option>\n }\n</nz-select>\n\n@if (error() && errorMessage()) {\n <p class=\"geo-select__error\" [id]=\"errorMessageId\" role=\"alert\">{{ errorMessage() }}</p>\n}\n","import { ChangeDetectionStrategy, Component, input, model, ViewEncapsulation } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { NzSliderModule } from 'ng-zorro-antd/slider';\n\n/**\n * Slider (opacity / range) — wrap `nz-slider`. Domain dùng `geo-slider`, không import NzSliderModule.\n */\n@Component({\n selector: 'geo-slider',\n standalone: true,\n imports: [FormsModule, NzSliderModule],\n templateUrl: './geo-slider.component.html',\n styleUrl: './geo-slider.component.scss',\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { class: 'geo-slider-host' },\n})\nexport class GeoSliderComponent {\n readonly value = model(0);\n readonly min = input(0);\n readonly max = input(100);\n readonly step = input(1);\n readonly disabled = input(false);\n readonly tipFormatter = input<((value: number) => string) | undefined>(undefined);\n\n onChange(next: number): void {\n this.value.set(next);\n }\n}\n","<div class=\"geo-slider\">\n <nz-slider\n [ngModel]=\"value()\"\n (ngModelChange)=\"onChange($event)\"\n [nzMin]=\"min()\"\n [nzMax]=\"max()\"\n [nzStep]=\"step()\"\n [nzDisabled]=\"disabled()\"\n [nzTipFormatter]=\"tipFormatter()\"\n ></nz-slider>\n</div>\n","/**\n * Semantic color variants for status badges (design: Status Badge Colors).\n */\nexport type GeoStatusColor =\n | 'success'\n | 'primary'\n | 'error'\n | 'warning'\n | 'info'\n | 'teal'\n | 'neutral';\n\n/**\n * Preset keys — semantic colors + legacy aliases used by tables/forms.\n */\nexport type GeoStatusPreset =\n | GeoStatusColor\n | 'completed'\n | 'cancelled'\n | 'in_progress'\n | 'adjusting';\n\n/** Map legacy / alias presets → semantic color. */\nexport const GEO_STATUS_COLOR_MAP: Record<GeoStatusPreset, GeoStatusColor> = {\n success: 'success',\n primary: 'primary',\n error: 'error',\n warning: 'warning',\n info: 'info',\n teal: 'teal',\n neutral: 'neutral',\n completed: 'success',\n cancelled: 'error',\n in_progress: 'primary',\n adjusting: 'warning',\n};\n\nexport const GEO_STATUS_LABELS: Record<GeoStatusPreset, string> = {\n success: 'Sẵn sàng',\n primary: 'Đang mượn',\n error: 'Từ chối',\n warning: 'Bản nháp',\n info: 'Đã nộp',\n teal: 'Trả kết quả',\n neutral: 'Chưa xử lý',\n completed: 'Hoàn thành',\n cancelled: 'Hủy bỏ',\n in_progress: 'Đang thực hiện',\n adjusting: 'Đang điều chỉnh',\n};\n\n/** @deprecated Use GEO_STATUS_LABELS */\nexport const UI_STATUS_LABELS = GEO_STATUS_LABELS;\n","import { ChangeDetectionStrategy, Component, computed, input } from '@angular/core';\nimport {\n GEO_STATUS_COLOR_MAP,\n GEO_STATUS_LABELS,\n GeoStatusColor,\n GeoStatusPreset,\n} from './geo-status-tag.types';\n\n@Component({\n selector: 'geo-status-tag',\n standalone: true,\n templateUrl: './geo-status-tag.component.html',\n styleUrl: './geo-status-tag.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class GeoStatusTagComponent {\n /**\n * Status preset or free-form string.\n * Semantic: success | primary | error | warning | info | teal | neutral\n * Legacy: completed | cancelled | in_progress | adjusting\n */\n readonly status = input<GeoStatusPreset | string>('success');\n /** Override label text. */\n readonly label = input<string | undefined>(undefined);\n /** Show leading status dot (design default). */\n readonly showDot = input(true);\n\n readonly resolvedColor = computed<GeoStatusColor>(() => {\n const status = this.status();\n if (status in GEO_STATUS_COLOR_MAP) {\n return GEO_STATUS_COLOR_MAP[status as GeoStatusPreset];\n }\n\n const normalized = status\n .toLowerCase()\n .replace(/\\s+/g, '_')\n .normalize('NFD')\n .replace(/[\\u0300-\\u036f]/g, '');\n\n if (normalized.includes('san_sang') || normalized.includes('hoan')) return 'success';\n if (normalized.includes('tu_choi') || normalized.includes('huy')) return 'error';\n if (normalized.includes('ban_thao') || normalized.includes('dieu_chinh')) return 'warning';\n if (normalized.includes('da_nop') || normalized.includes('nop')) return 'info';\n if (normalized.includes('tra_ket_qua') || normalized.includes('ket_qua')) return 'teal';\n if (normalized.includes('chua_xu_ly') || normalized.includes('cho')) return 'neutral';\n if (normalized.includes('muon') || normalized.includes('thuc_hien')) return 'primary';\n return 'primary';\n });\n\n readonly displayLabel = computed(() => {\n const label = this.label();\n if (label) return label;\n const status = this.status();\n if (status in GEO_STATUS_LABELS) {\n return GEO_STATUS_LABELS[status as GeoStatusPreset];\n }\n return status;\n });\n}\n","<span\n class=\"geo-status-tag\"\n [class]=\"'geo-status-tag geo-status-tag--' + resolvedColor()\"\n>\n @if (showDot()) {\n <span class=\"geo-status-tag__dot\" aria-hidden=\"true\"></span>\n }\n <span class=\"geo-status-tag__label\">{{ displayLabel() }}</span>\n</span>\n","import {\n ChangeDetectionStrategy,\n Component,\n input,\n model,\n output,\n ViewEncapsulation,\n} from '@angular/core';\nimport { NzIconModule } from 'ng-zorro-antd/icon';\nimport { GeoStepperOrientation, GeoStepperStep } from './geo-stepper.types';\n\n/**\n * Steps / Stepper GEO — horizontal (mặc định) hoặc vertical.\n *\n * Custom qua `steps`, `activeIndex`, `orientation`, `clickable`.\n * Trong form modal: đặt `<geo-stepper>` vào body (content projection).\n *\n * @example\n * ```html\n * <geo-stepper\n * [steps]=\"[\n * { key: 'a', label: 'Bước 1' },\n * { key: 'b', label: 'Bước 2' }\n * ]\"\n * [activeIndex]=\"0\"\n * orientation=\"horizontal\"\n * (activeIndexChange)=\"onStep($event)\"\n * ></geo-stepper>\n * ```\n */\n@Component({\n selector: 'geo-stepper',\n standalone: true,\n imports: [NzIconModule],\n templateUrl: './geo-stepper.component.html',\n styleUrl: './geo-stepper.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {\n class: 'geo-stepper-host',\n '[class.geo-stepper-host--vertical]': 'orientation() === \"vertical\"',\n '[class.geo-stepper-host--horizontal]': 'orientation() === \"horizontal\"',\n },\n})\nexport class GeoStepperComponent {\n readonly steps = input<GeoStepperStep[]>([]);\n readonly activeIndex = model(0);\n /** Mặc định horizontal theo design form modal. */\n readonly orientation = input<GeoStepperOrientation>('horizontal');\n /** Cho phép click để đổi bước. */\n readonly clickable = input(true);\n\n readonly stepSelect = output<{ index: number; step: GeoStepperStep }>();\n\n trackByIndex(index: number): number {\n return index;\n }\n\n isActive(index: number): boolean {\n return index === this.activeIndex();\n }\n\n isCompleted(index: number): boolean {\n return index < this.activeIndex();\n }\n\n isPending(index: number): boolean {\n return index > this.activeIndex();\n }\n\n onSelect(index: number, step: GeoStepperStep): void {\n if (!this.clickable() || step.disabled || index === this.activeIndex()) {\n return;\n }\n this.activeIndex.set(index);\n this.stepSelect.emit({ index, step });\n }\n}\n","<nav class=\"geo-stepper\" [attr.aria-label]=\"'Các bước'\">\n <ol class=\"geo-stepper__list\">\n @for (step of steps(); track trackByIndex($index); let i = $index; let last = $last) {\n <li\n class=\"geo-stepper__item\"\n [class.geo-stepper__item--active]=\"isActive(i)\"\n [class.geo-stepper__item--completed]=\"isCompleted(i)\"\n [class.geo-stepper__item--pending]=\"isPending(i)\"\n [class.geo-stepper__item--disabled]=\"step.disabled\"\n [class.geo-stepper__item--last]=\"last\"\n >\n <button\n type=\"button\"\n class=\"geo-stepper__button\"\n [disabled]=\"!clickable() || step.disabled\"\n [attr.aria-current]=\"isActive(i) ? 'step' : null\"\n (click)=\"onSelect(i, step)\"\n >\n <span class=\"geo-stepper__index\" aria-hidden=\"true\">\n @if (isCompleted(i)) {\n <span nz-icon nzType=\"check\" nzTheme=\"outline\"></span>\n } @else {\n {{ i + 1 }}\n }\n </span>\n <span class=\"geo-stepper__label\">{{ step.label }}</span>\n </button>\n\n @if (!last) {\n <span\n class=\"geo-stepper__connector\"\n [class.geo-stepper__connector--done]=\"isCompleted(i)\"\n aria-hidden=\"true\"\n ></span>\n }\n </li>\n }\n </ol>\n</nav>\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n input,\n model,\n output,\n ViewEncapsulation,\n} from '@angular/core';\nimport { NzIconModule } from 'ng-zorro-antd/icon';\nimport { GeoButtonComponent } from '../geo-button/geo-button.component';\nimport { GeoStepperComponent } from '../geo-stepper/geo-stepper.component';\nimport { GeoStepperStep } from '../geo-stepper/geo-stepper.types';\n\n/**\n * Layout form page multi-step: cột trái stepper + cột phải form card.\n *\n * ```html\n * <geo-step-form-layout\n * title=\"Thêm mới ...\"\n * [steps]=\"steps\"\n * [activeIndex]=\"activeIndex\"\n * [showScrollButtons]=\"true\"\n * (cancel)=\"onCancel()\"\n * (save)=\"onSave()\"\n * (next)=\"onNext()\"\n * >\n * <form>...</form>\n * </geo-step-form-layout>\n * ```\n */\n@Component({\n selector: 'geo-step-form-layout',\n standalone: true,\n imports: [NzIconModule, GeoButtonComponent, GeoStepperComponent],\n templateUrl: './geo-step-form-layout.component.html',\n styleUrl: './geo-step-form-layout.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {\n class: 'geo-step-form-layout-host',\n },\n})\nexport class GeoStepFormLayoutComponent {\n readonly steps = input<GeoStepperStep[]>([]);\n readonly activeIndex = model(0);\n readonly title = input('');\n readonly clickableSteps = input(true);\n /** Hiện nút ↑/↓ góc phải card (chuyển bước). Mặc định `true`. */\n readonly showScrollButtons = input(true);\n\n readonly showCancel = input(true);\n readonly showPrevious = input(true);\n readonly showSave = input(true);\n readonly showNext = input(true);\n readonly cancelLabel = input('Hủy');\n readonly previousLabel = input('Trở lại');\n readonly saveLabel = input('Lưu');\n readonly nextLabel = input('Tiếp theo');\n readonly finishLabel = input('Hoàn thành');\n readonly saveLoading = input(false);\n readonly nextLoading = input(false);\n /** Ẩn footer actions (dùng slot `[footer]` hoặc không cần nút). */\n readonly hideDefaultFooter = input(false);\n\n readonly stepSelect = output<{ index: number; step: GeoStepperStep }>();\n readonly cancel = output<void>();\n readonly previous = output<void>();\n readonly save = output<void>();\n readonly next = output<void>();\n\n readonly isLastStep = computed(\n () => this.steps().length > 0 && this.activeIndex() >= this.steps().length - 1\n );\n\n readonly canGoPreviousStep = computed(() => this.findAdjacentStepIndex(-1) != null);\n\n readonly canGoNextStep = computed(() => this.findAdjacentStepIndex(1) != null);\n\n readonly resolvedNextLabel = computed(() =>\n this.isLastStep() ? this.finishLabel() : this.nextLabel()\n );\n\n onActiveIndexChange(index: number): void {\n this.activeIndex.set(index);\n }\n\n onStepSelect(event: { index: number; step: GeoStepperStep }): void {\n this.stepSelect.emit(event);\n }\n\n onCancel(): void {\n this.cancel.emit();\n }\n\n onPrevious(): void {\n this.previous.emit();\n }\n\n onSave(): void {\n this.save.emit();\n }\n\n onNext(): void {\n this.next.emit();\n }\n\n goAdjacentStep(direction: 'up' | 'down'): void {\n const delta = direction === 'up' ? -1 : 1;\n const nextIndex = this.findAdjacentStepIndex(delta);\n if (nextIndex == null) return;\n\n const step = this.steps()[nextIndex];\n this.activeIndex.set(nextIndex);\n this.stepSelect.emit({ index: nextIndex, step });\n }\n\n private findAdjacentStepIndex(delta: -1 | 1): number | null {\n const steps = this.steps();\n let index = this.activeIndex() + delta;\n while (index >= 0 && index < steps.length) {\n if (!steps[index]?.disabled) {\n return index;\n }\n index += delta;\n }\n return null;\n }\n}\n","<div class=\"geo-step-form-layout\">\n <aside class=\"geo-step-form-layout__aside\">\n <div class=\"geo-step-form-layout__step-card\">\n <geo-stepper\n [steps]=\"steps()\"\n [activeIndex]=\"activeIndex()\"\n [clickable]=\"clickableSteps()\"\n orientation=\"vertical\"\n (activeIndexChange)=\"onActiveIndexChange($event)\"\n (stepSelect)=\"onStepSelect($event)\"\n ></geo-stepper>\n\n <ng-content select=\"[sidebarExtra]\"></ng-content>\n </div>\n </aside>\n\n <div\n class=\"geo-step-form-layout__main-wrap\"\n [class.geo-step-form-layout__main-wrap--with-fab]=\"showScrollButtons()\"\n >\n @if (showScrollButtons()) {\n <div class=\"geo-step-form-layout__scroll-fab\">\n <button\n type=\"button\"\n class=\"geo-step-form-layout__fab\"\n aria-label=\"Bước trước\"\n [disabled]=\"!canGoPreviousStep()\"\n (click)=\"goAdjacentStep('up')\"\n >\n <span nz-icon nzType=\"arrow-up\" nzTheme=\"outline\"></span>\n </button>\n <button\n type=\"button\"\n class=\"geo-step-form-layout__fab\"\n aria-label=\"Bước sau\"\n [disabled]=\"!canGoNextStep()\"\n (click)=\"goAdjacentStep('down')\"\n >\n <span nz-icon nzType=\"arrow-down\" nzTheme=\"outline\"></span>\n </button>\n </div>\n }\n\n <section class=\"geo-step-form-layout__card\">\n @if (title()) {\n <h1 class=\"geo-step-form-layout__title\">{{ title() }}</h1>\n }\n\n <div class=\"geo-step-form-layout__body\">\n <ng-content></ng-content>\n </div>\n\n @if (!hideDefaultFooter()) {\n <footer class=\"geo-step-form-layout__footer\">\n <ng-content select=\"[footer]\"></ng-content>\n\n <div class=\"geo-step-form-layout__footer-default\">\n <div class=\"geo-step-form-layout__footer-start\">\n @if (showCancel()) {\n <geo-button appearance=\"secondary\" color=\"brand\" (clicked)=\"onCancel()\">\n {{ cancelLabel() }}\n </geo-button>\n }\n </div>\n\n <div class=\"geo-step-form-layout__footer-end\">\n @if (showPrevious() && activeIndex() > 0) {\n <geo-button\n appearance=\"secondary\"\n color=\"brand\"\n icon=\"left\"\n (clicked)=\"onPrevious()\"\n >\n {{ previousLabel() }}\n </geo-button>\n }\n @if (showSave()) {\n <geo-button\n appearance=\"secondary\"\n color=\"brand\"\n icon=\"save\"\n [disabled]=\"saveLoading()\"\n (clicked)=\"onSave()\"\n >\n {{ saveLabel() }}\n </geo-button>\n }\n @if (showNext()) {\n <geo-button\n appearance=\"primary\"\n color=\"brand\"\n [icon]=\"isLastStep() ? 'check' : 'right'\"\n [disabled]=\"nextLoading()\"\n (clicked)=\"onNext()\"\n >\n {{ resolvedNextLabel() }}\n </geo-button>\n }\n </div>\n </div>\n </footer>\n } @else {\n <ng-content select=\"[footer]\"></ng-content>\n }\n </section>\n </div>\n</div>\n","import {\n ChangeDetectionStrategy,\n Component,\n input,\n ViewEncapsulation,\n} from '@angular/core';\n\n/**\n * Minimal app footer for the layout shell.\n */\n@Component({\n selector: 'geo-layout-footer',\n standalone: true,\n templateUrl: './geo-layout-footer.component.html',\n styleUrl: './geo-layout-footer.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {\n class: 'geo-layout-footer-host',\n },\n})\nexport class GeoLayoutFooterComponent {\n /** Copyright / status text. Empty = use default. */\n readonly text = input('© VNPT | Hệ thống thông tin đất đai iLIS');\n}\n","<footer class=\"geo-layout-footer\">\n <div class=\"geo-layout-footer__inner\">\n @if (text()) {\n <p class=\"geo-layout-footer__text\">{{ text() }}</p>\n }\n <ng-content />\n </div>\n</footer>\n","import { Directive } from '@angular/core';\n\n/** Đánh dấu slot thay thế header actions mặc định của `geo-layout`. */\n@Directive({\n selector: '[geoLayoutActions]',\n standalone: true,\n})\nexport class GeoLayoutActionsDirective {}\n","/** Menu item for `geo-layout` sidebar (recursive). */\nexport interface GeoLayoutMenuItem {\n /** Stable id used for selection / open state. */\n key: string;\n /** Display label. */\n title: string;\n /** Optional `geo-icon` / Ant Design icon type. */\n icon?: string;\n /** Optional route / href hint for consumers (Storybook clicks use `menuSelect`). */\n link?: string;\n children?: GeoLayoutMenuItem[];\n}\n\nexport type GeoLayoutSiderWidth = number | string;\n\n/** User shown in the header chip / account popover. */\nexport interface GeoLayoutUserInfo {\n name: string;\n email?: string;\n /** Optional avatar URL; initials used when empty. */\n avatarUrl?: string;\n role?: string;\n}\n\nexport interface GeoLayoutNotificationItem {\n id: string;\n message: string;\n time: string;\n read?: boolean;\n icon?: string;\n}\n\nexport interface GeoLayoutSubsystemItem {\n id: string;\n label: string;\n initials: string;\n url?: string;\n}\n\nexport interface GeoLayoutUserMenuItem {\n key: string;\n label: string;\n icon: string;\n danger?: boolean;\n}\n\nexport const GEO_LAYOUT_DEFAULT_USER: GeoLayoutUserInfo = {\n name: 'vnpt',\n email: 'vnpt@vnpt.vn',\n};\n\nexport const GEO_LAYOUT_DEFAULT_NOTIFICATIONS: GeoLayoutNotificationItem[] = [\n {\n id: '1',\n message: 'Hồ sơ quy hoạch phường 1 đã được phê duyệt.',\n time: '5 phút trước',\n read: false,\n icon: 'check-circle',\n },\n {\n id: '2',\n message: 'Có 12 yêu cầu tra cứu thửa mới trong ngày.',\n time: '2 giờ trước',\n read: false,\n icon: 'eye',\n },\n {\n id: '3',\n message: 'Đồng bộ danh mục đơn vị hành chính hoàn tất.',\n time: 'Hôm qua',\n read: true,\n icon: 'sync',\n },\n];\n\nexport const GEO_LAYOUT_DEFAULT_SUBSYSTEMS: GeoLayoutSubsystemItem[] = [\n { id: '1', initials: 'TC', label: 'Tra cứu QH' },\n { id: '2', initials: 'ĐC', label: 'Địa chính' },\n { id: '3', initials: 'BĐ', label: 'Bản đồ' },\n { id: '4', initials: 'TK', label: 'Thống kê' },\n { id: '5', initials: 'PA', label: 'Phản ánh' },\n { id: '6', initials: 'QL', label: 'Quản trị' },\n];\n\nexport const GEO_LAYOUT_DEFAULT_USER_MENU: GeoLayoutUserMenuItem[] = [\n { key: 'account', label: 'Tài khoản', icon: 'safety-certificate' },\n { key: 'password', label: 'Đổi mật khẩu', icon: 'lock' },\n { key: 'notify-settings', label: 'Cài đặt thông báo', icon: 'bell' },\n { key: 'logout', label: 'Đăng xuất', icon: 'logout', danger: true },\n];\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n input,\n output,\n signal,\n ViewEncapsulation,\n} from '@angular/core';\nimport { NzBadgeModule } from 'ng-zorro-antd/badge';\nimport { NzDropDownModule } from 'ng-zorro-antd/dropdown';\nimport { GeoIconComponent } from '../../geo-icon/geo-icon.component';\nimport {\n GEO_LAYOUT_DEFAULT_NOTIFICATIONS,\n GEO_LAYOUT_DEFAULT_SUBSYSTEMS,\n GEO_LAYOUT_DEFAULT_USER,\n GEO_LAYOUT_DEFAULT_USER_MENU,\n GeoLayoutNotificationItem,\n GeoLayoutSubsystemItem,\n GeoLayoutUserInfo,\n GeoLayoutUserMenuItem,\n} from '../geo-layout.types';\n\n/**\n * Header actions mặc định: thông báo, phân hệ, user chip + popovers (mock/data-driven).\n */\n@Component({\n selector: 'geo-layout-header-actions',\n standalone: true,\n imports: [NzBadgeModule, NzDropDownModule, GeoIconComponent],\n templateUrl: './geo-layout-header-actions.component.html',\n styleUrl: './geo-layout-header-actions.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {\n class: 'geo-layout-header-actions-host',\n '[class.geo-layout-header-actions-host--compact]': 'compact()',\n },\n})\nexport class GeoLayoutHeaderActionsComponent {\n readonly user = input<GeoLayoutUserInfo>(GEO_LAYOUT_DEFAULT_USER);\n readonly notifications = input<GeoLayoutNotificationItem[]>(\n GEO_LAYOUT_DEFAULT_NOTIFICATIONS\n );\n readonly subsystems = input<GeoLayoutSubsystemItem[]>(\n GEO_LAYOUT_DEFAULT_SUBSYSTEMS\n );\n readonly userMenuItems = input<GeoLayoutUserMenuItem[]>(\n GEO_LAYOUT_DEFAULT_USER_MENU\n );\n /** Ẩn tên/email trên chip (mobile). */\n readonly compact = input(false);\n\n readonly notificationClick = output<GeoLayoutNotificationItem>();\n readonly subsystemClick = output<GeoLayoutSubsystemItem>();\n readonly userMenuClick = output<GeoLayoutUserMenuItem>();\n readonly logout = output<void>();\n\n readonly notifyOpen = signal(false);\n readonly subsystemOpen = signal(false);\n readonly userOpen = signal(false);\n\n readonly unreadCount = computed(\n () => this.notifications().filter((item) => !item.read).length\n );\n\n readonly initials = computed(() => {\n const name = this.user().name?.trim() || '?';\n const parts = name.split(/\\s+/).filter(Boolean);\n if (parts.length >= 2) {\n return `${parts[0][0]}${parts[parts.length - 1][0]}`.toUpperCase();\n }\n return name.slice(0, 2).toUpperCase();\n });\n\n readonly primaryMenuItems = computed(() =>\n this.userMenuItems().filter((item) => !item.danger)\n );\n\n readonly dangerMenuItems = computed(() =>\n this.userMenuItems().filter((item) => item.danger)\n );\n\n onNotifyVisible(visible: boolean): void {\n this.notifyOpen.set(visible);\n }\n\n onSubsystemVisible(visible: boolean): void {\n this.subsystemOpen.set(visible);\n }\n\n onUserVisible(visible: boolean): void {\n this.userOpen.set(visible);\n }\n\n onNotificationItem(item: GeoLayoutNotificationItem): void {\n this.notificationClick.emit(item);\n }\n\n onSubsystemItem(item: GeoLayoutSubsystemItem): void {\n this.subsystemOpen.set(false);\n this.subsystemClick.emit(item);\n }\n\n onUserMenuItem(item: GeoLayoutUserMenuItem): void {\n this.userOpen.set(false);\n if (item.key === 'logout' || item.danger) {\n this.logout.emit();\n }\n this.userMenuClick.emit(item);\n }\n}\n","<div class=\"geo-layout-ha\">\n <div class=\"geo-layout-ha__icons\">\n <button\n type=\"button\"\n class=\"geo-layout-ha__icon-btn\"\n nz-dropdown\n nzTrigger=\"click\"\n nzPlacement=\"bottomRight\"\n nzOverlayClassName=\"geo-layout-ha-overlay\"\n [nzDropdownMenu]=\"notifyMenu\"\n [nzVisible]=\"notifyOpen()\"\n (nzVisibleChange)=\"onNotifyVisible($event)\"\n aria-label=\"Thông báo\"\n >\n <nz-badge [nzCount]=\"unreadCount()\" [nzOverflowCount]=\"9\" nzSize=\"small\">\n <geo-icon type=\"bell\" size=\"lg\" />\n </nz-badge>\n </button>\n\n <button\n type=\"button\"\n class=\"geo-layout-ha__icon-btn\"\n nz-dropdown\n nzTrigger=\"click\"\n nzPlacement=\"bottomRight\"\n nzOverlayClassName=\"geo-layout-ha-overlay\"\n [nzDropdownMenu]=\"subsystemMenu\"\n [nzVisible]=\"subsystemOpen()\"\n (nzVisibleChange)=\"onSubsystemVisible($event)\"\n aria-label=\"Phân hệ\"\n >\n <geo-icon type=\"appstore\" size=\"lg\" />\n </button>\n </div>\n\n <span class=\"geo-layout-ha__divider\" aria-hidden=\"true\"></span>\n\n <button\n type=\"button\"\n class=\"geo-layout-ha__user\"\n [class.geo-layout-ha__user--open]=\"userOpen()\"\n nz-dropdown\n nzTrigger=\"click\"\n nzPlacement=\"bottomRight\"\n nzOverlayClassName=\"geo-layout-ha-overlay\"\n [nzDropdownMenu]=\"userMenu\"\n [nzVisible]=\"userOpen()\"\n (nzVisibleChange)=\"onUserVisible($event)\"\n aria-label=\"Tài khoản người dùng\"\n >\n <span class=\"geo-layout-ha__avatar\">\n @if (user().avatarUrl) {\n <img [src]=\"user().avatarUrl\" alt=\"\" />\n } @else {\n <span>{{ initials() }}</span>\n }\n </span>\n\n @if (!compact()) {\n <span class=\"geo-layout-ha__user-text\">\n <span class=\"geo-layout-ha__user-name\">{{ user().name }}</span>\n @if (user().email) {\n <span class=\"geo-layout-ha__user-email\">{{ user().email }}</span>\n }\n </span>\n }\n </button>\n</div>\n\n<nz-dropdown-menu #notifyMenu=\"nzDropdownMenu\">\n <div class=\"geo-layout-ha-pop geo-layout-ha-pop--notify\" role=\"dialog\" aria-label=\"Thông báo\">\n <div class=\"geo-layout-ha-pop__head\">\n <div class=\"geo-layout-ha-pop__title-row\">\n <h3 class=\"geo-layout-ha-pop__title\">Thông báo</h3>\n @if (unreadCount() > 0) {\n <span class=\"geo-layout-ha-pop__badge\">{{ unreadCount() }} mới</span>\n }\n </div>\n </div>\n\n <div class=\"geo-layout-ha-pop__list\">\n @if (notifications().length) {\n @for (item of notifications(); track item.id) {\n <button\n type=\"button\"\n class=\"geo-layout-ha-notify\"\n [class.geo-layout-ha-notify--unread]=\"!item.read\"\n (click)=\"onNotificationItem(item)\"\n >\n <span class=\"geo-layout-ha-notify__icon\" aria-hidden=\"true\">\n <geo-icon [type]=\"item.icon || 'bell'\" size=\"md\" />\n </span>\n <span class=\"geo-layout-ha-notify__body\">\n <span class=\"geo-layout-ha-notify__msg\">{{ item.message }}</span>\n <span class=\"geo-layout-ha-notify__time\">{{ item.time }}</span>\n </span>\n @if (!item.read) {\n <span class=\"geo-layout-ha-notify__dot\" aria-hidden=\"true\"></span>\n }\n </button>\n }\n } @else {\n <div class=\"geo-layout-ha-pop__empty\">\n <geo-icon type=\"bell\" size=\"xl\" />\n <p>Không có thông báo mới</p>\n </div>\n }\n </div>\n </div>\n</nz-dropdown-menu>\n\n<nz-dropdown-menu #subsystemMenu=\"nzDropdownMenu\">\n <div class=\"geo-layout-ha-pop geo-layout-ha-pop--subsystem\" role=\"dialog\" aria-label=\"Phân hệ\">\n <div class=\"geo-layout-ha-pop__head\">\n <h3 class=\"geo-layout-ha-pop__title\">Phân hệ</h3>\n </div>\n <div class=\"geo-layout-ha-subgrid\">\n @for (item of subsystems(); track item.id) {\n <button\n type=\"button\"\n class=\"geo-layout-ha-sub\"\n (click)=\"onSubsystemItem(item)\"\n >\n <span class=\"geo-layout-ha-sub__mark\">{{ item.initials }}</span>\n <span class=\"geo-layout-ha-sub__label\">{{ item.label }}</span>\n </button>\n }\n </div>\n </div>\n</nz-dropdown-menu>\n\n<nz-dropdown-menu #userMenu=\"nzDropdownMenu\">\n <div class=\"geo-layout-ha-pop geo-layout-ha-pop--user\" role=\"dialog\" aria-label=\"Tài khoản\">\n <div class=\"geo-layout-ha-pop__profile\">\n <span class=\"geo-layout-ha__avatar geo-layout-ha__avatar--lg\">\n @if (user().avatarUrl) {\n <img [src]=\"user().avatarUrl\" alt=\"\" />\n } @else {\n <span>{{ initials() }}</span>\n }\n </span>\n <span class=\"geo-layout-ha-pop__profile-text\">\n <span class=\"geo-layout-ha__user-name\">{{ user().name }}</span>\n @if (user().email) {\n <span class=\"geo-layout-ha__user-email\">{{ user().email }}</span>\n }\n </span>\n </div>\n\n <div class=\"geo-layout-ha-pop__menu\">\n @for (item of primaryMenuItems(); track item.key) {\n <button\n type=\"button\"\n class=\"geo-layout-ha-menu-item\"\n (click)=\"onUserMenuItem(item)\"\n >\n <geo-icon [type]=\"item.icon\" size=\"md\" />\n <span>{{ item.label }}</span>\n </button>\n }\n </div>\n\n @if (dangerMenuItems().length) {\n <div class=\"geo-layout-ha-pop__menu geo-layout-ha-pop__menu--footer\">\n @for (item of dangerMenuItems(); track item.key) {\n <button\n type=\"button\"\n class=\"geo-layout-ha-menu-item geo-layout-ha-menu-item--danger\"\n (click)=\"onUserMenuItem(item)\"\n >\n <geo-icon [type]=\"item.icon\" size=\"md\" />\n <span>{{ item.label }}</span>\n </button>\n }\n </div>\n }\n </div>\n</nz-dropdown-menu>\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n contentChild,\n input,\n output,\n ViewEncapsulation,\n} from '@angular/core';\nimport { GeoBreadcrumbComponent } from '../../geo-breadcrumb/geo-breadcrumb.component';\nimport { GeoBreadcrumbItem } from '../../geo-breadcrumb/geo-breadcrumb.types';\nimport { GeoIconComponent } from '../../geo-icon/geo-icon.component';\nimport { GeoLayoutActionsDirective } from '../geo-layout-actions.directive';\nimport { GeoLayoutHeaderActionsComponent } from '../header-actions/geo-layout-header-actions.component';\nimport {\n GEO_LAYOUT_DEFAULT_NOTIFICATIONS,\n GEO_LAYOUT_DEFAULT_SUBSYSTEMS,\n GEO_LAYOUT_DEFAULT_USER,\n GEO_LAYOUT_DEFAULT_USER_MENU,\n GeoLayoutNotificationItem,\n GeoLayoutSubsystemItem,\n GeoLayoutUserInfo,\n GeoLayoutUserMenuItem,\n} from '../geo-layout.types';\n\n/**\n * Top bar: sidebar toggle + breadcrumb + header actions.\n */\n@Component({\n selector: 'geo-layout-header',\n standalone: true,\n imports: [\n GeoBreadcrumbComponent,\n GeoIconComponent,\n GeoLayoutHeaderActionsComponent,\n ],\n templateUrl: './geo-layout-header.component.html',\n styleUrl: './geo-layout-header.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {\n class: 'geo-layout-header-host',\n '[class.geo-layout-header-host--mobile]': 'isMobile()',\n },\n})\nexport class GeoLayoutHeaderComponent {\n readonly breadcrumbs = input<GeoBreadcrumbItem[]>([]);\n readonly fallbackBreadcrumb = input(\n 'Hệ thống thông tin đất đai - VNPT iLIS'\n );\n readonly expanded = input(true);\n readonly isMobile = input(false);\n readonly mobileMenuOpen = input(false);\n readonly showDefaultActions = input(true);\n\n readonly user = input<GeoLayoutUserInfo>(GEO_LAYOUT_DEFAULT_USER);\n readonly notifications = input<GeoLayoutNotificationItem[]>(\n GEO_LAYOUT_DEFAULT_NOTIFICATIONS\n );\n readonly subsystems = input<GeoLayoutSubsystemItem[]>(\n GEO_LAYOUT_DEFAULT_SUBSYSTEMS\n );\n readonly userMenuItems = input<GeoLayoutUserMenuItem[]>(\n GEO_LAYOUT_DEFAULT_USER_MENU\n );\n\n readonly sidebarToggle = output<void>();\n readonly notificationClick = output<GeoLayoutNotificationItem>();\n readonly subsystemClick = output<GeoLayoutSubsystemItem>();\n readonly userMenuClick = output<GeoLayoutUserMenuItem>();\n readonly logout = output<void>();\n\n private readonly projectedActions = contentChild(GeoLayoutActionsDirective);\n\n readonly hasProjectedActions = computed(() => !!this.projectedActions());\n\n readonly showBuiltInActions = computed(\n () => this.showDefaultActions() && !this.hasProjectedActions()\n );\n\n readonly toggleIcon = computed(() =>\n this.isMobile()\n ? this.mobileMenuOpen()\n ? 'menu-fold'\n : 'menu-unfold'\n : this.expanded()\n ? 'menu-fold'\n : 'menu-unfold'\n );\n\n readonly toggleAriaLabel = computed(() => {\n if (this.isMobile()) {\n return this.mobileMenuOpen() ? 'Đóng menu' : 'Mở menu';\n }\n return this.expanded() ? 'Thu gọn menu' : 'Mở rộng menu';\n });\n\n onToggle(): void {\n this.sidebarToggle.emit();\n }\n}\n","<header\n class=\"geo-layout-header\"\n [class.geo-layout-header--mobile]=\"isMobile()\"\n>\n <div class=\"geo-layout-header__inner\">\n <div class=\"geo-layout-header__start\">\n <button\n type=\"button\"\n class=\"geo-layout-header__toggle\"\n [attr.aria-label]=\"toggleAriaLabel()\"\n [attr.aria-expanded]=\"isMobile() ? mobileMenuOpen() : expanded()\"\n (click)=\"onToggle()\"\n >\n <geo-icon [type]=\"toggleIcon()\" size=\"lg\" />\n </button>\n\n <div class=\"geo-layout-header__breadcrumb\">\n @if (breadcrumbs().length) {\n <geo-breadcrumb [items]=\"breadcrumbs()\" />\n } @else {\n <span class=\"geo-layout-header__breadcrumb-fallback\">{{\n fallbackBreadcrumb()\n }}</span>\n }\n </div>\n </div>\n\n <div class=\"geo-layout-header__actions\">\n <ng-content select=\"[geoLayoutActions]\" />\n @if (showBuiltInActions()) {\n <geo-layout-header-actions\n [user]=\"user()\"\n [notifications]=\"notifications()\"\n [subsystems]=\"subsystems()\"\n [userMenuItems]=\"userMenuItems()\"\n [compact]=\"isMobile()\"\n (notificationClick)=\"notificationClick.emit($event)\"\n (subsystemClick)=\"subsystemClick.emit($event)\"\n (userMenuClick)=\"userMenuClick.emit($event)\"\n (logout)=\"logout.emit()\"\n />\n }\n </div>\n </div>\n</header>\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n input,\n model,\n output,\n signal,\n ViewEncapsulation,\n} from '@angular/core';\nimport { NgTemplateOutlet } from '@angular/common';\nimport { GeoIconComponent } from '../../geo-icon/geo-icon.component';\nimport { GeoLayoutMenuItem, GeoLayoutSiderWidth } from '../geo-layout.types';\n\n/**\n * Sidebar shell: brand + recursive menu.\n * Collapsed (desktop): hover item mở popover bên phải (tên leaf / submenu group).\n */\n@Component({\n selector: 'geo-layout-sidebar',\n standalone: true,\n imports: [NgTemplateOutlet, GeoIconComponent],\n templateUrl: './geo-layout-sidebar.component.html',\n styleUrl: './geo-layout-sidebar.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {\n class: 'geo-layout-sidebar-host',\n '[class.geo-layout-sidebar-host--collapsed]': 'collapsed()',\n '[class.geo-layout-sidebar-host--mobile]': 'isMobile()',\n '[class.geo-layout-sidebar-host--mobile-open]': 'isMobile() && mobileOpen()',\n '[style.width]': 'widthCss()',\n '[attr.aria-hidden]': 'isMobile() && !mobileOpen() ? \"true\" : null',\n },\n})\nexport class GeoLayoutSidebarComponent {\n readonly menuItems = input<GeoLayoutMenuItem[]>([]);\n readonly brandTitle = input('iLIS');\n readonly logoSrc = input('');\n readonly logoAlt = input('Logo');\n readonly sidebarBackgroundSrc = input('');\n readonly selectedKey = model<string | null>(null);\n readonly collapsed = input(false);\n readonly isMobile = input(false);\n readonly mobileOpen = input(false);\n readonly width = input<GeoLayoutSiderWidth>(280);\n readonly collapsedWidth = input<GeoLayoutSiderWidth>(80);\n\n readonly menuSelect = output<GeoLayoutMenuItem>();\n\n private readonly openKeys = signal<ReadonlySet<string>>(new Set());\n\n /** Desktop icon-rail: hiện popover khi hover. */\n readonly flyoutEnabled = computed(\n () => this.collapsed() && !this.isMobile()\n );\n\n readonly showLabels = computed(\n () => !this.collapsed() || this.isMobile()\n );\n\n readonly widthCss = computed(() => {\n if (this.isMobile()) {\n return this.toCssSize(this.width());\n }\n return this.collapsed()\n ? this.toCssSize(this.collapsedWidth())\n : this.toCssSize(this.width());\n });\n\n isOpen(key: string): boolean {\n return this.openKeys().has(key);\n }\n\n isSelected(key: string): boolean {\n return this.selectedKey() === key;\n }\n\n hasSelectedDescendant(item: GeoLayoutMenuItem): boolean {\n const selected = this.selectedKey();\n if (!selected || !item.children?.length) {\n return false;\n }\n return item.children.some(\n (child) =>\n child.key === selected || this.hasSelectedDescendant(child)\n );\n }\n\n toggleSubmenu(key: string): void {\n this.openKeys.update((prev) => {\n const next = new Set(prev);\n if (next.has(key)) {\n next.delete(key);\n } else {\n next.add(key);\n }\n return next;\n });\n }\n\n onMenuItemClick(item: GeoLayoutMenuItem): void {\n if (item.children?.length) {\n if (this.flyoutEnabled()) {\n return;\n }\n this.toggleSubmenu(item.key);\n return;\n }\n\n this.selectLeaf(item);\n }\n\n selectLeaf(item: GeoLayoutMenuItem): void {\n this.selectedKey.set(item.key);\n this.menuSelect.emit(item);\n }\n\n private toCssSize(value: GeoLayoutSiderWidth): string {\n return typeof value === 'number' ? `${value}px` : value;\n }\n}\n","<aside\n class=\"geo-layout-sidebar\"\n [class.geo-layout-sidebar--collapsed]=\"collapsed()\"\n [class.geo-layout-sidebar--mobile]=\"isMobile()\"\n [class.geo-layout-sidebar--mobile-open]=\"isMobile() && mobileOpen()\"\n>\n @if (sidebarBackgroundSrc()) {\n <div\n class=\"geo-layout-sidebar__bg\"\n [style.background-image]=\"'url(' + sidebarBackgroundSrc() + ')'\"\n aria-hidden=\"true\"\n ></div>\n } @else {\n <div class=\"geo-layout-sidebar__bg geo-layout-sidebar__bg--tint\" aria-hidden=\"true\"></div>\n }\n\n <div class=\"geo-layout-sidebar__brand\">\n @if (logoSrc()) {\n <img class=\"geo-layout-sidebar__logo\" [src]=\"logoSrc()\" [alt]=\"logoAlt()\" />\n } @else {\n <span class=\"geo-layout-sidebar__logo-fallback\" aria-hidden=\"true\">TN</span>\n }\n @if (showLabels()) {\n <span class=\"geo-layout-sidebar__brand-title\">{{ brandTitle() }}</span>\n }\n </div>\n\n <nav class=\"geo-layout-sidebar__nav\" aria-label=\"Menu chính\">\n <ul class=\"geo-layout-sidebar__menu\">\n @for (item of menuItems(); track item.key) {\n <ng-container\n [ngTemplateOutlet]=\"menuNode\"\n [ngTemplateOutletContext]=\"{ $implicit: item, depth: 0 }\"\n />\n }\n </ul>\n </nav>\n</aside>\n\n<ng-template #menuNode let-item let-depth=\"depth\">\n @if (item.children?.length) {\n <li\n class=\"geo-layout-sidebar__menu-group\"\n [class.geo-layout-sidebar__menu-group--open]=\"isOpen(item.key) || hasSelectedDescendant(item)\"\n [class.geo-layout-sidebar__menu-group--active]=\"hasSelectedDescendant(item)\"\n [class.geo-layout-sidebar__menu-group--flyout]=\"flyoutEnabled() && depth === 0\"\n >\n <button\n type=\"button\"\n class=\"geo-layout-sidebar__menu-btn geo-layout-sidebar__menu-btn--parent\"\n [class.geo-layout-sidebar__menu-btn--active]=\"hasSelectedDescendant(item)\"\n [attr.aria-haspopup]=\"flyoutEnabled() && depth === 0 ? 'menu' : null\"\n (click)=\"onMenuItemClick(item)\"\n >\n @if (item.icon) {\n <geo-icon\n class=\"geo-layout-sidebar__menu-icon\"\n [type]=\"item.icon\"\n size=\"md\"\n />\n }\n @if (showLabels()) {\n <span class=\"geo-layout-sidebar__menu-label\">{{ item.title }}</span>\n <geo-icon\n class=\"geo-layout-sidebar__menu-chevron\"\n type=\"down\"\n size=\"xs\"\n />\n }\n </button>\n\n @if (flyoutEnabled() && depth === 0) {\n <div\n class=\"geo-layout-sidebar-flyout geo-layout-sidebar-flyout--group\"\n role=\"menu\"\n [attr.aria-label]=\"item.title\"\n >\n <div class=\"geo-layout-sidebar-flyout__panel\">\n <div class=\"geo-layout-sidebar-flyout__title\">{{ item.title }}</div>\n <ul class=\"geo-layout-sidebar-flyout__list\">\n @for (child of item.children; track child.key) {\n @if (child.children?.length) {\n <li class=\"geo-layout-sidebar-flyout__section\">\n <div class=\"geo-layout-sidebar-flyout__section-title\">\n @if (child.icon) {\n <geo-icon [type]=\"child.icon\" size=\"sm\" />\n }\n {{ child.title }}\n </div>\n <ul class=\"geo-layout-sidebar-flyout__list\">\n @for (grand of child.children; track grand.key) {\n <li>\n <button\n type=\"button\"\n class=\"geo-layout-sidebar-flyout__item\"\n [class.geo-layout-sidebar-flyout__item--active]=\"isSelected(grand.key)\"\n role=\"menuitem\"\n (click)=\"selectLeaf(grand)\"\n >\n {{ grand.title }}\n </button>\n </li>\n }\n </ul>\n </li>\n } @else {\n <li>\n <button\n type=\"button\"\n class=\"geo-layout-sidebar-flyout__item\"\n [class.geo-layout-sidebar-flyout__item--active]=\"isSelected(child.key)\"\n role=\"menuitem\"\n (click)=\"selectLeaf(child)\"\n >\n @if (child.icon) {\n <geo-icon [type]=\"child.icon\" size=\"sm\" />\n }\n <span>{{ child.title }}</span>\n </button>\n </li>\n }\n }\n </ul>\n </div>\n </div>\n }\n\n @if (showLabels() && (isOpen(item.key) || hasSelectedDescendant(item))) {\n <ul class=\"geo-layout-sidebar__submenu\">\n @for (child of item.children; track child.key) {\n <ng-container\n [ngTemplateOutlet]=\"menuNode\"\n [ngTemplateOutletContext]=\"{ $implicit: child, depth: depth + 1 }\"\n />\n }\n </ul>\n }\n </li>\n } @else {\n <li\n class=\"geo-layout-sidebar__menu-item\"\n [class.geo-layout-sidebar__menu-item--flyout]=\"flyoutEnabled() && depth === 0\"\n >\n <button\n type=\"button\"\n class=\"geo-layout-sidebar__menu-btn\"\n [class.geo-layout-sidebar__menu-btn--active]=\"isSelected(item.key)\"\n [class.geo-layout-sidebar__menu-btn--leaf]=\"!item.icon && depth > 0\"\n [attr.aria-haspopup]=\"flyoutEnabled() && depth === 0 ? 'menu' : null\"\n (click)=\"onMenuItemClick(item)\"\n >\n @if (item.icon) {\n <geo-icon\n class=\"geo-layout-sidebar__menu-icon\"\n [type]=\"item.icon\"\n size=\"md\"\n />\n }\n @if (showLabels()) {\n <span class=\"geo-layout-sidebar__menu-label\">{{ item.title }}</span>\n }\n </button>\n\n @if (flyoutEnabled() && depth === 0) {\n <div\n class=\"geo-layout-sidebar-flyout geo-layout-sidebar-flyout--leaf\"\n role=\"menu\"\n [attr.aria-label]=\"item.title\"\n >\n <div class=\"geo-layout-sidebar-flyout__panel\">\n <button\n type=\"button\"\n class=\"geo-layout-sidebar-flyout__item\"\n [class.geo-layout-sidebar-flyout__item--active]=\"isSelected(item.key)\"\n role=\"menuitem\"\n (click)=\"selectLeaf(item)\"\n >\n @if (item.icon) {\n <geo-icon [type]=\"item.icon\" size=\"sm\" />\n }\n <span>{{ item.title }}</span>\n </button>\n </div>\n </div>\n }\n </li>\n }\n</ng-template>\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n input,\n model,\n output,\n ViewEncapsulation,\n} from '@angular/core';\nimport { GeoBreadcrumbItem } from '../geo-breadcrumb/geo-breadcrumb.types';\nimport { GeoLayoutFooterComponent } from './footer/geo-layout-footer.component';\nimport { GeoLayoutHeaderComponent } from './header/geo-layout-header.component';\nimport { GeoLayoutSidebarComponent } from './sidebar/geo-layout-sidebar.component';\nimport {\n GEO_LAYOUT_DEFAULT_NOTIFICATIONS,\n GEO_LAYOUT_DEFAULT_SUBSYSTEMS,\n GEO_LAYOUT_DEFAULT_USER,\n GEO_LAYOUT_DEFAULT_USER_MENU,\n GeoLayoutMenuItem,\n GeoLayoutNotificationItem,\n GeoLayoutSiderWidth,\n GeoLayoutSubsystemItem,\n GeoLayoutUserInfo,\n GeoLayoutUserMenuItem,\n} from './geo-layout.types';\n\n/**\n * App shell composing `geo-layout-sidebar` + `geo-layout-header` + content + `geo-layout-footer`.\n *\n * Storybook: **GEO / Layout / Shell** (+ Sidebar, Header, Footer, Header Actions).\n *\n * ```html\n * <geo-layout [menuItems]=\"menu\" [user]=\"user\" [(expanded)]=\"expanded\">\n * <router-outlet />\n * </geo-layout>\n * ```\n */\n@Component({\n selector: 'geo-layout',\n standalone: true,\n imports: [\n GeoLayoutSidebarComponent,\n GeoLayoutHeaderComponent,\n GeoLayoutFooterComponent,\n ],\n templateUrl: './geo-layout.component.html',\n styleUrl: './geo-layout.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {\n class: 'geo-layout-host',\n '[class.geo-layout-host--mobile]': 'isMobile()',\n '[class.geo-layout-host--drawer-open]': 'isMobile() && mobileMenuOpen()',\n },\n})\nexport class GeoLayoutComponent {\n readonly menuItems = input<GeoLayoutMenuItem[]>([]);\n readonly brandTitle = input('iLIS');\n readonly logoSrc = input('');\n readonly logoAlt = input('Logo');\n readonly sidebarBackgroundSrc = input('');\n readonly breadcrumbs = input<GeoBreadcrumbItem[]>([]);\n readonly fallbackBreadcrumb = input(\n 'Hệ thống thông tin đất đai - VNPT iLIS'\n );\n\n readonly expanded = model(true);\n readonly isMobile = input(false);\n readonly mobileMenuOpen = model(false);\n readonly selectedKey = model<string | null>(null);\n\n readonly siderWidth = input<GeoLayoutSiderWidth>(280);\n readonly siderCollapsedWidth = input<GeoLayoutSiderWidth>(80);\n\n readonly showDefaultActions = input(true);\n readonly showFooter = input(true);\n readonly footerText = input('© VNPT | Hệ thống thông tin đất đai iLIS');\n\n readonly user = input<GeoLayoutUserInfo>(GEO_LAYOUT_DEFAULT_USER);\n readonly notifications = input<GeoLayoutNotificationItem[]>(\n GEO_LAYOUT_DEFAULT_NOTIFICATIONS\n );\n readonly subsystems = input<GeoLayoutSubsystemItem[]>(\n GEO_LAYOUT_DEFAULT_SUBSYSTEMS\n );\n readonly userMenuItems = input<GeoLayoutUserMenuItem[]>(\n GEO_LAYOUT_DEFAULT_USER_MENU\n );\n\n readonly menuSelect = output<GeoLayoutMenuItem>();\n readonly sidebarToggle = output<void>();\n readonly notificationClick = output<GeoLayoutNotificationItem>();\n readonly subsystemClick = output<GeoLayoutSubsystemItem>();\n readonly userMenuClick = output<GeoLayoutUserMenuItem>();\n readonly logout = output<void>();\n\n readonly siderCollapsed = computed(() =>\n this.isMobile() ? false : !this.expanded()\n );\n\n onToggleSidebar(): void {\n if (this.isMobile()) {\n this.mobileMenuOpen.update((open) => !open);\n } else {\n this.expanded.update((value) => !value);\n }\n this.sidebarToggle.emit();\n }\n\n closeMobileMenu(): void {\n this.mobileMenuOpen.set(false);\n }\n\n onMenuSelect(item: GeoLayoutMenuItem): void {\n this.menuSelect.emit(item);\n if (this.isMobile() && this.mobileMenuOpen()) {\n this.mobileMenuOpen.set(false);\n }\n }\n}\n","<div\n class=\"geo-layout\"\n [class.geo-layout--mobile]=\"isMobile()\"\n [class.geo-layout--drawer-open]=\"isMobile() && mobileMenuOpen()\"\n [class.geo-layout--collapsed]=\"siderCollapsed()\"\n>\n @if (isMobile() && mobileMenuOpen()) {\n <div\n class=\"geo-layout__backdrop\"\n (click)=\"closeMobileMenu()\"\n aria-hidden=\"true\"\n ></div>\n }\n\n <geo-layout-sidebar\n [menuItems]=\"menuItems()\"\n [brandTitle]=\"brandTitle()\"\n [logoSrc]=\"logoSrc()\"\n [logoAlt]=\"logoAlt()\"\n [sidebarBackgroundSrc]=\"sidebarBackgroundSrc()\"\n [(selectedKey)]=\"selectedKey\"\n [collapsed]=\"siderCollapsed()\"\n [isMobile]=\"isMobile()\"\n [mobileOpen]=\"mobileMenuOpen()\"\n [width]=\"siderWidth()\"\n [collapsedWidth]=\"siderCollapsedWidth()\"\n (menuSelect)=\"onMenuSelect($event)\"\n />\n\n <div class=\"geo-layout__main\">\n <geo-layout-header\n [breadcrumbs]=\"breadcrumbs()\"\n [fallbackBreadcrumb]=\"fallbackBreadcrumb()\"\n [expanded]=\"expanded()\"\n [isMobile]=\"isMobile()\"\n [mobileMenuOpen]=\"mobileMenuOpen()\"\n [showDefaultActions]=\"showDefaultActions()\"\n [user]=\"user()\"\n [notifications]=\"notifications()\"\n [subsystems]=\"subsystems()\"\n [userMenuItems]=\"userMenuItems()\"\n (sidebarToggle)=\"onToggleSidebar()\"\n (notificationClick)=\"notificationClick.emit($event)\"\n (subsystemClick)=\"subsystemClick.emit($event)\"\n (userMenuClick)=\"userMenuClick.emit($event)\"\n (logout)=\"logout.emit()\"\n >\n <ng-content select=\"[geoLayoutActions]\" />\n </geo-layout-header>\n\n <main class=\"geo-layout__content\">\n <ng-content />\n </main>\n\n @if (showFooter()) {\n <geo-layout-footer [text]=\"footerText()\">\n <ng-content select=\"[geoLayoutFooter]\" />\n </geo-layout-footer>\n }\n </div>\n</div>\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n ContentChildren,\n Directive,\n inject,\n input,\n model,\n output,\n QueryList,\n TemplateRef,\n ViewEncapsulation,\n} from '@angular/core';\nimport { NgTemplateOutlet } from '@angular/common';\nimport { NgZorroAntdModule } from '../../ng-zorro/ng-zorro-antd.module';\nimport { GeoTabItem, GeoTabsSize, GeoTabsType } from './geo-tabs.types';\n\n@Directive({\n selector: '[uiTab]',\n standalone: true,\n})\nexport class GeoTabDirective {\n readonly key = input.required<string>({ alias: 'uiTab' });\n readonly template = inject(TemplateRef<unknown>);\n}\n\n@Component({\n selector: 'geo-tabs',\n standalone: true,\n imports: [NgZorroAntdModule, NgTemplateOutlet],\n templateUrl: './geo-tabs.component.html',\n styleUrl: './geo-tabs.component.scss',\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'geo-tabs-host',\n '[class.geo-tabs-host--card]': 'type() === \"card\"',\n '[class.geo-tabs-host--line]': 'type() === \"line\"',\n },\n})\nexport class GeoTabsComponent {\n readonly items = input<GeoTabItem[]>([]);\n readonly type = input<GeoTabsType>('line');\n readonly size = input<GeoTabsSize>('default');\n readonly selectedIndex = model(0);\n readonly selectedKey = model<string | undefined>(undefined);\n readonly centered = input(false);\n readonly animated = input(true);\n\n readonly tabChange = output<{ index: number; key: string }>();\n\n @ContentChildren(GeoTabDirective) tabTemplates!: QueryList<GeoTabDirective>;\n\n readonly resolvedSelectedIndex = computed(() => {\n const key = this.selectedKey();\n if (key) {\n const index = this.items().findIndex((item) => item.key === key);\n if (index >= 0) {\n return index;\n }\n }\n\n return this.selectedIndex();\n });\n\n getTemplate(key: string): TemplateRef<unknown> | null {\n return this.tabTemplates?.find((tab) => tab.key() === key)?.template ?? null;\n }\n\n onSelectedIndexChange(index: number): void {\n this.selectedIndex.set(index);\n const key = this.items()[index]?.key ?? '';\n this.selectedKey.set(key || undefined);\n if (key) {\n this.tabChange.emit({ index, key });\n }\n }\n}\n","<nz-tabset\n class=\"geo-tabs\"\n [class.geo-tabs--card]=\"type() === 'card'\"\n [class.geo-tabs--line]=\"type() === 'line'\"\n [nzType]=\"type()\"\n [nzSize]=\"size()\"\n [nzSelectedIndex]=\"resolvedSelectedIndex()\"\n [nzCentered]=\"centered()\"\n [nzAnimated]=\"animated()\"\n (nzSelectedIndexChange)=\"onSelectedIndexChange($event)\"\n>\n @for (item of items(); track item.key) {\n <nz-tab [nzTitle]=\"item.title\" [nzDisabled]=\"item.disabled ?? false\">\n @if (getTemplate(item.key); as tpl) {\n <ng-container [ngTemplateOutlet]=\"tpl\"></ng-container>\n }\n </nz-tab>\n }\n</nz-tabset>\n","export interface GeoRowAction {\n key: string;\n icon: string;\n label?: string;\n title?: string;\n iconTheme?: 'outline' | 'fill' | 'twotone';\n disabled?: boolean;\n danger?: boolean;\n}\n\nexport const DEFAULT_UI_ROW_ACTIONS: GeoRowAction[] = [\n { key: 'edit', icon: 'edit', title: 'Chỉnh sửa' },\n { key: 'more', icon: 'more', title: 'Thêm thao tác' },\n];\n\n/** ≤2: hiện hết; >2: primary + danger (vd. Sửa + Xóa), còn lại vào menu. */\nexport function pickInlineRowActions(\n actions: GeoRowAction[],\n primaryActionKey = 'edit'\n): GeoRowAction[] {\n const list = actions.filter((action) => !action.disabled);\n if (list.length <= 2) {\n return list;\n }\n\n const primary =\n list.find((action) => action.key === primaryActionKey) ?? list[0];\n const secondary =\n list.find((action) => action.key !== primary.key && action.danger) ??\n list.find((action) => action.key !== primary.key);\n\n return secondary ? [primary, secondary] : [primary];\n}\n\nexport function pickOverflowRowActions(\n actions: GeoRowAction[],\n primaryActionKey = 'edit'\n): GeoRowAction[] {\n const list = actions.filter((action) => !action.disabled);\n if (list.length <= 2) {\n return [];\n }\n\n const inlineKeys = new Set(\n pickInlineRowActions(list, primaryActionKey).map((action) => action.key)\n );\n return list.filter((action) => !inlineKeys.has(action.key));\n}\n","import { ChangeDetectionStrategy, Component, computed, input, output } from '@angular/core';\nimport { NgZorroAntdModule } from '../../../ng-zorro/ng-zorro-antd.module';\nimport {\n DEFAULT_UI_ROW_ACTIONS,\n pickInlineRowActions,\n pickOverflowRowActions,\n GeoRowAction,\n} from './geo-row-actions.types';\n\n@Component({\n selector: 'geo-row-actions',\n standalone: true,\n imports: [NgZorroAntdModule],\n templateUrl: './geo-row-actions.component.html',\n styleUrl: './geo-row-actions.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class GeoRowActionsComponent {\n readonly actions = input<GeoRowAction[] | null>(null);\n /** Action ưu tiên hiển thị khi có > 2 thao tác (mặc định: edit) */\n readonly primaryActionKey = input('edit');\n\n readonly actionClick = output<string>();\n /** @deprecated Dùng `actionClick` với key `edit` */\n readonly edit = output<void>();\n /** @deprecated Dùng `actionClick` với key `more` */\n readonly more = output<void>();\n\n readonly resolvedActions = computed(() => {\n const actions = this.actions();\n return actions?.length ? actions : DEFAULT_UI_ROW_ACTIONS;\n });\n\n readonly enabledActions = computed(() =>\n this.resolvedActions().filter((action) => !action.disabled)\n );\n\n readonly inlineActions = computed(() =>\n pickInlineRowActions(this.enabledActions(), this.primaryActionKey())\n );\n\n readonly overflowActions = computed(() =>\n pickOverflowRowActions(this.enabledActions(), this.primaryActionKey())\n );\n\n readonly hasOverflow = computed(() => this.overflowActions().length > 0);\n\n onActionClick(event: Event, action: GeoRowAction): void {\n if (action.disabled) {\n return;\n }\n\n event.stopPropagation();\n this.actionClick.emit(action.key);\n\n if (action.key === 'edit') {\n this.edit.emit();\n }\n\n if (action.key === 'more') {\n this.more.emit();\n }\n }\n}\n","<div class=\"geo-row-actions\">\n @for (action of inlineActions(); track action.key) {\n <button\n type=\"button\"\n class=\"geo-row-actions__btn\"\n [class.geo-row-actions__btn--danger]=\"action.danger\"\n [nz-tooltip]=\"action.title ?? action.label ?? ''\"\n [disabled]=\"action.disabled\"\n [attr.aria-label]=\"action.label ?? action.title ?? action.key\"\n (click)=\"onActionClick($event, action)\"\n >\n <span nz-icon [nzType]=\"action.icon\" [nzTheme]=\"action.iconTheme ?? 'outline'\"></span>\n </button>\n }\n\n @if (hasOverflow()) {\n <button\n type=\"button\"\n class=\"geo-row-actions__btn\"\n nz-dropdown\n [nzDropdownMenu]=\"overflowMenu\"\n nzTrigger=\"click\"\n nzPlacement=\"bottomRight\"\n nz-tooltip=\"Thêm thao tác\"\n aria-label=\"Thêm thao tác\"\n (click)=\"$event.stopPropagation()\"\n >\n <span nz-icon nzType=\"more\" nzTheme=\"outline\"></span>\n </button>\n\n <nz-dropdown-menu #overflowMenu=\"nzDropdownMenu\">\n <div class=\"geo-row-actions__panel\" (click)=\"$event.stopPropagation()\">\n @for (action of overflowActions(); track action.key) {\n <button\n type=\"button\"\n class=\"geo-row-actions__panel-item\"\n [class.geo-row-actions__panel-item--danger]=\"action.danger\"\n [attr.aria-label]=\"action.label ?? action.title ?? action.key\"\n (click)=\"onActionClick($event, action)\"\n >\n <span\n class=\"geo-row-actions__panel-icon\"\n nz-icon\n [nzType]=\"action.icon\"\n [nzTheme]=\"action.iconTheme ?? 'outline'\"\n ></span>\n <span class=\"geo-row-actions__panel-label\">\n {{ action.label ?? action.title ?? action.key }}\n </span>\n </button>\n }\n </div>\n </nz-dropdown-menu>\n }\n</div>\n","import type { GeoRowAction } from './geo-row-actions/geo-row-actions.types';\n\nexport interface GeoTableFilter {\n text: string;\n value: string;\n}\n\nexport type GeoTableCellRender = 'text' | 'index' | 'status' | 'actions';\n\n/** Quy tắc căn lề dữ liệu: text → trái, number → phải, date → giữa */\nexport type GeoTableColumnDataType = 'text' | 'number' | 'date';\n\nexport interface GeoTableColumn {\n key: string;\n title: string;\n width?: string;\n /** Căn lề ô dữ liệu — nếu không set sẽ suy ra từ `dataType` / `renderAs` */\n align?: 'left' | 'center' | 'right';\n /** Kiểu dữ liệu để áp dụng quy tắc căn lề mặc định */\n dataType?: GeoTableColumnDataType;\n sortable?: boolean;\n sortOrder?: 'ascend' | 'descend' | null;\n sortFn?: (a: Record<string, unknown>, b: Record<string, unknown>) => number;\n filters?: GeoTableFilter[];\n filterMultiple?: boolean;\n fixed?: 'left' | 'right';\n ellipsis?: boolean;\n wrap?: boolean;\n renderAs?: GeoTableCellRender;\n statusLabelKey?: string;\n actions?: GeoRowAction[];\n /**\n * Resolve actions theo từng dòng (vd. ẩn/hiện theo trạng thái).\n * Nếu có thì ưu tiên hơn `actions`.\n */\n resolveActions?: (row: Record<string, unknown>) => GeoRowAction[];\n /** Action key ưu tiên hiển thị khi có > 2 thao tác (mặc định: edit) */\n primaryActionKey?: string;\n visible?: boolean;\n /**\n * Mobile card: dùng cột này làm tiêu đề card.\n * Nếu không cột nào set, lấy cột dữ liệu đầu tiên (không phải index/actions).\n */\n mobileTitle?: boolean;\n /** Mobile card: ẩn cột khỏi body card. */\n mobileHidden?: boolean;\n}\n\n/** Breakpoint chuyển bảng → danh sách card (khớp layout mobile). */\nexport const UI_TABLE_MOBILE_BREAKPOINT = 767.98;\n\nexport type GeoTablePaginationPosition = 'top' | 'bottom' | 'both';\n\nexport const DEFAULT_UI_TABLE_PAGE_SIZE_OPTIONS = [10, 20, 50, 100];\n","import { ChangeDetectionStrategy, Component, computed, input, model } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { NgZorroAntdModule } from '../../../ng-zorro/ng-zorro-antd.module';\nimport { GeoSelectOption } from '../../geo-select/geo-select.types';\nimport { GeoSelectComponent } from '../../geo-select/geo-select.component';\nimport { DEFAULT_UI_TABLE_PAGE_SIZE_OPTIONS } from '../geo-table.types';\n\nexport type GeoTablePaginationPageItem = number | 'ellipsis';\n\n@Component({\n selector: 'geo-table-pagination',\n standalone: true,\n imports: [FormsModule, NgZorroAntdModule, GeoSelectComponent],\n templateUrl: './geo-table-pagination.component.html',\n styleUrl: './geo-table-pagination.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class GeoTablePaginationComponent {\n readonly pageIndex = model(1);\n readonly pageSize = model(10);\n readonly total = input(0);\n readonly pageSizeOptions = input<number[]>(DEFAULT_UI_TABLE_PAGE_SIZE_OPTIONS);\n readonly showSizeChanger = input(true);\n readonly hideOnSinglePage = input(false);\n readonly showTotalRange = input(true);\n readonly sizeLabel = input('Hiển thị');\n\n readonly rangeStart = computed(() => {\n if (this.total() === 0) {\n return 0;\n }\n\n return (this.pageIndex() - 1) * this.pageSize() + 1;\n });\n\n readonly rangeEnd = computed(() => {\n if (this.total() === 0) {\n return 0;\n }\n\n return Math.min(this.pageIndex() * this.pageSize(), this.total());\n });\n\n readonly totalPages = computed(() => Math.max(1, Math.ceil(this.total() / this.pageSize())));\n\n readonly sizeOptions = computed<GeoSelectOption<number>[]>(() =>\n this.pageSizeOptions().map((size) => ({\n label: size.toString(),\n value: size,\n }))\n );\n\n readonly visible = computed(() => {\n if (this.hideOnSinglePage() && this.total() <= this.pageSize()) {\n return false;\n }\n\n return this.total() > 0;\n });\n\n readonly pages = computed(() => this.buildPageList(this.pageIndex(), this.totalPages()));\n\n readonly isFirstPage = computed(() => this.pageIndex() <= 1);\n\n readonly isLastPage = computed(() => this.pageIndex() >= this.totalPages());\n\n onPageSizeChange(value: string | number | Array<string | number> | null): void {\n if (typeof value === 'number') {\n this.pageSize.set(value);\n }\n }\n\n goToFirst(): void {\n this.goToPage(1);\n }\n\n goToPrev(): void {\n this.goToPage(this.pageIndex() - 1);\n }\n\n goToNext(): void {\n this.goToPage(this.pageIndex() + 1);\n }\n\n goToLast(): void {\n this.goToPage(this.totalPages());\n }\n\n goToPage(page: number): void {\n const next = Math.min(Math.max(page, 1), this.totalPages());\n if (next !== this.pageIndex()) {\n this.pageIndex.set(next);\n }\n }\n\n private buildPageList(current: number, total: number): GeoTablePaginationPageItem[] {\n if (total <= 5) {\n return Array.from({ length: total }, (_, index) => index + 1);\n }\n\n if (current <= 3) {\n return [1, 2, 3, 'ellipsis', total];\n }\n\n if (current >= total - 2) {\n return [1, 'ellipsis', total - 2, total - 1, total];\n }\n\n return [1, 'ellipsis', current - 1, current, current + 1, 'ellipsis', total];\n }\n}\n","@if (visible()) {\n <div class=\"geo-table-pagination\">\n <div class=\"geo-table-pagination__left\">\n @if (showTotalRange()) {\n <p class=\"geo-table-pagination__total\">\n <strong>{{ rangeStart() }}-{{ rangeEnd() }}</strong> trên tổng <strong>{{ total() }}</strong>\n </p>\n }\n\n @if (showSizeChanger()) {\n <div class=\"geo-table-pagination__size\">\n <span class=\"geo-table-pagination__size-label\">{{ sizeLabel() }}</span>\n <geo-select\n class=\"geo-table-pagination__size-select\"\n size=\"small\"\n [options]=\"sizeOptions()\"\n [allowClear]=\"false\"\n [ngModel]=\"pageSize()\"\n (valueChange)=\"onPageSizeChange($event)\"\n ></geo-select>\n </div>\n }\n </div>\n\n <div class=\"geo-table-pagination__nav\" role=\"navigation\" aria-label=\"Phân trang\">\n <button\n type=\"button\"\n class=\"geo-table-pagination__btn\"\n title=\"Trang đầu\"\n [disabled]=\"isFirstPage()\"\n (click)=\"goToFirst()\"\n >\n <span aria-hidden=\"true\">&laquo;</span>\n </button>\n\n <button\n type=\"button\"\n class=\"geo-table-pagination__btn\"\n title=\"Trang trước\"\n [disabled]=\"isFirstPage()\"\n (click)=\"goToPrev()\"\n >\n <span aria-hidden=\"true\">&lsaquo;</span>\n </button>\n\n @for (page of pages(); track $index) {\n @if (page === 'ellipsis') {\n <span class=\"geo-table-pagination__ellipsis\" aria-hidden=\"true\">...</span>\n } @else {\n <button\n type=\"button\"\n class=\"geo-table-pagination__btn geo-table-pagination__btn--page\"\n [class.geo-table-pagination__btn--active]=\"page === pageIndex()\"\n [attr.aria-current]=\"page === pageIndex() ? 'page' : null\"\n [attr.aria-label]=\"'Trang ' + page\"\n (click)=\"goToPage(page)\"\n >\n {{ page }}\n </button>\n }\n }\n\n <button\n type=\"button\"\n class=\"geo-table-pagination__btn\"\n title=\"Trang kế\"\n [disabled]=\"isLastPage()\"\n (click)=\"goToNext()\"\n >\n <span aria-hidden=\"true\">&rsaquo;</span>\n </button>\n\n <button\n type=\"button\"\n class=\"geo-table-pagination__btn\"\n title=\"Trang cuối\"\n [disabled]=\"isLastPage()\"\n (click)=\"goToLast()\"\n >\n <span aria-hidden=\"true\">&raquo;</span>\n </button>\n </div>\n </div>\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n effect,\n input,\n model,\n output,\n signal,\n} from '@angular/core';\nimport { NgZorroAntdModule } from '../../ng-zorro/ng-zorro-antd.module';\nimport { NzTableQueryParams, NzTableSize } from 'ng-zorro-antd/table';\nimport { GeoRowActionsComponent } from './geo-row-actions/geo-row-actions.component';\nimport {\n pickInlineRowActions,\n pickOverflowRowActions,\n type GeoRowAction,\n} from './geo-row-actions/geo-row-actions.types';\nimport { GeoStatusTagComponent } from '../geo-status-tag/geo-status-tag.component';\nimport { GeoCheckboxComponent } from '../geo-checkbox/geo-checkbox.component';\nimport { GeoTablePaginationComponent } from './geo-table-pagination/geo-table-pagination.component';\nimport {\n DEFAULT_UI_TABLE_PAGE_SIZE_OPTIONS,\n GeoTableColumn,\n GeoTablePaginationPosition,\n} from './geo-table.types';\n\n@Component({\n selector: 'geo-table',\n standalone: true,\n imports: [\n NgZorroAntdModule,\n GeoStatusTagComponent,\n GeoRowActionsComponent,\n GeoCheckboxComponent,\n GeoTablePaginationComponent,\n ],\n templateUrl: './geo-table.component.html',\n styleUrl: './geo-table.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class GeoTableComponent {\n readonly columns = input<GeoTableColumn[]>([]);\n readonly data = input<Record<string, unknown>[]>([]);\n readonly loading = input(false);\n readonly bordered = input(true);\n readonly outerBordered = input(false);\n readonly size = input<NzTableSize>('middle');\n readonly striped = input(true);\n readonly clickable = input(true);\n readonly tableLayout = input<'auto' | 'fixed'>('auto');\n\n readonly showPagination = input(true);\n readonly frontPagination = input(true);\n readonly pageIndex = model(1);\n readonly pageSize = model(10);\n readonly total = input<number | undefined>(undefined);\n readonly pageSizeOptions = input<number[]>(DEFAULT_UI_TABLE_PAGE_SIZE_OPTIONS);\n readonly showSizeChanger = input(false);\n readonly showQuickJumper = input(false);\n readonly hideOnSinglePage = input(false);\n readonly simplePagination = input(false);\n readonly paginationPosition = input<GeoTablePaginationPosition>('bottom');\n\n readonly scroll = input<{ x?: string; y?: string }>({});\n readonly scrollY = input<string | undefined>(undefined);\n /**\n * Tự bật scroll ngang theo tổng width cột.\n * Khi có cột `fixed`, scroll.x luôn được tính (bắt buộc với nz-table fixed).\n */\n readonly autoScroll = input(false);\n\n readonly tableTitle = input<string | undefined>(undefined);\n readonly footer = input<string | undefined>(undefined);\n readonly emptyText = input('Không có dữ liệu');\n\n readonly showTotalRange = input(false);\n\n readonly selectable = input(false);\n readonly rowKey = input('id');\n readonly selectedKeys = model<string[]>([]);\n\n /**\n * Mobile card: key cột làm tiêu đề.\n * Ưu tiên hơn `column.mobileTitle`; nếu không set thì lấy cột dữ liệu đầu tiên.\n */\n readonly mobileTitleKey = input<string | undefined>(undefined);\n /** Bật/tắt chuyển card trên mobile (mặc định bật). */\n readonly mobileCardView = input(true);\n\n readonly rowClick = output<Record<string, unknown>>();\n readonly rowEdit = output<Record<string, unknown>>();\n readonly rowMore = output<Record<string, unknown>>();\n readonly rowAction = output<{ row: Record<string, unknown>; action: string }>();\n readonly queryParams = output<NzTableQueryParams>();\n readonly currentPageDataChange = output<readonly Record<string, unknown>[]>();\n readonly selectionChange = output<Record<string, unknown>[]>();\n\n readonly allChecked = signal(false);\n readonly indeterminate = signal(false);\n\n private sortFnCache = new Map<string, (a: Record<string, unknown>, b: Record<string, unknown>) => number>();\n\n constructor() {\n effect(() => {\n this.columns();\n this.sortFnCache.clear();\n });\n }\n\n readonly visibleColumns = computed(() => this.columns().filter((col) => col.visible !== false));\n\n readonly computedTotal = computed(() => this.total() ?? this.data().length);\n\n readonly paginatedData = computed(() => {\n if (!this.showPagination() || !this.frontPagination()) {\n return this.data();\n }\n\n const start = (this.pageIndex() - 1) * this.pageSize();\n return this.data().slice(start, start + this.pageSize());\n });\n\n readonly shouldShowPagination = computed(() => this.showPagination());\n\n readonly hasFixedColumns = computed(() =>\n this.visibleColumns().some((col) => col.fixed === 'left' || col.fixed === 'right')\n );\n\n /** Có cột fixed → table-layout fixed để header/body cùng width cột. */\n readonly computedTableLayout = computed(() =>\n this.hasFixedColumns() ? 'fixed' : this.tableLayout()\n );\n\n /** Đồng bộ width cột khi scrollY tách header/body thành 2 bảng. */\n readonly widthConfig = computed(() => {\n const widths = this.visibleColumns().map((col) => col.width ?? null);\n return this.selectable() ? ['48px', ...widths] : widths;\n });\n\n readonly computedScroll = computed(() => {\n const scroll = { ...this.scroll() };\n const scrollY = this.scrollY();\n\n if (scrollY) {\n scroll.y = scrollY;\n }\n\n // nz-table cần scroll.x để fixed left/right hoạt động.\n if (!scroll.x && (this.autoScroll() || this.hasFixedColumns())) {\n const minWidth = this.computeMinTableWidth();\n if (minWidth > 0) {\n scroll.x = `${minWidth}px`;\n }\n }\n\n return scroll;\n });\n\n readonly mobileTitleColumn = computed(() => {\n const mobileTitleKey = this.mobileTitleKey();\n const visibleColumns = this.visibleColumns();\n if (mobileTitleKey) {\n return visibleColumns.find((col) => col.key === mobileTitleKey) ?? null;\n }\n\n const marked = visibleColumns.find((col) => col.mobileTitle);\n if (marked) return marked;\n\n return (\n visibleColumns.find(\n (col) =>\n col.renderAs !== 'index' &&\n col.renderAs !== 'actions' &&\n !col.mobileHidden\n ) ?? null\n );\n });\n\n readonly mobileBodyColumns = computed(() => {\n const titleKey = this.mobileTitleColumn()?.key;\n return this.visibleColumns().filter(\n (col) =>\n col.renderAs !== 'actions' &&\n col.renderAs !== 'index' &&\n !col.mobileHidden &&\n col.key !== titleKey\n );\n });\n\n readonly mobileActionsColumn = computed(\n () => this.visibleColumns().find((col) => col.renderAs === 'actions') ?? null\n );\n\n getRowActions(col: GeoTableColumn, row: Record<string, unknown>): GeoRowAction[] {\n if (col.resolveActions) {\n return col.resolveActions(row) ?? [];\n }\n return col.actions ?? [];\n }\n\n getMobileHeaderActions(\n col: GeoTableColumn,\n row: Record<string, unknown>\n ): GeoRowAction[] {\n return pickInlineRowActions(\n this.getRowActions(col, row),\n col.primaryActionKey ?? 'edit'\n );\n }\n\n getMobileFooterActions(\n col: GeoTableColumn,\n row: Record<string, unknown>\n ): GeoRowAction[] {\n return pickOverflowRowActions(\n this.getRowActions(col, row),\n col.primaryActionKey ?? 'edit'\n );\n }\n\n hasFilters(col: GeoTableColumn): boolean {\n return (col.filters?.length ?? 0) > 0;\n }\n\n getSortFn(col: GeoTableColumn): (a: Record<string, unknown>, b: Record<string, unknown>) => number {\n if (col.sortFn) {\n return col.sortFn;\n }\n\n const cached = this.sortFnCache.get(col.key);\n if (cached) {\n return cached;\n }\n\n const fn = (a: Record<string, unknown>, b: Record<string, unknown>) => {\n const av = a[col.key];\n const bv = b[col.key];\n if (av == null || bv == null) return 0;\n return String(av).localeCompare(String(bv), 'vi');\n };\n\n this.sortFnCache.set(col.key, fn);\n return fn;\n }\n\n getCellValue(row: Record<string, unknown>, key: string): string {\n const value = row[key];\n return value == null ? '' : String(value);\n }\n\n /** Tiêu đề cột luôn căn giữa theo quy tắc accessibility */\n getHeaderAlign(_col: GeoTableColumn): 'left' | 'center' | 'right' {\n return 'center';\n }\n\n /**\n * Căn lề ô dữ liệu:\n * - text → trái, number → phải, date → giữa\n * - index / status / actions → giữa\n */\n getCellAlign(col: GeoTableColumn): 'left' | 'center' | 'right' {\n if (col.align) {\n return col.align;\n }\n\n if (col.renderAs === 'index' || col.renderAs === 'status' || col.renderAs === 'actions') {\n return 'center';\n }\n\n if (col.dataType === 'number') {\n return 'right';\n }\n\n if (col.dataType === 'date') {\n return 'center';\n }\n\n return 'left';\n }\n\n getRowIndex(rowIndex: number): number {\n return (this.pageIndex() - 1) * this.pageSize() + rowIndex + 1;\n }\n\n trackRow(index: number, row: Record<string, unknown>): string {\n const key = row[this.rowKey()];\n return key != null ? String(key) : String(index);\n }\n\n isRowSelected(row: Record<string, unknown>): boolean {\n const key = String(row[this.rowKey()] ?? '');\n return this.selectedKeys().includes(key);\n }\n\n onAllChecked(checked: boolean): void {\n const rows = this.selectionRows();\n const keys = rows.map((row) => String(row[this.rowKey()] ?? ''));\n\n if (checked) {\n this.selectedKeys.set([...new Set([...this.selectedKeys(), ...keys])]);\n } else {\n this.selectedKeys.set(this.selectedKeys().filter((key) => !keys.includes(key)));\n }\n\n this.refreshSelectionState();\n this.emitSelection();\n }\n\n onItemChecked(row: Record<string, unknown>, checked: boolean): void {\n const key = String(row[this.rowKey()] ?? '');\n this.selectedKeys.set(\n checked\n ? [...this.selectedKeys(), key]\n : this.selectedKeys().filter((k) => k !== key)\n );\n this.refreshSelectionState();\n this.emitSelection();\n }\n\n onPageIndexChange(index: number): void {\n this.pageIndex.set(index);\n this.refreshSelectionState();\n }\n\n onPageSizeChange(size: number): void {\n this.pageSize.set(size);\n this.pageIndex.set(1);\n this.refreshSelectionState();\n }\n\n onRowActionClick(row: Record<string, unknown>, actionKey: string): void {\n this.rowAction.emit({ row, action: actionKey });\n\n if (actionKey === 'edit') {\n this.rowEdit.emit(row);\n }\n\n if (actionKey === 'more') {\n this.rowMore.emit(row);\n }\n }\n\n onMobileCardClick(row: Record<string, unknown>, event: Event): void {\n if (!this.clickable()) return;\n const target = event.target as HTMLElement | null;\n if (target?.closest('button, a, .geo-row-actions, .geo-checkbox, .geo-table-card__footer')) {\n return;\n }\n this.rowClick.emit(row);\n }\n\n private computeMinTableWidth(): number {\n let total = this.selectable() ? 48 : 0;\n\n for (const col of this.visibleColumns()) {\n const width = col.width;\n if (width?.endsWith('px')) {\n total += Number.parseInt(width, 10);\n } else {\n total += 160;\n }\n }\n\n return total;\n }\n\n private refreshSelectionState(): void {\n const rows = this.selectionRows();\n const selectedOnPage = rows.filter((row) =>\n this.selectedKeys().includes(String(row[this.rowKey()] ?? ''))\n ).length;\n\n this.allChecked.set(selectedOnPage > 0 && selectedOnPage === rows.length);\n this.indeterminate.set(selectedOnPage > 0 && selectedOnPage < rows.length);\n }\n\n private selectionRows(): Record<string, unknown>[] {\n return this.showPagination() && this.frontPagination() ? this.paginatedData() : this.data();\n }\n\n private emitSelection(): void {\n const selected = this.data().filter((row) =>\n this.selectedKeys().includes(String(row[this.rowKey()] ?? ''))\n );\n this.selectionChange.emit(selected);\n }\n}\n","<div\n class=\"geo-table\"\n [class.geo-table--striped]=\"striped()\"\n [class.geo-table--mobile-cards]=\"mobileCardView()\"\n>\n @if (shouldShowPagination() && (paginationPosition() === 'top' || paginationPosition() === 'both')) {\n <geo-table-pagination\n [pageIndex]=\"pageIndex()\"\n [pageSize]=\"pageSize()\"\n [total]=\"computedTotal()\"\n [pageSizeOptions]=\"pageSizeOptions()\"\n [showSizeChanger]=\"showSizeChanger()\"\n [hideOnSinglePage]=\"hideOnSinglePage()\"\n [showTotalRange]=\"showTotalRange()\"\n (pageIndexChange)=\"onPageIndexChange($event)\"\n (pageSizeChange)=\"onPageSizeChange($event)\"\n ></geo-table-pagination>\n }\n\n <div class=\"geo-table__desktop\">\n <nz-table\n #uiTable\n [nzData]=\"paginatedData()\"\n [nzLoading]=\"loading()\"\n [nzBordered]=\"bordered()\"\n [nzOuterBordered]=\"outerBordered()\"\n [nzSize]=\"size()\"\n [nzTitle]=\"tableTitle() ?? null\"\n [nzFooter]=\"footer() ?? null\"\n [nzShowPagination]=\"false\"\n [nzFrontPagination]=\"false\"\n [nzScroll]=\"computedScroll()\"\n [nzNoResult]=\"emptyText()\"\n [nzTableLayout]=\"computedTableLayout()\"\n [nzWidthConfig]=\"widthConfig()\"\n (nzQueryParams)=\"queryParams.emit($event)\"\n (nzCurrentPageDataChange)=\"currentPageDataChange.emit($event)\"\n >\n <thead>\n <tr>\n @if (selectable()) {\n <th\n class=\"geo-table__checkbox-cell\"\n nzWidth=\"48px\"\n [nzLeft]=\"hasFixedColumns()\"\n >\n <geo-checkbox\n [checked]=\"allChecked()\"\n [indeterminate]=\"indeterminate()\"\n (checkedChange)=\"onAllChecked($event)\"\n ></geo-checkbox>\n </th>\n }\n @for (col of visibleColumns(); track col.key) {\n <th\n [nzWidth]=\"col.width ?? null\"\n [nzAlign]=\"getHeaderAlign(col)\"\n [nzColumnKey]=\"col.key\"\n [nzShowSort]=\"col.sortable ?? false\"\n [nzSortOrder]=\"col.sortOrder ?? null\"\n [nzSortFn]=\"col.sortable ? getSortFn(col) : null\"\n [nzShowFilter]=\"hasFilters(col)\"\n [nzFilters]=\"col.filters ?? []\"\n [nzFilterMultiple]=\"col.filterMultiple ?? true\"\n [nzLeft]=\"col.fixed === 'left'\"\n [nzRight]=\"col.fixed === 'right'\"\n >{{ col.title }}</th>\n }\n </tr>\n </thead>\n <tbody>\n @for (row of uiTable.data; track trackRow($index, row); let rowIndex = $index) {\n <tr\n class=\"geo-table__row\"\n [class.geo-table__row--selected]=\"isRowSelected(row)\"\n [class.geo-table__row--clickable]=\"clickable()\"\n (click)=\"clickable() && rowClick.emit(row)\"\n >\n @if (selectable()) {\n <td\n class=\"geo-table__checkbox-cell\"\n [nzLeft]=\"hasFixedColumns()\"\n (click)=\"$event.stopPropagation()\"\n >\n <geo-checkbox\n [checked]=\"isRowSelected(row)\"\n (checkedChange)=\"onItemChecked(row, $event)\"\n ></geo-checkbox>\n </td>\n }\n @for (col of visibleColumns(); track col.key) {\n <td\n [nzAlign]=\"getCellAlign(col)\"\n [nzEllipsis]=\"col.wrap ? false : (col.ellipsis ?? false)\"\n [class.geo-table__cell--wrap]=\"col.wrap\"\n [nzLeft]=\"col.fixed === 'left'\"\n [nzRight]=\"col.fixed === 'right'\"\n [style.width]=\"col.width || null\"\n [style.minWidth]=\"col.width || null\"\n [style.maxWidth]=\"col.fixed ? (col.width || null) : null\"\n >\n @if (col.renderAs === 'index') {\n {{ getRowIndex(rowIndex) }}\n } @else if (col.renderAs === 'status') {\n <geo-status-tag\n [status]=\"getCellValue(row, col.key)\"\n [label]=\"col.statusLabelKey ? getCellValue(row, col.statusLabelKey) || undefined : undefined\"\n ></geo-status-tag>\n } @else if (col.renderAs === 'actions') {\n <geo-row-actions\n [actions]=\"getRowActions(col, row)\"\n [primaryActionKey]=\"col.primaryActionKey ?? 'edit'\"\n (actionClick)=\"onRowActionClick(row, $event)\"\n ></geo-row-actions>\n } @else {\n {{ getCellValue(row, col.key) }}\n }\n </td>\n }\n </tr>\n }\n </tbody>\n </nz-table>\n </div>\n\n @if (mobileCardView()) {\n <div\n class=\"geo-table__mobile\"\n [class.geo-table__mobile--loading]=\"loading()\"\n [attr.aria-busy]=\"loading() ? 'true' : null\"\n >\n @if (selectable() && paginatedData().length) {\n <div class=\"geo-table-card__select-all\">\n <geo-checkbox\n [checked]=\"allChecked()\"\n [indeterminate]=\"indeterminate()\"\n (checkedChange)=\"onAllChecked($event)\"\n ></geo-checkbox>\n <span>Chọn tất cả trên trang</span>\n </div>\n }\n\n @if (!paginatedData().length && !loading()) {\n <div class=\"geo-table__mobile-empty\">{{ emptyText() }}</div>\n }\n\n @for (row of paginatedData(); track trackRow($index, row); let rowIndex = $index) {\n <article\n class=\"geo-table-card\"\n [class.geo-table-card--selected]=\"isRowSelected(row)\"\n [class.geo-table-card--clickable]=\"clickable()\"\n (click)=\"onMobileCardClick(row, $event)\"\n >\n <header class=\"geo-table-card__header\">\n <div class=\"geo-table-card__title-wrap\">\n @if (selectable()) {\n <geo-checkbox\n class=\"geo-table-card__checkbox\"\n [checked]=\"isRowSelected(row)\"\n (checkedChange)=\"onItemChecked(row, $event)\"\n (click)=\"$event.stopPropagation()\"\n ></geo-checkbox>\n }\n @if (mobileTitleColumn(); as titleCol) {\n <h3 class=\"geo-table-card__title\">\n <span class=\"geo-table-card__title-label\">{{ titleCol.title }}</span>\n <span class=\"geo-table-card__title-sep\">:</span>\n <span class=\"geo-table-card__title-value\">\n @if (titleCol.renderAs === 'index') {\n {{ getRowIndex(rowIndex) }}\n } @else {\n {{ getCellValue(row, titleCol.key) }}\n }\n </span>\n </h3>\n }\n </div>\n\n @if (mobileActionsColumn(); as actionsCol) {\n <div class=\"geo-table-card__actions\" (click)=\"$event.stopPropagation()\">\n <geo-row-actions\n [actions]=\"getMobileHeaderActions(actionsCol, row)\"\n [primaryActionKey]=\"actionsCol.primaryActionKey ?? 'edit'\"\n (actionClick)=\"onRowActionClick(row, $event)\"\n ></geo-row-actions>\n </div>\n }\n </header>\n\n @if (mobileBodyColumns().length) {\n <div class=\"geo-table-card__body\">\n @for (col of mobileBodyColumns(); track col.key) {\n <div class=\"geo-table-card__row\">\n <span class=\"geo-table-card__label\">{{ col.title }}</span>\n <span class=\"geo-table-card__sep\">:</span>\n <span class=\"geo-table-card__value\">\n @if (col.renderAs === 'index') {\n {{ getRowIndex(rowIndex) }}\n } @else if (col.renderAs === 'status') {\n <geo-status-tag\n [status]=\"getCellValue(row, col.key)\"\n [label]=\"col.statusLabelKey ? getCellValue(row, col.statusLabelKey) || undefined : undefined\"\n ></geo-status-tag>\n } @else {\n {{ getCellValue(row, col.key) }}\n }\n </span>\n </div>\n }\n </div>\n }\n\n @if (mobileActionsColumn(); as actionsCol) {\n @if (getMobileFooterActions(actionsCol, row); as footerActions) {\n @if (footerActions.length) {\n <footer class=\"geo-table-card__footer\" (click)=\"$event.stopPropagation()\">\n @for (action of footerActions; track action.key) {\n <button\n type=\"button\"\n class=\"geo-table-card__footer-btn\"\n [class.geo-table-card__footer-btn--danger]=\"action.danger\"\n [disabled]=\"action.disabled\"\n (click)=\"onRowActionClick(row, action.key)\"\n >\n {{ action.label ?? action.title ?? action.key }}\n </button>\n }\n </footer>\n }\n }\n }\n </article>\n }\n </div>\n }\n\n @if (shouldShowPagination() && (paginationPosition() === 'bottom' || paginationPosition() === 'both')) {\n <geo-table-pagination\n [pageIndex]=\"pageIndex()\"\n [pageSize]=\"pageSize()\"\n [total]=\"computedTotal()\"\n [pageSizeOptions]=\"pageSizeOptions()\"\n [showSizeChanger]=\"showSizeChanger()\"\n [hideOnSinglePage]=\"hideOnSinglePage()\"\n [showTotalRange]=\"showTotalRange()\"\n (pageIndexChange)=\"onPageIndexChange($event)\"\n (pageSizeChange)=\"onPageSizeChange($event)\"\n ></geo-table-pagination>\n }\n</div>\n","import {\n AfterViewInit,\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n NgZone,\n OnDestroy,\n effect,\n inject,\n input,\n model,\n output,\n signal,\n} from '@angular/core';\nimport { GeoButtonComponent } from '../../geo-button/geo-button.component';\n\n/** Breakpoint (px) → số cột tối đa khi `responsiveColumns` bật. */\nconst COL_BREAKPOINTS: readonly { minWidth: number; cols: number }[] = [\n { minWidth: 1400, cols: 4 },\n { minWidth: 1200, cols: 4 },\n { minWidth: 1024, cols: 3 },\n { minWidth: 768, cols: 2 },\n { minWidth: 0, cols: 1 },\n];\n\n/**\n * Thanh lọc phía trên bảng: field chính + actions (Tìm kiếm / Bộ lọc nâng cao / Reset).\n *\n * ## Số cột hiển thị\n * - `[columns]=\"4\"` — 4 cột field + 1 cột actions = grid 5 cột đều.\n * - `[responsiveColumns]=\"false\"` — giữ đúng `columns`, không giảm theo breakpoint.\n *\n * ## Layout\n * - Grid đều `columns + 1`: field cột 1..N, actions cột cuối.\n * - Advanced span full width (`1 / -1`) với cùng `columns + 1` cột → phủ cả cột button.\n * - Stacked (màn hẹp): actions → fields → advanced.\n *\n * ## Content projection\n * - Default: luôn hiện. Slot `[advanced]`: chỉ hiện khi `advancedExpanded`.\n */\n@Component({\n selector: 'geo-table-filter',\n standalone: true,\n imports: [GeoButtonComponent],\n templateUrl: './geo-table-filter.component.html',\n styleUrl: './geo-table-filter.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '[style.--geo-table-filter-cols]': 'effectiveCols()',\n '[style.--geo-table-filter-total-cols]': 'effectiveCols() + 1',\n '[style.--geo-table-filter-gap.px]': 'gap()',\n '[class.geo-table-filter--stacked]': 'stackedLayout()',\n },\n})\nexport class GeoTableFilterComponent implements AfterViewInit, OnDestroy {\n private readonly host = inject(ElementRef<HTMLElement>);\n private readonly ngZone = inject(NgZone);\n\n /**\n * Số cột field mỗi hàng (mặc định 4 → tổng 5 cột gồm actions).\n * Ví dụ: 4 field + columns=2 → 2 hàng × 2 cột field (+ 1 cột actions).\n */\n readonly columns = input(4);\n /**\n * Khi `true` (mặc định): số cột thực tế ≤ `columns` theo breakpoint.\n * Khi `false`: luôn dùng đúng `columns`.\n */\n readonly responsiveColumns = input(true);\n /** Đưa actions lên hàng đầu khi màn hẹp (stacked). */\n readonly responsiveCollapse = input(true);\n /** Breakpoint chuyển layout stacked (px). */\n readonly mobileBreakpoint = input(1024);\n /** Khoảng cách grid (px). */\n readonly gap = input(15);\n\n readonly searchLabel = input('Tìm kiếm');\n readonly searchLoading = input(false);\n /** Hiện nút mở/đóng slot `[advanced]`. */\n readonly showAdvancedToggle = input(true);\n readonly showReset = input(true);\n /** Mở panel field nâng cao (`[advanced]`). */\n readonly advancedExpanded = model(false);\n /**\n * Số field advanced đang có giá trị — hiện badge trên nút expand.\n * Parent tự tính (vd. `countFilledFilters(query, ADVANCED_KEYS)`).\n */\n readonly advancedFilterCount = input(0);\n readonly filterToggleTitle = input('Bộ lọc nâng cao');\n readonly resetTitle = input('Xóa bộ lọc');\n\n readonly search = output<void>();\n readonly reset = output<void>();\n\n readonly effectiveCols = signal(4);\n readonly stackedLayout = signal(false);\n\n private resizeObserver?: ResizeObserver;\n private layoutFrame?: number;\n\n constructor() {\n effect(() => {\n this.columns();\n this.responsiveColumns();\n this.responsiveCollapse();\n this.mobileBreakpoint();\n this.scheduleLayout();\n });\n }\n\n ngAfterViewInit(): void {\n this.ngZone.runOutsideAngular(() => {\n this.resizeObserver = new ResizeObserver(() => this.scheduleLayout());\n this.resizeObserver.observe(this.host.nativeElement);\n });\n this.scheduleLayout();\n }\n\n ngOnDestroy(): void {\n this.resizeObserver?.disconnect();\n if (this.layoutFrame) {\n cancelAnimationFrame(this.layoutFrame);\n }\n }\n\n toggleAdvanced(): void {\n this.advancedExpanded.set(!this.advancedExpanded());\n }\n\n onSearch(): void {\n this.search.emit();\n }\n\n onReset(): void {\n this.reset.emit();\n }\n\n private scheduleLayout(): void {\n if (this.layoutFrame) {\n cancelAnimationFrame(this.layoutFrame);\n }\n this.layoutFrame = requestAnimationFrame(() => {\n this.ngZone.run(() => {\n this.updateResponsiveLayout();\n });\n });\n }\n\n private updateResponsiveLayout(): void {\n const hostWidth = this.host.nativeElement.clientWidth || 0;\n const effectiveCols = this.getEffectiveCols(hostWidth);\n this.effectiveCols.set(effectiveCols);\n // 1 cột / dưới breakpoint: stacked — actions lên hàng đầu.\n this.stackedLayout.set(\n effectiveCols === 1 ||\n (this.responsiveCollapse() && hostWidth > 0 && hostWidth < this.mobileBreakpoint())\n );\n }\n\n private getEffectiveCols(width: number): number {\n const requested = Math.max(1, Math.floor(this.columns()) || 1);\n if (!this.responsiveColumns()) {\n return requested;\n }\n if (width <= 0) {\n return requested;\n }\n const preset = COL_BREAKPOINTS.find((bp) => width >= bp.minWidth)?.cols ?? 1;\n return Math.min(requested, preset);\n }\n}\n","<div\n class=\"geo-table-filter\"\n [class.geo-table-filter--expanded]=\"advancedExpanded()\"\n [class.geo-table-filter--no-desktop-toggle]=\"!showAdvancedToggle()\"\n>\n <div class=\"geo-table-filter__layout\">\n <div class=\"geo-table-filter__fields\">\n <ng-content></ng-content>\n </div>\n\n <div class=\"geo-table-filter__actions\">\n <geo-button\n appearance=\"primary\"\n color=\"brand\"\n icon=\"search\"\n [disabled]=\"searchLoading()\"\n (clicked)=\"onSearch()\"\n >\n {{ searchLabel() }}\n </geo-button>\n\n @if (showAdvancedToggle()) {\n <span\n class=\"geo-table-filter__toggle\"\n [class.geo-table-filter__toggle--active]=\"advancedExpanded()\"\n [class.geo-table-filter__toggle--has-count]=\"advancedFilterCount() > 0\"\n >\n <geo-button\n appearance=\"secondary\"\n color=\"brand\"\n icon=\"filter\"\n [iconOnly]=\"true\"\n [title]=\"filterToggleTitle()\"\n [attr.aria-expanded]=\"advancedExpanded()\"\n (clicked)=\"toggleAdvanced()\"\n ></geo-button>\n @if (advancedFilterCount() > 0) {\n <span class=\"geo-table-filter__toggle-badge\" aria-hidden=\"true\">\n {{ advancedFilterCount() > 99 ? '99+' : advancedFilterCount() }}\n </span>\n }\n </span>\n }\n\n @if (showReset()) {\n <geo-button\n appearance=\"secondary\"\n color=\"brand\"\n icon=\"reload\"\n [iconOnly]=\"true\"\n [title]=\"resetTitle()\"\n (clicked)=\"onReset()\"\n ></geo-button>\n }\n </div>\n\n <div\n class=\"geo-table-filter__advanced\"\n [class.geo-table-filter__advanced--visible]=\"advancedExpanded()\"\n >\n <ng-content select=\"[advanced]\"></ng-content>\n </div>\n </div>\n</div>\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n computed,\n forwardRef,\n inject,\n input,\n output,\n signal,\n ViewEncapsulation,\n} from '@angular/core';\nimport { ControlValueAccessor, FormsModule, NG_VALUE_ACCESSOR } from '@angular/forms';\n\nlet uiTextareaErrorId = 0;\n\n@Component({\n selector: 'geo-textarea',\n standalone: true,\n imports: [FormsModule],\n templateUrl: './geo-textarea.component.html',\n styleUrl: './geo-textarea.component.scss',\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'geo-textarea-host',\n '[class.geo-textarea-host--block]': 'block()',\n '[class.geo-textarea-host--error]': 'error()',\n },\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => GeoTextareaComponent),\n multi: true,\n },\n ],\n})\nexport class GeoTextareaComponent implements ControlValueAccessor {\n private readonly cdr = inject(ChangeDetectorRef);\n\n readonly label = input('');\n readonly placeholder = input('');\n readonly rows = input(3);\n readonly disabled = input(false);\n readonly required = input(false);\n readonly error = input(false);\n readonly errorMessage = input('');\n readonly maxlength = input<number | undefined>(undefined);\n readonly block = input(true);\n\n readonly valueChange = output<string>();\n\n readonly errorMessageId = `geo-textarea-error-${++uiTextareaErrorId}`;\n\n private readonly disabledFromCva = signal(false);\n readonly isDisabled = computed(() => this.disabled() || this.disabledFromCva());\n\n protected readonly value = signal('');\n\n private onChange: (value: string) => void = () => undefined;\n private onTouched: () => void = () => undefined;\n\n onInput(value: string): void {\n this.value.set(value);\n this.onChange(value);\n this.valueChange.emit(value);\n }\n\n onBlur(): void {\n this.onTouched();\n }\n\n writeValue(value: string | null): void {\n this.value.set(value ?? '');\n this.cdr.markForCheck();\n }\n\n registerOnChange(fn: (value: string) => void): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n this.disabledFromCva.set(isDisabled);\n this.cdr.markForCheck();\n }\n}\n","@if (label()) {\n <div class=\"geo-textarea__label\">\n <span>{{ label() }}</span>\n @if (required()) {\n <span class=\"geo-textarea__required\" aria-hidden=\"true\">*</span>\n }\n </div>\n}\n\n<textarea\n class=\"geo-textarea__field\"\n [class.geo-textarea__field--error]=\"error()\"\n [rows]=\"rows()\"\n [placeholder]=\"placeholder()\"\n [disabled]=\"isDisabled()\"\n [attr.maxlength]=\"maxlength() ?? null\"\n [attr.aria-invalid]=\"error() ? 'true' : null\"\n [attr.aria-describedby]=\"error() && errorMessage() ? errorMessageId : null\"\n [ngModel]=\"value()\"\n (ngModelChange)=\"onInput($event)\"\n (blur)=\"onBlur()\"\n></textarea>\n\n@if (error() && errorMessage()) {\n <p class=\"geo-textarea__error\" [id]=\"errorMessageId\" role=\"alert\">{{ errorMessage() }}</p>\n}\n","import { NgClassInterface, NgStyleInterface } from 'ng-zorro-antd/core/types';\nimport { NzNotificationPlacement } from 'ng-zorro-antd/notification';\n\nexport type GeoToastType = 'success' | 'error' | 'warning' | 'info';\n\nexport type GeoToastPlacement = NzNotificationPlacement;\n\nexport const GEO_TOAST_DEFAULT_TITLES: Record<GeoToastType, string> = {\n success: 'Thành công!',\n error: 'Thất bại!',\n warning: 'Cảnh báo!',\n info: 'Thông tin!',\n};\n\nexport const GEO_TOAST_ICONS: Record<GeoToastType, string> = {\n success: 'check-circle',\n error: 'close-circle',\n warning: 'warning',\n info: 'info-circle',\n};\n\n/** Options khi gọi GeoToastService (map sang NzNotificationDataOptions). */\nexport interface GeoToastOptions {\n /** Auto close duration (ms). `0` = không tự đóng. Default `4500`. */\n duration?: number;\n /** Vị trí toast. Default `topRight`. */\n placement?: GeoToastPlacement;\n /** Pause countdown khi hover. Default `true`. */\n pauseOnHover?: boolean;\n /** Animate enter/leave. Default `true`. */\n animate?: boolean;\n /** Unique key — toast cùng key sẽ được thay thế. */\n key?: string;\n /** Hiện icon trạng thái. Default `true`. */\n showIcon?: boolean;\n /** Hiện nút đóng. Default `true`. */\n closable?: boolean;\n /** Custom icon type (Ant Design). */\n icon?: string;\n /** Inline style trên notice. */\n style?: NgStyleInterface;\n /** Extra CSS class. */\n className?: NgClassInterface | string;\n /** Arbitrary data gắn vào notice. */\n data?: unknown;\n}\n\nexport interface GeoToastConfig extends GeoToastOptions {\n type: GeoToastType;\n title?: string;\n message?: string;\n}\n\nexport interface GeoToastGlobalConfig {\n duration?: number;\n placement?: GeoToastPlacement;\n pauseOnHover?: boolean;\n animate?: boolean;\n maxStack?: number;\n top?: number;\n bottom?: number;\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n input,\n model,\n output,\n ViewEncapsulation,\n} from '@angular/core';\nimport { NzIconModule } from 'ng-zorro-antd/icon';\nimport {\n GEO_TOAST_DEFAULT_TITLES,\n GEO_TOAST_ICONS,\n GeoToastType,\n} from './geo-toast.types';\n\n/**\n * Toast / notification UI theo design GEO (left accent bar + icon + title + message).\n * Dùng trực tiếp trong template, hoặc qua `GeoToastService` (Ant Design notification).\n */\n@Component({\n selector: 'geo-toast',\n standalone: true,\n imports: [NzIconModule],\n templateUrl: './geo-toast.component.html',\n styleUrl: './geo-toast.component.scss',\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'geo-toast-host',\n '[class.geo-toast-host--hidden]': '!visible()',\n },\n})\nexport class GeoToastComponent {\n readonly type = input<GeoToastType>('info');\n readonly title = input('');\n readonly message = input('');\n readonly closable = input(true);\n readonly showIcon = input(true);\n readonly visible = model(true);\n /** Override Ant Design icon type. */\n readonly icon = input<string | undefined>(undefined);\n\n readonly closed = output<void>();\n\n readonly displayTitle = computed(() => this.title() || GEO_TOAST_DEFAULT_TITLES[this.type()]);\n\n readonly iconType = computed(() => this.icon() || GEO_TOAST_ICONS[this.type()]);\n\n onClose(): void {\n this.visible.set(false);\n this.closed.emit();\n }\n}\n","@if (visible()) {\n <div\n class=\"geo-toast\"\n [class]=\"'geo-toast geo-toast--' + type()\"\n role=\"status\"\n [attr.aria-live]=\"type() === 'error' ? 'assertive' : 'polite'\"\n >\n <span class=\"geo-toast__accent\" aria-hidden=\"true\"></span>\n\n <div class=\"geo-toast__body\">\n @if (showIcon()) {\n <span class=\"geo-toast__icon\" nz-icon [nzType]=\"iconType()\" nzTheme=\"fill\"></span>\n }\n\n <div class=\"geo-toast__content\">\n <p class=\"geo-toast__title\">{{ displayTitle() }}</p>\n @if (message()) {\n <p class=\"geo-toast__message\">{{ message() }}</p>\n }\n </div>\n\n @if (closable()) {\n <button\n type=\"button\"\n class=\"geo-toast__close\"\n aria-label=\"Đóng thông báo\"\n (click)=\"onClose()\"\n >\n <span nz-icon nzType=\"close\" nzTheme=\"outline\"></span>\n </button>\n }\n </div>\n </div>\n}\n","import { Injectable, inject } from '@angular/core';\nimport { NzConfigService } from 'ng-zorro-antd/core/config';\nimport {\n NzNotificationService,\n NzNotificationRef,\n} from 'ng-zorro-antd/notification';\nimport {\n GEO_TOAST_DEFAULT_TITLES,\n GeoToastConfig,\n GeoToastGlobalConfig,\n GeoToastOptions,\n GeoToastType,\n} from './geo-toast.types';\n\n/**\n * Toast service dựa trên `NzNotificationService` (Ant Design).\n *\n * @example\n * ```ts\n * this.toast.success('Thành công!', 'Lưu hồ sơ thành công');\n * this.toast.error('Thất bại!', 'Vui lòng kiểm tra lại', { duration: 0 });\n * ```\n */\n@Injectable({ providedIn: 'root' })\nexport class GeoToastService {\n private readonly notification = inject(NzNotificationService);\n private readonly nzConfig = inject(NzConfigService, { optional: true });\n\n private defaults: Required<\n Pick<GeoToastOptions, 'duration' | 'placement' | 'pauseOnHover' | 'animate' | 'showIcon' | 'closable'>\n > = {\n duration: 4500,\n placement: 'topRight',\n pauseOnHover: true,\n animate: true,\n showIcon: true,\n closable: true,\n };\n\n /** Cấu hình mặc định toàn cục (duration, placement, …). */\n config(options: GeoToastGlobalConfig): void {\n if (options.duration != null) this.defaults.duration = options.duration;\n if (options.placement != null) this.defaults.placement = options.placement;\n if (options.pauseOnHover != null) this.defaults.pauseOnHover = options.pauseOnHover;\n if (options.animate != null) this.defaults.animate = options.animate;\n\n this.nzConfig?.set('notification', {\n nzDuration: this.defaults.duration,\n nzPlacement: this.defaults.placement,\n nzMaxStack: options.maxStack,\n nzTop: options.top,\n nzBottom: options.bottom,\n nzPauseOnHover: this.defaults.pauseOnHover,\n nzAnimate: this.defaults.animate,\n });\n }\n\n success(title?: string, message?: string, options?: GeoToastOptions): NzNotificationRef {\n return this.create('success', title, message, options);\n }\n\n error(title?: string, message?: string, options?: GeoToastOptions): NzNotificationRef {\n return this.create('error', title, message, options);\n }\n\n warning(title?: string, message?: string, options?: GeoToastOptions): NzNotificationRef {\n return this.create('warning', title, message, options);\n }\n\n info(title?: string, message?: string, options?: GeoToastOptions): NzNotificationRef {\n return this.create('info', title, message, options);\n }\n\n /** API tổng quát — đầy đủ type + options. */\n create(\n type: GeoToastType,\n title?: string,\n message?: string,\n options?: GeoToastOptions\n ): NzNotificationRef {\n return this.open({\n type,\n title: title ?? GEO_TOAST_DEFAULT_TITLES[type],\n message: message ?? '',\n ...options,\n });\n }\n\n /** Mở toast từ config object. */\n open(config: GeoToastConfig): NzNotificationRef {\n const type = config.type;\n const title = config.title ?? GEO_TOAST_DEFAULT_TITLES[type];\n const message = config.message ?? '';\n const duration = config.duration ?? this.defaults.duration;\n const placement = config.placement ?? this.defaults.placement;\n const pauseOnHover = config.pauseOnHover ?? this.defaults.pauseOnHover;\n const animate = config.animate ?? this.defaults.animate;\n const showIcon = config.showIcon ?? this.defaults.showIcon;\n const closable = config.closable ?? this.defaults.closable;\n\n const classList = [\n 'geo-toast-notice',\n `geo-toast-notice--${type}`,\n showIcon ? '' : 'geo-toast-notice--no-icon',\n closable ? '' : 'geo-toast-notice--no-close',\n typeof config.className === 'string' ? config.className : '',\n ]\n .filter(Boolean)\n .join(' ');\n\n // blank + custom class khi không show icon (ẩn icon mặc định của antd)\n const nzType = showIcon ? type : 'blank';\n\n return this.notification.create(nzType, title, message, {\n nzDuration: duration,\n nzPlacement: placement,\n nzPauseOnHover: pauseOnHover,\n nzAnimate: animate,\n nzKey: config.key,\n nzStyle: config.style,\n nzClass: classList,\n nzData: config.data as object | undefined,\n nzCloseIcon: closable ? undefined : ' ',\n });\n }\n\n /** Đóng 1 toast theo messageId (từ NzNotificationRef). */\n remove(id?: string): void {\n this.notification.remove(id);\n }\n\n /** Đóng tất cả toast đang mở. */\n removeAll(): void {\n this.notification.remove();\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n input,\n model,\n output,\n ViewEncapsulation,\n} from '@angular/core';\nimport { NzTreeModule, NzFormatEmitEvent } from 'ng-zorro-antd/tree';\nimport { GeoTreeNode } from './geo-tree.types';\n\n/**\n * Tree checkable — wrap `nz-tree`. Domain dùng `geo-tree`, không import NzTreeModule.\n * API chính: `nodes` + `checkedKeys` / `checkedKeysChange` (giống pattern ILIS → nz-tree).\n */\n@Component({\n selector: 'geo-tree',\n standalone: true,\n imports: [NzTreeModule],\n templateUrl: './geo-tree.component.html',\n styleUrl: './geo-tree.component.scss',\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { class: 'geo-tree-host' },\n})\nexport class GeoTreeComponent {\n readonly nodes = input<GeoTreeNode[]>([]);\n readonly checkable = input(false);\n readonly checkedKeys = model<Array<string | number>>([]);\n readonly expandedKeys = model<Array<string | number>>([]);\n readonly showLine = input(false);\n readonly blockNode = input(false);\n\n readonly nodeClick = output<NzFormatEmitEvent>();\n}\n","<div class=\"geo-tree\">\n <nz-tree\n [nzData]=\"nodes()\"\n [nzCheckable]=\"checkable()\"\n [nzCheckedKeys]=\"checkedKeys()\"\n [nzExpandedKeys]=\"expandedKeys()\"\n [nzShowLine]=\"showLine()\"\n [nzBlockNode]=\"blockNode()\"\n (nzCheckedKeysChange)=\"checkedKeys.set($event)\"\n (nzExpandedKeysChange)=\"expandedKeys.set($event)\"\n (nzClick)=\"nodeClick.emit($event)\"\n ></nz-tree>\n</div>\n","import {\n GeoColumnPickerApplyPayload,\n GeoColumnPickerItem,\n} from './geo-column-picker.types';\n\nconst STORAGE_PREFIX = 'geo-column-picker:';\n\nexport function loadColumnPickerState(key: string): GeoColumnPickerApplyPayload | null {\n try {\n const raw = sessionStorage.getItem(`${STORAGE_PREFIX}${key}`);\n if (!raw) {\n return null;\n }\n\n return JSON.parse(raw) as GeoColumnPickerApplyPayload;\n } catch {\n return null;\n }\n}\n\nexport function saveColumnPickerState(key: string, payload: GeoColumnPickerApplyPayload): void {\n sessionStorage.setItem(`${STORAGE_PREFIX}${key}`, JSON.stringify(payload));\n}\n\nexport function applyColumnPickerState(\n items: GeoColumnPickerItem[],\n state: GeoColumnPickerApplyPayload\n): GeoColumnPickerItem[] {\n return items.map((item) => ({\n ...item,\n visible: state.visibility[item.key] ?? item.visible,\n pinned: state.pinned[item.key] ?? item.pinned ?? null,\n }));\n}\n\nexport function mergeColumnPickerItems(\n items: GeoColumnPickerItem[],\n key?: string\n): GeoColumnPickerItem[] {\n if (!key) {\n return items;\n }\n\n const saved = loadColumnPickerState(key);\n return saved ? applyColumnPickerState(items, saved) : items;\n}\n","import { ChangeDetectionStrategy, Component, input, output } from '@angular/core';\nimport { NgZorroAntdModule } from '../../../ng-zorro/ng-zorro-antd.module';\nimport { GeoButtonComponent } from '../../geo-button/geo-button.component';\nimport { GeoCheckboxComponent } from '../../geo-checkbox/geo-checkbox.component';\nimport { GeoColumnPickerApplyPayload, GeoColumnPickerItem } from './geo-column-picker.types';\nimport { saveColumnPickerState } from './geo-column-picker.storage';\n\n@Component({\n selector: 'geo-column-picker',\n standalone: true,\n imports: [NgZorroAntdModule, GeoButtonComponent, GeoCheckboxComponent],\n templateUrl: './geo-column-picker.component.html',\n styleUrl: './geo-column-picker.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class GeoColumnPickerComponent {\n readonly triggerLabel = input('Ẩn hiện cột');\n readonly hint = input('Chọn cột hiển thị trên bảng.');\n readonly items = input<GeoColumnPickerItem[]>([]);\n /** Lưu trạng thái ẩn/hiện cột theo session khi người dùng áp dụng */\n readonly storageKey = input<string | undefined>(undefined);\n\n readonly apply = output<GeoColumnPickerApplyPayload>();\n\n dropdownVisible = false;\n draftItems: GeoColumnPickerItem[] = [];\n\n onDropdownVisibleChange(visible: boolean): void {\n if (visible) {\n this.syncDraft();\n }\n }\n\n onItemChange(key: string, visible: boolean): void {\n this.draftItems = this.draftItems.map((item) =>\n item.key === key ? { ...item, visible } : item\n );\n }\n\n onApply(): void {\n const visibility: Record<string, boolean> = {};\n\n for (const item of this.draftItems) {\n visibility[item.key] = item.visible;\n }\n\n /** `pinned` giữ empty để tương thích payload/storage cũ — không còn UI ghim/di chuyển cột. */\n const payload: GeoColumnPickerApplyPayload = { visibility, pinned: {} };\n this.apply.emit(payload);\n\n const storageKey = this.storageKey();\n if (storageKey) {\n saveColumnPickerState(storageKey, payload);\n }\n\n this.dropdownVisible = false;\n }\n\n onReset(): void {\n this.syncDraft();\n }\n\n private syncDraft(): void {\n this.draftItems = this.items().map((item) => ({ ...item }));\n }\n}\n","<div\n class=\"geo-column-picker__trigger\"\n nz-dropdown\n [nzDropdownMenu]=\"menu\"\n nzTrigger=\"click\"\n nzPlacement=\"bottomRight\"\n [(nzVisible)]=\"dropdownVisible\"\n (nzVisibleChange)=\"onDropdownVisibleChange($event)\"\n>\n <geo-button\n appearance=\"secondary\"\n color=\"brand\"\n icon=\"eye-invisible\"\n [title]=\"triggerLabel()\"\n >\n {{ triggerLabel() }}\n </geo-button>\n</div>\n\n<nz-dropdown-menu #menu=\"nzDropdownMenu\">\n <div class=\"geo-column-picker__panel\" (click)=\"$event.stopPropagation()\">\n <p class=\"geo-column-picker__hint\">{{ hint() }}</p>\n\n <div class=\"geo-column-picker__list\">\n @for (item of draftItems; track item.key) {\n <div class=\"geo-column-picker__row\">\n <geo-checkbox\n class=\"geo-column-picker__item\"\n [label]=\"item.title\"\n [checked]=\"item.visible\"\n [disabled]=\"item.locked ?? false\"\n (checkedChange)=\"onItemChange(item.key, $event)\"\n ></geo-checkbox>\n </div>\n }\n </div>\n\n <div class=\"geo-column-picker__actions\">\n <button nz-button nzType=\"default\" nzSize=\"small\" (click)=\"onReset()\">Đặt lại</button>\n <button nz-button nzType=\"primary\" nzSize=\"small\" (click)=\"onApply()\">Áp dụng</button>\n </div>\n </div>\n</nz-dropdown-menu>\n","import { ChangeDetectionStrategy, Component, computed, input, output } from '@angular/core';\nimport { NgZorroAntdModule } from '../../../ng-zorro/ng-zorro-antd.module';\nimport { GeoButtonComponent } from '../../geo-button/geo-button.component';\nimport { GeoColumnPickerComponent } from '../geo-column-picker/geo-column-picker.component';\nimport { GeoColumnPickerApplyPayload, GeoColumnPickerItem } from '../geo-column-picker/geo-column-picker.types';\n\n@Component({\n selector: 'geo-table-toolbar',\n standalone: true,\n imports: [NgZorroAntdModule, GeoButtonComponent, GeoColumnPickerComponent],\n templateUrl: './geo-table-toolbar.component.html',\n styleUrl: './geo-table-toolbar.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class GeoTableToolbarComponent {\n readonly resultLabel = input('');\n readonly resultCount = input<number | null>(null);\n readonly selectedCount = input(0);\n readonly showDelete = input(true);\n readonly showExport = input(true);\n readonly showColumnToggle = input(true);\n readonly showAdd = input(true);\n readonly addLabel = input('Thêm mới');\n readonly columnItems = input<GeoColumnPickerItem[]>([]);\n /** Key lưu trạng thái ẩn/hiện cột trong sessionStorage */\n readonly columnStorageKey = input<string | undefined>(undefined);\n\n readonly deleteClick = output<void>();\n readonly exportClick = output<void>();\n readonly toggleColumns = output<void>();\n readonly columnApply = output<GeoColumnPickerApplyPayload>();\n readonly addClick = output<void>();\n\n readonly displayResultLabel = computed(() => {\n const resultLabel = this.resultLabel();\n if (resultLabel) {\n return resultLabel;\n }\n\n const count = this.resultCount() ?? 0;\n return `Kết quả tìm kiếm (${count} kết quả)`;\n });\n}\n","<div class=\"geo-table-toolbar\">\n <div class=\"geo-table-toolbar__info\">{{ displayResultLabel() }}</div>\n\n <div class=\"geo-table-toolbar__actions\">\n @if (showDelete() && selectedCount() > 0) {\n <geo-button\n appearance=\"secondary\"\n color=\"danger\"\n icon=\"delete\"\n title=\"Xóa\"\n (clicked)=\"deleteClick.emit()\"\n >\n Xóa ({{ selectedCount() }})\n </geo-button>\n }\n\n @if (showExport()) {\n <geo-button\n appearance=\"secondary\"\n color=\"brand\"\n icon=\"download\"\n title=\"Xuất dữ liệu\"\n (clicked)=\"exportClick.emit()\"\n >\n Xuất dữ liệu\n </geo-button>\n }\n\n @if (showColumnToggle()) {\n @if (columnItems().length) {\n <geo-column-picker\n [items]=\"columnItems()\"\n [storageKey]=\"columnStorageKey()\"\n (apply)=\"columnApply.emit($event)\"\n ></geo-column-picker>\n } @else {\n <geo-button\n appearance=\"secondary\"\n color=\"brand\"\n icon=\"eye-invisible\"\n title=\"Ẩn hiện cột\"\n (clicked)=\"toggleColumns.emit()\"\n >\n Ẩn hiện cột\n </geo-button>\n }\n }\n\n @if (showAdd()) {\n <geo-button\n appearance=\"primary\"\n color=\"brand\"\n icon=\"plus\"\n [title]=\"addLabel()\"\n (clicked)=\"addClick.emit()\"\n >\n {{ addLabel() }}\n </geo-button>\n }\n </div>\n</div>\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n computed,\n DestroyRef,\n effect,\n inject,\n input,\n output,\n signal,\n ViewEncapsulation,\n} from '@angular/core';\nimport { GeoIconComponent } from '../geo-icon/geo-icon.component';\nimport type { GeoStatCardItem } from './geo-stat-card.types';\n\ninterface ParsedStatValue {\n target: number;\n decimals: number;\n /** Original display string. */\n raw: string;\n numeric: boolean;\n}\n\n/**\n * KPI / summary tile for dashboard (TCQH.1).\n *\n * @summary Ô thống kê tổng quan (diện tích, số thửa…).\n * @whenToUse Dashboard hoặc đầu trang thống kê.\n * @doNotUseWhen Form field summaries — use typography.\n */\n@Component({\n selector: 'geo-stat-card',\n standalone: true,\n imports: [GeoIconComponent],\n templateUrl: './geo-stat-card.component.html',\n styleUrl: './geo-stat-card.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {\n class: 'geo-stat-card-host',\n '[class.geo-stat-card-host--clickable]': 'clickable()',\n '[class.geo-stat-card-host--animate]': 'animate()',\n },\n})\nexport class GeoStatCardComponent {\n private readonly cdr = inject(ChangeDetectorRef);\n private readonly destroyRef = inject(DestroyRef);\n\n readonly label = input('');\n readonly value = input<string | number>('');\n readonly unit = input('');\n readonly icon = input('bar-chart');\n readonly hint = input('');\n readonly clickable = input(false);\n /** Count-up number animation. Honors `prefers-reduced-motion`. */\n readonly animate = input(true);\n /** Count-up duration in ms. */\n readonly animationDuration = input(1000);\n /** Stagger delay before count-up starts (ms). */\n readonly animationDelay = input(0);\n\n readonly clicked = output<void>();\n\n /** Convenience: bind a whole item object. */\n readonly item = input<GeoStatCardItem | null>(null);\n\n /** Animated / resolved value shown in the template. */\n readonly displayValue = signal('');\n\n private rafId = 0;\n private delayId = 0;\n private animToken = 0;\n\n readonly resolvedLabel = computed(() => this.item()?.label ?? this.label());\n readonly resolvedUnit = computed(() => this.item()?.unit ?? this.unit());\n readonly resolvedIcon = computed(() => this.item()?.icon ?? this.icon());\n readonly resolvedHint = computed(() => this.item()?.hint ?? this.hint());\n\n private readonly resolvedRawValue = computed(\n () => this.item()?.value ?? this.value(),\n );\n\n /** Fallback when animation has not painted yet. */\n readonly resolvedRawFallback = computed(() => String(this.resolvedRawValue() ?? ''));\n\n constructor() {\n effect(\n () => {\n const raw = this.resolvedRawValue();\n const shouldAnimate = this.animate();\n const duration = this.animationDuration();\n const delay = this.animationDelay();\n // Defer writes out of the effect graph (Angular 18 signal write rules).\n queueMicrotask(() => this.startCountUp(raw, shouldAnimate, duration, delay));\n },\n { allowSignalWrites: true },\n );\n\n this.destroyRef.onDestroy(() => this.cancelAnimation());\n }\n\n onClick(): void {\n if (this.clickable()) {\n this.clicked.emit();\n }\n }\n\n private startCountUp(\n raw: string | number,\n shouldAnimate: boolean,\n duration: number,\n delay: number,\n ): void {\n this.cancelAnimation();\n const token = ++this.animToken;\n const parsed = this.parseValue(raw);\n const reducedMotion =\n typeof window !== 'undefined' &&\n window.matchMedia('(prefers-reduced-motion: reduce)').matches;\n\n if (!parsed.numeric || !shouldAnimate || reducedMotion) {\n this.displayValue.set(parsed.raw);\n this.cdr.markForCheck();\n return;\n }\n\n this.displayValue.set(this.formatValue(0, parsed.decimals));\n this.cdr.markForCheck();\n\n const run = (): void => {\n if (token !== this.animToken) {\n return;\n }\n const started = performance.now();\n let lastShown = Number.NaN;\n // Ít bước hiển thị hơn → mượt dù duration ngắn (tránh spam mọi số nguyên).\n const visualSteps = Math.min(36, Math.max(22, Math.round(duration / 36)));\n const tick = (now: number): void => {\n if (token !== this.animToken) {\n return;\n }\n const progress = Math.min(1, (now - started) / Math.max(duration, 1));\n const eased = this.easeOutSoft(progress);\n const step = Math.min(visualSteps, Math.round(eased * visualSteps));\n const current = (parsed.target * step) / visualSteps;\n const rounded =\n parsed.decimals > 0\n ? Number(current.toFixed(parsed.decimals))\n : Math.round(current);\n if (rounded !== lastShown) {\n lastShown = rounded;\n this.displayValue.set(this.formatValue(rounded, parsed.decimals));\n this.cdr.markForCheck();\n }\n if (progress < 1) {\n this.rafId = requestAnimationFrame(tick);\n } else {\n this.displayValue.set(parsed.raw);\n this.cdr.markForCheck();\n }\n };\n this.rafId = requestAnimationFrame(tick);\n };\n\n if (delay > 0 && typeof window !== 'undefined') {\n this.delayId = window.setTimeout(run, delay);\n } else {\n run();\n }\n }\n\n private cancelAnimation(): void {\n this.animToken += 1;\n if (this.rafId) {\n cancelAnimationFrame(this.rafId);\n this.rafId = 0;\n }\n if (this.delayId) {\n clearTimeout(this.delayId);\n this.delayId = 0;\n }\n }\n\n /** Soft ease-out — nhanh gọn, hạ tốc nhẹ khi kết thúc. */\n private easeOutSoft(t: number): number {\n return 1 - Math.pow(1 - t, 2.25);\n }\n\n private parseValue(raw: string | number): ParsedStatValue {\n if (typeof raw === 'number' && Number.isFinite(raw)) {\n const decimals = Number.isInteger(raw) ? 0 : 1;\n return {\n target: raw,\n decimals,\n raw: this.formatValue(raw, decimals),\n numeric: true,\n };\n }\n\n const text = String(raw ?? '').trim();\n // vi-VN: 412.680,5 or plain 284517\n const normalized = text.replace(/\\./g, '').replace(',', '.');\n const target = Number(normalized);\n if (!text || Number.isNaN(target)) {\n return { target: 0, decimals: 0, raw: text, numeric: false };\n }\n const decimals = text.includes(',') ? (text.split(',')[1]?.length ?? 0) : 0;\n return { target, decimals, raw: text, numeric: true };\n }\n\n private formatValue(value: number, decimals: number): string {\n return value.toLocaleString('vi-VN', {\n minimumFractionDigits: decimals,\n maximumFractionDigits: decimals,\n });\n }\n}\n","<button\n type=\"button\"\n class=\"geo-stat-card\"\n [class.geo-stat-card--static]=\"!clickable()\"\n [attr.aria-disabled]=\"!clickable() || null\"\n (click)=\"onClick()\"\n>\n <span class=\"geo-stat-card__icon\" aria-hidden=\"true\">\n <geo-icon class=\"geo-stat-card__icon-glyph\" [type]=\"resolvedIcon()\" size=\"md\" />\n </span>\n <span class=\"geo-stat-card__body\">\n <span class=\"geo-stat-card__label\">{{ resolvedLabel() }}</span>\n <span class=\"geo-stat-card__value-row\">\n <span class=\"geo-stat-card__value\">\n {{ displayValue() || resolvedRawFallback() }}\n </span>\n @if (resolvedUnit()) {\n <span class=\"geo-stat-card__unit\">{{ resolvedUnit() }}</span>\n }\n </span>\n @if (resolvedHint()) {\n <span class=\"geo-stat-card__hint\">{{ resolvedHint() }}</span>\n }\n </span>\n</button>\n","import {\n ChangeDetectionStrategy,\n Component,\n input,\n output,\n ViewEncapsulation,\n} from '@angular/core';\nimport { GeoButtonComponent } from '../geo-button/geo-button.component';\nimport { GeoIconComponent } from '../geo-icon/geo-icon.component';\n\n/**\n * Empty / no-data placeholder for list & chart regions.\n *\n * @summary Trạng thái trống khi chưa có dữ liệu.\n * @whenToUse Bảng thống kê, kết quả tra cứu, biểu đồ không có data.\n * @doNotUseWhen Error banners — use geo-alert.\n */\n@Component({\n selector: 'geo-empty-state',\n standalone: true,\n imports: [GeoButtonComponent, GeoIconComponent],\n templateUrl: './geo-empty-state.component.html',\n styleUrl: './geo-empty-state.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: { class: 'geo-empty-state-host' },\n})\nexport class GeoEmptyStateComponent {\n readonly title = input('Không có dữ liệu');\n readonly description = input('');\n readonly icon = input('inbox');\n readonly actionLabel = input('');\n\n readonly actionClick = output<void>();\n}\n","<div class=\"geo-empty-state\" role=\"status\">\n <span class=\"geo-empty-state__icon\" aria-hidden=\"true\">\n <geo-icon [type]=\"icon()\" size=\"lg\" />\n </span>\n <p class=\"geo-empty-state__title\">{{ title() }}</p>\n @if (description()) {\n <p class=\"geo-empty-state__desc\">{{ description() }}</p>\n }\n @if (actionLabel()) {\n <geo-button appearance=\"secondary\" (clicked)=\"actionClick.emit()\">\n {{ actionLabel() }}\n </geo-button>\n }\n</div>\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n input,\n model,\n output,\n ViewEncapsulation,\n} from '@angular/core';\nimport { GeoButtonComponent } from '../geo-button/geo-button.component';\nimport { GeoEmptyStateComponent } from '../geo-empty-state/geo-empty-state.component';\nimport type {\n GeoChartDatum,\n GeoChartSegmentClick,\n GeoChartSort,\n GeoChartType,\n} from './geo-chart.types';\n\nconst DEFAULT_COLORS = [\n 'var(--geo-color-primary-default)',\n 'var(--geo-color-warning-default)',\n 'var(--geo-color-success-default)',\n 'var(--geo-color-info-default)',\n 'var(--geo-color-teal-default, #0d9488)',\n 'var(--geo-color-neutral-500)',\n];\n\n/**\n * Lightweight SVG charts for dashboard / thống kê (TCQH.2–3).\n * No chart-library peer dependency — host binds data only.\n *\n * @summary Biểu đồ cột / donut thuần SVG cho trang thống kê.\n * @whenToUse Dashboard diện tích theo xã, tỷ lệ thửa lệch mục đích.\n * @doNotUseWhen Heavy BI dashboards needing zoom/brush — use a chart lib in the app.\n */\n@Component({\n selector: 'geo-chart',\n standalone: true,\n imports: [GeoButtonComponent, GeoEmptyStateComponent],\n templateUrl: './geo-chart.component.html',\n styleUrl: './geo-chart.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: { class: 'geo-chart-host' },\n})\nexport class GeoChartComponent {\n readonly type = input<GeoChartType>('bar');\n readonly title = input('');\n readonly data = input<GeoChartDatum[]>([]);\n readonly height = input(260);\n readonly showLegend = input(true);\n readonly showSort = input(false);\n readonly sort = model<GeoChartSort>('desc');\n readonly emptyText = input('Chưa có dữ liệu thống kê.');\n readonly unit = input('');\n\n readonly segmentClick = output<GeoChartSegmentClick>();\n readonly sortChange = output<GeoChartSort>();\n\n readonly sortedData = computed(() => {\n const items = [...this.data()];\n const sort = this.sort();\n if (sort === 'asc') {\n return items.sort((a, b) => a.value - b.value);\n }\n if (sort === 'desc') {\n return items.sort((a, b) => b.value - a.value);\n }\n return items;\n });\n\n readonly maxValue = computed(() =>\n Math.max(0, ...this.sortedData().map((item) => item.value)),\n );\n\n readonly total = computed(() =>\n this.sortedData().reduce((sum, item) => sum + item.value, 0),\n );\n\n readonly donutSegments = computed(() => {\n const items = this.sortedData();\n const total = this.total() || 1;\n const radius = 56;\n const circumference = 2 * Math.PI * radius;\n let offset = 0;\n return items.map((item, index) => {\n const ratio = item.value / total;\n const length = ratio * circumference;\n const segment = {\n datum: item,\n index,\n color: item.color || DEFAULT_COLORS[index % DEFAULT_COLORS.length],\n dasharray: `${length} ${circumference - length}`,\n dashoffset: -offset,\n percent: Math.round(ratio * 1000) / 10,\n };\n offset += length;\n return segment;\n });\n });\n\n colorOf(item: GeoChartDatum, index: number): string {\n return item.color || DEFAULT_COLORS[index % DEFAULT_COLORS.length];\n }\n\n barWidth(value: number): string {\n const max = this.maxValue() || 1;\n return `${Math.max(2, (value / max) * 100)}%`;\n }\n\n setSort(next: GeoChartSort): void {\n this.sort.set(next);\n this.sortChange.emit(next);\n }\n\n onSegment(datum: GeoChartDatum, index: number): void {\n this.segmentClick.emit({ datum, index });\n }\n}\n","<div class=\"geo-chart\" [style.--geo-chart-height.px]=\"height()\">\n <header class=\"geo-chart__header\">\n @if (title()) {\n <h3 class=\"geo-chart__title\">{{ title() }}</h3>\n }\n @if (showSort() && type() === 'bar') {\n <div class=\"geo-chart__sort\" role=\"group\" aria-label=\"Sắp xếp\">\n <geo-button\n appearance=\"tertiary\"\n [active]=\"sort() === 'desc'\"\n (clicked)=\"setSort('desc')\"\n >\n Giảm dần\n </geo-button>\n <geo-button\n appearance=\"tertiary\"\n [active]=\"sort() === 'asc'\"\n (clicked)=\"setSort('asc')\"\n >\n Tăng dần\n </geo-button>\n </div>\n }\n </header>\n\n @if (!sortedData().length) {\n <geo-empty-state [title]=\"emptyText()\" icon=\"bar-chart\" />\n } @else if (type() === 'bar') {\n <div class=\"geo-chart__bars\" role=\"img\" [attr.aria-label]=\"title() || 'Biểu đồ cột'\">\n @for (item of sortedData(); track item.id ?? item.label; let i = $index) {\n <button\n type=\"button\"\n class=\"geo-chart__bar-row\"\n (click)=\"onSegment(item, i)\"\n >\n <span class=\"geo-chart__bar-label\" [title]=\"item.label\">{{ item.label }}</span>\n <span class=\"geo-chart__bar-track\">\n <span\n class=\"geo-chart__bar-fill\"\n [style.width]=\"barWidth(item.value)\"\n [style.background]=\"colorOf(item, i)\"\n ></span>\n </span>\n <span class=\"geo-chart__bar-value\">\n {{ item.value }}{{ unit() ? ' ' + unit() : '' }}\n </span>\n </button>\n }\n </div>\n } @else {\n <div class=\"geo-chart__donut-wrap\">\n <svg\n class=\"geo-chart__donut\"\n viewBox=\"0 0 140 140\"\n role=\"img\"\n [attr.aria-label]=\"title() || 'Biểu đồ donut'\"\n >\n <circle\n class=\"geo-chart__donut-track\"\n cx=\"70\"\n cy=\"70\"\n r=\"56\"\n fill=\"none\"\n stroke-width=\"18\"\n />\n @for (seg of donutSegments(); track seg.datum.id ?? seg.datum.label) {\n <circle\n class=\"geo-chart__donut-seg\"\n cx=\"70\"\n cy=\"70\"\n r=\"56\"\n fill=\"none\"\n stroke-width=\"18\"\n [attr.stroke]=\"seg.color\"\n [attr.stroke-dasharray]=\"seg.dasharray\"\n [attr.stroke-dashoffset]=\"seg.dashoffset\"\n transform=\"rotate(-90 70 70)\"\n (click)=\"onSegment(seg.datum, seg.index)\"\n />\n }\n <text x=\"70\" y=\"66\" text-anchor=\"middle\" class=\"geo-chart__donut-center-label\">\n Tổng\n </text>\n <text x=\"70\" y=\"84\" text-anchor=\"middle\" class=\"geo-chart__donut-center-value\">\n {{ total() }}\n </text>\n </svg>\n\n @if (showLegend()) {\n <ul class=\"geo-chart__legend\">\n @for (seg of donutSegments(); track seg.datum.id ?? seg.datum.label) {\n <li>\n <button\n type=\"button\"\n class=\"geo-chart__legend-item\"\n (click)=\"onSegment(seg.datum, seg.index)\"\n >\n <span\n class=\"geo-chart__swatch\"\n [style.background]=\"seg.color\"\n ></span>\n <span class=\"geo-chart__legend-label\">{{ seg.datum.label }}</span>\n <span class=\"geo-chart__legend-value\">{{ seg.percent }}%</span>\n </button>\n </li>\n }\n </ul>\n }\n </div>\n }\n</div>\n","import {\n ChangeDetectionStrategy,\n Component,\n input,\n ViewEncapsulation,\n} from '@angular/core';\nimport { GeoBreadcrumbComponent } from '../geo-breadcrumb/geo-breadcrumb.component';\nimport type { GeoBreadcrumbItem } from '../geo-breadcrumb/geo-breadcrumb.types';\nimport { GeoPageTitleComponent } from '../geo-page-title/geo-page-title.component';\n\n/**\n * List / admin page chrome: breadcrumb + title + action / filter slots.\n *\n * @summary Header trang danh sách / quản trị / thống kê.\n * @whenToUse Đầu trang ngoài màn bản đồ (dashboard, QL người dùng, thống kê).\n * @doNotUseWhen Map chrome — use geo-map-shell tools.\n */\n@Component({\n selector: 'geo-page-header',\n standalone: true,\n imports: [GeoBreadcrumbComponent, GeoPageTitleComponent],\n templateUrl: './geo-page-header.component.html',\n styleUrl: './geo-page-header.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: { class: 'geo-page-header-host' },\n})\nexport class GeoPageHeaderComponent {\n readonly title = input('');\n readonly breadcrumb = input<GeoBreadcrumbItem[]>([]);\n readonly uppercase = input(true);\n}\n","<div class=\"geo-page-header\">\n @if (breadcrumb().length) {\n <geo-breadcrumb [items]=\"breadcrumb()\" />\n }\n <div class=\"geo-page-header__row\">\n <geo-page-title [title]=\"title()\" [uppercase]=\"uppercase()\" />\n <div class=\"geo-page-header__actions\">\n <ng-content select=\"[geoPageActions]\" />\n </div>\n </div>\n <div class=\"geo-page-header__filters\">\n <ng-content select=\"[geoPageFilters]\" />\n </div>\n</div>\n","import {\n ChangeDetectionStrategy,\n Component,\n input,\n model,\n output,\n signal,\n ViewEncapsulation,\n} from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { GeoAlertComponent } from '../geo-alert/geo-alert.component';\nimport { GeoButtonComponent } from '../geo-button/geo-button.component';\nimport { GeoCheckboxComponent } from '../geo-checkbox/geo-checkbox.component';\nimport { GeoInputComponent } from '../geo-input/geo-input.component';\nimport { GeoTypographyComponent } from '../geo-typography/geo-typography.component';\nimport type { GeoLoginPayload } from './geo-login.types';\n\n/**\n * Login form (STT 35 — đăng nhập).\n *\n * @summary Form đăng nhập: tài khoản, mật khẩu, mã kiểm tra, ghi nhớ.\n * @whenToUse Màn Đăng nhập chuyên viên.\n * @doNotUseWhen SSO-only flows without local credentials.\n */\n@Component({\n selector: 'geo-login',\n standalone: true,\n imports: [\n FormsModule,\n GeoAlertComponent,\n GeoButtonComponent,\n GeoCheckboxComponent,\n GeoInputComponent,\n GeoTypographyComponent,\n ],\n templateUrl: './geo-login.component.html',\n styleUrl: './geo-login.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: { class: 'geo-login-host' },\n})\nexport class GeoLoginComponent {\n readonly title = input('Đăng nhập hệ thống');\n readonly subtitle = input('Cổng tra cứu thông tin đất đai');\n readonly captchaHint = input('Nhập mã kiểm tra hiển thị bên cạnh');\n readonly loading = input(false);\n readonly errorMessage = input('');\n readonly showForgotPassword = input(true);\n\n readonly username = model('');\n readonly password = model('');\n readonly captcha = model('');\n readonly remember = model(false);\n\n readonly submitLogin = output<GeoLoginPayload>();\n readonly forgotPassword = output<void>();\n\n readonly submitted = signal(false);\n\n submit(): void {\n this.submitted.set(true);\n const payload: GeoLoginPayload = {\n username: this.username().trim(),\n password: this.password(),\n captcha: this.captcha().trim(),\n remember: this.remember(),\n };\n if (!payload.username || !payload.password || !payload.captcha) {\n return;\n }\n this.submitLogin.emit(payload);\n }\n}\n","<section class=\"geo-login\" aria-label=\"Đăng nhập\">\n <header class=\"geo-login__header\">\n <geo-typography variant=\"h3\">{{ title() }}</geo-typography>\n @if (subtitle()) {\n <geo-typography variant=\"body\" color=\"secondary\">{{ subtitle() }}</geo-typography>\n }\n </header>\n\n @if (errorMessage()) {\n <geo-alert\n type=\"error\"\n title=\"Đăng nhập thất bại\"\n [message]=\"errorMessage()\"\n [closable]=\"false\"\n />\n }\n\n <form class=\"geo-login__form\" (ngSubmit)=\"submit()\">\n <geo-input\n label=\"Tên đăng nhập\"\n placeholder=\"Nhập tên đăng nhập\"\n [required]=\"true\"\n [block]=\"true\"\n [error]=\"submitted() && !username().trim()\"\n errorMessage=\"Vui lòng nhập tên đăng nhập\"\n [ngModel]=\"username()\"\n (ngModelChange)=\"username.set($event)\"\n name=\"username\"\n />\n <geo-input\n label=\"Mật khẩu\"\n type=\"password\"\n placeholder=\"Nhập mật khẩu\"\n [required]=\"true\"\n [block]=\"true\"\n [error]=\"submitted() && !password()\"\n errorMessage=\"Vui lòng nhập mật khẩu\"\n [ngModel]=\"password()\"\n (ngModelChange)=\"password.set($event)\"\n name=\"password\"\n />\n\n <div class=\"geo-login__captcha\">\n <geo-input\n label=\"Mã kiểm tra\"\n placeholder=\"Nhập mã kiểm tra\"\n [required]=\"true\"\n [block]=\"true\"\n [error]=\"submitted() && !captcha().trim()\"\n errorMessage=\"Vui lòng nhập mã kiểm tra\"\n [ngModel]=\"captcha()\"\n (ngModelChange)=\"captcha.set($event)\"\n name=\"captcha\"\n />\n <div class=\"geo-login__captcha-box\" aria-hidden=\"true\">\n <ng-content select=\"[geoCaptcha]\" />\n <span class=\"geo-login__captcha-fallback\">A7K2</span>\n </div>\n </div>\n @if (captchaHint()) {\n <p class=\"geo-login__hint\">{{ captchaHint() }}</p>\n }\n\n <div class=\"geo-login__row\">\n <geo-checkbox label=\"Ghi nhớ đăng nhập\" [(checked)]=\"remember\" />\n @if (showForgotPassword()) {\n <button\n type=\"button\"\n class=\"geo-login__link\"\n (click)=\"forgotPassword.emit()\"\n >\n Quên mật khẩu?\n </button>\n }\n </div>\n\n <geo-button appearance=\"primary\" type=\"submit\" [disabled]=\"loading()\">\n {{ loading() ? 'Đang đăng nhập…' : 'Đăng nhập' }}\n </geo-button>\n </form>\n</section>\n","import {\n ChangeDetectionStrategy,\n Component,\n input,\n model,\n output,\n signal,\n ViewEncapsulation,\n} from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { GeoAlertComponent } from '../geo-alert/geo-alert.component';\nimport { GeoButtonComponent } from '../geo-button/geo-button.component';\nimport { GeoInputComponent } from '../geo-input/geo-input.component';\nimport { GeoTypographyComponent } from '../geo-typography/geo-typography.component';\n\n/**\n * Forgot password form (STT 36).\n *\n * @summary Form quên mật khẩu — nhập email để lấy lại mật khẩu.\n * @whenToUse Màn Quên mật khẩu từ đăng nhập.\n * @doNotUseWhen Inline password reset inside profile settings.\n */\n@Component({\n selector: 'geo-forgot-password',\n standalone: true,\n imports: [\n FormsModule,\n GeoAlertComponent,\n GeoButtonComponent,\n GeoInputComponent,\n GeoTypographyComponent,\n ],\n templateUrl: './geo-forgot-password.component.html',\n styleUrl: './geo-forgot-password.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: { class: 'geo-forgot-password-host' },\n})\nexport class GeoForgotPasswordComponent {\n readonly title = input('Quên mật khẩu');\n readonly subtitle = input(\n 'Nhập email đã đăng ký để nhận mật khẩu mới.',\n );\n readonly loading = input(false);\n readonly errorMessage = input('');\n readonly successMessage = input('');\n\n readonly email = model('');\n\n readonly submitEmail = output<string>();\n readonly backToLogin = output<void>();\n\n readonly submitted = signal(false);\n\n private readonly emailPattern =\n /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/;\n\n emailInvalid(): boolean {\n const value = this.email().trim();\n return !value || !this.emailPattern.test(value);\n }\n\n submit(): void {\n this.submitted.set(true);\n if (this.emailInvalid()) {\n return;\n }\n this.submitEmail.emit(this.email().trim());\n }\n}\n","<section class=\"geo-forgot-password\" aria-label=\"Quên mật khẩu\">\n <header class=\"geo-forgot-password__header\">\n <geo-typography variant=\"h3\">{{ title() }}</geo-typography>\n @if (subtitle()) {\n <geo-typography variant=\"body\" color=\"secondary\">{{ subtitle() }}</geo-typography>\n }\n </header>\n\n @if (errorMessage()) {\n <geo-alert\n type=\"error\"\n title=\"Không thể lấy lại mật khẩu\"\n [message]=\"errorMessage()\"\n [closable]=\"false\"\n />\n }\n @if (successMessage()) {\n <geo-alert\n type=\"success\"\n title=\"Đã gửi yêu cầu\"\n [message]=\"successMessage()\"\n [closable]=\"false\"\n />\n }\n\n <form class=\"geo-forgot-password__form\" (ngSubmit)=\"submit()\">\n <geo-input\n label=\"Email\"\n type=\"email\"\n placeholder=\"Nhập email đăng ký\"\n [required]=\"true\"\n [block]=\"true\"\n [error]=\"submitted() && emailInvalid()\"\n [errorMessage]=\"\n !email().trim()\n ? 'Vui lòng nhập email'\n : 'Email chưa đúng định dạng'\n \"\n [ngModel]=\"email()\"\n (ngModelChange)=\"email.set($event)\"\n name=\"email\"\n />\n\n <div class=\"geo-forgot-password__actions\">\n <geo-button appearance=\"secondary\" type=\"button\" (clicked)=\"backToLogin.emit()\">\n Quay lại đăng nhập\n </geo-button>\n <geo-button appearance=\"primary\" type=\"submit\" [disabled]=\"loading()\">\n {{ loading() ? 'Đang gửi…' : 'Lấy lại mật khẩu' }}\n </geo-button>\n </div>\n </form>\n</section>\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n input,\n model,\n output,\n signal,\n ViewEncapsulation,\n} from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { GeoButtonComponent } from '../geo-button/geo-button.component';\nimport { GeoInputComponent } from '../geo-input/geo-input.component';\nimport { GeoTextareaComponent } from '../geo-textarea/geo-textarea.component';\nimport { GeoTypographyComponent } from '../geo-typography/geo-typography.component';\nimport type { GeoFeedbackPayload } from './geo-feedback-form.types';\n\n/**\n * Citizen feedback / kiến nghị form (STT 26).\n *\n * @summary Form gửi phản ánh kiến nghị (người gửi + nội dung).\n * @whenToUse Popup / trang Phản ánh kiến nghị từ cổng tra cứu.\n * @doNotUseWhen Specialist reply inbox — use geo-table + reply modal.\n */\n@Component({\n selector: 'geo-feedback-form',\n standalone: true,\n imports: [\n FormsModule,\n GeoButtonComponent,\n GeoInputComponent,\n GeoTextareaComponent,\n GeoTypographyComponent,\n ],\n templateUrl: './geo-feedback-form.component.html',\n styleUrl: './geo-feedback-form.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {\n class: 'geo-feedback-form-host',\n '[class.geo-feedback-form-host--fill]': 'fill()',\n },\n})\nexport class GeoFeedbackFormComponent {\n readonly title = input('Gửi phản ánh, kiến nghị');\n /** Mô tả ngắn dưới tiêu đề — giúp người dân hiểu quy trình xử lý. */\n readonly description = input(\n 'Nội dung sẽ được chuyển tới cán bộ xử lý. Vui lòng mô tả rõ vấn đề và vị trí (nếu có).',\n );\n readonly maxLength = input(1000);\n readonly loading = input(false);\n /** Ẩn nút Hủy khi form dùng trên trang riêng (không phải dialog). */\n readonly showCancel = input(true);\n /** Form chiếm hết chiều rộng/cao vùng chứa (trang full content). */\n readonly fill = input(false);\n readonly submitLabel = input('Gửi phản ánh');\n readonly cancelLabel = input('Hủy');\n\n readonly senderName = model('');\n readonly content = model('');\n\n readonly submittedFeedback = output<GeoFeedbackPayload>();\n readonly cancelled = output<void>();\n\n readonly submitted = signal(false);\n\n readonly usedChars = computed(() => this.content().length);\n readonly remaining = computed(() => Math.max(0, this.maxLength() - this.usedChars()));\n readonly counterTone = computed<'default' | 'warning' | 'danger'>(() => {\n const left = this.remaining();\n if (left === 0) return 'danger';\n if (left <= 100) return 'warning';\n return 'default';\n });\n\n readonly senderError = computed(() => this.submitted() && !this.senderName().trim());\n readonly contentEmptyError = computed(() => this.submitted() && !this.content().trim());\n\n submit(): void {\n this.submitted.set(true);\n const senderName = this.senderName().trim();\n const content = this.content().trim();\n if (!senderName || !content || content.length > this.maxLength() || this.loading()) {\n return;\n }\n this.submittedFeedback.emit({ senderName, content });\n }\n\n reset(): void {\n this.senderName.set('');\n this.content.set('');\n this.submitted.set(false);\n }\n}\n","<section class=\"geo-feedback-form\" aria-label=\"Phản ánh kiến nghị\">\n @if (title() || description()) {\n <header class=\"geo-feedback-form__header\">\n @if (title()) {\n <geo-typography variant=\"h4\">{{ title() }}</geo-typography>\n }\n @if (description()) {\n <geo-typography variant=\"body\" color=\"secondary\">{{ description() }}</geo-typography>\n }\n </header>\n }\n\n <form class=\"geo-feedback-form__body\" (ngSubmit)=\"submit()\" novalidate>\n <geo-input\n label=\"Thông tin người gửi\"\n placeholder=\"Họ và tên hoặc tên tổ chức\"\n prefixIcon=\"user\"\n [required]=\"true\"\n [block]=\"true\"\n [allowClear]=\"true\"\n [disabled]=\"loading()\"\n [error]=\"senderError()\"\n errorMessage=\"Vui lòng nhập họ tên hoặc tên tổ chức\"\n [ngModel]=\"senderName()\"\n (ngModelChange)=\"senderName.set($event)\"\n name=\"senderName\"\n />\n\n <div class=\"geo-feedback-form__field\">\n <geo-textarea\n label=\"Nội dung phản ánh, kiến nghị\"\n placeholder=\"Mô tả vấn đề cần phản ánh (ví dụ: sai thông tin thửa đất, vị trí trên bản đồ…)\"\n [required]=\"true\"\n [block]=\"true\"\n [rows]=\"6\"\n [maxlength]=\"maxLength()\"\n [disabled]=\"loading()\"\n [error]=\"contentEmptyError()\"\n errorMessage=\"Vui lòng nhập nội dung phản ánh\"\n [ngModel]=\"content()\"\n (ngModelChange)=\"content.set($event)\"\n name=\"content\"\n />\n <p\n class=\"geo-feedback-form__counter\"\n [class.geo-feedback-form__counter--warning]=\"counterTone() === 'warning'\"\n [class.geo-feedback-form__counter--danger]=\"counterTone() === 'danger'\"\n aria-live=\"polite\"\n >\n {{ usedChars() }} / {{ maxLength() }} ký tự\n @if (remaining() <= 100) {\n <span class=\"geo-feedback-form__counter-hint\"> · Còn {{ remaining() }}</span>\n }\n </p>\n </div>\n\n <div class=\"geo-feedback-form__actions\">\n @if (showCancel()) {\n <geo-button\n appearance=\"secondary\"\n type=\"button\"\n [disabled]=\"loading()\"\n (clicked)=\"cancelled.emit()\"\n >\n {{ cancelLabel() }}\n </geo-button>\n }\n <geo-button\n appearance=\"primary\"\n type=\"submit\"\n icon=\"send\"\n [disabled]=\"loading()\"\n >\n {{ loading() ? 'Đang gửi…' : submitLabel() }}\n </geo-button>\n </div>\n\n <p class=\"geo-feedback-form__footnote\">\n Thông tin người gửi chỉ dùng để liên hệ xử lý phản ánh trên hệ thống.\n </p>\n </form>\n</section>\n","import {\n ChangeDetectionStrategy,\n Component,\n input,\n output,\n ViewEncapsulation,\n} from '@angular/core';\nimport { GeoEmptyStateComponent } from '../geo-empty-state/geo-empty-state.component';\nimport { GeoTypographyComponent } from '../geo-typography/geo-typography.component';\nimport type { GeoOverlapResultRow } from './geo-overlap-result.types';\n\n/**\n * Planning overlap analysis result table (TCQH.27).\n *\n * @summary Bảng kết quả phân tích chồng lấn quy hoạch (diện tích giao / %).\n * @whenToUse Màn Phân tích chồng lấn — kết quả sau khi chạy phân tích.\n * @doNotUseWhen Generic CRUD lists — use geo-table.\n */\n@Component({\n selector: 'geo-overlap-result',\n standalone: true,\n imports: [GeoEmptyStateComponent, GeoTypographyComponent],\n templateUrl: './geo-overlap-result.component.html',\n styleUrl: './geo-overlap-result.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: { class: 'geo-overlap-result-host' },\n})\nexport class GeoOverlapResultComponent {\n readonly title = input('Kết quả phân tích chồng lấn');\n readonly rows = input<GeoOverlapResultRow[]>([]);\n readonly areaUnit = input('m²');\n readonly emptyText = input('Chưa có kết quả phân tích.');\n\n readonly rowClick = output<GeoOverlapResultRow>();\n}\n","<section class=\"geo-overlap-result\" aria-label=\"Kết quả chồng lấn\">\n <geo-typography variant=\"h4\">{{ title() }}</geo-typography>\n\n @if (!rows().length) {\n <geo-empty-state [title]=\"emptyText()\" icon=\"pie-chart\" />\n } @else {\n <div class=\"geo-overlap-result__table-wrap\">\n <table class=\"geo-overlap-result__table\">\n <thead>\n <tr>\n <th>Loại quy hoạch</th>\n <th>Diện tích giao</th>\n <th>Tỷ lệ</th>\n </tr>\n </thead>\n <tbody>\n @for (row of rows(); track row.id) {\n <tr (click)=\"rowClick.emit(row)\">\n <td>\n <span class=\"geo-overlap-result__type\">\n @if (row.color) {\n <span\n class=\"geo-overlap-result__swatch\"\n [style.background]=\"row.color\"\n ></span>\n }\n {{ row.planningType }}\n </span>\n </td>\n <td>{{ row.intersectionArea }} {{ areaUnit() }}</td>\n <td>{{ row.percent }}%</td>\n </tr>\n }\n </tbody>\n </table>\n </div>\n }\n</section>\n","import {\n ChangeDetectionStrategy,\n Component,\n input,\n model,\n output,\n ViewEncapsulation,\n} from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { GeoChartComponent } from '../geo-chart/geo-chart.component';\nimport type { GeoChartDatum, GeoChartSegmentClick } from '../geo-chart/geo-chart.types';\nimport { GeoDateRangePickerComponent } from '../geo-date-range-picker/geo-date-range-picker.component';\nimport type { GeoDateRangeValue } from '../geo-date-range-picker/geo-date-range-picker.types';\nimport { GeoPageHeaderComponent } from '../geo-page-header/geo-page-header.component';\nimport type { GeoBreadcrumbItem } from '../geo-breadcrumb/geo-breadcrumb.types';\nimport { GeoStatCardComponent } from '../geo-stat-card/geo-stat-card.component';\nimport type { GeoStatCardItem } from '../geo-stat-card/geo-stat-card.types';\n\n/**\n * Dashboard page composition (TCQH.1–3).\n *\n * @summary Trang dashboard: bộ lọc thời gian, KPI cards, biểu đồ cột & donut.\n * @whenToUse Màn Dashboard thống kê tổng quan cho chuyên viên.\n * @doNotUseWhen Full custom analytics layouts — compose primitives yourself.\n */\n@Component({\n selector: 'geo-dashboard',\n standalone: true,\n imports: [\n FormsModule,\n GeoPageHeaderComponent,\n GeoDateRangePickerComponent,\n GeoStatCardComponent,\n GeoChartComponent,\n ],\n templateUrl: './geo-dashboard.component.html',\n styleUrl: './geo-dashboard.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: { class: 'geo-dashboard-host' },\n})\nexport class GeoDashboardComponent {\n readonly title = input('Dashboard thống kê');\n readonly breadcrumb = input<GeoBreadcrumbItem[]>([\n { label: 'Trang chủ', link: '/' },\n { label: 'Dashboard' },\n ]);\n readonly stats = input<GeoStatCardItem[]>([]);\n readonly wardChartTitle = input('Diện tích quy hoạch theo phường/xã');\n readonly wardData = input<GeoChartDatum[]>([]);\n readonly mismatchChartTitle = input(\n 'Tỷ lệ thửa quy hoạch khác mục đích hiện trạng',\n );\n readonly mismatchData = input<GeoChartDatum[]>([]);\n readonly wardUnit = input('ha');\n\n readonly period = model<GeoDateRangeValue>(null);\n\n readonly periodChange = output<GeoDateRangeValue>();\n readonly mismatchSegmentClick = output<GeoChartSegmentClick>();\n readonly wardSegmentClick = output<GeoChartSegmentClick>();\n\n onPeriodChange(value: GeoDateRangeValue): void {\n this.period.set(value);\n this.periodChange.emit(value);\n }\n}\n","<div class=\"geo-dashboard\">\n <geo-page-header [title]=\"title()\" [breadcrumb]=\"breadcrumb()\">\n <div geoPageFilters class=\"geo-dashboard__filters\">\n <geo-date-range-picker\n label=\"Bộ lọc thời gian\"\n [ngModel]=\"period()\"\n (ngModelChange)=\"onPeriodChange($event)\"\n />\n </div>\n </geo-page-header>\n\n <div class=\"geo-dashboard__stats\">\n @for (item of stats(); track item.id ?? item.label) {\n <geo-stat-card [item]=\"item\" />\n }\n </div>\n\n <div class=\"geo-dashboard__charts\">\n <geo-chart\n type=\"bar\"\n [title]=\"wardChartTitle()\"\n [data]=\"wardData()\"\n [showSort]=\"true\"\n [unit]=\"wardUnit()\"\n [height]=\"320\"\n (segmentClick)=\"wardSegmentClick.emit($event)\"\n />\n <geo-chart\n type=\"donut\"\n [title]=\"mismatchChartTitle()\"\n [data]=\"mismatchData()\"\n [height]=\"320\"\n (segmentClick)=\"mismatchSegmentClick.emit($event)\"\n />\n </div>\n\n <div class=\"geo-dashboard__extra\">\n <ng-content />\n </div>\n</div>\n","import {\n ChangeDetectionStrategy,\n Component,\n input,\n ViewEncapsulation,\n} from '@angular/core';\nimport { GeoPageHeaderComponent } from '../geo-page-header/geo-page-header.component';\nimport type { GeoBreadcrumbItem } from '../geo-breadcrumb/geo-breadcrumb.types';\n\n/**\n * Standard list / CRUD page chrome (admin & thống kê).\n *\n * @summary Layout trang danh sách: header + filter + toolbar + nội dung bảng.\n * @whenToUse QL người dùng, đồng bộ iLIS, QL dịch vụ/bản đồ, thống kê tờ.\n * @doNotUseWhen Map portal — use geo-map-shell.\n */\n@Component({\n selector: 'geo-list-page',\n standalone: true,\n imports: [GeoPageHeaderComponent],\n templateUrl: './geo-list-page.component.html',\n styleUrl: './geo-list-page.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: { class: 'geo-list-page-host' },\n})\nexport class GeoListPageComponent {\n readonly title = input('');\n readonly breadcrumb = input<GeoBreadcrumbItem[]>([]);\n readonly uppercase = input(true);\n}\n","<div class=\"geo-list-page\">\n <geo-page-header\n [title]=\"title()\"\n [breadcrumb]=\"breadcrumb()\"\n [uppercase]=\"uppercase()\"\n >\n <div geoPageActions>\n <ng-content select=\"[geoListActions]\" />\n </div>\n <div geoPageFilters>\n <ng-content select=\"[geoListFilters]\" />\n </div>\n </geo-page-header>\n\n <div class=\"geo-list-page__filter\">\n <ng-content select=\"geo-table-filter,[geoListFilter]\" />\n </div>\n\n <div class=\"geo-list-page__table-panel\">\n <div class=\"geo-list-page__toolbar\">\n <ng-content select=\"geo-table-toolbar,[geoListToolbar]\" />\n </div>\n <div class=\"geo-list-page__body\">\n <ng-content />\n </div>\n </div>\n</div>\n","/**\n * Packaged fallback for ng-packagr (cannot resolve `import … from '*.svg'`).\n * Source of truth for the SVG files remains `assets/toolbar/*.svg`.\n * Demo / Vite builds use `geo-map-toolbar.icons.ts` (real SVG URL imports).\n */\nexport const GEO_MAP_TOOLBAR_ASSET_BASE = '/geo-map-assets/toolbar';\n\nexport const GEO_MAP_TOOLBAR_ICONS = {\n home: `${GEO_MAP_TOOLBAR_ASSET_BASE}/home.svg`,\n search: `${GEO_MAP_TOOLBAR_ASSET_BASE}/search.svg`,\n pan: `${GEO_MAP_TOOLBAR_ASSET_BASE}/pan.svg`,\n zoomIn: `${GEO_MAP_TOOLBAR_ASSET_BASE}/zoom-in.svg`,\n zoomOut: `${GEO_MAP_TOOLBAR_ASSET_BASE}/zoom-out.svg`,\n fullscreen: `${GEO_MAP_TOOLBAR_ASSET_BASE}/fullscreen.svg`,\n measureDistance: `${GEO_MAP_TOOLBAR_ASSET_BASE}/measure-distance.svg`,\n measureArea: `${GEO_MAP_TOOLBAR_ASSET_BASE}/measure-area.svg`,\n layers: `${GEO_MAP_TOOLBAR_ASSET_BASE}/layers.svg`,\n} as const;\n","import type {\n GeoMapBasemapOption,\n GeoMapLayerConfig,\n GeoMapLegendItem,\n GeoMapParcelDetail,\n GeoMapToolbarAction,\n GeoMapXyzLayerConfig,\n} from './geo-map.types';\nimport type { GeoTreeNode } from '../geo-tree/geo-tree.types';\nimport { GEO_MAP_TOOLBAR_ICONS } from './geo-map-toolbar.icons';\n\n/** Built-in CRS codes available without custom proj4 registration. */\nexport const GEO_MAP_BUILTIN_PROJECTIONS = ['EPSG:4326', 'EPSG:3857'] as const;\n\n/**\n * Default view — Web Mercator around Đà Lạt (Lâm Đồng).\n * Center is already in EPSG:3857 (do not treat as lon/lat).\n */\nexport const GEO_MAP_DEFAULT_CENTER: readonly [number, number] = [12052000, 1330000];\nexport const GEO_MAP_DEFAULT_ZOOM = 11;\nexport const GEO_MAP_DEFAULT_MIN_ZOOM = 2;\nexport const GEO_MAP_DEFAULT_MAX_ZOOM = 20;\nexport const GEO_MAP_DEFAULT_VIEW_PROJECTION = 'EPSG:3857';\nexport const GEO_MAP_DEFAULT_HEIGHT = '480px';\n\n/** Internal layer id reserved for the `basemap` input shortcut. */\nexport const GEO_MAP_BASEMAP_LAYER_ID = '__geo_basemap';\n\n/** Internal vector layers reserved for selection / measure / highlight. */\nexport const GEO_MAP_SELECTION_LAYER_ID = '__geo_selection';\nexport const GEO_MAP_MEASURE_LAYER_ID = '__geo_measure';\nexport const GEO_MAP_HIGHLIGHT_LAYER_ID = '__geo_highlight';\n\n/**\n * Default province extent (Lâm Đồng approx, EPSG:4326) for “xem toàn tỉnh” (TCQH.14 GD5).\n * Host apps should override with authoritative boundary extent from API.\n */\nexport const GEO_MAP_DEFAULT_PROVINCE_EXTENT_4326: readonly [\n number,\n number,\n number,\n number,\n] = [107.2, 11.15, 108.75, 12.35];\n\n/** Optional traffic / roads reference overlay (not a planning layer). */\nexport const GEO_MAP_TRAFFIC_LAYER_ID = '__geo_traffic';\n\nexport const GEO_MAP_ESRI_IMAGERY_URL =\n 'https://server.arcgisonline.com/ArcGIS/rest/services/World_Imagery/MapServer/tile/{z}/{y}/{x}';\n\nexport const GEO_MAP_ESRI_STREETS_URL =\n 'https://server.arcgisonline.com/ArcGIS/rest/services/World_Street_Map/MapServer/tile/{z}/{y}/{x}';\n\nexport const GEO_MAP_ESRI_TRANSPORT_URL =\n 'https://server.arcgisonline.com/ArcGIS/rest/services/Reference/World_Transportation/MapServer/tile/{z}/{y}/{x}';\n\n/** Default basemap picker options (đường phố / vệ tinh). */\nexport const GEO_MAP_DEFAULT_BASEMAP_OPTIONS: GeoMapBasemapOption[] = [\n {\n id: 'osm',\n label: 'Đường phố',\n basemap: 'osm',\n previewUrl: 'https://tile.openstreetmap.org/6/50/30.png',\n },\n {\n id: 'satellite',\n label: 'Vệ tinh',\n basemap: {\n type: 'xyz',\n url: GEO_MAP_ESRI_IMAGERY_URL,\n attributions: 'Esri, Maxar, Earthstar Geographics',\n title: 'Ảnh vệ tinh',\n },\n previewUrl:\n 'https://server.arcgisonline.com/ArcGIS/rest/services/World_Imagery/MapServer/tile/6/30/50',\n },\n];\n\n/** Transportation reference overlay — toggle independently of basemap. */\nexport const GEO_MAP_TRAFFIC_OVERLAY: GeoMapXyzLayerConfig = {\n id: GEO_MAP_TRAFFIC_LAYER_ID,\n title: 'Lớp giao thông',\n type: 'xyz',\n url: GEO_MAP_ESRI_TRANSPORT_URL,\n attributions: 'Esri',\n visible: false,\n opacity: 0.9,\n zIndex: 5,\n basemap: false,\n group: 'base-map',\n};\n\n/** Built-in toolbar actions — Figma map chrome (Dat Dai Lam Dong 2026). */\nexport const GEO_MAP_DEFAULT_TOOLBAR_ACTIONS: GeoMapToolbarAction[] = [\n {\n id: 'home',\n label: 'Trang chủ',\n icon: 'home',\n iconSrc: GEO_MAP_TOOLBAR_ICONS.home,\n iconOnly: true,\n tooltip: 'Trang chủ',\n variant: 'primary',\n },\n {\n id: 'search',\n label: 'Tra cứu',\n icon: 'search',\n iconSrc: GEO_MAP_TOOLBAR_ICONS.search,\n iconOnly: true,\n tooltip: 'Tra cứu thửa đất',\n },\n {\n id: 'pan',\n label: 'Di chuyển',\n icon: 'drag',\n iconSrc: GEO_MAP_TOOLBAR_ICONS.pan,\n iconOnly: true,\n tooltip: 'Di chuyển bản đồ',\n },\n {\n id: 'zoom-in',\n label: 'Phóng to',\n icon: 'plus',\n iconSrc: GEO_MAP_TOOLBAR_ICONS.zoomIn,\n iconOnly: true,\n tooltip: 'Phóng to',\n },\n {\n id: 'zoom-out',\n label: 'Thu nhỏ',\n icon: 'minus',\n iconSrc: GEO_MAP_TOOLBAR_ICONS.zoomOut,\n iconOnly: true,\n tooltip: 'Thu nhỏ',\n },\n {\n id: 'fullscreen',\n label: 'Toàn màn hình',\n icon: 'fullscreen',\n iconSrc: GEO_MAP_TOOLBAR_ICONS.fullscreen,\n iconOnly: true,\n tooltip: 'Xem toàn bản đồ',\n },\n {\n id: 'measure-distance',\n label: 'Đo khoảng cách',\n icon: 'column-width',\n iconSrc: GEO_MAP_TOOLBAR_ICONS.measureDistance,\n iconOnly: true,\n tooltip: 'Đo khoảng cách',\n },\n {\n id: 'measure-area',\n label: 'Đo diện tích',\n icon: 'border-outer',\n iconSrc: GEO_MAP_TOOLBAR_ICONS.measureArea,\n iconOnly: true,\n tooltip: 'Đo diện tích',\n },\n {\n id: 'layers',\n label: 'Lớp bản đồ',\n icon: 'appstore',\n iconSrc: GEO_MAP_TOOLBAR_ICONS.layers,\n iconOnly: true,\n tooltip: 'Bật/tắt lớp bản đồ',\n },\n {\n id: 'legend',\n label: 'Chú giải',\n icon: 'unordered-list',\n iconOnly: true,\n tooltip: 'Xem chú giải',\n },\n {\n id: 'snapshot',\n label: 'Chụp ảnh',\n icon: 'camera',\n iconOnly: true,\n tooltip: 'Chụp ảnh bản đồ',\n },\n];\n\n/**\n * Demo thematic overlays for Storybook (offline-friendly GeoJSON).\n * Groups match portal layers popover: QHSDD · địa chính · hiện trạng.\n */\nexport const GEO_MAP_DEMO_THEMATIC_LAYERS: GeoMapLayerConfig[] = [\n {\n id: 'demo-qhsdd-2020',\n title: 'QHSDD tỉnh Lâm Đồng 2020-2025',\n type: 'geojson',\n visible: true,\n opacity: 0.4,\n zIndex: 10,\n group: 'qhsdd',\n groupLabel: 'Bản đồ QHSDD',\n groupSelection: 'single',\n basemap: false,\n dataProjection: 'EPSG:4326',\n featureProjection: 'EPSG:3857',\n data: {\n type: 'FeatureCollection',\n features: [\n {\n type: 'Feature',\n properties: { code: 'ODT', name: 'Đất ở đô thị (QH 2020-2025)' },\n geometry: {\n type: 'Polygon',\n coordinates: [\n [\n [108.42, 11.93],\n [108.48, 11.93],\n [108.48, 11.97],\n [108.42, 11.97],\n [108.42, 11.93],\n ],\n ],\n },\n },\n ],\n },\n },\n {\n id: 'demo-qhsdd-2025',\n title: 'QHSDD tỉnh Lâm Đồng 2025-2030',\n type: 'geojson',\n visible: false,\n opacity: 0.4,\n zIndex: 11,\n group: 'qhsdd',\n groupLabel: 'Bản đồ QHSDD',\n groupSelection: 'single',\n basemap: false,\n dataProjection: 'EPSG:4326',\n featureProjection: 'EPSG:3857',\n data: {\n type: 'FeatureCollection',\n features: [\n {\n type: 'Feature',\n properties: { code: 'ODT', name: 'Đất ở đô thị (QH 2025-2030)' },\n geometry: {\n type: 'Polygon',\n coordinates: [\n [\n [108.43, 11.925],\n [108.49, 11.925],\n [108.49, 11.965],\n [108.43, 11.965],\n [108.43, 11.925],\n ],\n ],\n },\n },\n ],\n },\n },\n {\n id: 'demo-parcel',\n title: 'Tỉnh Lâm Đồng',\n type: 'geojson',\n visible: true,\n opacity: 0.4,\n zIndex: 20,\n group: 'cadastre',\n groupLabel: 'Bản đồ địa chính',\n groupSelection: 'multi',\n basemap: false,\n queryable: true,\n dataProjection: 'EPSG:4326',\n featureProjection: 'EPSG:3857',\n data: {\n type: 'FeatureCollection',\n features: [\n {\n type: 'Feature',\n properties: { parcel: '12', sheet: '45' },\n geometry: {\n type: 'Polygon',\n coordinates: [\n [\n [108.45, 11.94],\n [108.465, 11.94],\n [108.465, 11.952],\n [108.45, 11.952],\n [108.45, 11.94],\n ],\n ],\n },\n },\n ],\n },\n },\n {\n id: 'demo-current-2020',\n title: 'QHSDD tỉnh Lâm Đồng 2020-2025',\n type: 'geojson',\n visible: true,\n opacity: 0.4,\n zIndex: 12,\n group: 'current',\n groupLabel: 'Bản đồ hiện trạng',\n groupSelection: 'single',\n basemap: false,\n dataProjection: 'EPSG:4326',\n featureProjection: 'EPSG:3857',\n data: {\n type: 'FeatureCollection',\n features: [\n {\n type: 'Feature',\n properties: { code: 'ONT', name: 'Đất ở tại nông thôn (HT 2020-2025)' },\n geometry: {\n type: 'Polygon',\n coordinates: [\n [\n [108.44, 11.92],\n [108.5, 11.92],\n [108.5, 11.96],\n [108.44, 11.96],\n [108.44, 11.92],\n ],\n ],\n },\n },\n ],\n },\n },\n {\n id: 'demo-current-2025',\n title: 'QHSDD tỉnh Lâm Đồng 2025-2030',\n type: 'geojson',\n visible: false,\n opacity: 0.4,\n zIndex: 13,\n group: 'current',\n groupLabel: 'Bản đồ hiện trạng',\n groupSelection: 'single',\n basemap: false,\n dataProjection: 'EPSG:4326',\n featureProjection: 'EPSG:3857',\n data: {\n type: 'FeatureCollection',\n features: [\n {\n type: 'Feature',\n properties: { code: 'ONT', name: 'Đất ở tại nông thôn (HT 2025-2030)' },\n geometry: {\n type: 'Polygon',\n coordinates: [\n [\n [108.435, 11.915],\n [108.495, 11.915],\n [108.495, 11.955],\n [108.435, 11.955],\n [108.435, 11.915],\n ],\n ],\n },\n },\n ],\n },\n },\n];\n\n/**\n * Sample legend — placeholder colors until Thông tư 09/2024 palette is complete (Q13–Q15).\n * Do not treat as legally authoritative.\n */\nexport const GEO_MAP_DEMO_LEGEND_ITEMS: GeoMapLegendItem[] = [\n { code: 'ODT', label: 'Đất ở đô thị', color: '#E87B35' },\n { code: 'ONT', label: 'Đất ở tại nông thôn', color: '#F2C14E' },\n { code: 'SKC', label: 'Đất cơ sở sản xuất kinh doanh', color: '#C45C26' },\n { code: 'DGT', label: 'Đất giao thông', color: '#6B7280' },\n { code: 'TMD', label: 'Đất thương mại dịch vụ', color: '#DB2777' },\n { code: 'CLN', label: 'Đất trồng cây lâu năm', color: '#16A34A' },\n];\n\nexport const GEO_MAP_DEFAULT_HELP_SECTIONS: Array<{ title: string; body: string }> = [\n {\n title: 'Di chuyển bản đồ',\n body: 'Kéo chuột để pan. Cuộn chuột hoặc dùng nút +/- để thu phóng. Dùng “Phóng to theo vùng” / “Thu nhỏ theo vùng” để khoanh vùng trên bản đồ. “Xem toàn tỉnh” căn khung nhìn về phạm vi tỉnh.',\n },\n {\n title: 'Tra cứu thửa đất',\n body: 'Mở “Tra cứu” để tìm theo chủ sử dụng, GCN, tọa độ, địa chỉ hoặc số tờ/thửa. Kết quả hiển thị danh sách và highlight trên bản đồ.',\n },\n {\n title: 'Lớp bản đồ',\n body: 'Mở “Lớp bản đồ” để bật/tắt quy hoạch SDĐ, hiện trạng SDĐ, thửa đất. Chọn vệ tinh ở bộ chuyển lớp nền. Bật nhiều lớp cùng lúc để chồng xếp so sánh.',\n },\n {\n title: 'Đơn vị hành chính',\n body: 'Mở bộ lọc ĐVHC cấp xã để thu hẹp khung nhìn theo xã đã chọn. “Xem toàn tỉnh” đưa bản đồ về toàn cảnh tỉnh.',\n },\n {\n title: 'Đo đạc & tiện ích',\n body: 'Đo khoảng cách / diện tích bằng cách nhấp các điểm trên bản đồ (nháy đúp để kết thúc). Dùng “Độ trong suốt” để nhìn xuyên lớp. “Chụp ảnh” tải PNG khung nhìn hiện tại.',\n },\n {\n title: 'Vị trí của tôi',\n body: 'Cho phép trình duyệt chia sẻ vị trí để căn giữa bản đồ tại vị trí thiết bị của bạn.',\n },\n];\n\n/** Demo admin tree (xã) for Storybook — replace via API in production. */\nexport const GEO_MAP_DEMO_ADMIN_NODES: GeoTreeNode[] = [\n {\n key: 'lam-dong',\n title: 'Tỉnh Lâm Đồng',\n expanded: true,\n children: [\n { key: 'xa-1', title: 'Xã Đạ Tẻh', isLeaf: true },\n { key: 'xa-2', title: 'Xã Đạ Huoai', isLeaf: true },\n { key: 'xa-3', title: 'Xã Đạ Kho', isLeaf: true },\n { key: 'xa-4', title: 'Phường 1 (Đà Lạt)', isLeaf: true },\n { key: 'xa-5', title: 'Phường 2 (Đà Lạt)', isLeaf: true },\n ],\n },\n];\n\n/** Demo parcel detail for Storybook search/popup (TCQH.12). */\nexport const GEO_MAP_DEMO_PARCEL_DETAIL: GeoMapParcelDetail = {\n parcelCode: '0100001234',\n parcelNumber: '2023',\n sheetNumber: '153',\n ward: 'Phường 1',\n province: 'Lâm Đồng',\n area: '2500 m²',\n legalArea: '2500 m²',\n landUse: 'LUC - Đất chuyên trồng lúa nước',\n address: 'Số 10, đường Trần Phú',\n useForm: 'Sử dụng riêng',\n registrationStatus: 'Đã cấp giấy chứng nhận',\n landPrice: 'Đang cập nhật',\n shapeInfo: 'Hình chữ nhật',\n planningInfo: 'Nằm trong quy hoạch đất ở đô thị giai đoạn 2021–2030',\n};\n\n/**\n * Placeholder endpoints — replace via environment / API.\n * Do not hard-code production domains here.\n */\nexport const GEO_MAP_ENV_PLACEHOLDERS = {\n wmsUrl: 'https://{MAP_API_HOST}/geoserver/wms',\n xyzSatelliteUrl:\n 'https://{TILE_HOST}/satellite/{z}/{x}/{y}.png',\n geojsonParcelUrl: 'https://{MAP_API_HOST}/api/v1/parcels.geojson',\n} as const;\n\n/**\n * Example multi-layer stack for land-use planning demos / Storybook.\n * URLs are placeholders; WMS/XYZ tiles will fail until env is wired.\n */\nexport const GEO_MAP_DEFAULT_PLANNING_LAYERS: GeoMapLayerConfig[] = [\n {\n id: 'osm',\n title: 'Bản đồ đường phố',\n type: 'osm',\n visible: true,\n opacity: 1,\n zIndex: 0,\n basemap: true,\n group: 'base-map',\n },\n {\n id: 'satellite',\n title: 'Ảnh vệ tinh',\n type: 'xyz',\n url: GEO_MAP_ENV_PLACEHOLDERS.xyzSatelliteUrl,\n visible: false,\n opacity: 1,\n zIndex: 0,\n basemap: true,\n group: 'base-map',\n attributions: 'Satellite (placeholder)',\n },\n {\n id: 'land-use-planning',\n title: 'Quy hoạch sử dụng đất',\n type: 'wms',\n url: GEO_MAP_ENV_PLACEHOLDERS.wmsUrl,\n layerName: 'workspace:land_use_planning',\n params: {\n LAYERS: 'workspace:land_use_planning',\n TILED: true,\n },\n visible: true,\n opacity: 0.7,\n zIndex: 10,\n projection: 'EPSG:3857',\n queryable: true,\n group: 'planning',\n serverType: 'geoserver',\n },\n {\n id: 'parcel-boundary',\n title: 'Ranh giới thửa đất',\n type: 'wms',\n url: GEO_MAP_ENV_PLACEHOLDERS.wmsUrl,\n layerName: 'workspace:parcel_boundary',\n params: {\n LAYERS: 'workspace:parcel_boundary',\n TILED: true,\n },\n visible: true,\n opacity: 0.9,\n zIndex: 20,\n queryable: true,\n group: 'planning',\n serverType: 'geoserver',\n },\n {\n id: GEO_MAP_SELECTION_LAYER_ID,\n title: 'Đối tượng đang chọn',\n type: 'vector',\n visible: true,\n opacity: 1,\n zIndex: 100,\n group: 'system',\n features: [],\n },\n {\n id: GEO_MAP_MEASURE_LAYER_ID,\n title: 'Kết quả đo',\n type: 'vector',\n visible: true,\n opacity: 1,\n zIndex: 110,\n group: 'system',\n features: [],\n },\n];\n","import type OlMap from 'ol/Map';\nimport type { Coordinate } from 'ol/coordinate';\nimport type Feature from 'ol/Feature';\nimport type Geometry from 'ol/geom/Geometry';\nimport type {\n GeoMapBasemapInput,\n GeoMapHighlightOptions,\n GeoMapLayerConfig,\n GeoMapLayerRuntimeState,\n} from './geo-map.types';\nimport type { CreatedMapLayer } from './services/geo-map-layer.service';\nimport type { GeoMapService } from './services/geo-map.service';\nimport type { GeoMapLayerService } from './services/geo-map-layer.service';\n\n/**\n * Public façade emitted via `mapReady`. Keeps OpenLayers Map out of templates\n * while allowing host features to drive view / layers.\n */\nexport class GeoMapController {\n constructor(\n private readonly mapService: GeoMapService,\n private readonly layerService: GeoMapLayerService,\n ) {}\n\n getMap(): OlMap | null {\n return this.mapService.getMap();\n }\n\n setCenter(center: Coordinate, zoom?: number): void {\n this.mapService.setCenter(center, zoom);\n }\n\n setZoom(zoom: number): void {\n this.mapService.setZoom(zoom);\n }\n\n getZoom(): number | undefined {\n return this.mapService.getZoom();\n }\n\n zoomIn(): void {\n this.mapService.zoomBy(1);\n }\n\n zoomOut(): void {\n this.mapService.zoomBy(-1);\n }\n\n setBasemap(basemap: GeoMapBasemapInput): void {\n this.mapService.setBasemap(basemap);\n }\n\n fitExtent(\n extent: [number, number, number, number],\n options?: { padding?: number[]; maxZoom?: number; duration?: number },\n ): void {\n this.mapService.fitExtent(extent, options);\n }\n\n fitLonLatExtent(\n extent4326: [number, number, number, number],\n options?: { padding?: number[]; maxZoom?: number; duration?: number },\n ): void {\n this.mapService.fitLonLatExtent(extent4326, options);\n }\n\n /** Fit province / toàn tỉnh (TCQH.14 GD5) — not browser fullscreen. */\n fitProvince(\n extent4326?: readonly [number, number, number, number],\n options?: { padding?: number[]; maxZoom?: number; duration?: number },\n ): void {\n this.mapService.fitProvince(extent4326, options);\n }\n\n setHighlightFromGeoJson(data: object, options?: GeoMapHighlightOptions): void {\n this.mapService.setHighlightFromGeoJson(data, options);\n }\n\n setHighlightFeatures(\n features: Feature<Geometry>[],\n options?: GeoMapHighlightOptions,\n ): void {\n this.mapService.setHighlightFeatures(features, options);\n }\n\n clearHighlight(): void {\n this.mapService.clearHighlight();\n }\n\n updateSize(): void {\n this.mapService.updateSize();\n }\n\n syncLayers(configs: GeoMapLayerConfig[]): void {\n this.mapService.syncLayers(configs);\n }\n\n setLayerVisibility(layerId: string, visible: boolean): void {\n this.mapService.setLayerVisibility(layerId, visible);\n }\n\n setLayerOpacity(layerId: string, opacity: number): void {\n this.mapService.setLayerOpacity(layerId, opacity);\n }\n\n getLayers(): CreatedMapLayer[] {\n return this.mapService.getManagedLayers();\n }\n\n getLayerRuntimeStates(): GeoMapLayerRuntimeState[] {\n return this.layerService.getAllRuntimeStates();\n }\n}\n","import { Injectable } from '@angular/core';\nimport { get as getProjection, transform, transformExtent } from 'ol/proj';\nimport { register } from 'ol/proj/proj4';\nimport proj4 from 'proj4';\nimport { GEO_MAP_BUILTIN_PROJECTIONS } from '../geo-map.constants';\nimport type { ProjectionConfig } from '../geo-map.types';\n\nexport class GeoMapProjectionError extends Error {\n constructor(message: string) {\n super(message);\n this.name = 'GeoMapProjectionError';\n }\n}\n\n/**\n * Central proj4 / OpenLayers projection registration and transforms.\n * Keep all CRS logic here — components must not call proj4 directly.\n */\n@Injectable({ providedIn: 'root' })\nexport class GeoMapProjectionService {\n private readonly registeredCodes = new Set<string>(GEO_MAP_BUILTIN_PROJECTIONS);\n\n isRegistered(code: string): boolean {\n const normalized = this.normalizeCode(code);\n if (this.registeredCodes.has(normalized)) {\n return true;\n }\n return getProjection(normalized) != null;\n }\n\n /**\n * Register a custom CRS (e.g. local VN-2000). Definition must come from config/API.\n */\n registerProjection(config: ProjectionConfig): void {\n const code = this.normalizeCode(config.code);\n if (!config.definition?.trim()) {\n throw new GeoMapProjectionError(\n `Projection \"${code}\" is missing a proj4 definition. Supply it from environment or API.`,\n );\n }\n\n try {\n proj4.defs(code, config.definition.trim());\n register(proj4);\n } catch (err) {\n const detail = err instanceof Error ? err.message : String(err);\n throw new GeoMapProjectionError(\n `Invalid proj4 definition for \"${code}\": ${detail}`,\n );\n }\n\n const projection = getProjection(code);\n if (!projection) {\n throw new GeoMapProjectionError(\n `OpenLayers did not create projection \"${code}\" after registration.`,\n );\n }\n\n if (config.extent) {\n projection.setExtent(config.extent);\n }\n\n this.registeredCodes.add(code);\n }\n\n ensureRegistered(code: string): void {\n const normalized = this.normalizeCode(code);\n if (!this.isRegistered(normalized)) {\n throw new GeoMapProjectionError(\n `Projection \"${normalized}\" is not registered. Call registerProjection() with a valid definition first.`,\n );\n }\n }\n\n /**\n * Transform a coordinate. Order is always [x, y] / [longitude, latitude].\n */\n transformCoordinate(\n coordinate: [number, number] | number[],\n fromProjection: string,\n toProjection: string,\n ): [number, number] {\n if (coordinate.length < 2) {\n throw new GeoMapProjectionError('Coordinate must have at least two values [x, y].');\n }\n const from = this.normalizeCode(fromProjection);\n const to = this.normalizeCode(toProjection);\n this.ensureRegistered(from);\n this.ensureRegistered(to);\n\n if (from === to) {\n return [Number(coordinate[0]), Number(coordinate[1])];\n }\n\n const result = transform(\n [Number(coordinate[0]), Number(coordinate[1])],\n from,\n to,\n );\n return [result[0], result[1]];\n }\n\n transformExtent(\n extent: [number, number, number, number],\n fromProjection: string,\n toProjection: string,\n ): [number, number, number, number] {\n const from = this.normalizeCode(fromProjection);\n const to = this.normalizeCode(toProjection);\n this.ensureRegistered(from);\n this.ensureRegistered(to);\n\n if (from === to) {\n return [...extent];\n }\n\n const result = transformExtent(extent, from, to);\n return [result[0], result[1], result[2], result[3]];\n }\n\n /**\n * Normalize user input: trim, upper-case EPSG codes, reject non-finite numbers.\n */\n normalizeCoordinate(\n value: unknown,\n options?: { label?: string },\n ): [number, number] {\n const label = options?.label ?? 'coordinate';\n if (!Array.isArray(value) || value.length < 2) {\n throw new GeoMapProjectionError(\n `Invalid ${label}: expected [x, y] or [longitude, latitude].`,\n );\n }\n const x = Number(value[0]);\n const y = Number(value[1]);\n if (!Number.isFinite(x) || !Number.isFinite(y)) {\n throw new GeoMapProjectionError(`Invalid ${label}: values must be finite numbers.`);\n }\n return [x, y];\n }\n\n normalizeCode(code: string): string {\n return code.trim();\n }\n}\n","import { Injectable, inject } from '@angular/core';\nimport Feature from 'ol/Feature';\nimport GeoJSON from 'ol/format/GeoJSON';\nimport type Geometry from 'ol/geom/Geometry';\nimport type BaseLayer from 'ol/layer/Base';\nimport TileLayer from 'ol/layer/Tile';\nimport VectorLayer from 'ol/layer/Vector';\nimport OSM from 'ol/source/OSM';\nimport TileWMS from 'ol/source/TileWMS';\nimport VectorSource from 'ol/source/Vector';\nimport XYZ from 'ol/source/XYZ';\nimport type { ProjectionLike } from 'ol/proj';\nimport WMTS from 'ol/source/WMTS';\nimport WMTSTileGrid from 'ol/tilegrid/WMTS';\nimport { get as getProjection } from 'ol/proj';\nimport { getTopLeft, getWidth } from 'ol/extent';\nimport { GEO_MAP_BASEMAP_LAYER_ID } from '../geo-map.constants';\nimport type {\n GeoMapBasemapInput,\n GeoMapGeoJsonLayerConfig,\n GeoMapLayerConfig,\n GeoMapLayerRuntimeState,\n GeoMapOsmLayerConfig,\n GeoMapVectorLayerConfig,\n GeoMapWmsLayerConfig,\n GeoMapWmtsLayerConfig,\n GeoMapXyzLayerConfig,\n} from '../geo-map.types';\nimport { GeoMapProjectionService } from './geo-map-projection.service';\n\nconst LAYER_ID_KEY = 'geoLayerId';\nconst LAYER_BASEMAP_KEY = 'geoBasemap';\nconst LAYER_GROUP_KEY = 'geoGroup';\nconst LAYER_QUERYABLE_KEY = 'geoQueryable';\n\nexport interface CreatedMapLayer {\n id: string;\n config: GeoMapLayerConfig;\n layer: BaseLayer;\n}\n\n/**\n * Builds and incrementally patches OpenLayers layers from typed configs.\n * Visibility / opacity updates must not recreate sources.\n */\n@Injectable()\nexport class GeoMapLayerService {\n private readonly projection = inject(GeoMapProjectionService);\n private readonly runtime = new Map<string, GeoMapLayerRuntimeState>();\n\n getRuntimeState(layerId: string): GeoMapLayerRuntimeState | undefined {\n return this.runtime.get(layerId);\n }\n\n getAllRuntimeStates(): GeoMapLayerRuntimeState[] {\n return [...this.runtime.values()];\n }\n\n createFromBasemapInput(basemap: GeoMapBasemapInput): CreatedMapLayer {\n if (basemap === 'osm') {\n const config: GeoMapOsmLayerConfig = {\n id: GEO_MAP_BASEMAP_LAYER_ID,\n title: 'OpenStreetMap',\n type: 'osm',\n visible: true,\n opacity: 1,\n zIndex: 0,\n basemap: true,\n group: 'base-map',\n };\n return this.createLayer(config);\n }\n\n const config: GeoMapXyzLayerConfig = {\n id: GEO_MAP_BASEMAP_LAYER_ID,\n title: basemap.title ?? 'XYZ basemap',\n type: 'xyz',\n url: basemap.url,\n attributions: basemap.attributions,\n maxZoom: basemap.maxZoom,\n visible: true,\n opacity: 1,\n zIndex: 0,\n basemap: true,\n group: 'base-map',\n };\n return this.createLayer(config);\n }\n\n createLayer(config: GeoMapLayerConfig): CreatedMapLayer {\n this.runtime.set(config.id, { id: config.id, status: 'loading' });\n\n let layer: BaseLayer;\n try {\n this.validateConfig(config);\n switch (config.type) {\n case 'osm':\n layer = this.createOsmLayer(config);\n break;\n case 'xyz':\n layer = this.createXyzLayer(config);\n break;\n case 'wms':\n layer = this.createWmsLayer(config);\n break;\n case 'wmts':\n layer = this.createWmtsLayer(config);\n break;\n case 'geojson':\n layer = this.createGeoJsonLayer(config);\n break;\n case 'vector':\n layer = this.createVectorLayer(config);\n break;\n default: {\n const _exhaustive: never = config;\n throw new Error(`Unsupported layer type: ${JSON.stringify(_exhaustive)}`);\n }\n }\n this.applyCommonOptions(layer, config);\n this.wireSourceStatus(config.id, layer);\n this.runtime.set(config.id, { id: config.id, status: 'ready' });\n } catch (err) {\n const message = err instanceof Error ? err.message : String(err);\n console.error(`[GeoMapLayerService] Failed to create layer \"${config.id}\"`, err);\n this.runtime.set(config.id, {\n id: config.id,\n status: 'error',\n errorMessage: message,\n });\n // Placeholder invisible layer so callers can still track id\n layer = new VectorLayer({\n source: new VectorSource(),\n visible: false,\n });\n this.applyCommonOptions(layer, { ...config, visible: false });\n }\n\n return { id: config.id, config, layer };\n }\n\n /**\n * Apply visibility/opacity/zIndex without recreating the OL layer.\n * Returns true when structural fields changed and the layer should be recreated.\n */\n needsRecreate(previous: GeoMapLayerConfig, next: GeoMapLayerConfig): boolean {\n if (previous.type !== next.type || previous.id !== next.id) {\n return true;\n }\n switch (next.type) {\n case 'osm':\n return false;\n case 'xyz':\n return (\n (previous as GeoMapXyzLayerConfig).url !== next.url ||\n (previous as GeoMapXyzLayerConfig).maxZoom !== next.maxZoom\n );\n case 'wms':\n return (\n (previous as GeoMapWmsLayerConfig).url !== next.url ||\n JSON.stringify((previous as GeoMapWmsLayerConfig).params) !==\n JSON.stringify(next.params) ||\n (previous as GeoMapWmsLayerConfig).layerName !== next.layerName\n );\n case 'wmts':\n return (\n (previous as GeoMapWmtsLayerConfig).url !== next.url ||\n (previous as GeoMapWmtsLayerConfig).layer !== next.layer ||\n (previous as GeoMapWmtsLayerConfig).matrixSet !== next.matrixSet\n );\n case 'geojson':\n return (\n JSON.stringify((previous as GeoMapGeoJsonLayerConfig).data) !==\n JSON.stringify(next.data) ||\n (previous as GeoMapGeoJsonLayerConfig).dataProjection !== next.dataProjection\n );\n case 'vector':\n return (previous as GeoMapVectorLayerConfig).features !== next.features;\n default:\n return true;\n }\n }\n\n patchLayer(layer: BaseLayer, config: GeoMapLayerConfig): void {\n layer.setVisible(config.visible ?? true);\n layer.setOpacity(config.opacity ?? 1);\n if (config.zIndex != null) {\n layer.setZIndex(config.zIndex);\n }\n if (config.minZoom != null) {\n layer.setMinZoom(config.minZoom);\n }\n if (config.maxZoom != null) {\n layer.setMaxZoom(config.maxZoom);\n }\n layer.set(LAYER_BASEMAP_KEY, !!config.basemap);\n layer.set(LAYER_GROUP_KEY, config.group ?? '');\n layer.set(LAYER_QUERYABLE_KEY, !!config.queryable);\n }\n\n setVisible(layer: BaseLayer, visible: boolean): void {\n layer.setVisible(visible);\n }\n\n setOpacity(layer: BaseLayer, opacity: number): void {\n const clamped = Math.min(1, Math.max(0, opacity));\n layer.setOpacity(clamped);\n }\n\n getLayerId(layer: BaseLayer): string | undefined {\n const id = layer.get(LAYER_ID_KEY);\n return typeof id === 'string' ? id : undefined;\n }\n\n isBasemap(layer: BaseLayer): boolean {\n return !!layer.get(LAYER_BASEMAP_KEY);\n }\n\n resolveBasemapExclusive(\n layers: CreatedMapLayer[],\n activeBasemapId: string,\n ): void {\n for (const item of layers) {\n if (!item.config.basemap) {\n continue;\n }\n const visible = item.id === activeBasemapId;\n item.layer.setVisible(visible);\n item.config = { ...item.config, visible };\n }\n }\n\n private validateConfig(config: GeoMapLayerConfig): void {\n if (!config.id?.trim()) {\n throw new Error('Layer config requires a non-empty id.');\n }\n if (config.type === 'xyz' && !config.url?.trim()) {\n throw new Error(`XYZ layer \"${config.id}\" is missing url.`);\n }\n if (config.type === 'wms') {\n if (!config.url?.trim()) {\n throw new Error(`WMS layer \"${config.id}\" is missing url.`);\n }\n const layersParam =\n config.layerName ??\n (config.params['LAYERS'] != null ? String(config.params['LAYERS']) : '');\n if (!layersParam) {\n throw new Error(\n `WMS layer \"${config.id}\" needs layerName or params.LAYERS.`,\n );\n }\n }\n if (config.type === 'wmts') {\n if (!config.url?.trim() || !config.layer?.trim() || !config.matrixSet?.trim()) {\n throw new Error(\n `WMTS layer \"${config.id}\" requires url, layer, and matrixSet.`,\n );\n }\n }\n if (config.type === 'geojson' && config.data == null) {\n throw new Error(`GeoJSON layer \"${config.id}\" is missing data.`);\n }\n }\n\n private applyCommonOptions(layer: BaseLayer, config: GeoMapLayerConfig): void {\n layer.set(LAYER_ID_KEY, config.id);\n layer.set(LAYER_BASEMAP_KEY, !!config.basemap);\n layer.set(LAYER_GROUP_KEY, config.group ?? '');\n layer.set(LAYER_QUERYABLE_KEY, !!config.queryable);\n layer.setVisible(config.visible ?? true);\n layer.setOpacity(config.opacity ?? 1);\n if (config.zIndex != null) {\n layer.setZIndex(config.zIndex);\n }\n if (config.minZoom != null) {\n layer.setMinZoom(config.minZoom);\n }\n if (config.maxZoom != null) {\n layer.setMaxZoom(config.maxZoom);\n }\n }\n\n private wireSourceStatus(layerId: string, layer: BaseLayer): void {\n if (!(layer instanceof TileLayer)) {\n return;\n }\n const source = layer.getSource();\n if (!source) {\n return;\n }\n\n source.on('tileloaderror', () => {\n console.warn(`[GeoMapLayerService] Tile error on layer \"${layerId}\"`);\n this.runtime.set(layerId, {\n id: layerId,\n status: 'error',\n errorMessage: 'Không tải được dữ liệu lớp bản đồ.',\n });\n });\n\n source.on('tileloadend', () => {\n const current = this.runtime.get(layerId);\n if (current?.status === 'error') {\n return;\n }\n this.runtime.set(layerId, { id: layerId, status: 'ready' });\n });\n }\n\n private createOsmLayer(_config: GeoMapOsmLayerConfig): TileLayer<OSM> {\n return new TileLayer({\n source: new OSM(),\n });\n }\n\n private createXyzLayer(config: GeoMapXyzLayerConfig): TileLayer<XYZ> {\n return new TileLayer({\n source: new XYZ({\n url: config.url,\n attributions: config.attributions,\n maxZoom: config.maxZoom,\n crossOrigin: config.crossOrigin ?? 'anonymous',\n }),\n });\n }\n\n private createWmsLayer(config: GeoMapWmsLayerConfig): TileLayer<TileWMS> {\n const layers =\n config.layerName ??\n (config.params['LAYERS'] != null ? String(config.params['LAYERS']) : '');\n const params: Record<string, string | number | boolean> = {\n ...config.params,\n LAYERS: layers,\n };\n return new TileLayer({\n source: new TileWMS({\n url: config.url,\n params,\n serverType: config.serverType,\n crossOrigin: config.crossOrigin ?? 'anonymous',\n projection: config.projection as ProjectionLike | undefined,\n }),\n });\n }\n\n private createWmtsLayer(config: GeoMapWmtsLayerConfig): TileLayer<WMTS> {\n const projectionCode = config.projection ?? 'EPSG:3857';\n this.projection.ensureRegistered(projectionCode);\n const projection = getProjection(projectionCode);\n if (!projection) {\n throw new Error(`WMTS projection \"${projectionCode}\" is not available.`);\n }\n const projectionExtent = projection.getExtent();\n if (!projectionExtent) {\n throw new Error(\n `WMTS projection \"${projectionCode}\" has no extent; provide a custom tile grid in a later phase.`,\n );\n }\n const size = getWidth(projectionExtent) / 256;\n const resolutions: number[] = [];\n const matrixIds: string[] = [];\n for (let z = 0; z < 20; z += 1) {\n resolutions[z] = size / Math.pow(2, z);\n matrixIds[z] = String(z);\n }\n\n return new TileLayer({\n source: new WMTS({\n url: config.url,\n layer: config.layer,\n matrixSet: config.matrixSet,\n format: config.format ?? 'image/png',\n style: config.style ?? '',\n projection: projectionCode,\n crossOrigin: config.crossOrigin ?? 'anonymous',\n tileGrid: new WMTSTileGrid({\n origin: getTopLeft(projectionExtent),\n resolutions,\n matrixIds,\n }),\n }),\n });\n }\n\n private createGeoJsonLayer(config: GeoMapGeoJsonLayerConfig): VectorLayer<VectorSource> {\n const format = new GeoJSON();\n const source = new VectorSource();\n const featureProjection = config.featureProjection ?? 'EPSG:3857';\n const dataProjection = config.dataProjection ?? 'EPSG:4326';\n\n if (typeof config.data === 'string') {\n // URL — let VectorSource load asynchronously\n const urlSource = new VectorSource({\n url: config.data,\n format: new GeoJSON({\n dataProjection,\n featureProjection,\n }),\n });\n urlSource.on('featuresloaderror', () => {\n console.error(`[GeoMapLayerService] GeoJSON load error \"${config.id}\"`);\n this.runtime.set(config.id, {\n id: config.id,\n status: 'error',\n errorMessage: 'Không tải được GeoJSON.',\n });\n });\n return new VectorLayer({ source: urlSource });\n }\n\n try {\n const features = format.readFeatures(config.data, {\n dataProjection,\n featureProjection,\n }) as Feature<Geometry>[];\n source.addFeatures(features);\n } catch (err) {\n console.error(`[GeoMapLayerService] Invalid GeoJSON for \"${config.id}\"`, err);\n throw new Error(`GeoJSON không hợp lệ cho lớp \"${config.id}\".`);\n }\n\n return new VectorLayer({ source });\n }\n\n private createVectorLayer(config: GeoMapVectorLayerConfig): VectorLayer<VectorSource> {\n const source = new VectorSource({\n features: config.features ?? [],\n });\n return new VectorLayer({ source });\n }\n}\n","import { Injectable, inject } from '@angular/core';\nimport OlMap from 'ol/Map';\nimport View from 'ol/View';\nimport type { Coordinate } from 'ol/coordinate';\nimport { defaults as defaultControls } from 'ol/control/defaults';\nimport ScaleLine from 'ol/control/ScaleLine';\nimport MousePosition from 'ol/control/MousePosition';\nimport { createStringXY } from 'ol/coordinate';\nimport { unByKey } from 'ol/Observable';\nimport type { EventsKey } from 'ol/events';\nimport type Feature from 'ol/Feature';\nimport type Geometry from 'ol/geom/Geometry';\nimport GeoJSON from 'ol/format/GeoJSON';\nimport VectorLayer from 'ol/layer/Vector';\nimport VectorSource from 'ol/source/Vector';\nimport { transformExtent } from 'ol/proj';\nimport { Fill, Icon, Stroke, Style } from 'ol/style';\nimport type { StyleLike } from 'ol/style/Style';\nimport {\n GEO_MAP_BASEMAP_LAYER_ID,\n GEO_MAP_DEFAULT_MAX_ZOOM,\n GEO_MAP_DEFAULT_PROVINCE_EXTENT_4326,\n GEO_MAP_HIGHLIGHT_LAYER_ID,\n} from '../geo-map.constants';\nimport type {\n GeoMapBasemapInput,\n GeoMapClickEvent,\n GeoMapHighlightOptions,\n GeoMapLayerConfig,\n GeoMapViewChangeEvent,\n MapInitOptions,\n} from '../geo-map.types';\nimport {\n CreatedMapLayer,\n GeoMapLayerService,\n} from './geo-map-layer.service';\nimport { GeoMapProjectionService } from './geo-map-projection.service';\n\nexport interface GeoMapCreateOptions extends MapInitOptions {\n basemap?: GeoMapBasemapInput;\n layers?: GeoMapLayerConfig[];\n /** Show OL MousePosition control (raw; UI chrome may wrap later). */\n showMousePosition?: boolean;\n mousePositionProjection?: string;\n /** When false, hide built-in OL zoom (use `geo-map-zoom` instead). */\n showZoomControl?: boolean;\n}\n\n/**\n * Owns a single OpenLayers Map instance for the providing component injector.\n * Do not put Map/Layer objects into Angular template state.\n */\n@Injectable()\nexport class GeoMapService {\n private readonly layerService = inject(GeoMapLayerService);\n private readonly projection = inject(GeoMapProjectionService);\n\n private map: OlMap | null = null;\n private managedLayers = new Map<string, CreatedMapLayer>();\n private listenerKeys: EventsKey[] = [];\n private resizeObserver: ResizeObserver | null = null;\n private resizeCleanup: (() => void) | null = null;\n private activeBasemapId = GEO_MAP_BASEMAP_LAYER_ID;\n private highlightLayer: VectorLayer<VectorSource<Feature<Geometry>>> | null =\n null;\n private highlightSource: VectorSource<Feature<Geometry>> | null = null;\n\n getMap(): OlMap | null {\n return this.map;\n }\n\n isInitialized(): boolean {\n return this.map != null;\n }\n\n init(options: GeoMapCreateOptions): OlMap {\n if (this.map) {\n console.warn('[GeoMapService] Map already initialized; returning existing instance.');\n return this.map;\n }\n\n if (!options.target) {\n throw new Error('Map target element is required.');\n }\n const { width, height } = options.target.getBoundingClientRect();\n if (width === 0 || height === 0) {\n console.warn(\n '[GeoMapService] Map container has zero size; call updateSize() after layout.',\n );\n }\n\n this.projection.ensureRegistered(options.viewProjection);\n\n const controls = defaultControls({\n zoom: options.showZoomControl !== false,\n rotate: false,\n attribution: false,\n }).extend([new ScaleLine({ units: 'metric' })]);\n\n if (options.showMousePosition) {\n const mouseProj = options.mousePositionProjection ?? 'EPSG:4326';\n this.projection.ensureRegistered(mouseProj);\n controls.push(\n new MousePosition({\n coordinateFormat: createStringXY(mouseProj === 'EPSG:4326' ? 6 : 2),\n projection: mouseProj,\n className: 'geo-map__mouse-position',\n placeholder: '',\n }),\n );\n }\n\n const view = new View({\n center: options.center,\n zoom: options.zoom,\n minZoom: options.minZoom,\n maxZoom: options.maxZoom,\n projection: options.viewProjection,\n });\n\n this.map = new OlMap({\n target: options.target,\n view,\n controls,\n layers: [],\n });\n\n if (options.basemap != null) {\n const basemapCreated = this.layerService.createFromBasemapInput(options.basemap);\n this.addManagedLayer(basemapCreated);\n this.activeBasemapId = basemapCreated.id;\n }\n this.syncLayers(options.layers ?? [], { replaceBasemapShortcut: false });\n\n this.observeResize(options.target);\n // Ensure correct canvas size after paint\n queueMicrotask(() => this.updateSize());\n\n return this.map;\n }\n\n /**\n * Sync layer stack with configs. Preserves OL layers when only visibility/opacity change.\n */\n syncLayers(\n configs: GeoMapLayerConfig[],\n options?: { replaceBasemapShortcut?: boolean },\n ): void {\n if (!this.map) {\n return;\n }\n\n const nextIds = new Set(configs.map((c) => c.id));\n if (options?.replaceBasemapShortcut === false) {\n // Keep existing basemap shortcut layer unless configs include it.\n }\n\n // Remove obsolete (except reserved basemap shortcut when not in configs)\n for (const [id, managed] of this.managedLayers) {\n const keepBasemap =\n id === GEO_MAP_BASEMAP_LAYER_ID &&\n options?.replaceBasemapShortcut === false &&\n !nextIds.has(id);\n if (!nextIds.has(id) && !keepBasemap) {\n this.map.removeLayer(managed.layer);\n this.managedLayers.delete(id);\n }\n }\n\n // Sort by zIndex for predictable stacking\n const sorted = [...configs].sort(\n (a, b) => (a.zIndex ?? 0) - (b.zIndex ?? 0),\n );\n\n for (const config of sorted) {\n const existing = this.managedLayers.get(config.id);\n if (!existing) {\n const created = this.layerService.createLayer(config);\n this.addManagedLayer(created);\n continue;\n }\n\n if (this.layerService.needsRecreate(existing.config, config)) {\n this.map.removeLayer(existing.layer);\n const created = this.layerService.createLayer(config);\n this.addManagedLayer(created);\n } else {\n this.layerService.patchLayer(existing.layer, config);\n existing.config = config;\n }\n }\n\n this.enforceSingleBasemap();\n }\n\n setLayerVisibility(layerId: string, visible: boolean): void {\n const managed = this.managedLayers.get(layerId);\n if (!managed || !this.map) {\n return;\n }\n\n if (managed.config.basemap && visible) {\n this.activeBasemapId = layerId;\n this.layerService.resolveBasemapExclusive(\n [...this.managedLayers.values()],\n this.activeBasemapId,\n );\n return;\n }\n\n if (managed.config.basemap && !visible) {\n // Keep at least one basemap if possible\n const otherBasemap = [...this.managedLayers.values()].find(\n (item) => item.config.basemap && item.id !== layerId,\n );\n if (otherBasemap) {\n this.activeBasemapId = otherBasemap.id;\n this.layerService.resolveBasemapExclusive(\n [...this.managedLayers.values()],\n this.activeBasemapId,\n );\n }\n return;\n }\n\n this.layerService.setVisible(managed.layer, visible);\n managed.config = { ...managed.config, visible };\n }\n\n setLayerOpacity(layerId: string, opacity: number): void {\n const managed = this.managedLayers.get(layerId);\n if (!managed) {\n return;\n }\n this.layerService.setOpacity(managed.layer, opacity);\n managed.config = { ...managed.config, opacity };\n }\n\n getManagedLayers(): CreatedMapLayer[] {\n return [...this.managedLayers.values()];\n }\n\n setCenter(center: Coordinate, zoom?: number): void {\n const view = this.map?.getView();\n if (!view) {\n return;\n }\n const current = view.getCenter();\n const sameCenter =\n current != null &&\n current.length >= 2 &&\n Math.abs(current[0] - center[0]) < 1e-6 &&\n Math.abs(current[1] - center[1]) < 1e-6;\n if (!sameCenter) {\n view.setCenter(center);\n }\n if (zoom != null) {\n this.setZoom(zoom);\n }\n }\n\n setZoom(zoom: number): void {\n const view = this.map?.getView();\n if (!view) {\n return;\n }\n const current = view.getZoom();\n if (current != null && Math.abs(current - zoom) < 1e-6) {\n return;\n }\n view.setZoom(zoom);\n }\n\n getZoom(): number | undefined {\n return this.map?.getView().getZoom() ?? undefined;\n }\n\n zoomBy(delta: number): void {\n const view = this.map?.getView();\n if (!view) {\n return;\n }\n const zoom = view.getZoom();\n if (zoom == null) {\n return;\n }\n const next = Math.min(\n view.getMaxZoom() ?? GEO_MAP_DEFAULT_MAX_ZOOM,\n Math.max(view.getMinZoom() ?? 0, zoom + delta),\n );\n view.animate({ zoom: next, duration: 180 });\n }\n\n /** Replace the shortcut basemap layer (`GEO_MAP_BASEMAP_LAYER_ID`). */\n setBasemap(basemap: GeoMapBasemapInput): void {\n if (!this.map) {\n return;\n }\n const existing = this.managedLayers.get(GEO_MAP_BASEMAP_LAYER_ID);\n if (existing) {\n this.map.removeLayer(existing.layer);\n this.managedLayers.delete(GEO_MAP_BASEMAP_LAYER_ID);\n }\n const created = this.layerService.createFromBasemapInput(basemap);\n this.addManagedLayer(created);\n this.activeBasemapId = created.id;\n this.enforceSingleBasemap();\n // Basemap should sit under overlays\n created.layer.setZIndex(created.config.zIndex ?? 0);\n }\n\n fitExtent(\n extent: [number, number, number, number],\n options?: { padding?: number[]; maxZoom?: number; duration?: number },\n ): void {\n const view = this.map?.getView();\n if (!view) {\n return;\n }\n view.fit(extent, {\n padding: options?.padding ?? [48, 48, 48, 48],\n maxZoom: options?.maxZoom ?? 14,\n duration: options?.duration ?? 250,\n });\n }\n\n /** Fit lon/lat extent (EPSG:4326) after transforming to the active view projection. */\n fitLonLatExtent(\n extent4326: [number, number, number, number],\n options?: { padding?: number[]; maxZoom?: number; duration?: number },\n ): void {\n const map = this.map;\n if (!map) {\n return;\n }\n const viewProj = map.getView().getProjection().getCode();\n const extent = transformExtent(extent4326, 'EPSG:4326', viewProj) as [\n number,\n number,\n number,\n number,\n ];\n this.fitExtent(extent, options);\n }\n\n /**\n * Fit the default (or provided) province extent — TCQH.14 “xem toàn tỉnh”.\n * Distinct from browser fullscreen (TCQH.15).\n */\n fitProvince(\n extent4326: readonly [number, number, number, number] = GEO_MAP_DEFAULT_PROVINCE_EXTENT_4326,\n options?: { padding?: number[]; maxZoom?: number; duration?: number },\n ): void {\n this.fitLonLatExtent([...extent4326] as [number, number, number, number], {\n maxZoom: 11,\n duration: 400,\n padding: [56, 56, 56, 56],\n ...options,\n });\n }\n\n /**\n * Highlight search / select results (TCQH.7–12). Pass GeoJSON Feature or FeatureCollection.\n */\n setHighlightFromGeoJson(\n data: object,\n options?: GeoMapHighlightOptions,\n ): void {\n const map = this.map;\n if (!map) {\n return;\n }\n this.ensureHighlightLayer();\n const viewProj = map.getView().getProjection().getCode();\n const format = new GeoJSON();\n let features: Feature<Geometry>[] = [];\n try {\n features = format.readFeatures(data, {\n dataProjection: options?.dataProjection ?? 'EPSG:4326',\n featureProjection: viewProj,\n }) as Feature<Geometry>[];\n } catch (err) {\n console.error('[GeoMapService] Invalid highlight GeoJSON', err);\n return;\n }\n this.setHighlightFeatures(features, options);\n }\n\n setHighlightFeatures(\n features: Feature<Geometry>[],\n options?: GeoMapHighlightOptions,\n ): void {\n if (!this.map) {\n return;\n }\n this.ensureHighlightLayer();\n this.highlightSource?.clear();\n if (features.length) {\n this.highlightSource?.addFeatures(features);\n }\n const shouldFit = options?.fit !== false && features.length > 0;\n if (shouldFit && this.highlightSource) {\n const extent = this.highlightSource.getExtent();\n if (\n extent &&\n Number.isFinite(extent[0]) &&\n Number.isFinite(extent[1]) &&\n Number.isFinite(extent[2]) &&\n Number.isFinite(extent[3])\n ) {\n this.fitExtent(extent as [number, number, number, number], {\n maxZoom: 17,\n duration: 280,\n ...options?.fitOptions,\n });\n }\n }\n }\n\n clearHighlight(): void {\n this.highlightSource?.clear();\n }\n\n updateSize(): void {\n this.map?.updateSize();\n }\n\n onClick(handler: (event: GeoMapClickEvent) => void): () => void {\n const map = this.map;\n if (!map) {\n return () => undefined;\n }\n\n const key = map.on('singleclick', (evt) => {\n const coordinate = evt.coordinate;\n const lonLat = this.projection.transformCoordinate(\n coordinate,\n map.getView().getProjection().getCode(),\n 'EPSG:4326',\n );\n handler({\n coordinate: [...coordinate],\n lonLat,\n pixel: [evt.pixel[0], evt.pixel[1]],\n originalEvent: evt.originalEvent as UIEvent,\n });\n });\n this.listenerKeys.push(key);\n return () => {\n unByKey(key);\n this.listenerKeys = this.listenerKeys.filter((k) => k !== key);\n };\n }\n\n /**\n * Emit after the view settles (`moveend`), not on every resolution tick —\n * continuous emitters flood Storybook Actions / host bindings and cause UI flicker.\n */\n onViewChange(handler: (event: GeoMapViewChangeEvent) => void): () => void {\n const map = this.map;\n if (!map) {\n return () => undefined;\n }\n\n const view = map.getView();\n const emit = (): void => {\n handler({\n center: [...(view.getCenter() ?? [0, 0])],\n zoom: view.getZoom() ?? 0,\n resolution: view.getResolution() ?? 0,\n rotation: view.getRotation(),\n });\n };\n const key = map.on('moveend', emit);\n this.listenerKeys.push(key);\n return () => {\n unByKey(key);\n this.listenerKeys = this.listenerKeys.filter((k) => k !== key);\n };\n }\n\n /**\n * Tear down map, listeners, and resize observer. Safe to call multiple times.\n */\n destroy(): void {\n unByKey(this.listenerKeys);\n this.listenerKeys = [];\n\n this.resizeCleanup?.();\n this.resizeCleanup = null;\n this.resizeObserver = null;\n\n if (this.highlightLayer && this.map) {\n this.map.removeLayer(this.highlightLayer);\n }\n this.highlightLayer = null;\n this.highlightSource = null;\n\n if (this.map) {\n this.map.setTarget(undefined);\n this.map.dispose();\n this.map = null;\n }\n this.managedLayers.clear();\n }\n\n private ensureHighlightLayer(): void {\n const map = this.map;\n if (!map) {\n return;\n }\n if (this.highlightLayer && this.highlightSource) {\n return;\n }\n this.highlightSource = new VectorSource();\n this.highlightLayer = new VectorLayer({\n source: this.highlightSource,\n properties: { geoLayerId: GEO_MAP_HIGHLIGHT_LAYER_ID },\n style: this.createHighlightStyle(),\n zIndex: 450,\n updateWhileAnimating: true,\n updateWhileInteracting: true,\n });\n map.addLayer(this.highlightLayer);\n }\n\n private createHighlightStyle(): StyleLike {\n const stroke = this.cssColor('--geo-color-warning-default', '#f59e0b');\n const fill = this.cssColor('--geo-color-warning-default', '#f59e0b', 0.22);\n const pin = this.cssColor('--geo-color-error-default', '#dc2626');\n const pinIcon = this.createPinIconDataUri(pin);\n\n const areaStyle = new Style({\n fill: new Fill({ color: fill }),\n stroke: new Stroke({\n color: stroke,\n width: 3,\n }),\n });\n\n const pointStyle = new Style({\n image: new Icon({\n anchor: [0.5, 1],\n anchorXUnits: 'fraction',\n anchorYUnits: 'fraction',\n src: pinIcon,\n scale: 1,\n }),\n });\n\n return (feature) => {\n const type = feature.getGeometry()?.getType();\n if (type === 'Point' || type === 'MultiPoint') {\n return pointStyle;\n }\n return areaStyle;\n };\n }\n\n /** Inline SVG map pin for clicked / selected points. */\n private createPinIconDataUri(color: string): string {\n const svg = `\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"32\" height=\"40\" viewBox=\"0 0 32 40\">\n <path fill=\"${color}\" stroke=\"#ffffff\" stroke-width=\"1.75\"\n d=\"M16 1C9.373 1 4 6.373 4 13c0 8.284 12 26 12 26s12-17.716 12-26C28 6.373 22.627 1 16 1z\"/>\n <circle cx=\"16\" cy=\"13\" r=\"4.5\" fill=\"#ffffff\"/>\n </svg>\n `.trim();\n return `data:image/svg+xml;charset=utf-8,${encodeURIComponent(svg)}`;\n }\n\n /** Resolve a design token for OpenLayers canvas styles. */\n private cssColor(token: string, fallback: string, alpha?: number): string {\n if (typeof document === 'undefined') {\n return alpha == null ? fallback : this.withAlpha(fallback, alpha);\n }\n const raw = getComputedStyle(document.documentElement)\n .getPropertyValue(token)\n .trim();\n const color = raw || fallback;\n return alpha == null ? color : this.withAlpha(color, alpha);\n }\n\n private withAlpha(color: string, alpha: number): string {\n if (color.startsWith('rgba(') || color.startsWith('hsla(')) {\n return color;\n }\n if (color.startsWith('rgb(')) {\n return color.replace('rgb(', 'rgba(').replace(')', `, ${alpha})`);\n }\n if (color.startsWith('#')) {\n const hex = color.slice(1);\n const full =\n hex.length === 3\n ? hex\n .split('')\n .map((c) => c + c)\n .join('')\n : hex;\n if (full.length !== 6) {\n return color;\n }\n const r = parseInt(full.slice(0, 2), 16);\n const g = parseInt(full.slice(2, 4), 16);\n const b = parseInt(full.slice(4, 6), 16);\n return `rgba(${r}, ${g}, ${b}, ${alpha})`;\n }\n return color;\n }\n\n private addManagedLayer(created: CreatedMapLayer): void {\n if (!this.map) {\n return;\n }\n this.managedLayers.set(created.id, created);\n this.map.addLayer(created.layer);\n }\n\n private enforceSingleBasemap(): void {\n const basemaps = [...this.managedLayers.values()].filter((item) => item.config.basemap);\n if (basemaps.length === 0) {\n return;\n }\n const active =\n basemaps.find((item) => item.id === this.activeBasemapId && (item.config.visible ?? true)) ??\n basemaps.find((item) => item.config.visible ?? true) ??\n basemaps[0];\n this.activeBasemapId = active.id;\n this.layerService.resolveBasemapExclusive(basemaps, this.activeBasemapId);\n }\n\n private observeResize(target: HTMLElement): void {\n if (typeof ResizeObserver === 'undefined') {\n return;\n }\n let lastWidth = -1;\n let lastHeight = -1;\n let rafId: number | null = null;\n\n this.resizeObserver = new ResizeObserver((entries) => {\n const rect = entries[0]?.contentRect;\n if (!rect) {\n return;\n }\n const width = Math.round(rect.width);\n const height = Math.round(rect.height);\n if (width === 0 || height === 0) {\n return;\n }\n if (width === lastWidth && height === lastHeight) {\n return;\n }\n lastWidth = width;\n lastHeight = height;\n if (rafId != null) {\n cancelAnimationFrame(rafId);\n }\n rafId = requestAnimationFrame(() => {\n rafId = null;\n this.updateSize();\n });\n });\n this.resizeObserver.observe(target);\n\n this.resizeCleanup = () => {\n if (rafId != null) {\n cancelAnimationFrame(rafId);\n rafId = null;\n }\n this.resizeObserver?.disconnect();\n this.resizeObserver = null;\n };\n }\n}\n","import {\n afterNextRender,\n ChangeDetectionStrategy,\n Component,\n effect,\n ElementRef,\n inject,\n input,\n OnDestroy,\n output,\n viewChild,\n ViewEncapsulation,\n} from '@angular/core';\nimport {\n GEO_MAP_DEFAULT_CENTER,\n GEO_MAP_DEFAULT_HEIGHT,\n GEO_MAP_DEFAULT_MAX_ZOOM,\n GEO_MAP_DEFAULT_MIN_ZOOM,\n GEO_MAP_DEFAULT_VIEW_PROJECTION,\n GEO_MAP_DEFAULT_ZOOM,\n} from './geo-map.constants';\nimport { GeoMapController } from './geo-map.controller';\nimport type {\n GeoMapBasemapInput,\n GeoMapClickEvent,\n GeoMapLayerConfig,\n GeoMapViewChangeEvent,\n ProjectionConfig,\n} from './geo-map.types';\nimport { GeoMapLayerService } from './services/geo-map-layer.service';\nimport { GeoMapProjectionService } from './services/geo-map-projection.service';\nimport { GeoMapService } from './services/geo-map.service';\n\n/**\n * OpenLayers map host with basemap, typed layers, and GeoMapController.\n *\n * @summary OpenLayers map host with basemap, typed layers, and GeoMapController.\n * @whenToUse Any map viewport (portal quy hoạch, tra cứu thửa). Peers: ol, proj4.\n * @doNotUseWhen Non-map charting — use dashboard libs.\n */\n@Component({\n selector: 'geo-map',\n standalone: true,\n imports: [],\n templateUrl: './geo-map.component.html',\n styleUrl: './geo-map.component.scss',\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [GeoMapService, GeoMapLayerService],\n host: {\n class: 'geo-map-host',\n '[style.height]': 'height()',\n },\n})\nexport class GeoMapComponent implements OnDestroy {\n private readonly mapService = inject(GeoMapService);\n private readonly layerService = inject(GeoMapLayerService);\n private readonly projectionService = inject(GeoMapProjectionService);\n\n private readonly viewport = viewChild.required<ElementRef<HTMLElement>>('viewport');\n\n /** Map center in view projection (default Web Mercator Đà Lạt area). */\n readonly center = input<number[]>([...GEO_MAP_DEFAULT_CENTER]);\n readonly zoom = input(GEO_MAP_DEFAULT_ZOOM);\n readonly minZoom = input(GEO_MAP_DEFAULT_MIN_ZOOM);\n readonly maxZoom = input(GEO_MAP_DEFAULT_MAX_ZOOM);\n readonly viewProjection = input(GEO_MAP_DEFAULT_VIEW_PROJECTION);\n readonly basemap = input<GeoMapBasemapInput>('osm');\n readonly layers = input<GeoMapLayerConfig[]>([]);\n readonly height = input(GEO_MAP_DEFAULT_HEIGHT);\n /**\n * When true, custom projections listed in `projections` are registered before map create.\n * Built-in EPSG:4326 / EPSG:3857 never need registration.\n * VN-2000 definitions must be supplied via `projections` — never invented.\n */\n readonly registerProjections = input(true);\n /** Custom CRS definitions (e.g. local VN-2000 from environment). */\n readonly projections = input<ProjectionConfig[]>([]);\n readonly showMousePosition = input(false);\n readonly mousePositionProjection = input('EPSG:4326');\n /** When false, hide built-in OL zoom control (prefer `geo-map-zoom`). */\n readonly showZoomControl = input(true);\n\n readonly mapReady = output<GeoMapController>();\n readonly mapClick = output<GeoMapClickEvent>();\n readonly viewChange = output<GeoMapViewChangeEvent>();\n readonly initError = output<string>();\n\n private controller: GeoMapController | null = null;\n private unsubscribers: Array<() => void> = [];\n private initAttempted = false;\n private lastSyncedCenterKey = '';\n private lastSyncedZoom: number | null = null;\n private lastSyncedLayersRef: GeoMapLayerConfig[] | null = null;\n\n constructor() {\n afterNextRender(() => {\n this.bootstrapMap();\n });\n\n effect(() => {\n const center = this.center();\n const zoom = this.zoom();\n if (!this.mapService.isInitialized()) {\n return;\n }\n const centerKey = `${center[0]},${center[1]}`;\n if (centerKey === this.lastSyncedCenterKey && zoom === this.lastSyncedZoom) {\n return;\n }\n this.lastSyncedCenterKey = centerKey;\n this.lastSyncedZoom = zoom;\n this.mapService.setCenter(center, zoom);\n });\n\n effect(() => {\n const configs = this.layers();\n if (!this.mapService.isInitialized()) {\n return;\n }\n // Skip identical reference (Storybook / parent re-renders).\n if (configs === this.lastSyncedLayersRef) {\n return;\n }\n this.lastSyncedLayersRef = configs;\n this.mapService.syncLayers(configs, { replaceBasemapShortcut: false });\n });\n }\n\n ngOnDestroy(): void {\n for (const unsub of this.unsubscribers) {\n unsub();\n }\n this.unsubscribers = [];\n this.mapService.destroy();\n this.controller = null;\n }\n\n private bootstrapMap(): void {\n if (this.initAttempted) {\n return;\n }\n this.initAttempted = true;\n\n try {\n if (this.registerProjections()) {\n for (const config of this.projections()) {\n if (!this.projectionService.isRegistered(config.code)) {\n this.projectionService.registerProjection(config);\n }\n }\n }\n\n const el = this.viewport().nativeElement;\n const center = this.center();\n const zoom = this.zoom();\n this.lastSyncedCenterKey = `${center[0]},${center[1]}`;\n this.lastSyncedZoom = zoom;\n this.lastSyncedLayersRef = this.layers();\n\n this.mapService.init({\n target: el,\n center,\n zoom,\n minZoom: this.minZoom(),\n maxZoom: this.maxZoom(),\n viewProjection: this.viewProjection(),\n basemap: this.basemap(),\n layers: this.lastSyncedLayersRef,\n showMousePosition: this.showMousePosition(),\n mousePositionProjection: this.mousePositionProjection(),\n showZoomControl: this.showZoomControl(),\n });\n\n this.controller = new GeoMapController(this.mapService, this.layerService);\n\n this.unsubscribers.push(\n this.mapService.onClick((event) => this.mapClick.emit(event)),\n this.mapService.onViewChange((event) => this.viewChange.emit(event)),\n );\n\n this.mapReady.emit(this.controller);\n } catch (err) {\n const message =\n err instanceof Error\n ? err.message\n : 'Không khởi tạo được bản đồ. Vui lòng thử lại.';\n console.error('[GeoMapComponent] init failed', err);\n this.initError.emit(message);\n }\n }\n}\n","<div\n #viewport\n class=\"geo-map__viewport\"\n role=\"application\"\n aria-label=\"Bản đồ quy hoạch sử dụng đất\"\n></div>\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n input,\n model,\n output,\n ViewEncapsulation,\n} from '@angular/core';\nimport { NzToolTipModule } from 'ng-zorro-antd/tooltip';\nimport { GeoIconComponent } from '../../../geo-icon/geo-icon.component';\nimport { GEO_MAP_DEFAULT_TOOLBAR_ACTIONS } from '../../geo-map.constants';\nimport { GeoMapController } from '../../geo-map.controller';\nimport type { GeoMapToolbarAction } from '../../geo-map.types';\n\n/**\n * Floating pill action bar for map chrome (measure / snapshot / …).\n *\n * @summary Floating pill action bar (measure, traffic, …).\n * @whenToUse Top-center map chrome like cổng công khai; pass actions + (actionClick).\n * @doNotUseWhen Need only one tool — use individual geo-map-* components.\n */\n@Component({\n selector: 'geo-map-toolbar',\n standalone: true,\n imports: [GeoIconComponent, NzToolTipModule],\n templateUrl: './geo-map-toolbar.component.html',\n styleUrl: './geo-map-toolbar.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {\n class: 'geo-map-toolbar-host',\n },\n})\nexport class GeoMapToolbarComponent {\n readonly controller = input<GeoMapController | null>(null);\n /** When empty, uses built-in portal action set. */\n readonly actions = input<GeoMapToolbarAction[]>([]);\n readonly compact = input(false);\n /** Two-way checked map keyed by action id (for checkbox-style actions). */\n readonly checkedMap = model<Record<string, boolean>>({});\n\n readonly actionClick = output<GeoMapToolbarAction>();\n readonly actionToggle = output<{\n action: GeoMapToolbarAction;\n checked: boolean;\n }>();\n\n readonly resolvedActions = computed(() => {\n const supplied = this.actions();\n return supplied.length ? supplied : GEO_MAP_DEFAULT_TOOLBAR_ACTIONS;\n });\n\n tooltipOf(action: GeoMapToolbarAction): string {\n return action.tooltip || action.label || action.id;\n }\n\n isToggleAction(action: GeoMapToolbarAction): boolean {\n if (action.checked !== undefined) {\n return true;\n }\n return Object.prototype.hasOwnProperty.call(this.checkedMap(), action.id);\n }\n\n isChecked(action: GeoMapToolbarAction): boolean {\n const map = this.checkedMap();\n if (Object.prototype.hasOwnProperty.call(map, action.id)) {\n return !!map[action.id];\n }\n return !!action.checked;\n }\n\n onActionClick(action: GeoMapToolbarAction): void {\n if (action.disabled) {\n return;\n }\n\n if (this.isToggleAction(action)) {\n const next = !this.isChecked(action);\n this.checkedMap.update((prev) => ({ ...prev, [action.id]: next }));\n this.actionToggle.emit({ action, checked: next });\n return;\n }\n\n this.actionClick.emit(action);\n }\n}\n","<div\n class=\"geo-map-toolbar\"\n [class.geo-map-toolbar--compact]=\"compact()\"\n role=\"toolbar\"\n aria-label=\"Thao tác bản đồ\"\n>\n @for (action of resolvedActions(); track action.id) {\n <span\n class=\"geo-map-toolbar__tip\"\n [nz-tooltip]=\"tooltipOf(action)\"\n nzTooltipPlacement=\"bottom\"\n >\n <button\n type=\"button\"\n class=\"geo-map-toolbar__btn\"\n [class.geo-map-toolbar__btn--icon-only]=\"\n action.iconOnly || !action.label || compact()\n \"\n [class.geo-map-toolbar__btn--active]=\"action.active\"\n [class.geo-map-toolbar__btn--checked]=\"isChecked(action)\"\n [class.geo-map-toolbar__btn--primary]=\"action.variant === 'primary'\"\n [disabled]=\"action.disabled\"\n [attr.aria-label]=\"tooltipOf(action)\"\n [attr.aria-pressed]=\"isToggleAction(action) ? isChecked(action) : null\"\n (click)=\"onActionClick(action)\"\n >\n @if (action.iconSrc) {\n <img\n class=\"geo-map-toolbar__icon-img\"\n [class.geo-map-toolbar__icon-img--home]=\"action.variant === 'primary'\"\n [src]=\"action.iconSrc\"\n alt=\"\"\n draggable=\"false\"\n />\n } @else if (action.icon) {\n <geo-icon [type]=\"action.icon\" size=\"md\" />\n }\n @if (action.label && !action.iconOnly && !compact()) {\n <span class=\"geo-map-toolbar__label\">{{ action.label }}</span>\n }\n </button>\n </span>\n }\n</div>\n","import type { OverlayContainer } from '@angular/cdk/overlay';\n\n/**\n * CDK / ng-zorro overlays (drawer, dropdown, tooltip, modal) mount under\n * `.cdk-overlay-container` on `document.body`. While an ancestor is in\n * Fullscreen API mode, only its descendants are painted — so overlays on\n * `body` become invisible / untouchable.\n *\n * Call on `fullscreenchange` to move the overlay container into the\n * fullscreen element, then restore to `body` when exiting.\n */\nexport function syncOverlayContainerToFullscreen(\n overlayContainer: OverlayContainer,\n scopeRoot?: HTMLElement | null,\n): void {\n if (typeof document === 'undefined') {\n return;\n }\n\n const container = overlayContainer.getContainerElement();\n const fullscreen = document.fullscreenElement;\n\n if (!(fullscreen instanceof HTMLElement)) {\n restoreOverlayContainerElementToBody(container);\n return;\n }\n\n // Only remount when this map shell (or a descendant) owns fullscreen.\n if (\n scopeRoot &&\n fullscreen !== scopeRoot &&\n !scopeRoot.contains(fullscreen) &&\n !fullscreen.contains(scopeRoot)\n ) {\n restoreOverlayContainerElementToBody(container);\n return;\n }\n\n if (container.parentElement !== fullscreen) {\n fullscreen.appendChild(container);\n }\n}\n\n/** Always put the CDK overlay host back on `document.body`. */\nexport function restoreOverlayContainerToBody(\n overlayContainer: OverlayContainer,\n): void {\n if (typeof document === 'undefined') {\n return;\n }\n restoreOverlayContainerElementToBody(\n overlayContainer.getContainerElement(),\n );\n}\n\nfunction restoreOverlayContainerElementToBody(container: HTMLElement): void {\n if (typeof document === 'undefined') {\n return;\n }\n if (container.parentElement !== document.body) {\n document.body.appendChild(container);\n }\n}\n","import type OlMap from 'ol/Map';\nimport type Interaction from 'ol/interaction/Interaction';\nimport DoubleClickZoom from 'ol/interaction/DoubleClickZoom';\nimport DragPan from 'ol/interaction/DragPan';\nimport DragZoom from 'ol/interaction/DragZoom';\nimport PinchZoom from 'ol/interaction/PinchZoom';\n\ntype PausedInteraction = { interaction: Interaction; active: boolean };\n\n/**\n * Temporarily disables map navigation interactions that conflict with\n * Draw / DragBox tools. Call `resume()` when the tool ends.\n */\nexport function pauseConflictingInteractions(\n map: OlMap,\n options?: { dragPan?: boolean; doubleClickZoom?: boolean },\n): () => void {\n const pauseDragPan = options?.dragPan !== false;\n const pauseDblClick = options?.doubleClickZoom !== false;\n const paused: PausedInteraction[] = [];\n\n map.getInteractions().forEach((interaction) => {\n const shouldPause =\n (pauseDragPan &&\n (interaction instanceof DragPan ||\n interaction instanceof DragZoom ||\n interaction instanceof PinchZoom)) ||\n (pauseDblClick && interaction instanceof DoubleClickZoom);\n\n if (shouldPause) {\n paused.push({ interaction, active: interaction.getActive() });\n interaction.setActive(false);\n }\n });\n\n return () => {\n for (const item of paused) {\n item.interaction.setActive(item.active);\n }\n };\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n DestroyRef,\n effect,\n ElementRef,\n inject,\n input,\n OnDestroy,\n signal,\n ViewEncapsulation,\n} from '@angular/core';\nimport { OverlayContainer } from '@angular/cdk/overlay';\nimport { NzToolTipModule } from 'ng-zorro-antd/tooltip';\nimport { always as alwaysCondition } from 'ol/events/condition';\nimport { getCenter } from 'ol/extent';\nimport DragBox from 'ol/interaction/DragBox';\nimport { GeoIconComponent } from '../../../geo-icon/geo-icon.component';\nimport { syncOverlayContainerToFullscreen, restoreOverlayContainerToBody } from '../../utils/geo-map-fullscreen-overlay.util';\nimport { pauseConflictingInteractions } from '../../utils/geo-map-interactions.util';\nimport { GeoMapController } from '../../geo-map.controller';\n\ntype BoxZoomMode = 'none' | 'in' | 'out';\n\n/**\n * Stacked +/- zoom control for map chrome.\n *\n * @summary Stacked +/- zoom control.\n * @whenToUse Right-side map chrome.\n * @doNotUseWhen Browser/native scroll zoom only.\n */\n@Component({\n selector: 'geo-map-zoom',\n standalone: true,\n imports: [GeoIconComponent, NzToolTipModule],\n templateUrl: './geo-map-zoom.component.html',\n styleUrl: './geo-map-zoom.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: { class: 'geo-map-zoom-host' },\n})\nexport class GeoMapZoomComponent implements OnDestroy {\n private readonly destroyRef = inject(DestroyRef);\n private readonly host = inject(ElementRef<HTMLElement>);\n private readonly overlayContainer = inject(OverlayContainer);\n\n readonly controller = input<GeoMapController | null>(null);\n /** Show prev / next zoom + fullscreen + box zoom (UC-15). */\n readonly showNav = input(true);\n /** Show “xem toàn tỉnh” (TCQH.14 GD5) — fit province extent, not fullscreen. */\n readonly showFitProvince = input(true);\n /**\n * Province extent in EPSG:4326. Defaults to Lâm Đồng placeholder when omitted.\n */\n readonly provinceExtent = input<readonly [number, number, number, number] | null>(\n null,\n );\n /**\n * Element to put in Fullscreen API.\n * Defaults to closest `.geo-map-shell`, then the OL map target.\n */\n readonly fullscreenTarget = input<HTMLElement | null>(null);\n\n readonly boxMode = signal<BoxZoomMode>('none');\n readonly canZoomPrev = signal(false);\n readonly canZoomNext = signal(false);\n readonly isFullscreen = signal(false);\n\n /** Visited zoom levels; `historyIndex` points at the current level. */\n private readonly history = signal<number[]>([]);\n private readonly historyIndex = signal(-1);\n private navigatingHistory = false;\n private dragBox: DragBox | null = null;\n private resumeInteractions: (() => void) | null = null;\n private commitTimer: ReturnType<typeof setTimeout> | null = null;\n private readonly onFullscreenChange = (): void => {\n this.syncFullscreenState();\n };\n\n constructor() {\n this.destroyRef.onDestroy(() => {\n this.clearBoxZoom();\n document.removeEventListener('fullscreenchange', this.onFullscreenChange);\n // Ensure Storybook / next stories get overlays back on body.\n restoreOverlayContainerToBody(this.overlayContainer);\n });\n\n if (typeof document !== 'undefined') {\n document.addEventListener('fullscreenchange', this.onFullscreenChange);\n }\n\n effect(\n () => {\n const ctrl = this.controller();\n if (ctrl) {\n this.seedHistory(ctrl);\n }\n },\n { allowSignalWrites: true },\n );\n }\n\n ngOnDestroy(): void {\n if (this.commitTimer != null) {\n clearTimeout(this.commitTimer);\n }\n this.clearBoxZoom();\n document.removeEventListener('fullscreenchange', this.onFullscreenChange);\n }\n\n zoomIn(): void {\n this.runZoomAction((ctrl) => ctrl.zoomIn());\n }\n\n zoomOut(): void {\n this.runZoomAction((ctrl) => ctrl.zoomOut());\n }\n\n zoomPrev(): void {\n const ctrl = this.controller();\n if (!ctrl || !this.canZoomPrev()) {\n return;\n }\n this.clearBoxZoom();\n const nextIdx = this.historyIndex() - 1;\n this.navigatingHistory = true;\n this.historyIndex.set(nextIdx);\n ctrl.setZoom(this.history()[nextIdx]);\n this.navigatingHistory = false;\n this.refreshNavState();\n }\n\n zoomNext(): void {\n const ctrl = this.controller();\n if (!ctrl || !this.canZoomNext()) {\n return;\n }\n this.clearBoxZoom();\n const nextIdx = this.historyIndex() + 1;\n this.navigatingHistory = true;\n this.historyIndex.set(nextIdx);\n ctrl.setZoom(this.history()[nextIdx]);\n this.navigatingHistory = false;\n this.refreshNavState();\n }\n\n /** Fit tỉnh / toàn cảnh (TCQH.14) — distinct from fullscreen. */\n fitProvince(): void {\n this.runZoomAction((ctrl) => {\n const extent = this.provinceExtent();\n ctrl.fitProvince(extent ?? undefined);\n });\n }\n\n /** Toggle browser fullscreen for the map shell / target. */\n toggleFullscreen(): void {\n const el = this.resolveFullscreenElement();\n if (!el || typeof document === 'undefined') {\n return;\n }\n this.clearBoxZoom();\n if (document.fullscreenElement === el) {\n void document\n .exitFullscreen()\n .catch(() => undefined)\n .finally(() => this.syncFullscreenState());\n return;\n }\n void el\n .requestFullscreen?.()\n .catch(() => undefined)\n .finally(() => this.syncFullscreenState());\n }\n\n toggleBoxZoom(mode: Exclude<BoxZoomMode, 'none'>): void {\n if (this.boxMode() === mode) {\n this.clearBoxZoom();\n return;\n }\n this.startBoxZoom(mode);\n }\n\n /** Exit box-zoom / temporary interaction so map returns to pan. */\n resetInteractionMode(): void {\n this.clearBoxZoom();\n }\n\n private runZoomAction(apply: (ctrl: GeoMapController) => void): void {\n const ctrl = this.controller();\n if (!ctrl) {\n return;\n }\n this.clearBoxZoom();\n this.seedHistory(ctrl);\n apply(ctrl);\n this.scheduleCommit(ctrl);\n }\n\n private startBoxZoom(mode: Exclude<BoxZoomMode, 'none'>): void {\n const map = this.controller()?.getMap();\n if (!map) {\n return;\n }\n this.clearBoxZoom();\n this.boxMode.set(mode);\n this.resumeInteractions = pauseConflictingInteractions(map, {\n dragPan: true,\n doubleClickZoom: true,\n });\n\n this.dragBox = new DragBox({\n condition: alwaysCondition,\n className: 'ol-dragbox geo-map-zoom__dragbox',\n });\n this.dragBox.on('boxend', () => {\n const ctrl = this.controller();\n const extent = this.dragBox?.getGeometry().getExtent();\n if (!ctrl || !extent) {\n this.clearBoxZoom();\n return;\n }\n this.seedHistory(ctrl);\n if (mode === 'in') {\n ctrl.fitExtent(extent as [number, number, number, number], {\n maxZoom: 20,\n padding: [16, 16, 16, 16],\n duration: 200,\n });\n } else {\n const view = map.getView();\n const size = map.getSize();\n if (!view || !size) {\n this.clearBoxZoom();\n return;\n }\n const current = view.getResolution();\n if (current == null) {\n this.clearBoxZoom();\n return;\n }\n view.animate({\n center: getCenter(extent),\n resolution: current * 1.85,\n duration: 200,\n });\n }\n this.scheduleCommit(ctrl);\n this.clearBoxZoom();\n });\n map.addInteraction(this.dragBox);\n }\n\n private clearBoxZoom(): void {\n const map = this.controller()?.getMap();\n if (map && this.dragBox) {\n map.removeInteraction(this.dragBox);\n }\n this.dragBox = null;\n this.resumeInteractions?.();\n this.resumeInteractions = null;\n this.boxMode.set('none');\n }\n\n private resolveFullscreenElement(): HTMLElement | null {\n const override = this.fullscreenTarget();\n if (override) {\n return override;\n }\n const shell = this.host.nativeElement.closest(\n '.geo-map-shell',\n ) as HTMLElement | null;\n if (shell) {\n return shell;\n }\n return this.controller()?.getMap()?.getTargetElement() ?? null;\n }\n\n private syncFullscreenState(): void {\n const el = this.resolveFullscreenElement();\n const active =\n typeof document !== 'undefined' &&\n !!el &&\n document.fullscreenElement === el;\n this.isFullscreen.set(active);\n\n // Overlay portals on body are not visible during Fullscreen API — remount.\n const scope =\n el ??\n (this.host.nativeElement.closest('.geo-map-shell') as HTMLElement | null);\n syncOverlayContainerToFullscreen(this.overlayContainer, scope);\n\n // OL canvas must remeasure after layout changes to fullscreen.\n queueMicrotask(() => this.controller()?.updateSize());\n }\n\n private seedHistory(ctrl: GeoMapController): void {\n if (this.history().length > 0) {\n return;\n }\n const zoom = ctrl.getZoom();\n if (zoom == null) {\n return;\n }\n this.history.set([zoom]);\n this.historyIndex.set(0);\n this.refreshNavState();\n }\n\n private scheduleCommit(ctrl: GeoMapController): void {\n if (this.commitTimer != null) {\n clearTimeout(this.commitTimer);\n }\n // Wait for view.animate (+ fit) to settle before reading zoom.\n this.commitTimer = setTimeout(() => {\n this.commitTimer = null;\n this.commitHistory(ctrl);\n }, 240);\n }\n\n private commitHistory(ctrl: GeoMapController): void {\n if (this.navigatingHistory) {\n return;\n }\n const zoom = ctrl.getZoom();\n if (zoom == null) {\n return;\n }\n const stack = this.history().slice(0, this.historyIndex() + 1);\n const last = stack[stack.length - 1];\n if (last != null && Math.abs(last - zoom) < 1e-4) {\n this.refreshNavState();\n return;\n }\n stack.push(zoom);\n this.history.set(stack);\n this.historyIndex.set(stack.length - 1);\n this.refreshNavState();\n }\n\n private refreshNavState(): void {\n const idx = this.historyIndex();\n const len = this.history().length;\n this.canZoomPrev.set(idx > 0);\n this.canZoomNext.set(idx >= 0 && idx < len - 1);\n }\n}\n","<div class=\"geo-map-zoom\" role=\"group\" aria-label=\"Thu phóng bản đồ\">\n <button\n type=\"button\"\n class=\"geo-map-zoom__btn\"\n nz-tooltip=\"Phóng to\"\n nzTooltipPlacement=\"left\"\n aria-label=\"Phóng to\"\n [disabled]=\"!controller()\"\n (click)=\"zoomIn()\"\n >\n <geo-icon type=\"plus\" size=\"md\" />\n </button>\n <button\n type=\"button\"\n class=\"geo-map-zoom__btn\"\n nz-tooltip=\"Thu nhỏ\"\n nzTooltipPlacement=\"left\"\n aria-label=\"Thu nhỏ\"\n [disabled]=\"!controller()\"\n (click)=\"zoomOut()\"\n >\n <geo-icon type=\"minus\" size=\"md\" />\n </button>\n\n @if (showNav()) {\n <span class=\"geo-map-zoom__divider\" aria-hidden=\"true\"></span>\n <button\n type=\"button\"\n class=\"geo-map-zoom__btn\"\n [class.geo-map-zoom__btn--active]=\"boxMode() === 'in'\"\n nz-tooltip=\"Phóng to theo vùng (kéo khung)\"\n nzTooltipPlacement=\"left\"\n aria-label=\"Phóng to theo vùng\"\n [disabled]=\"!controller()\"\n (click)=\"toggleBoxZoom('in')\"\n >\n <geo-icon type=\"zoom-in\" size=\"sm\" />\n </button>\n <button\n type=\"button\"\n class=\"geo-map-zoom__btn\"\n [class.geo-map-zoom__btn--active]=\"boxMode() === 'out'\"\n nz-tooltip=\"Thu nhỏ theo vùng (kéo khung)\"\n nzTooltipPlacement=\"left\"\n aria-label=\"Thu nhỏ theo vùng\"\n [disabled]=\"!controller()\"\n (click)=\"toggleBoxZoom('out')\"\n >\n <geo-icon type=\"zoom-out\" size=\"sm\" />\n </button>\n <button\n type=\"button\"\n class=\"geo-map-zoom__btn\"\n nz-tooltip=\"Zoom trước\"\n nzTooltipPlacement=\"left\"\n aria-label=\"Zoom trước\"\n [disabled]=\"!controller() || !canZoomPrev()\"\n (click)=\"zoomPrev()\"\n >\n <geo-icon type=\"left\" size=\"sm\" />\n </button>\n <button\n type=\"button\"\n class=\"geo-map-zoom__btn\"\n nz-tooltip=\"Zoom sau\"\n nzTooltipPlacement=\"left\"\n aria-label=\"Zoom sau\"\n [disabled]=\"!controller() || !canZoomNext()\"\n (click)=\"zoomNext()\"\n >\n <geo-icon type=\"right\" size=\"sm\" />\n </button>\n @if (showFitProvince()) {\n <button\n type=\"button\"\n class=\"geo-map-zoom__btn\"\n nz-tooltip=\"Xem toàn tỉnh\"\n nzTooltipPlacement=\"left\"\n aria-label=\"Xem toàn tỉnh\"\n [disabled]=\"!controller()\"\n (click)=\"fitProvince()\"\n >\n <geo-icon type=\"expand\" size=\"sm\" />\n </button>\n }\n <button\n type=\"button\"\n class=\"geo-map-zoom__btn\"\n [class.geo-map-zoom__btn--active]=\"isFullscreen()\"\n [nz-tooltip]=\"\n isFullscreen() ? 'Thoát toàn màn hình' : 'Xem toàn bản đồ'\n \"\n nzTooltipPlacement=\"left\"\n [attr.aria-label]=\"\n isFullscreen() ? 'Thoát toàn màn hình' : 'Xem toàn bản đồ'\n \"\n [disabled]=\"!controller()\"\n (click)=\"toggleFullscreen()\"\n >\n <geo-icon\n [type]=\"isFullscreen() ? 'fullscreen-exit' : 'fullscreen'\"\n size=\"sm\"\n />\n </button>\n }\n</div>\n","import {\n ChangeDetectionStrategy,\n Component,\n input,\n output,\n signal,\n ViewEncapsulation,\n} from '@angular/core';\nimport { NzToolTipModule } from 'ng-zorro-antd/tooltip';\nimport { fromLonLat } from 'ol/proj';\nimport { GeoIconComponent } from '../../../geo-icon/geo-icon.component';\nimport { GeoMapController } from '../../geo-map.controller';\nimport type { GeoMapLocateErrorReason } from '../../geo-map.types';\n\n/**\n * Geolocation button: center map on user after permission.\n *\n * @summary Geolocation button: center map on user after permission.\n * @whenToUse Vị trí của tôi trên bản đồ.\n * @doNotUseWhen Server-side tracking.\n */\n@Component({\n selector: 'geo-map-locate',\n standalone: true,\n imports: [GeoIconComponent, NzToolTipModule],\n templateUrl: './geo-map-locate.component.html',\n styleUrl: './geo-map-locate.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: { class: 'geo-map-locate-host' },\n})\nexport class GeoMapLocateComponent {\n readonly controller = input<GeoMapController | null>(null);\n readonly label = input('Vị trí của tôi');\n\n readonly located = output<[number, number]>();\n readonly denied = output<void>();\n readonly locateError = output<{\n reason: GeoMapLocateErrorReason;\n message?: string;\n }>();\n\n readonly busy = signal(false);\n\n locate(): void {\n const ctrl = this.controller();\n if (!ctrl || this.busy()) {\n return;\n }\n\n if (typeof navigator === 'undefined' || !navigator.geolocation) {\n this.locateError.emit({\n reason: 'unsupported',\n message: 'Trình duyệt không hỗ trợ định vị.',\n });\n return;\n }\n\n this.busy.set(true);\n navigator.geolocation.getCurrentPosition(\n (pos) => {\n this.busy.set(false);\n const lonLat: [number, number] = [\n pos.coords.longitude,\n pos.coords.latitude,\n ];\n const mercator = fromLonLat(lonLat);\n ctrl.setCenter(mercator, Math.max(ctrl.getZoom() ?? 14, 14));\n this.located.emit(lonLat);\n },\n (err) => {\n this.busy.set(false);\n if (err.code === err.PERMISSION_DENIED) {\n this.denied.emit();\n this.locateError.emit({\n reason: 'denied',\n message: err.message,\n });\n return;\n }\n const reason: GeoMapLocateErrorReason =\n err.code === err.POSITION_UNAVAILABLE\n ? 'unavailable'\n : err.code === err.TIMEOUT\n ? 'timeout'\n : 'unknown';\n this.locateError.emit({ reason, message: err.message });\n },\n {\n enableHighAccuracy: true,\n timeout: 12000,\n maximumAge: 0,\n },\n );\n }\n}\n","<button\n type=\"button\"\n class=\"geo-map-locate__btn\"\n [nz-tooltip]=\"label()\"\n nzTooltipPlacement=\"left\"\n [attr.aria-label]=\"label()\"\n [disabled]=\"!controller() || busy()\"\n (click)=\"locate()\"\n>\n <geo-icon type=\"aim\" size=\"md\" />\n</button>\n","import {\n ChangeDetectionStrategy,\n Component,\n input,\n output,\n signal,\n ViewEncapsulation,\n} from '@angular/core';\nimport { NzToolTipModule } from 'ng-zorro-antd/tooltip';\nimport { GeoIconComponent } from '../../../geo-icon/geo-icon.component';\nimport { GeoMapController } from '../../geo-map.controller';\n\n/**\n * Export current map view as PNG download.\n *\n * @summary Export current map view as PNG download.\n * @whenToUse Chụp ảnh bản đồ.\n * @doNotUseWhen Server-side print/PDF pipelines.\n */\n@Component({\n selector: 'geo-map-snapshot',\n standalone: true,\n imports: [GeoIconComponent, NzToolTipModule],\n templateUrl: './geo-map-snapshot.component.html',\n styleUrl: './geo-map-snapshot.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: { class: 'geo-map-snapshot-host' },\n})\nexport class GeoMapSnapshotComponent {\n readonly controller = input<GeoMapController | null>(null);\n readonly label = input('Chụp ảnh bản đồ');\n readonly filename = input('ban-do.png');\n\n readonly captured = output<void>();\n readonly captureError = output<unknown>();\n\n readonly busy = signal(false);\n\n /** Public so shell/toolbar can trigger capture without a visible button. */\n capture(): void {\n const map = this.controller()?.getMap();\n if (!map || this.busy()) {\n return;\n }\n\n this.busy.set(true);\n map.once('rendercomplete', () => {\n try {\n const mapCanvas = document.createElement('canvas');\n const size = map.getSize();\n if (!size) {\n throw new Error('Map size unavailable');\n }\n mapCanvas.width = size[0];\n mapCanvas.height = size[1];\n const ctx = mapCanvas.getContext('2d');\n if (!ctx) {\n throw new Error('Canvas 2D unavailable');\n }\n\n const layers = map\n .getViewport()\n .querySelectorAll('.ol-layer canvas, canvas.ol-layer');\n layers.forEach((canvas) => {\n const el = canvas as HTMLCanvasElement;\n if (el.width > 0) {\n const opacity = Number(el.parentElement?.style.opacity || '1');\n ctx.globalAlpha = Number.isFinite(opacity) ? opacity : 1;\n const transform = el.style.transform;\n const matrix = transform\n .match(/^matrix\\(([^)]*)\\)$/)?.[1]\n ?.split(',')\n .map(Number);\n if (matrix && matrix.length === 6) {\n ctx.setTransform(\n matrix[0],\n matrix[1],\n matrix[2],\n matrix[3],\n matrix[4],\n matrix[5],\n );\n } else {\n ctx.setTransform(1, 0, 0, 1, 0, 0);\n }\n ctx.drawImage(el, 0, 0);\n }\n });\n ctx.setTransform(1, 0, 0, 1, 0, 0);\n ctx.globalAlpha = 1;\n\n mapCanvas.toBlob((blob) => {\n this.busy.set(false);\n if (!blob) {\n this.captureError.emit(new Error('Không tạo được ảnh PNG.'));\n return;\n }\n const url = URL.createObjectURL(blob);\n const anchor = document.createElement('a');\n anchor.href = url;\n anchor.download = this.filename();\n anchor.click();\n URL.revokeObjectURL(url);\n this.captured.emit();\n }, 'image/png');\n } catch (err) {\n this.busy.set(false);\n this.captureError.emit(err);\n }\n });\n map.renderSync();\n }\n}\n","<button\n type=\"button\"\n class=\"geo-map-snapshot__btn\"\n [nz-tooltip]=\"label()\"\n nzTooltipPlacement=\"left\"\n [attr.aria-label]=\"label()\"\n [disabled]=\"!controller() || busy()\"\n (click)=\"capture()\"\n>\n <geo-icon type=\"camera\" size=\"md\" />\n</button>\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n input,\n model,\n output,\n ViewEncapsulation,\n} from '@angular/core';\nimport { NzToolTipModule } from 'ng-zorro-antd/tooltip';\nimport { GEO_MAP_DEFAULT_BASEMAP_OPTIONS } from '../../geo-map.constants';\nimport type { GeoMapBasemap, GeoMapBasemapOption } from '../../geo-map.types';\n\n/**\n * Thumbnail card toggling street ↔ satellite basemap.\n *\n * @summary Toggle street / satellite basemap.\n * @whenToUse Right-side basemap toggle.\n * @doNotUseWhen Full layer panel — use geo-map-layer-panel.\n */\n@Component({\n selector: 'geo-map-basemap-switcher',\n standalone: true,\n imports: [NzToolTipModule],\n templateUrl: './geo-map-basemap-switcher.component.html',\n styleUrl: './geo-map-basemap-switcher.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: { class: 'geo-map-basemap-switcher-host' },\n})\nexport class GeoMapBasemapSwitcherComponent {\n /** Exactly two options (street + satellite). Extra items are ignored. */\n readonly options = input<GeoMapBasemapOption[]>(GEO_MAP_DEFAULT_BASEMAP_OPTIONS);\n readonly selectedId = model('osm');\n /** Caption on the thumbnail card (design: «Lớp bản đồ»). */\n readonly label = input('Lớp bản đồ');\n readonly tooltip = input('Đổi lớp bản đồ nền');\n\n readonly basemapChange = output<GeoMapBasemap>();\n\n readonly pair = computed(() => {\n const list = this.options().slice(0, 2);\n return list.length >= 2 ? list : GEO_MAP_DEFAULT_BASEMAP_OPTIONS;\n });\n\n readonly selected = computed(() => {\n const id = this.selectedId();\n const list = this.pair();\n return list.find((item) => item.id === id) ?? list[0] ?? null;\n });\n\n /** Preview of the other basemap (what click will switch to). */\n readonly next = computed((): GeoMapBasemapOption | null => {\n const list = this.pair();\n if (!list.length) {\n return null;\n }\n const currentId = this.selected()?.id;\n return list.find((item) => item.id !== currentId) ?? list[0] ?? null;\n });\n\n readonly tooltipText = computed(() => {\n const next = this.next();\n if (!next) {\n return this.tooltip();\n }\n return `Chuyển sang ${next.label}`;\n });\n\n toggle(): void {\n const next = this.next();\n if (!next) {\n return;\n }\n this.selectedId.set(next.id);\n this.basemapChange.emit(next.basemap);\n }\n}\n","<button\n type=\"button\"\n class=\"geo-map-basemap-switcher__trigger\"\n [nz-tooltip]=\"tooltipText()\"\n nzTooltipPlacement=\"left\"\n [attr.aria-label]=\"tooltipText()\"\n (click)=\"toggle()\"\n>\n @if (next(); as option) {\n @if (option.previewUrl; as url) {\n <img class=\"geo-map-basemap-switcher__preview\" [src]=\"url\" alt=\"\" />\n } @else {\n <span\n class=\"geo-map-basemap-switcher__preview geo-map-basemap-switcher__preview--empty\"\n aria-hidden=\"true\"\n ></span>\n }\n } @else {\n <span\n class=\"geo-map-basemap-switcher__preview geo-map-basemap-switcher__preview--empty\"\n aria-hidden=\"true\"\n ></span>\n }\n <span class=\"geo-map-basemap-switcher__veil\" aria-hidden=\"true\"></span>\n <span class=\"geo-map-basemap-switcher__content\">\n <span class=\"geo-map-basemap-switcher__icon\" aria-hidden=\"true\">\n <svg viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M12 4.2 3 8.7l9 4.5 9-4.5-9-4.5Z\"\n stroke=\"currentColor\"\n stroke-width=\"1.75\"\n stroke-linejoin=\"round\"\n />\n <path\n d=\"M3 15.3 12 19.8l9-4.5\"\n stroke=\"currentColor\"\n stroke-width=\"1.75\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n </svg>\n </span>\n <span class=\"geo-map-basemap-switcher__caption\">{{ label() }}</span>\n </span>\n</button>\n","import {\n ChangeDetectionStrategy,\n Component,\n DestroyRef,\n effect,\n inject,\n input,\n model,\n OnDestroy,\n output,\n signal,\n ViewEncapsulation,\n} from '@angular/core';\nimport type { FeatureLike } from 'ol/Feature';\nimport type Geometry from 'ol/geom/Geometry';\nimport GeometryCollection from 'ol/geom/GeometryCollection';\nimport { LineString, Point, Polygon } from 'ol/geom';\nimport Draw from 'ol/interaction/Draw';\nimport type OlMap from 'ol/Map';\nimport VectorLayer from 'ol/layer/Vector';\nimport { getArea, getLength } from 'ol/sphere';\nimport VectorSource from 'ol/source/Vector';\nimport type { StyleLike } from 'ol/style/Style';\nimport {\n Circle as CircleStyle,\n Fill,\n Icon,\n Stroke,\n Style,\n Text,\n} from 'ol/style';\nimport { GEO_MAP_MEASURE_LAYER_ID } from '../../geo-map.constants';\nimport { pauseConflictingInteractions } from '../../utils/geo-map-interactions.util';\nimport { GeoMapController } from '../../geo-map.controller';\nimport type { GeoMapMeasureMode, GeoMapMeasureResult } from '../../geo-map.types';\n\n/**\n * Distance / area measure tools on the map.\n *\n * @summary Distance / area measure tools on the map.\n * @whenToUse Đo khoảng cách / diện tích (E-tien-ich).\n * @doNotUseWhen Permanent vector editing — app-owned draw tools.\n */\n@Component({\n selector: 'geo-map-measure',\n standalone: true,\n imports: [],\n templateUrl: './geo-map-measure.component.html',\n styleUrl: './geo-map-measure.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {\n class: 'geo-map-measure-host',\n '[class.geo-map-measure-host--active]': 'mode() !== \"none\"',\n },\n})\nexport class GeoMapMeasureComponent implements OnDestroy {\n private readonly destroyRef = inject(DestroyRef);\n\n readonly controller = input<GeoMapController | null>(null);\n readonly mode = model<GeoMapMeasureMode>('none');\n readonly showResult = input(true);\n\n readonly measureChange = output<GeoMapMeasureResult | null>();\n\n readonly result = signal<GeoMapMeasureResult | null>(null);\n\n private source: VectorSource | null = null;\n private layer: VectorLayer<VectorSource> | null = null;\n private draw: Draw | null = null;\n private boundMap: OlMap | null = null;\n private resumeInteractions: (() => void) | null = null;\n\n constructor() {\n // Writes `result` when (re)entering a measure mode — allow inside effect.\n effect(\n () => {\n const ctrl = this.controller();\n const mode = this.mode();\n this.syncInteraction(ctrl, mode);\n },\n { allowSignalWrites: true },\n );\n\n this.destroyRef.onDestroy(() => this.teardown());\n }\n\n ngOnDestroy(): void {\n this.teardown();\n }\n\n clear(): void {\n this.source?.clear();\n this.result.set(null);\n this.measureChange.emit(null);\n this.mode.set('none');\n }\n\n private syncInteraction(\n ctrl: GeoMapController | null,\n mode: GeoMapMeasureMode,\n ): void {\n const map = ctrl?.getMap() ?? null;\n if (!map) {\n this.teardown();\n return;\n }\n\n if (this.boundMap !== map) {\n this.teardown();\n this.ensureLayer(map);\n this.boundMap = map;\n } else if (!this.source || !this.layer) {\n this.ensureLayer(map);\n }\n\n this.removeDraw(map);\n\n if (mode === 'none') {\n // Leave cursor to the shell / host (pan grab hand, etc.).\n return;\n }\n\n this.source?.clear();\n this.result.set(null);\n this.measureChange.emit(null);\n\n // Double-click finishes the sketch; pause OL DoubleClickZoom while measuring.\n this.resumeInteractions = pauseConflictingInteractions(map, {\n dragPan: false,\n doubleClickZoom: true,\n });\n\n const type = mode === 'distance' ? 'LineString' : 'Polygon';\n const style = this.createStyle();\n this.draw = new Draw({\n source: this.source!,\n type,\n style,\n stopClick: true,\n });\n\n const capturedMode = mode;\n this.draw.on('drawend', (evt) => {\n const geometry = evt.feature.getGeometry();\n if (!geometry) {\n return;\n }\n const measured = this.formatResult(capturedMode, geometry);\n this.result.set(measured);\n this.measureChange.emit(measured);\n // Exit draw mode after the Draw interaction finishes removing the sketch.\n queueMicrotask(() => {\n if (this.mode() === capturedMode) {\n this.mode.set('none');\n }\n });\n });\n\n map.addInteraction(this.draw);\n this.layer?.setVisible(true);\n this.setMapCursor(map, 'crosshair');\n }\n\n private ensureLayer(map: OlMap): void {\n if (this.layer) {\n map.removeLayer(this.layer);\n }\n this.source = new VectorSource();\n const layer = new VectorLayer({\n source: this.source,\n properties: { geoLayerId: GEO_MAP_MEASURE_LAYER_ID },\n style: this.createStyle(),\n zIndex: 500,\n updateWhileAnimating: true,\n updateWhileInteracting: true,\n });\n this.layer = layer;\n map.addLayer(layer);\n }\n\n private createStyle(): StyleLike {\n return (feature: FeatureLike) => {\n const geometry = feature.getGeometry();\n if (!geometry) {\n return [];\n }\n // Draw / Vector features expose an OL Geometry (not RenderFeature).\n return this.buildMeasureStyles(geometry as Geometry);\n };\n }\n\n /** Dashed stroke, numbered vertices, segment labels (distance + area). */\n private buildMeasureStyles(geometry: Geometry | null): Style[] {\n if (!geometry) {\n return [];\n }\n\n if (geometry instanceof GeometryCollection) {\n return geometry\n .getGeometries()\n .flatMap((part) => this.buildMeasureStyles(part));\n }\n\n const color = this.cssColor('--geo-color-primary-default', '#9a4828');\n const fill = this.cssColor('--geo-color-primary-default', '#9a4828', 0.12);\n const fontFamily = this.cssFontFamily();\n const styles: Style[] = [\n new Style({\n fill: new Fill({ color: fill }),\n stroke: new Stroke({\n color,\n width: 2,\n lineDash: [7, 7],\n }),\n }),\n ];\n\n if (geometry instanceof Point) {\n styles.push(...this.vertexStyles(geometry.getCoordinates(), 1, color));\n return styles;\n }\n\n let points: number[][] = [];\n if (geometry instanceof LineString) {\n points = geometry.getCoordinates();\n } else if (geometry instanceof Polygon) {\n const ring = geometry.getCoordinates()[0] ?? [];\n points = this.openRing(ring);\n }\n\n if (!points.length) {\n return styles;\n }\n\n for (let i = 0; i < points.length; i++) {\n styles.push(...this.vertexStyles(points[i], i + 1, color));\n }\n\n const closed = geometry instanceof Polygon && points.length >= 2;\n const segmentCount = closed ? points.length : Math.max(0, points.length - 1);\n for (let i = 0; i < segmentCount; i++) {\n const a = points[i];\n const b = points[(i + 1) % points.length];\n styles.push(this.segmentLabelStyle(a, b, color, fontFamily));\n }\n\n if (geometry instanceof Polygon && points.length >= 3) {\n const areaLabel = this.areaCentroidLabel(geometry, color, fontFamily);\n if (areaLabel) {\n styles.push(areaLabel);\n }\n }\n\n return styles;\n }\n\n private openRing(ring: number[][]): number[][] {\n if (ring.length < 2) {\n return ring;\n }\n const first = ring[0];\n const last = ring[ring.length - 1];\n if (first[0] === last[0] && first[1] === last[1]) {\n return ring.slice(0, -1);\n }\n return ring;\n }\n\n private vertexStyles(coord: number[], index: number, color: string): Style[] {\n return [\n new Style({\n geometry: new Point(coord),\n image: new CircleStyle({\n radius: 3.5,\n fill: new Fill({ color }),\n }),\n }),\n new Style({\n geometry: new Point(coord),\n image: new Icon({\n src: this.numberBadgeDataUrl(index, color),\n anchor: [0.5, 1.35],\n anchorXUnits: 'fraction',\n anchorYUnits: 'fraction',\n scale: 1,\n }),\n }),\n ];\n }\n\n private numberBadgeDataUrl(index: number, color: string): string {\n const svg =\n `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"22\" height=\"22\" viewBox=\"0 0 22 22\">` +\n `<circle cx=\"11\" cy=\"11\" r=\"10\" fill=\"${color}\"/>` +\n `<text x=\"11\" y=\"15\" text-anchor=\"middle\" fill=\"#ffffff\" ` +\n `font-size=\"11\" font-weight=\"700\" font-family=\"sans-serif\">${index}</text>` +\n `</svg>`;\n return `data:image/svg+xml;charset=utf-8,${encodeURIComponent(svg)}`;\n }\n\n private segmentLabelStyle(\n a: number[],\n b: number[],\n color: string,\n fontFamily: string,\n ): Style {\n const mid: [number, number] = [(a[0] + b[0]) / 2, (a[1] + b[1]) / 2];\n const meters = getLength(new LineString([a, b]));\n let rotation = -Math.atan2(b[1] - a[1], b[0] - a[0]);\n // Keep labels upright/readable.\n if (rotation > Math.PI / 2 || rotation < -Math.PI / 2) {\n rotation += Math.PI;\n }\n\n return new Style({\n geometry: new Point(mid),\n text: new Text({\n text: this.formatLengthLabel(meters),\n font: `500 12px ${fontFamily}`,\n fill: new Fill({ color }),\n stroke: new Stroke({\n color: 'rgba(255, 255, 255, 0.9)',\n width: 3,\n }),\n rotation,\n rotateWithView: true,\n textAlign: 'center',\n textBaseline: 'middle',\n }),\n });\n }\n\n private areaCentroidLabel(\n geometry: Polygon,\n color: string,\n fontFamily: string,\n ): Style | null {\n const interior = geometry.getInteriorPoint()?.getCoordinates();\n if (!interior) {\n return null;\n }\n const sqMeters = getArea(geometry);\n return new Style({\n geometry: new Point(interior),\n text: new Text({\n text: this.formatAreaLabel(sqMeters),\n font: `600 12px ${fontFamily}`,\n fill: new Fill({ color }),\n stroke: new Stroke({\n color: 'rgba(255, 255, 255, 0.92)',\n width: 3.5,\n }),\n textAlign: 'center',\n textBaseline: 'middle',\n }),\n });\n }\n\n private formatLengthLabel(meters: number): string {\n if (meters >= 1000) {\n return `${(meters / 1000).toFixed(1)} km`;\n }\n return `${meters.toFixed(1)} m`;\n }\n\n private formatAreaLabel(sqMeters: number): string {\n if (sqMeters >= 10_000) {\n return `${(sqMeters / 10_000).toFixed(2)} ha`;\n }\n return `${sqMeters.toFixed(1)} m²`;\n }\n\n /** Resolve a design token for OpenLayers canvas styles. */\n private cssColor(\n token: string,\n fallback: string,\n alpha?: number,\n ): string {\n if (typeof document === 'undefined') {\n return alpha != null ? this.withAlpha(fallback, alpha) : fallback;\n }\n const raw = getComputedStyle(document.documentElement)\n .getPropertyValue(token)\n .trim();\n const color = raw || fallback;\n return alpha != null ? this.withAlpha(color, alpha) : color;\n }\n\n private cssFontFamily(): string {\n if (typeof document === 'undefined') {\n return 'sans-serif';\n }\n const raw = getComputedStyle(document.documentElement)\n .getPropertyValue('--geo-font-family')\n .trim();\n return raw || 'sans-serif';\n }\n\n private withAlpha(color: string, alpha: number): string {\n const hex = color.match(/^#([0-9a-f]{6})$/i);\n if (hex) {\n const n = parseInt(hex[1], 16);\n const r = (n >> 16) & 255;\n const g = (n >> 8) & 255;\n const b = n & 255;\n return `rgba(${r}, ${g}, ${b}, ${alpha})`;\n }\n return color;\n }\n\n private formatResult(\n mode: Exclude<GeoMapMeasureMode, 'none'>,\n geometry: Geometry,\n ): GeoMapMeasureResult {\n if (mode === 'distance' && geometry instanceof LineString) {\n const meters = getLength(geometry);\n return {\n mode,\n value: meters,\n label: this.formatLengthLabel(meters),\n geometry,\n };\n }\n\n if (mode === 'area' && geometry instanceof Polygon) {\n const sqMeters = getArea(geometry);\n return {\n mode,\n value: sqMeters,\n label: this.formatAreaLabel(sqMeters),\n geometry,\n };\n }\n\n return { mode, value: 0, label: '-', geometry };\n }\n\n private removeDraw(map: OlMap): void {\n if (this.draw) {\n map.removeInteraction(this.draw);\n this.draw = null;\n }\n this.resumeInteractions?.();\n this.resumeInteractions = null;\n }\n\n private setMapCursor(map: OlMap, cursor: string | null): void {\n const el = map.getTargetElement();\n if (!el) {\n return;\n }\n el.style.cursor = cursor ?? '';\n }\n\n private teardown(): void {\n const map = this.boundMap ?? this.controller()?.getMap() ?? null;\n if (map) {\n this.removeDraw(map);\n this.setMapCursor(map, null);\n if (this.layer) {\n map.removeLayer(this.layer);\n }\n }\n this.draw = null;\n this.layer = null;\n this.source = null;\n this.boundMap = null;\n }\n}\n","@if (showResult() && result(); as measured) {\n <div class=\"geo-map-measure__result\" role=\"status\">\n <span class=\"geo-map-measure__result-label\">\n {{ measured.mode === 'distance' ? 'Khoảng cách' : 'Diện tích' }}:\n <strong>{{ measured.label }}</strong>\n </span>\n <button\n type=\"button\"\n class=\"geo-map-measure__clear\"\n (click)=\"clear()\"\n >\n Xóa\n </button>\n </div>\n}\n\n@if (mode() !== 'none') {\n <div class=\"geo-map-measure__hint\" role=\"status\">\n {{\n mode() === 'distance'\n ? 'Nhấp các điểm để đo khoảng cách. Nháy đúp để kết thúc.'\n : 'Nhấp các điểm để đo diện tích. Nháy đúp để kết thúc.'\n }}\n <button type=\"button\" class=\"geo-map-measure__clear\" (click)=\"clear()\">\n Hủy\n </button>\n </div>\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n effect,\n input,\n model,\n signal,\n ViewEncapsulation,\n} from '@angular/core';\nimport { NzDropDownModule } from 'ng-zorro-antd/dropdown';\nimport { NzToolTipModule } from 'ng-zorro-antd/tooltip';\nimport { GeoIconComponent } from '../../../geo-icon/geo-icon.component';\nimport { GeoSliderComponent } from '../../../geo-slider/geo-slider.component';\nimport { GEO_MAP_BASEMAP_LAYER_ID } from '../../geo-map.constants';\nimport { GeoMapController } from '../../geo-map.controller';\n\n/**\n * Pick a layer and adjust opacity 0–100%.\n *\n * @summary Layer opacity slider for map chrome.\n * @whenToUse Điều chỉnh độ trong suốt khi so sánh lớp.\n * @doNotUseWhen Generic sliders outside map — use geo-slider.\n */\n@Component({\n selector: 'geo-map-opacity',\n standalone: true,\n imports: [\n NzDropDownModule,\n NzToolTipModule,\n GeoIconComponent,\n GeoSliderComponent,\n ],\n templateUrl: './geo-map-opacity.component.html',\n styleUrl: './geo-map-opacity.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: { class: 'geo-map-opacity-host' },\n})\nexport class GeoMapOpacityComponent {\n readonly controller = input<GeoMapController | null>(null);\n readonly title = input('Độ trong suốt');\n readonly layerId = model<string | null>(null);\n /** Opacity percent 0–100. */\n readonly opacity = model(100);\n readonly variant = input<'panel' | 'compact'>('panel');\n /** When compact and no layerId, apply to first non-basemap overlay. */\n readonly applyToFirstLayer = input(true);\n\n readonly open = signal(false);\n\n readonly layerOptions = computed(() => {\n const ctrl = this.controller();\n if (!ctrl) {\n return [] as Array<{ id: string; title: string }>;\n }\n return ctrl\n .getLayers()\n .filter((item) => item.id !== GEO_MAP_BASEMAP_LAYER_ID)\n .map((item) => ({\n id: item.id,\n title: item.config.title || item.id,\n }));\n });\n\n constructor() {\n effect(() => {\n const ctrl = this.controller();\n const id = this.resolveTargetId();\n if (!ctrl || !id) {\n return;\n }\n const managed = ctrl.getLayers().find((item) => item.id === id);\n if (!managed) {\n return;\n }\n const pct = Math.round((managed.config.opacity ?? 1) * 100);\n if (pct !== this.opacity()) {\n this.opacity.set(pct);\n }\n });\n\n effect(() => {\n const ctrl = this.controller();\n const id = this.resolveTargetId();\n const pct = this.opacity();\n if (!ctrl || !id) {\n return;\n }\n ctrl.setLayerOpacity(id, Math.min(1, Math.max(0, pct / 100)));\n });\n }\n\n onVisible(visible: boolean): void {\n this.open.set(visible);\n }\n\n selectLayer(id: string): void {\n this.layerId.set(id);\n }\n\n private resolveTargetId(): string | null {\n const explicit = this.layerId();\n if (explicit) {\n return explicit;\n }\n if (!this.applyToFirstLayer()) {\n return null;\n }\n return this.layerOptions()[0]?.id ?? null;\n }\n}\n","@if (variant() === 'compact') {\n <button\n type=\"button\"\n class=\"geo-map-opacity__trigger\"\n nz-dropdown\n nzTrigger=\"click\"\n nzPlacement=\"bottomLeft\"\n nzOverlayClassName=\"geo-map-opacity-overlay\"\n [nzDropdownMenu]=\"menu\"\n [nzVisible]=\"open()\"\n (nzVisibleChange)=\"onVisible($event)\"\n [nz-tooltip]=\"title()\"\n nzTooltipPlacement=\"left\"\n [attr.aria-label]=\"title()\"\n [disabled]=\"!controller()\"\n >\n <geo-icon type=\"bg-colors\" size=\"md\" />\n </button>\n\n <nz-dropdown-menu #menu=\"nzDropdownMenu\">\n <div class=\"geo-map-opacity__panel geo-map-opacity__panel--popup\">\n <div class=\"geo-map-opacity__title\">{{ title() }}</div>\n @if (layerOptions().length > 1) {\n <ul class=\"geo-map-opacity__layers\">\n @for (layer of layerOptions(); track layer.id) {\n <li>\n <button\n type=\"button\"\n class=\"geo-map-opacity__layer\"\n [class.geo-map-opacity__layer--active]=\"\n layer.id === (layerId() || layerOptions()[0].id)\n \"\n (click)=\"selectLayer(layer.id)\"\n >\n {{ layer.title }}\n </button>\n </li>\n }\n </ul>\n } @else if (layerOptions().length === 1) {\n <div class=\"geo-map-opacity__layer-name\">\n {{ layerOptions()[0].title }}\n </div>\n } @else {\n <div class=\"geo-map-opacity__empty\">Chưa có lớp để chỉnh.</div>\n }\n\n <div class=\"geo-map-opacity__slider\">\n <geo-slider [(value)]=\"opacity\" [min]=\"0\" [max]=\"100\" [step]=\"1\" />\n <span class=\"geo-map-opacity__value\">{{ opacity() }}%</span>\n </div>\n </div>\n </nz-dropdown-menu>\n} @else {\n <div class=\"geo-map-opacity__panel\">\n <div class=\"geo-map-opacity__title\">{{ title() }}</div>\n @if (layerOptions().length > 1) {\n <ul class=\"geo-map-opacity__layers\">\n @for (layer of layerOptions(); track layer.id) {\n <li>\n <button\n type=\"button\"\n class=\"geo-map-opacity__layer\"\n [class.geo-map-opacity__layer--active]=\"\n layer.id === (layerId() || layerOptions()[0].id)\n \"\n (click)=\"selectLayer(layer.id)\"\n >\n {{ layer.title }}\n </button>\n </li>\n }\n </ul>\n } @else if (layerOptions().length === 1) {\n <div class=\"geo-map-opacity__layer-name\">{{ layerOptions()[0].title }}</div>\n } @else {\n <div class=\"geo-map-opacity__empty\">Chưa có lớp để chỉnh.</div>\n }\n\n <div class=\"geo-map-opacity__slider\">\n <geo-slider [(value)]=\"opacity\" [min]=\"0\" [max]=\"100\" [step]=\"1\" />\n <span class=\"geo-map-opacity__value\">{{ opacity() }}%</span>\n </div>\n </div>\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n input,\n model,\n output,\n ViewEncapsulation,\n} from '@angular/core';\nimport { GeoIconComponent } from '../../../geo-icon/geo-icon.component';\nimport type { GeoMapLegendItem } from '../../geo-map.types';\n\n/**\n * Floating legend popover (color/swatch + label).\n *\n * @summary Popover chú giải loại đất.\n * @whenToUse Opened from toolbar legend action.\n * @doNotUseWhen Form field labels.\n */\n@Component({\n selector: 'geo-map-legend',\n standalone: true,\n imports: [GeoIconComponent],\n templateUrl: './geo-map-legend.component.html',\n styleUrl: './geo-map-legend.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {\n class: 'geo-map-legend-host',\n '[class.geo-map-legend-host--open]': 'open()',\n },\n})\nexport class GeoMapLegendComponent {\n readonly title = input('Chú giải');\n readonly items = input<GeoMapLegendItem[]>([]);\n readonly open = model(false);\n\n readonly closed = output<void>();\n\n onClose(): void {\n this.open.set(false);\n this.closed.emit();\n }\n}\n","@if (open()) {\n <aside class=\"geo-map-legend\" role=\"dialog\" [attr.aria-label]=\"title()\">\n <header class=\"geo-map-legend__header\">\n <h3 class=\"geo-map-legend__title\">{{ title() }}</h3>\n <button\n type=\"button\"\n class=\"geo-map-legend__close\"\n aria-label=\"Đóng chú giải\"\n (click)=\"onClose()\"\n >\n <geo-icon type=\"close\" size=\"sm\" />\n </button>\n </header>\n\n <ul class=\"geo-map-legend__list\">\n @for (item of items(); track item.code || item.label) {\n <li class=\"geo-map-legend__item\">\n @if (item.swatchUrl) {\n <img class=\"geo-map-legend__swatch\" [src]=\"item.swatchUrl\" alt=\"\" />\n } @else {\n <span\n class=\"geo-map-legend__swatch geo-map-legend__swatch--color\"\n [style.background]=\"item.color || 'var(--geo-color-neutral-300)'\"\n ></span>\n }\n <span class=\"geo-map-legend__text\">\n @if (item.code) {\n <span class=\"geo-map-legend__code\">{{ item.code }}</span>\n }\n <span class=\"geo-map-legend__label\">{{ item.label }}</span>\n </span>\n </li>\n } @empty {\n <li class=\"geo-map-legend__empty\">Chưa có mục chú giải.</li>\n }\n </ul>\n </aside>\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n effect,\n input,\n model,\n output,\n signal,\n ViewEncapsulation,\n} from '@angular/core';\nimport { GeoCheckboxComponent } from '../../../geo-checkbox/geo-checkbox.component';\nimport { GeoIconComponent } from '../../../geo-icon/geo-icon.component';\nimport { GeoSliderComponent } from '../../../geo-slider/geo-slider.component';\nimport { GEO_MAP_BASEMAP_LAYER_ID } from '../../geo-map.constants';\nimport { GeoMapController } from '../../geo-map.controller';\nimport type { GeoMapLayerConfig } from '../../geo-map.types';\n\ninterface LayerGroupSection {\n key: string;\n title: string;\n selection: 'single' | 'multi';\n layers: GeoMapLayerConfig[];\n}\n\nconst GROUP_META: Record<\n string,\n { title: string; selection: 'single' | 'multi'; }\n> = {\n qhsdd: { title: 'Bản đồ QHSDD', selection: 'single' },\n planning: { title: 'Bản đồ QHSDD', selection: 'single' },\n cadastre: { title: 'Bản đồ địa chính', selection: 'multi' },\n current: { title: 'Bản đồ hiện trạng', selection: 'single' },\n 'base-map': { title: 'Bản đồ nền', selection: 'single' },\n};\n\nconst GROUP_ORDER = ['qhsdd', 'planning', 'cadastre', 'current', 'base-map'];\n\n/**\n * Toggle layer visibility / opacity by accordion groups.\n *\n * @summary Panel bật/tắt lớp bản đồ theo nhóm (radio / checkbox + độ mờ).\n * @whenToUse Map chrome popover «Lớp bản đồ».\n * @doNotUseWhen Non-map lists — use geo-tree/geo-checkbox.\n */\n@Component({\n selector: 'geo-map-layer-panel',\n standalone: true,\n imports: [\n GeoCheckboxComponent,\n GeoIconComponent,\n GeoSliderComponent,\n ],\n templateUrl: './geo-map-layer-panel.component.html',\n styleUrl: './geo-map-layer-panel.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: { class: 'geo-map-layer-panel-host' },\n})\nexport class GeoMapLayerPanelComponent {\n readonly controller = input<GeoMapController | null>(null);\n readonly title = input('Lớp bản đồ');\n /** When true, hide the panel's own header (host popover provides title). */\n readonly embedded = input(false);\n readonly layers = model<GeoMapLayerConfig[]>([]);\n\n readonly layersChange = output<GeoMapLayerConfig[]>();\n\n private readonly tick = signal(0);\n readonly expandedKeys = signal<Record<string, boolean>>({});\n\n readonly sections = computed<LayerGroupSection[]>(() => {\n this.tick();\n const list = this.resolveLayers().filter(\n (layer) =>\n !layer.basemap &&\n layer.group !== 'system' &&\n layer.id !== GEO_MAP_BASEMAP_LAYER_ID,\n );\n\n const map = new Map<string, LayerGroupSection>();\n for (const layer of list) {\n const key = layer.group?.trim() || 'other';\n const meta = GROUP_META[key];\n const title = layer.groupLabel ?? meta?.title ?? key;\n const selection = layer.groupSelection ?? meta?.selection ?? 'multi';\n const existing = map.get(key);\n if (existing) {\n existing.layers.push(layer);\n } else {\n map.set(key, { key, title, selection, layers: [layer] });\n }\n }\n\n return [...map.values()].sort((a, b) => {\n const ai = GROUP_ORDER.indexOf(a.key);\n const bi = GROUP_ORDER.indexOf(b.key);\n return (ai < 0 ? 99 : ai) - (bi < 0 ? 99 : bi);\n });\n });\n\n constructor() {\n effect(\n () => {\n this.controller();\n this.layers();\n this.tick.update((n) => n + 1);\n },\n { allowSignalWrites: true },\n );\n\n effect(\n () => {\n const sections = this.sections();\n this.expandedKeys.update((prev) => {\n const next = { ...prev };\n for (const section of sections) {\n if (next[section.key] === undefined) {\n next[section.key] = true;\n }\n }\n return next;\n });\n },\n { allowSignalWrites: true },\n );\n }\n\n isExpanded(key: string): boolean {\n return this.expandedKeys()[key] !== false;\n }\n\n toggleSection(key: string): void {\n this.expandedKeys.update((prev) => ({\n ...prev,\n [key]: !(prev[key] !== false),\n }));\n }\n\n isVisible(layer: GeoMapLayerConfig): boolean {\n return layer.visible !== false;\n }\n\n opacityPercent(layer: GeoMapLayerConfig): number {\n const opacity = layer.opacity;\n if (opacity == null || Number.isNaN(opacity)) {\n return 100;\n }\n return Math.round(Math.min(1, Math.max(0, opacity)) * 100);\n }\n\n onToggleMulti(layer: GeoMapLayerConfig, checked: boolean): void {\n const next = this.resolveLayers().map((item) =>\n item.id === layer.id ? { ...item, visible: checked } : item,\n );\n this.applyLayers(next);\n this.controller()?.setLayerVisibility(layer.id, checked);\n }\n\n onSelectSingle(section: LayerGroupSection, layer: GeoMapLayerConfig): void {\n const next = this.resolveLayers().map((item) => {\n if (item.group !== section.key) {\n return item;\n }\n const visible = item.id === layer.id;\n return { ...item, visible };\n });\n this.applyLayers(next);\n for (const item of next) {\n if (item.group === section.key) {\n this.controller()?.setLayerVisibility(item.id, item.visible !== false);\n }\n }\n }\n\n onOpacityChange(layer: GeoMapLayerConfig, percent: number): void {\n const opacity = Math.min(100, Math.max(0, percent)) / 100;\n const next = this.resolveLayers().map((item) =>\n item.id === layer.id ? { ...item, opacity } : item,\n );\n this.applyLayers(next);\n this.controller()?.setLayerOpacity(layer.id, opacity);\n }\n\n private resolveLayers(): GeoMapLayerConfig[] {\n const local = this.layers();\n if (local.length) {\n return local;\n }\n return (\n this.controller()\n ?.getLayers()\n .map((item) => item.config)\n .filter((cfg) => cfg.id !== GEO_MAP_BASEMAP_LAYER_ID) ?? []\n );\n }\n\n private applyLayers(next: GeoMapLayerConfig[]): void {\n this.layers.set(next);\n this.layersChange.emit(next);\n this.tick.update((n) => n + 1);\n }\n}\n","<section class=\"geo-map-layer-panel\" aria-label=\"Lớp bản đồ\">\n @if (!embedded()) {\n <header class=\"geo-map-layer-panel__header\">\n <h3 class=\"geo-map-layer-panel__title\">{{ title() }}</h3>\n </header>\n }\n\n <div class=\"geo-map-layer-panel__groups\">\n @for (section of sections(); track section.key) {\n <div\n class=\"geo-map-layer-panel__group\"\n [class.geo-map-layer-panel__group--open]=\"isExpanded(section.key)\"\n >\n <button\n type=\"button\"\n class=\"geo-map-layer-panel__group-head\"\n [attr.aria-expanded]=\"isExpanded(section.key)\"\n (click)=\"toggleSection(section.key)\"\n >\n <span class=\"geo-map-layer-panel__group-label\">\n <geo-icon type=\"appstore\" size=\"sm\" />\n <span>{{ section.title }}</span>\n </span>\n <geo-icon\n class=\"geo-map-layer-panel__chevron\"\n [type]=\"isExpanded(section.key) ? 'down' : 'right'\"\n size=\"sm\"\n />\n </button>\n\n @if (isExpanded(section.key)) {\n <ul class=\"geo-map-layer-panel__list\">\n @for (layer of section.layers; track layer.id) {\n <li class=\"geo-map-layer-panel__item\">\n @if (section.selection === 'single') {\n <label class=\"geo-map-layer-panel__choice\">\n <input\n class=\"geo-map-layer-panel__radio\"\n type=\"radio\"\n [name]=\"'geo-map-layer-' + section.key\"\n [checked]=\"isVisible(layer)\"\n (change)=\"onSelectSingle(section, layer)\"\n />\n <span class=\"geo-map-layer-panel__choice-label\">{{\n layer.title\n }}</span>\n </label>\n } @else {\n <geo-checkbox\n [label]=\"layer.title\"\n [checked]=\"isVisible(layer)\"\n (checkedChange)=\"onToggleMulti(layer, $event)\"\n />\n }\n\n <div class=\"geo-map-layer-panel__opacity\">\n <geo-slider\n class=\"geo-map-layer-panel__slider\"\n [min]=\"0\"\n [max]=\"100\"\n [step]=\"1\"\n [value]=\"opacityPercent(layer)\"\n (valueChange)=\"onOpacityChange(layer, $event)\"\n />\n <span class=\"geo-map-layer-panel__opacity-value\"\n >{{ opacityPercent(layer) }} %</span\n >\n </div>\n </li>\n }\n </ul>\n }\n </div>\n } @empty {\n <p class=\"geo-map-layer-panel__empty\">Chưa có lớp bản đồ.</p>\n }\n </div>\n</section>\n","import {\n ChangeDetectionStrategy,\n Component,\n input,\n output,\n ViewEncapsulation,\n} from '@angular/core';\nimport { NzToolTipModule } from 'ng-zorro-antd/tooltip';\nimport { GeoIconComponent } from '../../../geo-icon/geo-icon.component';\n\n/**\n * Bottom-left “Lớp bản đồ” thumbnail card to open layer panel.\n *\n * @summary Bottom-left layer entry card.\n * @whenToUse Entry point to layers / legend overlays.\n * @doNotUseWhen Inline layer checklist — use geo-map-layer-panel.\n */\n@Component({\n selector: 'geo-map-layer-card',\n standalone: true,\n imports: [GeoIconComponent, NzToolTipModule],\n templateUrl: './geo-map-layer-card.component.html',\n styleUrl: './geo-map-layer-card.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: { class: 'geo-map-layer-card-host' },\n})\nexport class GeoMapLayerCardComponent {\n readonly title = input('Lớp bản đồ');\n readonly previewUrl = input<string | undefined>(undefined);\n readonly clicked = output<void>();\n}\n","<button\n type=\"button\"\n class=\"geo-map-layer-card\"\n [nz-tooltip]=\"title()\"\n nzTooltipPlacement=\"top\"\n [attr.aria-label]=\"title()\"\n (click)=\"clicked.emit()\"\n>\n @if (previewUrl()) {\n <img class=\"geo-map-layer-card__preview\" [src]=\"previewUrl()\" alt=\"\" />\n } @else {\n <span class=\"geo-map-layer-card__preview geo-map-layer-card__preview--fallback\">\n <geo-icon type=\"appstore\" size=\"md\" />\n </span>\n }\n <span class=\"geo-map-layer-card__label\">{{ title() }}</span>\n</button>\n","import {\n ChangeDetectionStrategy,\n Component,\n input,\n model,\n output,\n ViewEncapsulation,\n} from '@angular/core';\nimport { GeoIconComponent } from '../../../geo-icon/geo-icon.component';\nimport { GeoMapController } from '../../geo-map.controller';\nimport type { GeoMapLayerConfig, GeoMapLegendItem } from '../../geo-map.types';\nimport { GeoMapLayerPanelComponent } from '../geo-map-layer-panel/geo-map-layer-panel.component';\n\n/**\n * Floating popover for map layer visibility / opacity.\n *\n * @summary Popover lớp bản đồ (accordion + radio/checkbox + độ mờ).\n * @whenToUse Opened from toolbar layers action.\n * @doNotUseWhen Always-visible panels that crowd the map.\n */\n@Component({\n selector: 'geo-map-layers-drawer',\n standalone: true,\n imports: [GeoIconComponent, GeoMapLayerPanelComponent],\n templateUrl: './geo-map-layers-drawer.component.html',\n styleUrl: './geo-map-layers-drawer.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {\n class: 'geo-map-layers-drawer-host',\n '[class.geo-map-layers-drawer-host--open]': 'open()',\n },\n})\nexport class GeoMapLayersDrawerComponent {\n readonly controller = input<GeoMapController | null>(null);\n readonly open = model(false);\n readonly title = input('Lớp bản đồ');\n readonly legendItems = input<GeoMapLegendItem[]>([]);\n /** Kept for API compat — opacity is per-layer in the new panel. */\n readonly showOpacity = input(false);\n /** Kept for API compat — legend lives outside this popover. */\n readonly showLegend = input(false);\n readonly layers = model<GeoMapLayerConfig[]>([]);\n\n readonly closed = output<void>();\n\n onClose(): void {\n this.open.set(false);\n this.closed.emit();\n }\n}\n","@if (open()) {\n <aside class=\"geo-map-layers-drawer\" role=\"dialog\" aria-label=\"Lớp bản đồ\">\n <header class=\"geo-map-layers-drawer__header\">\n <h3 class=\"geo-map-layers-drawer__title\">{{ title() }}</h3>\n <button\n type=\"button\"\n class=\"geo-map-layers-drawer__close\"\n aria-label=\"Đóng lớp bản đồ\"\n (click)=\"onClose()\"\n >\n <geo-icon type=\"close\" size=\"sm\" />\n </button>\n </header>\n\n <div class=\"geo-map-layers-drawer__body\">\n <geo-map-layer-panel\n [embedded]=\"true\"\n [controller]=\"controller()\"\n [(layers)]=\"layers\"\n />\n </div>\n </aside>\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n input,\n model,\n ViewEncapsulation,\n} from '@angular/core';\nimport { GeoFormModalComponent } from '../../../geo-form-modal/geo-form-modal.component';\nimport { GEO_MAP_DEFAULT_HELP_SECTIONS } from '../../geo-map.constants';\n\nexport interface GeoMapHelpSection {\n title: string;\n body: string;\n}\n\n/**\n * Map help popup (text hướng dẫn sử dụng).\n *\n * @summary Pop-up hướng dẫn sử dụng trên bản đồ.\n * @whenToUse UC-24 xem hướng dẫn sử dụng.\n * @doNotUseWhen Full docs site pages.\n */\n@Component({\n selector: 'geo-map-help',\n standalone: true,\n imports: [GeoFormModalComponent],\n templateUrl: './geo-map-help.component.html',\n styleUrl: './geo-map-help.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: { class: 'geo-map-help-host' },\n})\nexport class GeoMapHelpComponent {\n readonly open = model(false);\n readonly title = input('Hướng dẫn sử dụng');\n readonly sections = input<GeoMapHelpSection[]>(GEO_MAP_DEFAULT_HELP_SECTIONS);\n\n close(): void {\n this.open.set(false);\n }\n}\n","<geo-form-modal\n [(open)]=\"open\"\n [title]=\"title()\"\n [titleUppercase]=\"false\"\n [readonly]=\"true\"\n cancelText=\"Đóng\"\n [width]=\"560\"\n wrapClassName=\"geo-map-help-modal\"\n (cancel)=\"close()\"\n>\n <div class=\"geo-map-help\">\n <p class=\"geo-map-help__note\">\n Nội dung mẫu cho Storybook. Nội dung chính thức do nghiệp vụ cung cấp\n (UC-24).\n </p>\n @for (section of sections(); track section.title) {\n <section class=\"geo-map-help__section\">\n <h4 class=\"geo-map-help__section-title\">{{ section.title }}</h4>\n <p class=\"geo-map-help__section-body\">{{ section.body }}</p>\n </section>\n }\n </div>\n</geo-form-modal>\n","import {\n ChangeDetectionStrategy,\n Component,\n DestroyRef,\n effect,\n inject,\n input,\n model,\n OnDestroy,\n signal,\n ViewEncapsulation,\n} from '@angular/core';\nimport type BaseLayer from 'ol/layer/Base';\nimport Layer from 'ol/layer/Layer';\nimport type RenderEvent from 'ol/render/Event';\nimport { unByKey } from 'ol/Observable';\nimport type { EventsKey } from 'ol/events';\nimport { GeoMapController } from '../../geo-map.controller';\nimport { GEO_MAP_BASEMAP_LAYER_ID } from '../../geo-map.constants';\n\n/**\n * Swipe compare between basemap and the top visible thematic overlay.\n *\n * @summary Layer swipe compare control.\n * @whenToUse So sánh chồng xếp trực quan (UC-17 UX).\n * @doNotUseWhen Full geometry intersection analysis — use analysis tools.\n */\n@Component({\n selector: 'geo-map-swipe',\n standalone: true,\n imports: [],\n templateUrl: './geo-map-swipe.component.html',\n styleUrl: './geo-map-swipe.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {\n class: 'geo-map-swipe-host',\n '[class.geo-map-swipe-host--active]': 'active()',\n },\n})\nexport class GeoMapSwipeComponent implements OnDestroy {\n private readonly destroyRef = inject(DestroyRef);\n\n readonly controller = input<GeoMapController | null>(null);\n /** When true, swipe mode is on. */\n readonly active = model(false);\n /** 0–100, left portion shows clipped overlay. */\n readonly position = model(50);\n /** Optional explicit overlay layer id; defaults to top visible non-basemap. */\n readonly layerId = input<string | null>(null);\n\n readonly dragging = signal(false);\n\n private keys: EventsKey[] = [];\n private boundLayer: BaseLayer | null = null;\n\n constructor() {\n effect(() => {\n const active = this.active();\n const ctrl = this.controller();\n const pos = this.position();\n const layerId = this.layerId();\n this.teardownClip();\n if (!active || !ctrl) {\n return;\n }\n this.attachClip(ctrl, pos, layerId);\n });\n\n this.destroyRef.onDestroy(() => this.teardownClip());\n }\n\n ngOnDestroy(): void {\n this.teardownClip();\n }\n\n onPointerDown(event: PointerEvent): void {\n if (!this.active()) {\n return;\n }\n this.dragging.set(true);\n (event.target as HTMLElement).setPointerCapture?.(event.pointerId);\n this.updateFromEvent(event);\n }\n\n onPointerMove(event: PointerEvent): void {\n if (!this.dragging()) {\n return;\n }\n this.updateFromEvent(event);\n }\n\n onPointerUp(): void {\n this.dragging.set(false);\n }\n\n private updateFromEvent(event: PointerEvent): void {\n const host = (event.currentTarget as HTMLElement).closest(\n '.geo-map-swipe',\n ) as HTMLElement | null;\n if (!host) {\n return;\n }\n const rect = host.getBoundingClientRect();\n const ratio = Math.min(\n 100,\n Math.max(0, ((event.clientX - rect.left) / rect.width) * 100),\n );\n this.position.set(ratio);\n this.controller()?.getMap()?.render();\n }\n\n private attachClip(\n ctrl: GeoMapController,\n pos: number,\n preferredId: string | null,\n ): void {\n const map = ctrl.getMap();\n if (!map) {\n return;\n }\n\n const managed = ctrl.getLayers();\n const overlay =\n (preferredId\n ? managed.find((item) => item.id === preferredId)\n : undefined) ??\n [...managed]\n .filter(\n (item) =>\n item.id !== GEO_MAP_BASEMAP_LAYER_ID &&\n !item.config.basemap &&\n (item.config.visible ?? true),\n )\n .sort((a, b) => (b.config.zIndex ?? 0) - (a.config.zIndex ?? 0))[0];\n\n if (!overlay) {\n return;\n }\n\n this.boundLayer = overlay.layer;\n const layer = overlay.layer as Layer;\n\n const prerender = (event: RenderEvent): void => {\n const ctx = event.context as CanvasRenderingContext2D | undefined;\n const size = map.getSize();\n if (!ctx || !size) {\n return;\n }\n const width = (size[0] * this.position()) / 100;\n ctx.save();\n ctx.beginPath();\n ctx.rect(0, 0, width, size[1]);\n ctx.clip();\n };\n\n const postrender = (event: RenderEvent): void => {\n const ctx = event.context as CanvasRenderingContext2D | undefined;\n ctx?.restore();\n };\n\n this.keys = [\n // OL Layer supports prerender/postrender; typings on BaseLayer are incomplete in some versions.\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (layer as any).on('prerender', prerender),\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (layer as any).on('postrender', postrender),\n ];\n map.render();\n void pos;\n }\n\n private teardownClip(): void {\n unByKey(this.keys);\n this.keys = [];\n this.boundLayer = null;\n this.controller()?.getMap()?.render();\n }\n}\n","@if (active()) {\n <div\n class=\"geo-map-swipe\"\n (pointerdown)=\"onPointerDown($event)\"\n (pointermove)=\"onPointerMove($event)\"\n (pointerup)=\"onPointerUp()\"\n (pointercancel)=\"onPointerUp()\"\n >\n <div\n class=\"geo-map-swipe__divider\"\n [style.left.%]=\"position()\"\n role=\"slider\"\n tabindex=\"0\"\n aria-label=\"Vị trí so sánh lớp\"\n [attr.aria-valuenow]=\"position()\"\n aria-valuemin=\"0\"\n aria-valuemax=\"100\"\n >\n <span class=\"geo-map-swipe__handle\"></span>\n </div>\n <div class=\"geo-map-swipe__hint\">Kéo để so sánh lớp chồng xếp</div>\n </div>\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n input,\n model,\n output,\n ViewEncapsulation,\n} from '@angular/core';\nimport { GeoButtonComponent } from '../../../geo-button/geo-button.component';\nimport { GeoIconComponent } from '../../../geo-icon/geo-icon.component';\nimport { GeoTreeComponent } from '../../../geo-tree/geo-tree.component';\nimport type { GeoTreeNode } from '../../../geo-tree/geo-tree.types';\n\n/**\n * Administrative unit filter tree (TCQH.14 — cấp xã).\n *\n * @summary Panel lọc cây đơn vị hành chính cấp xã trên bản đồ.\n * @whenToUse Tra cứu bản đồ cần lọc theo xã / phường.\n * @doNotUseWhen Global org charts outside map context.\n */\n@Component({\n selector: 'geo-map-admin-filter',\n standalone: true,\n imports: [GeoButtonComponent, GeoIconComponent, GeoTreeComponent],\n templateUrl: './geo-map-admin-filter.component.html',\n styleUrl: './geo-map-admin-filter.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {\n class: 'geo-map-admin-filter-host',\n '[class.geo-map-admin-filter-host--open]': 'open()',\n },\n})\nexport class GeoMapAdminFilterComponent {\n readonly open = model(false);\n readonly title = input('Đơn vị hành chính');\n readonly nodes = input<GeoTreeNode[]>([]);\n readonly checkedKeys = model<Array<string | number>>([]);\n readonly expandedKeys = model<Array<string | number>>([]);\n\n readonly apply = output<Array<string | number>>();\n readonly reset = output<void>();\n readonly fitProvince = output<void>();\n readonly closed = output<void>();\n readonly selectionChange = output<Array<string | number>>();\n\n onCheckedChange(keys: Array<string | number>): void {\n this.checkedKeys.set(keys);\n this.selectionChange.emit(keys);\n }\n\n onApply(): void {\n this.apply.emit(this.checkedKeys());\n }\n\n onReset(): void {\n this.checkedKeys.set([]);\n this.reset.emit();\n }\n\n onFitProvince(): void {\n this.fitProvince.emit();\n }\n\n close(): void {\n this.open.set(false);\n this.closed.emit();\n }\n}\n","@if (open()) {\n <section class=\"geo-map-admin-filter\" aria-label=\"Lọc đơn vị hành chính\">\n <header class=\"geo-map-admin-filter__header\">\n <h3 class=\"geo-map-admin-filter__title\">{{ title() }}</h3>\n <button\n type=\"button\"\n class=\"geo-map-admin-filter__icon-btn\"\n aria-label=\"Đóng bộ lọc\"\n (click)=\"close()\"\n >\n <geo-icon type=\"close\" size=\"sm\" />\n </button>\n </header>\n\n <div class=\"geo-map-admin-filter__body\">\n <geo-tree\n [nodes]=\"nodes()\"\n [checkable]=\"true\"\n [checkedKeys]=\"checkedKeys()\"\n [expandedKeys]=\"expandedKeys()\"\n (checkedKeysChange)=\"onCheckedChange($event)\"\n (expandedKeysChange)=\"expandedKeys.set($event)\"\n />\n </div>\n\n <footer class=\"geo-map-admin-filter__footer\">\n <geo-button appearance=\"secondary\" (clicked)=\"onFitProvince()\">\n Xem toàn tỉnh\n </geo-button>\n <div class=\"geo-map-admin-filter__footer-end\">\n <geo-button appearance=\"secondary\" (clicked)=\"onReset()\">\n Đặt lại\n </geo-button>\n <geo-button appearance=\"primary\" (clicked)=\"onApply()\">\n Áp dụng\n </geo-button>\n </div>\n </footer>\n </section>\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n input,\n ViewEncapsulation,\n} from '@angular/core';\nimport { GeoIconComponent } from '../../../geo-icon/geo-icon.component';\n\n/**\n * Bottom pill showing current administrative location.\n *\n * @summary Bottom pill showing current administrative location.\n * @whenToUse Display resolved address / ĐVHC under the map.\n * @doNotUseWhen Form address fields.\n */\n@Component({\n selector: 'geo-map-location-chip',\n standalone: true,\n imports: [GeoIconComponent],\n templateUrl: './geo-map-location-chip.component.html',\n styleUrl: './geo-map-location-chip.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: { class: 'geo-map-location-chip-host' },\n})\nexport class GeoMapLocationChipComponent {\n readonly label = input('');\n readonly icon = input('environment');\n}\n","@if (label()) {\n <div class=\"geo-map-location-chip\" role=\"status\">\n <geo-icon [type]=\"icon()\" size=\"sm\" />\n <span class=\"geo-map-location-chip__label\">{{ label() }}</span>\n </div>\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n input,\n model,\n output,\n ViewEncapsulation,\n} from '@angular/core';\nimport { GeoIconComponent } from '../../../geo-icon/geo-icon.component';\nimport type {\n GeoMapParcelAudience,\n GeoMapParcelDetail,\n} from '../../geo-map.types';\n\ninterface ParcelFieldRow {\n label: string;\n value: string;\n}\n\ninterface ParcelSection {\n id: string;\n title: string;\n icon: string;\n /** Key-value rows (Thông tin chung, Địa chỉ). */\n rows?: ParcelFieldRow[];\n /** Single value under section title (Loại đất, Trạng thái, Giá đất). */\n value?: string;\n /** Sơ đồ thửa. */\n diagram?: boolean;\n}\n\n/**\n * Parcel / planning result detail panel (TCQH.12).\n *\n * @summary Popup / panel chi tiết kết quả tra cứu thửa đất.\n * @whenToUse Hiển thị thông tin thửa + quy hoạch sau khi chọn kết quả.\n * @doNotUseWhen Full CADASTRE edit forms.\n */\n@Component({\n selector: 'geo-map-parcel-popup',\n standalone: true,\n imports: [GeoIconComponent],\n templateUrl: './geo-map-parcel-popup.component.html',\n styleUrl: './geo-map-parcel-popup.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {\n class: 'geo-map-parcel-popup-host',\n '[class.geo-map-parcel-popup-host--open]': 'open()',\n },\n})\nexport class GeoMapParcelPopupComponent {\n readonly open = model(false);\n readonly title = input('Thông tin thửa đất');\n readonly parcel = input<GeoMapParcelDetail | null>(null);\n readonly audience = input<GeoMapParcelAudience>('citizen');\n /** Giữ tương thích API cũ; footer xuất file không còn trong layout thiết kế. */\n readonly showExport = input(false);\n\n readonly closed = output<void>();\n readonly back = output<void>();\n readonly exportClick = output<GeoMapParcelDetail>();\n readonly diagramClick = output<GeoMapParcelDetail>();\n\n readonly sections = computed<ParcelSection[]>(() => {\n const data = this.parcel();\n if (!data) {\n return [];\n }\n\n const generalRows: ParcelFieldRow[] = [\n { label: 'Mã thửa đất', value: data.parcelCode ?? '' },\n { label: 'Số tờ', value: data.sheetNumber ?? '' },\n { label: 'Số thửa', value: data.parcelNumber ?? '' },\n { label: 'Diện tích', value: data.area ?? data.legalArea ?? '' },\n ].filter((row) => !!row.value.trim());\n\n const addressRows: ParcelFieldRow[] = [\n { label: 'Xã', value: data.ward ?? '' },\n { label: 'Tỉnh', value: data.province ?? '' },\n ].filter((row) => !!row.value.trim());\n\n const sections: ParcelSection[] = [\n {\n id: 'general',\n title: 'Thông tin chung',\n icon: 'info-circle',\n rows: generalRows,\n },\n {\n id: 'landUse',\n title: 'Loại đất',\n icon: 'file-text',\n value: data.landUse,\n },\n {\n id: 'address',\n title: 'Địa chỉ',\n icon: 'environment',\n rows: addressRows,\n },\n {\n id: 'registration',\n title: 'Trạng thái đăng ký',\n icon: 'profile',\n value: data.registrationStatus,\n },\n {\n id: 'price',\n title: 'Giá đất',\n icon: 'search',\n value: data.landPrice?.trim() || 'Đang cập nhật',\n },\n {\n id: 'diagram',\n title: 'Sơ đồ thửa đất',\n icon: 'global',\n diagram: true,\n },\n ];\n\n if (this.audience() === 'specialist' && data.shapeInfo?.trim()) {\n sections.splice(-1, 0, {\n id: 'shape',\n title: 'Thông tin hình thể',\n icon: 'border-outer',\n value: data.shapeInfo,\n });\n }\n\n if (this.audience() === 'specialist' && data.planningInfo?.trim()) {\n sections.splice(-1, 0, {\n id: 'planning',\n title: 'Thông tin quy hoạch',\n icon: 'bank',\n value: data.planningInfo,\n });\n }\n\n for (const extra of data.extraFields ?? []) {\n if (!extra.value?.trim()) {\n continue;\n }\n sections.splice(-1, 0, {\n id: `extra-${extra.label}`,\n title: extra.label,\n icon: 'file-text',\n value: extra.value,\n });\n }\n\n return sections.filter(\n (section) =>\n section.diagram ||\n !!section.value?.trim() ||\n (section.rows?.length ?? 0) > 0,\n );\n });\n\n close(): void {\n this.open.set(false);\n this.closed.emit();\n }\n\n onBack(): void {\n this.open.set(false);\n this.back.emit();\n }\n\n onExport(): void {\n const data = this.parcel();\n if (data) {\n this.exportClick.emit(data);\n }\n }\n\n onDiagramDetail(): void {\n const data = this.parcel();\n if (data) {\n this.diagramClick.emit(data);\n }\n }\n}\n","@if (open() && parcel(); as data) {\n <aside class=\"geo-map-parcel-popup\" role=\"dialog\" aria-label=\"Thông tin thửa đất\">\n <header class=\"geo-map-parcel-popup__header\">\n <button\n type=\"button\"\n class=\"geo-map-parcel-popup__back\"\n aria-label=\"Quay lại\"\n (click)=\"onBack()\"\n >\n <geo-icon type=\"arrow-left\" size=\"sm\" />\n </button>\n <h3 class=\"geo-map-parcel-popup__title\">{{ title() }}</h3>\n <button\n type=\"button\"\n class=\"geo-map-parcel-popup__close\"\n aria-label=\"Đóng chi tiết\"\n (click)=\"close()\"\n >\n <geo-icon type=\"close\" size=\"sm\" />\n </button>\n </header>\n\n <div class=\"geo-map-parcel-popup__body\">\n @for (section of sections(); track section.id) {\n <section class=\"geo-map-parcel-popup__section\">\n <div class=\"geo-map-parcel-popup__section-head\">\n <h4 class=\"geo-map-parcel-popup__section-title\">\n <geo-icon [type]=\"section.icon\" size=\"sm\" />\n <span>{{ section.title }}</span>\n </h4>\n @if (section.diagram) {\n <button\n type=\"button\"\n class=\"geo-map-parcel-popup__link\"\n (click)=\"onDiagramDetail()\"\n >\n Chi tiết\n </button>\n }\n </div>\n\n @if (section.rows?.length) {\n <dl class=\"geo-map-parcel-popup__rows\">\n @for (row of section.rows; track row.label) {\n <div class=\"geo-map-parcel-popup__row\">\n <dt>{{ row.label }}:</dt>\n <dd>{{ row.value }}</dd>\n </div>\n }\n </dl>\n } @else if (section.value) {\n <p class=\"geo-map-parcel-popup__value\">{{ section.value }}</p>\n }\n\n @if (section.diagram) {\n <div class=\"geo-map-parcel-popup__diagram\">\n @if (data.diagramUrl) {\n <img\n class=\"geo-map-parcel-popup__diagram-img\"\n [src]=\"data.diagramUrl\"\n alt=\"Sơ đồ thửa đất\"\n />\n } @else {\n <div class=\"geo-map-parcel-popup__diagram-placeholder\" aria-hidden=\"true\">\n <geo-icon type=\"picture\" size=\"lg\" />\n <span>Sơ đồ thửa đất</span>\n </div>\n }\n </div>\n }\n </section>\n }\n </div>\n </aside>\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n input,\n model,\n output,\n signal,\n ViewEncapsulation,\n} from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { GeoButtonComponent } from '../../../geo-button/geo-button.component';\nimport { GeoIconComponent } from '../../../geo-icon/geo-icon.component';\nimport { GeoInputComponent } from '../../../geo-input/geo-input.component';\nimport { GeoPaginationComponent } from '../../../geo-pagination/geo-pagination.component';\nimport type {\n GeoMapSearchMode,\n GeoMapSearchQuery,\n GeoMapSearchResultItem,\n} from '../../geo-map.types';\n\ninterface SearchFieldDef {\n key: string;\n label: string;\n placeholder: string;\n type?: 'text' | 'number';\n}\n\ninterface SearchModeTile {\n id: GeoMapSearchMode;\n label: string;\n icon: string;\n}\n\nconst MODE_TILES: SearchModeTile[] = [\n { id: 'owner', label: 'Chủ sử dụng', icon: 'user' },\n { id: 'certificate', label: 'Giấy chứng nhận', icon: 'file-text' },\n { id: 'coordinates', label: 'Tọa độ', icon: 'aim' },\n { id: 'parcel', label: 'Thửa đất', icon: 'home' },\n { id: 'address', label: 'Địa chỉ', icon: 'environment' },\n];\n\nconst MODE_HEADINGS: Record<GeoMapSearchMode, string> = {\n owner: 'Tìm theo chủ sử dụng',\n certificate: 'Tìm theo giấy chứng nhận',\n coordinates: 'Tìm theo tọa độ',\n address: 'Tìm theo địa chỉ',\n parcel: 'Tìm theo thửa đất',\n};\n\nconst MODE_FIELDS: Record<GeoMapSearchMode, SearchFieldDef[]> = {\n owner: [\n {\n key: 'idNumber',\n label: 'CMND / CCCD',\n placeholder: 'Nhập số CMND/CCCD',\n },\n {\n key: 'ownerName',\n label: 'Tên chủ sử dụng',\n placeholder: 'Nhập tên chủ sử dụng',\n },\n ],\n certificate: [\n {\n key: 'serial',\n label: 'Số serial GCN',\n placeholder: 'Nhập số serial',\n },\n {\n key: 'bookNumber',\n label: 'Số vào sổ',\n placeholder: 'Nhập số vào sổ',\n },\n {\n key: 'dossierCode',\n label: 'Mã hồ sơ gốc',\n placeholder: 'Nhập mã hồ sơ gốc',\n },\n ],\n coordinates: [\n {\n key: 'longitude',\n label: 'Kinh độ',\n placeholder: 'Ví dụ: 108.45',\n type: 'number',\n },\n {\n key: 'latitude',\n label: 'Vĩ độ',\n placeholder: 'Ví dụ: 11.94',\n type: 'number',\n },\n ],\n address: [\n {\n key: 'address',\n label: 'Địa chỉ / tên đường',\n placeholder: 'Nhập địa chỉ hoặc tên đường',\n },\n ],\n parcel: [\n {\n key: 'sheetNumber',\n label: 'Số tờ',\n placeholder: 'Nhập số tờ (VD: 20)',\n },\n {\n key: 'parcelNumber',\n label: 'Số thửa',\n placeholder: 'Nhập số thửa (VD: 19)',\n },\n ],\n};\n\n/**\n * Map search panel for TCQH.7–11 (host supplies results / API).\n *\n * @summary Panel tra cứu thửa đất theo nhiều tiêu chí.\n * @whenToUse Cổng / màn tra cứu bản đồ quy hoạch.\n * @doNotUseWhen Global site search outside the map context.\n */\n@Component({\n selector: 'geo-map-search',\n standalone: true,\n imports: [\n FormsModule,\n GeoButtonComponent,\n GeoIconComponent,\n GeoInputComponent,\n GeoPaginationComponent,\n ],\n templateUrl: './geo-map-search.component.html',\n styleUrl: './geo-map-search.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {\n class: 'geo-map-search-host',\n '[class.geo-map-search-host--open]': 'open()',\n },\n})\nexport class GeoMapSearchComponent {\n readonly open = model(false);\n readonly title = input('Tra cứu thông tin quy hoạch theo');\n readonly mode = model<GeoMapSearchMode>('parcel');\n readonly results = input<GeoMapSearchResultItem[]>([]);\n readonly loading = input(false);\n readonly pageIndex = model(1);\n readonly pageSize = model(5);\n readonly total = input(0);\n readonly emptyText = input('Chưa có kết quả tra cứu.');\n\n readonly search = output<GeoMapSearchQuery>();\n readonly reset = output<void>();\n readonly resultSelect = output<GeoMapSearchResultItem>();\n readonly closed = output<void>();\n\n readonly modeTiles = MODE_TILES;\n readonly values = signal<Record<string, string>>({});\n /** Form dưới lưới icon — thu gọn bằng X cạnh tiêu đề form. */\n readonly formOpen = signal(false);\n readonly hasSearched = signal(false);\n\n readonly fields = computed(() => MODE_FIELDS[this.mode()] ?? []);\n readonly modeHeading = computed(\n () => MODE_HEADINGS[this.mode()] ?? 'Tìm kiếm',\n );\n readonly fieldsInline = computed(() => this.fields().length === 2);\n\n readonly resolvedTotal = computed(() => {\n const total = this.total();\n return total > 0 ? total : this.results().length;\n });\n\n selectMode(mode: GeoMapSearchMode): void {\n if (this.mode() !== mode) {\n this.mode.set(mode);\n this.values.set({});\n this.hasSearched.set(false);\n }\n this.formOpen.set(true);\n }\n\n collapseForm(): void {\n this.formOpen.set(false);\n }\n\n setField(key: string, value: string): void {\n this.values.update((current) => ({ ...current, [key]: value }));\n }\n\n fieldValue(key: string): string {\n return this.values()[key] ?? '';\n }\n\n submit(): void {\n this.hasSearched.set(true);\n this.search.emit({\n mode: this.mode(),\n values: { ...this.values() },\n });\n }\n\n onReset(): void {\n this.values.set({});\n this.pageIndex.set(1);\n this.hasSearched.set(false);\n this.reset.emit();\n }\n\n selectResult(item: GeoMapSearchResultItem): void {\n this.resultSelect.emit(item);\n }\n\n mapLabel(item: GeoMapSearchResultItem): string {\n const sheet = item.parcel?.sheetNumber;\n const parcel = item.parcel?.parcelNumber;\n if (sheet || parcel) {\n return `Bản đồ: số tờ ${sheet ?? '—'}, số thửa ${parcel ?? '—'}`;\n }\n return item.title;\n }\n\n close(): void {\n this.open.set(false);\n this.formOpen.set(false);\n this.closed.emit();\n }\n}\n","@if (open()) {\n <section class=\"geo-map-search\" aria-label=\"Tra cứu thông tin quy hoạch\">\n <header class=\"geo-map-search__header\">\n <h3 class=\"geo-map-search__title\">{{ title() }}</h3>\n <button\n type=\"button\"\n class=\"geo-map-search__icon-btn\"\n aria-label=\"Đóng tra cứu\"\n (click)=\"close()\"\n >\n <geo-icon type=\"close\" size=\"sm\" />\n </button>\n </header>\n\n <div class=\"geo-map-search__body\">\n <div class=\"geo-map-search__modes\" role=\"listbox\" aria-label=\"Hình thức tra cứu\">\n @for (tile of modeTiles; track tile.id) {\n <button\n type=\"button\"\n class=\"geo-map-search__mode\"\n role=\"option\"\n [class.geo-map-search__mode--active]=\"formOpen() && mode() === tile.id\"\n [attr.aria-selected]=\"formOpen() && mode() === tile.id\"\n (click)=\"selectMode(tile.id)\"\n >\n <span class=\"geo-map-search__mode-icon\" aria-hidden=\"true\">\n <geo-icon [type]=\"tile.icon\" size=\"md\" />\n </span>\n <span class=\"geo-map-search__mode-label\">{{ tile.label }}</span>\n </button>\n }\n </div>\n\n @if (formOpen()) {\n <section class=\"geo-map-search__form\" [attr.aria-label]=\"modeHeading()\">\n <div class=\"geo-map-search__form-head\">\n <h4 class=\"geo-map-search__form-title\">{{ modeHeading() }}</h4>\n <button\n type=\"button\"\n class=\"geo-map-search__icon-btn geo-map-search__icon-btn--sm\"\n aria-label=\"Thu gọn form tìm kiếm\"\n (click)=\"collapseForm()\"\n >\n <geo-icon type=\"close\" size=\"sm\" />\n </button>\n </div>\n\n <div\n class=\"geo-map-search__fields\"\n [class.geo-map-search__fields--inline]=\"fieldsInline()\"\n >\n @for (field of fields(); track field.key) {\n <geo-input\n [label]=\"field.label\"\n [placeholder]=\"field.placeholder\"\n [type]=\"field.type ?? 'text'\"\n [ngModel]=\"fieldValue(field.key)\"\n (ngModelChange)=\"setField(field.key, $event)\"\n (enterPressed)=\"submit()\"\n [allowClear]=\"true\"\n [block]=\"true\"\n />\n }\n </div>\n\n <div class=\"geo-map-search__actions\">\n <geo-button\n appearance=\"primary\"\n icon=\"search\"\n [disabled]=\"loading()\"\n (clicked)=\"submit()\"\n >\n Tìm kiếm\n </geo-button>\n <geo-button\n appearance=\"secondary\"\n icon=\"reload\"\n (clicked)=\"onReset()\"\n >\n Đặt lại\n </geo-button>\n </div>\n </section>\n }\n\n @if (formOpen() && (loading() || hasSearched())) {\n <div class=\"geo-map-search__results\" aria-live=\"polite\">\n @if (loading()) {\n <p class=\"geo-map-search__hint\">Đang tìm kiếm…</p>\n } @else if (!results().length) {\n <p class=\"geo-map-search__hint\">{{ emptyText() }}</p>\n } @else {\n <ul class=\"geo-map-search__list\">\n @for (item of results(); track item.id) {\n <li class=\"geo-map-search__result\">\n <div class=\"geo-map-search__result-head\">\n <span class=\"geo-map-search__result-map\">{{ mapLabel(item) }}</span>\n <button\n type=\"button\"\n class=\"geo-map-search__detail-link\"\n (click)=\"selectResult(item)\"\n >\n Chi tiết\n </button>\n </div>\n @if (item.parcel; as parcel) {\n <dl class=\"geo-map-search__result-meta\">\n @if (parcel.ward) {\n <div class=\"geo-map-search__result-row\">\n <dt>Xã:</dt>\n <dd>{{ parcel.ward }}</dd>\n </div>\n }\n @if (parcel.province) {\n <div class=\"geo-map-search__result-row\">\n <dt>Tỉnh:</dt>\n <dd>{{ parcel.province }}</dd>\n </div>\n }\n @if (parcel.area) {\n <div class=\"geo-map-search__result-row\">\n <dt>Diện tích:</dt>\n <dd>{{ parcel.area }}</dd>\n </div>\n }\n </dl>\n } @else if (item.subtitle) {\n <p class=\"geo-map-search__result-sub\">{{ item.subtitle }}</p>\n }\n </li>\n }\n </ul>\n\n @if (resolvedTotal() > pageSize()) {\n <geo-pagination\n class=\"geo-map-search__paging\"\n [(pageIndex)]=\"pageIndex\"\n [(pageSize)]=\"pageSize\"\n [total]=\"resolvedTotal()\"\n size=\"small\"\n [simple]=\"true\"\n />\n }\n }\n </div>\n }\n </div>\n </section>\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n DestroyRef,\n effect,\n inject,\n input,\n model,\n output,\n signal,\n untracked,\n viewChild,\n ViewEncapsulation,\n} from '@angular/core';\nimport {\n GEO_MAP_DEFAULT_BASEMAP_OPTIONS,\n GEO_MAP_DEFAULT_CENTER,\n GEO_MAP_DEFAULT_PROVINCE_EXTENT_4326,\n GEO_MAP_DEFAULT_TOOLBAR_ACTIONS,\n GEO_MAP_DEFAULT_ZOOM,\n GEO_MAP_DEMO_ADMIN_NODES,\n GEO_MAP_DEMO_LEGEND_ITEMS,\n GEO_MAP_DEMO_PARCEL_DETAIL,\n GEO_MAP_DEMO_THEMATIC_LAYERS,\n GEO_MAP_TRAFFIC_LAYER_ID,\n GEO_MAP_TRAFFIC_OVERLAY,\n} from '../../geo-map.constants';\nimport { GeoMapAdminFilterComponent } from '../geo-map-admin-filter/geo-map-admin-filter.component';\nimport { GeoMapBasemapSwitcherComponent } from '../geo-map-basemap-switcher/geo-map-basemap-switcher.component';\nimport { GeoMapHelpComponent } from '../geo-map-help/geo-map-help.component';\nimport { GeoMapLayersDrawerComponent } from '../geo-map-layers-drawer/geo-map-layers-drawer.component';\nimport { GeoMapLegendComponent } from '../geo-map-legend/geo-map-legend.component';\nimport { GeoMapLocationChipComponent } from '../geo-map-location-chip/geo-map-location-chip.component';\nimport { GeoMapMeasureComponent } from '../geo-map-measure/geo-map-measure.component';\nimport { GeoMapParcelPopupComponent } from '../geo-map-parcel-popup/geo-map-parcel-popup.component';\nimport { GeoMapSearchComponent } from '../geo-map-search/geo-map-search.component';\nimport { GeoMapSnapshotComponent } from '../geo-map-snapshot/geo-map-snapshot.component';\nimport { GeoMapSwipeComponent } from '../geo-map-swipe/geo-map-swipe.component';\nimport { GeoMapToolbarComponent } from '../geo-map-toolbar/geo-map-toolbar.component';\nimport { GeoMapZoomComponent } from '../geo-map-zoom/geo-map-zoom.component';\nimport { GeoMapComponent } from '../../geo-map.component';\nimport { GeoMapController } from '../../geo-map.controller';\nimport type { GeoTreeNode } from '../../../geo-tree/geo-tree.types';\nimport type {\n GeoMapBasemap,\n GeoMapBasemapOption,\n GeoMapClickEvent,\n GeoMapLayerConfig,\n GeoMapLegendItem,\n GeoMapMeasureMode,\n GeoMapParcelAudience,\n GeoMapParcelDetail,\n GeoMapSearchQuery,\n GeoMapSearchResultItem,\n GeoMapToolbarAction,\n} from '../../geo-map.types';\n\n/**\n * Map viewport + portal chrome (toolbar, layers drawer, legend, help, swipe, …).\n *\n * @summary Composed map shell with chrome tools for Storybook / portal.\n * @whenToUse Public map page chrome (cổng công khai).\n * @doNotUseWhen Need only the raw OL host — use geo-map.\n */\n@Component({\n selector: 'geo-map-shell',\n standalone: true,\n imports: [\n GeoMapComponent,\n GeoMapToolbarComponent,\n GeoMapZoomComponent,\n GeoMapSnapshotComponent,\n GeoMapMeasureComponent,\n GeoMapLayersDrawerComponent,\n GeoMapLegendComponent,\n GeoMapHelpComponent,\n GeoMapSwipeComponent,\n GeoMapSearchComponent,\n GeoMapAdminFilterComponent,\n GeoMapParcelPopupComponent,\n GeoMapLocationChipComponent,\n GeoMapBasemapSwitcherComponent,\n ],\n templateUrl: './geo-map-shell.component.html',\n styleUrl: './geo-map-shell.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {\n class: 'geo-map-shell-host',\n '[style.height]': 'height()',\n },\n})\nexport class GeoMapShellComponent {\n private readonly destroyRef = inject(DestroyRef);\n private readonly snapshotRef = viewChild(GeoMapSnapshotComponent);\n private readonly zoomRef = viewChild(GeoMapZoomComponent);\n\n readonly center = input<number[]>([...GEO_MAP_DEFAULT_CENTER]);\n readonly zoom = input(GEO_MAP_DEFAULT_ZOOM);\n readonly height = input('560px');\n readonly showMousePosition = input(false);\n readonly basemapOptions = input<GeoMapBasemapOption[]>(\n GEO_MAP_DEFAULT_BASEMAP_OPTIONS,\n );\n readonly toolbarActions = input<GeoMapToolbarAction[]>(\n GEO_MAP_DEFAULT_TOOLBAR_ACTIONS,\n );\n /** Extra overlays merged after demo thematic + traffic. */\n readonly layers = input<GeoMapLayerConfig[]>([]);\n readonly legendItems = input<GeoMapLegendItem[]>(GEO_MAP_DEMO_LEGEND_ITEMS);\n readonly showNav = input(true);\n readonly includeDemoLayers = input(true);\n readonly adminNodes = input<GeoTreeNode[]>(GEO_MAP_DEMO_ADMIN_NODES);\n readonly locationLabel = input('Phường 1 — TP Đà Lạt, Lâm Đồng');\n readonly parcelAudience = input<GeoMapParcelAudience>('citizen');\n readonly provinceExtent = input<readonly [number, number, number, number]>(\n GEO_MAP_DEFAULT_PROVINCE_EXTENT_4326,\n );\n /** When true, shell seeds mock search results (Storybook / demos). */\n readonly demoSearch = input(true);\n /**\n * `location` — Home opens ĐVHC filter (default).\n * `emit` — Home only emits `actionClick` (e.g. portal navigates to login/dashboard).\n */\n readonly homeMode = input<'location' | 'emit'>('location');\n\n readonly basemapId = model('osm');\n readonly measureMode = model<GeoMapMeasureMode>('none');\n readonly checkedMap = model<Record<string, boolean>>({ traffic: false });\n readonly layersOpen = model(false);\n readonly legendOpen = model(false);\n readonly helpOpen = model(false);\n readonly swipeActive = model(false);\n readonly searchOpen = model(false);\n readonly adminFilterOpen = model(false);\n readonly parcelOpen = model(false);\n readonly managedLayers = model<GeoMapLayerConfig[]>([]);\n readonly searchResults = model<GeoMapSearchResultItem[]>([]);\n readonly selectedParcel = model<GeoMapParcelDetail | null>(null);\n readonly adminCheckedKeys = model<Array<string | number>>([]);\n readonly adminExpandedKeys = model<Array<string | number>>(['lam-dong']);\n\n readonly mapReady = output<GeoMapController>();\n readonly mapClick = output<GeoMapClickEvent>();\n readonly locateDenied = output<void>();\n readonly actionClick = output<GeoMapToolbarAction>();\n readonly search = output<GeoMapSearchQuery>();\n readonly searchReset = output<void>();\n readonly resultSelect = output<GeoMapSearchResultItem>();\n readonly parcelExport = output<GeoMapParcelDetail>();\n readonly adminApply = output<Array<string | number>>();\n\n readonly controller = signal<GeoMapController | null>(null);\n /** Active map pointer tool (`none` = default arrow cursor). */\n readonly toolMode = signal<'none' | 'pan' | 'distance' | 'area'>('none');\n /** When true, parcel Back returns to search popover. */\n private readonly parcelFromSearch = signal(false);\n private panCursorBound = false;\n private readonly onPanPointerDown = (): void => {\n if (this.toolMode() === 'pan') {\n this.setMapCursor('grabbing');\n }\n };\n private readonly onPanPointerUp = (): void => {\n if (this.toolMode() === 'pan') {\n this.setMapCursor('grab');\n }\n };\n\n constructor() {\n // Enforce a single left chrome popover (search / ĐVHC / parcel / layers / legend).\n effect(() => {\n const search = this.searchOpen();\n const admin = this.adminFilterOpen();\n const parcel = this.parcelOpen();\n const layers = this.layersOpen();\n const legend = this.legendOpen();\n const openCount =\n Number(search) +\n Number(admin) +\n Number(parcel) +\n Number(layers) +\n Number(legend);\n if (openCount <= 1) {\n return;\n }\n untracked(() => {\n if (parcel) {\n this.closePanelsExcept('parcel');\n } else if (layers) {\n this.closePanelsExcept('layers');\n } else if (legend) {\n this.closePanelsExcept('legend');\n } else if (search) {\n this.closePanelsExcept('search');\n } else {\n this.closePanelsExcept('admin');\n }\n });\n }, { allowSignalWrites: true });\n\n // When measure finishes / cancels, return to idle + default cursor.\n effect(() => {\n const mode = this.measureMode();\n if (mode !== 'none') {\n untracked(() => {\n this.toolMode.set(mode);\n });\n return;\n }\n untracked(() => {\n const tool = this.toolMode();\n if (tool === 'distance' || tool === 'area') {\n this.toolMode.set('none');\n this.setMapCursor(null);\n }\n });\n }, { allowSignalWrites: true });\n\n this.destroyRef.onDestroy(() => this.unbindPanCursor());\n }\n\n readonly basemap = computed<GeoMapBasemap>(() => {\n const id = this.basemapId();\n const option = this.basemapOptions().find((item) => item.id === id);\n return option?.basemap ?? 'osm';\n });\n\n readonly resolvedToolbarActions = computed(() => {\n const mode = this.measureMode();\n const tool = this.toolMode();\n const swipe = this.swipeActive();\n const layersOpen = this.layersOpen();\n const legendOpen = this.legendOpen();\n const searchOpen = this.searchOpen();\n const adminOpen = this.adminFilterOpen();\n const fullscreen = this.zoomRef()?.isFullscreen() ?? false;\n return this.toolbarActions().map((action) => {\n if (action.id === 'home' && this.homeMode() === 'emit') {\n return {\n ...action,\n label: 'Trang chủ',\n tooltip: 'Về trang chủ / đăng nhập',\n };\n }\n if (action.id === 'pan') {\n return { ...action, active: tool === 'pan' && mode === 'none' };\n }\n if (action.id === 'measure-distance') {\n return { ...action, active: mode === 'distance' };\n }\n if (action.id === 'measure-area') {\n return { ...action, active: mode === 'area' };\n }\n if (action.id === 'swipe') {\n return { ...action, active: swipe };\n }\n if (action.id === 'layers') {\n return { ...action, active: layersOpen };\n }\n if (action.id === 'legend') {\n return { ...action, active: legendOpen };\n }\n if (action.id === 'search') {\n return { ...action, active: searchOpen };\n }\n if (action.id === 'admin-filter') {\n return { ...action, active: adminOpen };\n }\n if (action.id === 'fullscreen') {\n return {\n ...action,\n active: fullscreen,\n icon: fullscreen ? 'fullscreen-exit' : 'fullscreen',\n iconSrc: fullscreen ? undefined : action.iconSrc,\n tooltip: fullscreen ? 'Thoát toàn màn hình' : 'Xem toàn bản đồ',\n };\n }\n return action;\n });\n });\n\n readonly resolvedLayers = computed<GeoMapLayerConfig[]>(() => {\n const trafficOn = !!this.checkedMap()['traffic'];\n const traffic: GeoMapLayerConfig = {\n ...GEO_MAP_TRAFFIC_OVERLAY,\n visible: trafficOn,\n };\n const managed = this.managedLayers();\n if (managed.length) {\n return [...managed, traffic];\n }\n const demo = this.includeDemoLayers() ? GEO_MAP_DEMO_THEMATIC_LAYERS : [];\n return [...demo, traffic, ...this.layers()];\n });\n\n onMapReady(ctrl: GeoMapController): void {\n this.controller.set(ctrl);\n if (!this.managedLayers().length) {\n const seed = this.includeDemoLayers()\n ? GEO_MAP_DEMO_THEMATIC_LAYERS.map((layer) => ({ ...layer }))\n : this.layers().map((layer) => ({ ...layer }));\n this.managedLayers.set(seed);\n }\n this.bindPanCursor(ctrl);\n if (this.toolMode() === 'pan') {\n this.applyPanCursor();\n }\n this.mapReady.emit(ctrl);\n }\n\n onMapClick(event: GeoMapClickEvent): void {\n this.parcelFromSearch.set(false);\n this.mapClick.emit(event);\n }\n\n onBasemapChange(basemap: GeoMapBasemap): void {\n this.controller()?.setBasemap(basemap);\n }\n\n onToolbarAction(action: GeoMapToolbarAction): void {\n this.actionClick.emit(action);\n switch (action.id) {\n case 'home':\n if (this.homeMode() === 'location') {\n if (this.adminFilterOpen()) {\n this.adminFilterOpen.set(false);\n this.zoomRef()?.fitProvince();\n } else {\n this.openPanel('admin');\n }\n }\n break;\n case 'admin-filter':\n if (this.adminFilterOpen()) {\n this.adminFilterOpen.set(false);\n this.zoomRef()?.fitProvince();\n } else {\n this.openPanel('admin');\n }\n break;\n case 'fit-province':\n this.zoomRef()?.fitProvince();\n break;\n case 'pan':\n if (this.toolMode() === 'pan') {\n this.exitToolMode();\n } else {\n this.enterPanMode();\n }\n break;\n case 'zoom-in':\n this.zoomRef()?.zoomIn();\n break;\n case 'zoom-out':\n this.zoomRef()?.zoomOut();\n break;\n case 'fullscreen':\n this.zoomRef()?.toggleFullscreen();\n break;\n case 'search':\n if (this.searchOpen()) {\n this.searchOpen.set(false);\n } else {\n this.openPanel('search');\n }\n break;\n case 'layers':\n if (this.layersOpen()) {\n this.layersOpen.set(false);\n } else {\n this.openPanel('layers');\n }\n break;\n case 'legend':\n if (this.legendOpen()) {\n this.legendOpen.set(false);\n } else {\n this.openPanel('legend');\n }\n break;\n case 'help':\n this.helpOpen.set(true);\n break;\n case 'swipe':\n this.measureMode.set('none');\n this.toolMode.set('none');\n this.zoomRef()?.resetInteractionMode();\n this.setMapCursor(null);\n this.swipeActive.update((v) => !v);\n if (this.swipeActive()) {\n this.ensureSwipeOverlayVisible();\n }\n break;\n case 'measure-distance':\n this.swipeActive.set(false);\n this.zoomRef()?.resetInteractionMode();\n if (this.measureMode() === 'distance') {\n this.exitToolMode();\n } else {\n this.toolMode.set('distance');\n this.measureMode.set('distance');\n }\n break;\n case 'measure-area':\n this.swipeActive.set(false);\n this.zoomRef()?.resetInteractionMode();\n if (this.measureMode() === 'area') {\n this.exitToolMode();\n } else {\n this.toolMode.set('area');\n this.measureMode.set('area');\n }\n break;\n case 'snapshot':\n this.snapshotRef()?.capture();\n break;\n default:\n break;\n }\n }\n\n onToolbarToggle(event: {\n action: GeoMapToolbarAction;\n checked: boolean;\n }): void {\n if (event.action.id === 'traffic') {\n this.controller()?.setLayerVisibility(\n GEO_MAP_TRAFFIC_LAYER_ID,\n event.checked,\n );\n }\n }\n\n onSearch(query: GeoMapSearchQuery): void {\n this.search.emit(query);\n if (!this.demoSearch()) {\n return;\n }\n const demo = this.buildDemoSearchResults(query);\n this.searchResults.set(demo);\n const geojsonCollection = {\n type: 'FeatureCollection',\n features: demo\n .map((item) => item.geojson)\n .filter((item): item is object => !!item),\n };\n if (geojsonCollection.features.length) {\n this.controller()?.setHighlightFromGeoJson(geojsonCollection);\n }\n }\n\n onSearchReset(): void {\n this.searchResults.set([]);\n this.selectedParcel.set(null);\n this.parcelOpen.set(false);\n this.controller()?.clearHighlight();\n this.searchReset.emit();\n }\n\n onParcelClosed(): void {\n this.parcelFromSearch.set(false);\n this.selectedParcel.set(null);\n this.controller()?.clearHighlight();\n }\n\n onParcelBack(): void {\n const fromSearch = this.parcelFromSearch();\n this.parcelOpen.set(false);\n if (fromSearch) {\n this.parcelFromSearch.set(false);\n this.openPanel('search');\n return;\n }\n this.selectedParcel.set(null);\n this.controller()?.clearHighlight();\n }\n\n onResultSelect(item: GeoMapSearchResultItem): void {\n this.resultSelect.emit(item);\n if (item.geojson) {\n this.controller()?.setHighlightFromGeoJson(item.geojson);\n } else if (item.extent4326) {\n this.controller()?.fitLonLatExtent(item.extent4326);\n }\n if (item.parcel) {\n this.parcelFromSearch.set(true);\n this.selectedParcel.set(item.parcel);\n this.openPanel('parcel');\n }\n }\n\n onAdminApply(keys: Array<string | number>): void {\n this.adminApply.emit(keys);\n // Demo: fit a sample ward bbox when a leaf is selected.\n if (this.demoSearch() && keys.some((key) => String(key).startsWith('xa-'))) {\n this.controller()?.fitLonLatExtent([108.42, 11.92, 108.5, 11.98], {\n maxZoom: 14,\n });\n }\n }\n\n onFitProvince(): void {\n this.controller()?.fitProvince(this.provinceExtent());\n }\n\n onAdminClosed(): void {\n this.zoomRef()?.fitProvince();\n }\n\n /** Open one left chrome popover; close the others to avoid stacked scroll. */\n private openPanel(\n panel: 'search' | 'admin' | 'parcel' | 'layers' | 'legend',\n ): void {\n this.closePanelsExcept(panel);\n if (panel === 'search') {\n this.searchOpen.set(true);\n } else if (panel === 'admin') {\n this.adminFilterOpen.set(true);\n } else if (panel === 'parcel') {\n this.parcelOpen.set(true);\n } else if (panel === 'layers') {\n this.layersOpen.set(true);\n } else {\n this.legendOpen.set(true);\n }\n }\n\n private closePanelsExcept(\n keep: 'search' | 'admin' | 'parcel' | 'layers' | 'legend',\n ): void {\n if (keep !== 'search' && this.searchOpen()) {\n this.searchOpen.set(false);\n }\n if (keep !== 'admin' && this.adminFilterOpen()) {\n this.adminFilterOpen.set(false);\n }\n if (keep !== 'parcel' && this.parcelOpen()) {\n this.parcelOpen.set(false);\n }\n if (keep !== 'layers' && this.layersOpen()) {\n this.layersOpen.set(false);\n }\n if (keep !== 'legend' && this.legendOpen()) {\n this.legendOpen.set(false);\n }\n }\n\n private enterPanMode(): void {\n this.toolMode.set('pan');\n this.measureMode.set('none');\n this.swipeActive.set(false);\n this.zoomRef()?.resetInteractionMode();\n this.applyPanCursor();\n }\n\n private exitToolMode(): void {\n this.toolMode.set('none');\n this.measureMode.set('none');\n this.swipeActive.set(false);\n this.zoomRef()?.resetInteractionMode();\n this.setMapCursor(null);\n }\n\n private applyPanCursor(): void {\n if (this.toolMode() !== 'pan') {\n return;\n }\n this.setMapCursor('grab');\n }\n\n private setMapCursor(cursor: string | null): void {\n const el = this.controller()?.getMap()?.getTargetElement();\n if (!el) {\n return;\n }\n el.style.cursor = cursor ?? '';\n }\n\n private bindPanCursor(ctrl: GeoMapController): void {\n const el = ctrl.getMap()?.getTargetElement();\n if (!el || this.panCursorBound) {\n return;\n }\n el.addEventListener('pointerdown', this.onPanPointerDown);\n el.addEventListener('pointerup', this.onPanPointerUp);\n el.addEventListener('pointerleave', this.onPanPointerUp);\n el.addEventListener('pointercancel', this.onPanPointerUp);\n this.panCursorBound = true;\n }\n\n private unbindPanCursor(): void {\n const el = this.controller()?.getMap()?.getTargetElement();\n if (!el || !this.panCursorBound) {\n return;\n }\n el.removeEventListener('pointerdown', this.onPanPointerDown);\n el.removeEventListener('pointerup', this.onPanPointerUp);\n el.removeEventListener('pointerleave', this.onPanPointerUp);\n el.removeEventListener('pointercancel', this.onPanPointerUp);\n this.panCursorBound = false;\n }\n\n private buildDemoSearchResults(\n query: GeoMapSearchQuery,\n ): GeoMapSearchResultItem[] {\n const parcelLayer = GEO_MAP_DEMO_THEMATIC_LAYERS.find(\n (layer) => layer.id === 'demo-parcel' && layer.type === 'geojson',\n );\n const feature =\n parcelLayer && parcelLayer.type === 'geojson'\n ? (parcelLayer.data as { features?: object[] }).features?.[0]\n : undefined;\n const keyword = Object.values(query.values)\n .filter(Boolean)\n .join(' ')\n .trim();\n const label = keyword || 'Thửa 12 — Tờ 45';\n return [\n {\n id: 'demo-parcel-12',\n title: `Thửa 12 / Tờ 45`,\n subtitle: label,\n extent4326: [108.45, 11.94, 108.465, 11.952],\n geojson: feature ?? {\n type: 'Feature',\n properties: { parcel: '12', sheet: '45' },\n geometry: {\n type: 'Polygon',\n coordinates: [\n [\n [108.45, 11.94],\n [108.465, 11.94],\n [108.465, 11.952],\n [108.45, 11.952],\n [108.45, 11.94],\n ],\n ],\n },\n },\n parcel: { ...GEO_MAP_DEMO_PARCEL_DETAIL },\n },\n ];\n }\n\n private ensureSwipeOverlayVisible(): void {\n const list = this.managedLayers();\n if (!list.length) {\n return;\n }\n const anyVisible = list.some((layer) => layer.visible !== false);\n if (anyVisible) {\n return;\n }\n const next = list.map((layer, index) =>\n index === 0 ? { ...layer, visible: true } : layer,\n );\n this.managedLayers.set(next);\n }\n}\n","<div class=\"geo-map-shell\">\n <geo-map\n class=\"geo-map-shell__map\"\n [center]=\"center()\"\n [zoom]=\"zoom()\"\n [height]=\"'100%'\"\n [basemap]=\"basemap()\"\n [layers]=\"resolvedLayers()\"\n [showMousePosition]=\"showMousePosition()\"\n [showZoomControl]=\"false\"\n (mapReady)=\"onMapReady($event)\"\n (mapClick)=\"onMapClick($event)\"\n />\n\n <div class=\"geo-map-shell__chrome-left\">\n <geo-map-toolbar\n class=\"geo-map-shell__toolbar\"\n [controller]=\"controller()\"\n [actions]=\"resolvedToolbarActions()\"\n [(checkedMap)]=\"checkedMap\"\n (actionClick)=\"onToolbarAction($event)\"\n (actionToggle)=\"onToolbarToggle($event)\"\n />\n\n <div class=\"geo-map-shell__panels\">\n <geo-map-search\n [(open)]=\"searchOpen\"\n [results]=\"searchResults()\"\n (search)=\"onSearch($event)\"\n (reset)=\"onSearchReset()\"\n (resultSelect)=\"onResultSelect($event)\"\n />\n <geo-map-admin-filter\n [(open)]=\"adminFilterOpen\"\n title=\"Chuyển vị trí\"\n [nodes]=\"adminNodes()\"\n [(checkedKeys)]=\"adminCheckedKeys\"\n [(expandedKeys)]=\"adminExpandedKeys\"\n (apply)=\"onAdminApply($event)\"\n (reset)=\"adminCheckedKeys.set([])\"\n (fitProvince)=\"onFitProvince()\"\n (closed)=\"onAdminClosed()\"\n />\n <geo-map-parcel-popup\n [(open)]=\"parcelOpen\"\n [parcel]=\"selectedParcel()\"\n [audience]=\"parcelAudience()\"\n (exportClick)=\"parcelExport.emit($event)\"\n (back)=\"onParcelBack()\"\n (closed)=\"onParcelClosed()\"\n />\n <geo-map-layers-drawer\n [controller]=\"controller()\"\n [(open)]=\"layersOpen\"\n [(layers)]=\"managedLayers\"\n />\n <geo-map-legend\n [(open)]=\"legendOpen\"\n [items]=\"legendItems()\"\n />\n </div>\n </div>\n\n <!-- Headless bridges: zoom/fullscreen + snapshot (driven by toolbar actions). -->\n <geo-map-zoom\n class=\"geo-map-shell__zoom-bridge\"\n [controller]=\"controller()\"\n [showNav]=\"showNav()\"\n [provinceExtent]=\"provinceExtent()\"\n />\n <geo-map-snapshot\n class=\"geo-map-shell__snapshot-bridge\"\n [controller]=\"controller()\"\n />\n\n <div class=\"geo-map-shell__top-right\">\n <ng-content select=\"[geoMapShellTopRight]\" />\n </div>\n\n <div class=\"geo-map-shell__bottom-right\">\n <geo-map-basemap-switcher\n [options]=\"basemapOptions()\"\n [(selectedId)]=\"basemapId\"\n (basemapChange)=\"onBasemapChange($event)\"\n />\n </div>\n\n <div class=\"geo-map-shell__status\">\n @if (locationLabel()) {\n <geo-map-location-chip [label]=\"locationLabel()\" />\n }\n <geo-map-measure\n [controller]=\"controller()\"\n [(mode)]=\"measureMode\"\n />\n </div>\n\n <geo-map-swipe\n [controller]=\"controller()\"\n [(active)]=\"swipeActive\"\n />\n\n <geo-map-help [(open)]=\"helpOpen\" />\n</div>\n","/*\n * Public API Surface of geo-ui\n */\n\nexport * from './lib/styles/tokens';\nexport * from './lib/ng-zorro/ng-zorro-antd.module';\nexport * from './lib/figma';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1","i3","i2","i4","getProjection","defaultControls","alwaysCondition","CircleStyle"],"mappings":"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"}