@geoit/ui 0.0.4 → 0.0.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (258) hide show
  1. package/AGENTS.md +12 -8
  2. package/README.md +49 -62
  3. package/ai/AGENTS.md +38 -28
  4. package/ai/README.md +35 -1
  5. package/ai/catalog.json +2796 -288
  6. package/ai/components/geo-alert.md +3 -3
  7. package/ai/components/geo-back-button.md +2 -2
  8. package/ai/components/geo-breadcrumb.md +1 -1
  9. package/ai/components/geo-button.md +3 -3
  10. package/ai/components/geo-chart.md +103 -0
  11. package/ai/components/geo-checkbox.md +4 -6
  12. package/ai/components/geo-column-picker.md +3 -3
  13. package/ai/components/geo-confirm-modal.md +4 -5
  14. package/ai/components/geo-dashboard.md +91 -0
  15. package/ai/components/geo-date-picker.md +5 -3
  16. package/ai/components/geo-date-range-picker.md +5 -3
  17. package/ai/components/geo-empty-state.md +75 -0
  18. package/ai/components/geo-feedback-form.md +97 -0
  19. package/ai/components/geo-file-picker.md +4 -2
  20. package/ai/components/geo-forgot-password.md +78 -0
  21. package/ai/components/geo-form-modal.md +9 -10
  22. package/ai/components/geo-icon.md +3 -3
  23. package/ai/components/geo-input.md +8 -6
  24. package/ai/components/geo-layout-footer.md +70 -0
  25. package/ai/components/geo-layout-header-actions.md +82 -0
  26. package/ai/components/geo-layout-header.md +89 -0
  27. package/ai/components/geo-layout-sidebar.md +86 -0
  28. package/ai/components/geo-layout.md +155 -0
  29. package/ai/components/geo-list-page.md +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 +1 -1
  53. package/ai/components/geo-pagination.md +4 -7
  54. package/ai/components/geo-radio.md +3 -1
  55. package/ai/components/geo-row-actions.md +3 -3
  56. package/ai/components/geo-select.md +4 -2
  57. package/ai/components/geo-slider.md +5 -7
  58. package/ai/components/geo-stat-card.md +98 -0
  59. package/ai/components/geo-status-tag.md +2 -2
  60. package/ai/components/geo-step-form-layout.md +7 -8
  61. package/ai/components/geo-stepper.md +3 -4
  62. package/ai/components/geo-table-filter.md +4 -5
  63. package/ai/components/geo-table-pagination.md +4 -7
  64. package/ai/components/geo-table-toolbar.md +7 -7
  65. package/ai/components/geo-table.md +17 -20
  66. package/ai/components/geo-tabs.md +4 -6
  67. package/ai/components/geo-textarea.md +4 -2
  68. package/ai/components/geo-toast.md +4 -4
  69. package/ai/components/geo-tree.md +4 -6
  70. package/ai/components/geo-typography.md +1 -1
  71. package/ai/components/geo-upload.md +9 -10
  72. package/ai/mockup.html +1194 -0
  73. package/ai/recipes.md +98 -85
  74. package/esm2022/lib/figma/geo-alert/geo-alert.component.mjs +19 -36
  75. package/esm2022/lib/figma/geo-back-button/geo-back-button.component.mjs +14 -24
  76. package/esm2022/lib/figma/geo-breadcrumb/geo-breadcrumb.component.mjs +8 -11
  77. package/esm2022/lib/figma/geo-button/geo-button.component.mjs +30 -59
  78. package/esm2022/lib/figma/geo-chart/geo-chart.component.mjs +88 -0
  79. package/esm2022/lib/figma/geo-chart/geo-chart.types.mjs +2 -0
  80. package/esm2022/lib/figma/geo-checkbox/geo-checkbox.component.mjs +11 -22
  81. package/esm2022/lib/figma/geo-confirm-modal/geo-confirm-modal.component.mjs +22 -54
  82. package/esm2022/lib/figma/geo-dashboard/geo-dashboard.component.mjs +49 -0
  83. package/esm2022/lib/figma/geo-dashboard/geo-dashboard.types.mjs +2 -0
  84. package/esm2022/lib/figma/geo-date-picker/geo-date-picker.component.mjs +48 -78
  85. package/esm2022/lib/figma/geo-date-range-picker/geo-date-range-picker.component.mjs +47 -75
  86. package/esm2022/lib/figma/geo-empty-state/geo-empty-state.component.mjs +25 -0
  87. package/esm2022/lib/figma/geo-feedback-form/geo-feedback-form.component.mjs +75 -0
  88. package/esm2022/lib/figma/geo-feedback-form/geo-feedback-form.types.mjs +2 -0
  89. package/esm2022/lib/figma/geo-file-picker/geo-file-picker.component.mjs +59 -81
  90. package/esm2022/lib/figma/geo-forgot-password/geo-forgot-password.component.mjs +51 -0
  91. package/esm2022/lib/figma/geo-form-modal/geo-form-modal.component.mjs +45 -112
  92. package/esm2022/lib/figma/geo-icon/geo-icon.component.mjs +22 -32
  93. package/esm2022/lib/figma/geo-input/geo-input.component.mjs +41 -70
  94. package/esm2022/lib/figma/geo-layout/footer/geo-layout-footer.component.mjs +18 -0
  95. package/esm2022/lib/figma/geo-layout/geo-layout-actions.directive.mjs +15 -0
  96. package/esm2022/lib/figma/geo-layout/geo-layout.component.mjs +79 -0
  97. package/esm2022/lib/figma/geo-layout/geo-layout.types.mjs +42 -0
  98. package/esm2022/lib/figma/geo-layout/header/geo-layout-header.component.mjs +60 -0
  99. package/esm2022/lib/figma/geo-layout/header-actions/geo-layout-header-actions.component.mjs +70 -0
  100. package/esm2022/lib/figma/geo-layout/sidebar/geo-layout-sidebar.component.mjs +90 -0
  101. package/esm2022/lib/figma/geo-list-page/geo-list-page.component.mjs +22 -0
  102. package/esm2022/lib/figma/geo-login/geo-login.component.mjs +58 -0
  103. package/esm2022/lib/figma/geo-login/geo-login.types.mjs +2 -0
  104. package/esm2022/lib/figma/geo-map/chrome/geo-map-admin-filter/geo-map-admin-filter.component.mjs +52 -0
  105. package/esm2022/lib/figma/geo-map/chrome/geo-map-basemap-switcher/geo-map-basemap-switcher.component.mjs +61 -0
  106. package/esm2022/lib/figma/geo-map/chrome/geo-map-help/geo-map-help.component.mjs +26 -0
  107. package/esm2022/lib/figma/geo-map/chrome/geo-map-layer-card/geo-map-layer-card.component.mjs +24 -0
  108. package/esm2022/lib/figma/geo-map/chrome/geo-map-layer-panel/geo-map-layer-panel.component.mjs +146 -0
  109. package/esm2022/lib/figma/geo-map/chrome/geo-map-layers-drawer/geo-map-layers-drawer.component.mjs +37 -0
  110. package/esm2022/lib/figma/geo-map/chrome/geo-map-legend/geo-map-legend.component.mjs +30 -0
  111. package/esm2022/lib/figma/geo-map/chrome/geo-map-locate/geo-map-locate.component.mjs +72 -0
  112. package/esm2022/lib/figma/geo-map/chrome/geo-map-location-chip/geo-map-location-chip.component.mjs +21 -0
  113. package/esm2022/lib/figma/geo-map/chrome/geo-map-measure/geo-map-measure.component.mjs +375 -0
  114. package/esm2022/lib/figma/geo-map/chrome/geo-map-opacity/geo-map-opacity.component.mjs +94 -0
  115. package/esm2022/lib/figma/geo-map/chrome/geo-map-parcel-popup/geo-map-parcel-popup.component.mjs +136 -0
  116. package/esm2022/lib/figma/geo-map/chrome/geo-map-search/geo-map-search.component.mjs +182 -0
  117. package/esm2022/lib/figma/geo-map/chrome/geo-map-shell/geo-map-shell.component.mjs +577 -0
  118. package/esm2022/lib/figma/geo-map/chrome/geo-map-snapshot/geo-map-snapshot.component.mjs +93 -0
  119. package/esm2022/lib/figma/geo-map/chrome/geo-map-swipe/geo-map-swipe.component.mjs +129 -0
  120. package/esm2022/lib/figma/geo-map/chrome/geo-map-toolbar/geo-map-toolbar.component.mjs +64 -0
  121. package/esm2022/lib/figma/geo-map/chrome/geo-map-zoom/geo-map-zoom.component.mjs +295 -0
  122. package/esm2022/lib/figma/geo-map/geo-map-toolbar.icons.mjs +18 -0
  123. package/esm2022/lib/figma/geo-map/geo-map.component.mjs +144 -0
  124. package/esm2022/lib/figma/geo-map/geo-map.constants.mjs +497 -0
  125. package/esm2022/lib/figma/geo-map/geo-map.controller.mjs +71 -0
  126. package/esm2022/lib/figma/geo-map/geo-map.types.mjs +2 -0
  127. package/esm2022/lib/figma/geo-map/services/geo-map-layer.service.mjs +368 -0
  128. package/esm2022/lib/figma/geo-map/services/geo-map-projection.service.mjs +110 -0
  129. package/esm2022/lib/figma/geo-map/services/geo-map.service.mjs +540 -0
  130. package/esm2022/lib/figma/geo-map/utils/geo-map-fullscreen-overlay.util.mjs +47 -0
  131. package/esm2022/lib/figma/geo-map/utils/geo-map-interactions.util.mjs +30 -0
  132. package/esm2022/lib/figma/geo-overlap-result/geo-overlap-result.component.mjs +25 -0
  133. package/esm2022/lib/figma/geo-overlap-result/geo-overlap-result.types.mjs +2 -0
  134. package/esm2022/lib/figma/geo-page-header/geo-page-header.component.mjs +23 -0
  135. package/esm2022/lib/figma/geo-page-title/geo-page-title.component.mjs +20 -35
  136. package/esm2022/lib/figma/geo-pagination/geo-pagination.component.mjs +13 -43
  137. package/esm2022/lib/figma/geo-radio/geo-radio.component.mjs +32 -52
  138. package/esm2022/lib/figma/geo-select/geo-select.component.mjs +46 -72
  139. package/esm2022/lib/figma/geo-slider/geo-slider.component.mjs +12 -28
  140. package/esm2022/lib/figma/geo-stat-card/geo-stat-card.component.mjs +163 -0
  141. package/esm2022/lib/figma/geo-stat-card/geo-stat-card.types.mjs +2 -0
  142. package/esm2022/lib/figma/geo-status-tag/geo-status-tag.component.mjs +23 -27
  143. package/esm2022/lib/figma/geo-step-form-layout/geo-step-form-layout.component.mjs +39 -96
  144. package/esm2022/lib/figma/geo-stepper/geo-stepper.component.mjs +18 -33
  145. package/esm2022/lib/figma/geo-table/geo-column-picker/geo-column-picker.component.mjs +14 -24
  146. package/esm2022/lib/figma/geo-table/geo-row-actions/geo-row-actions.component.mjs +18 -36
  147. package/esm2022/lib/figma/geo-table/geo-table-filter/geo-table-filter.component.mjs +41 -98
  148. package/esm2022/lib/figma/geo-table/geo-table-pagination/geo-table-pagination.component.mjs +40 -73
  149. package/esm2022/lib/figma/geo-table/geo-table-toolbar/geo-table-toolbar.component.mjs +26 -56
  150. package/esm2022/lib/figma/geo-table/geo-table.component.mjs +110 -210
  151. package/esm2022/lib/figma/geo-tabs/geo-tabs.component.mjs +33 -63
  152. package/esm2022/lib/figma/geo-textarea/geo-textarea.component.mjs +28 -44
  153. package/esm2022/lib/figma/geo-toast/geo-toast.component.mjs +18 -39
  154. package/esm2022/lib/figma/geo-tree/geo-tree.component.mjs +12 -40
  155. package/esm2022/lib/figma/geo-typography/geo-typography.component.mjs +49 -64
  156. package/esm2022/lib/figma/geo-upload/geo-upload.component.mjs +50 -101
  157. package/esm2022/lib/figma/index.mjs +50 -1
  158. package/esm2022/lib/styles/tokens.mjs +56 -24
  159. package/fesm2022/geoit-ui.mjs +5981 -1825
  160. package/fesm2022/geoit-ui.mjs.map +1 -1
  161. package/lib/figma/geo-alert/geo-alert.component.d.ts +10 -11
  162. package/lib/figma/geo-back-button/geo-back-button.component.d.ts +6 -7
  163. package/lib/figma/geo-breadcrumb/geo-breadcrumb.component.d.ts +2 -2
  164. package/lib/figma/geo-button/geo-button.component.d.ts +21 -17
  165. package/lib/figma/geo-chart/geo-chart.component.d.ts +40 -0
  166. package/lib/figma/geo-chart/geo-chart.types.d.ts +13 -0
  167. package/lib/figma/geo-checkbox/geo-checkbox.component.d.ts +6 -7
  168. package/lib/figma/geo-confirm-modal/geo-confirm-modal.component.d.ts +15 -17
  169. package/lib/figma/geo-dashboard/geo-dashboard.component.d.ts +29 -0
  170. package/lib/figma/geo-dashboard/geo-dashboard.types.d.ts +7 -0
  171. package/lib/figma/geo-date-picker/geo-date-picker.component.d.ts +26 -21
  172. package/lib/figma/geo-date-range-picker/geo-date-range-picker.component.d.ts +25 -20
  173. package/lib/figma/geo-empty-state/geo-empty-state.component.d.ts +17 -0
  174. package/lib/figma/geo-feedback-form/geo-feedback-form.component.d.ts +36 -0
  175. package/lib/figma/geo-feedback-form/geo-feedback-form.types.d.ts +8 -0
  176. package/lib/figma/geo-file-picker/geo-file-picker.component.d.ts +23 -20
  177. package/lib/figma/geo-forgot-password/geo-forgot-password.component.d.ts +24 -0
  178. package/lib/figma/geo-form-modal/geo-form-modal.component.d.ts +33 -35
  179. package/lib/figma/geo-icon/geo-icon.component.d.ts +7 -7
  180. package/lib/figma/geo-input/geo-input.component.d.ts +23 -21
  181. package/lib/figma/geo-layout/footer/geo-layout-footer.component.d.ts +10 -0
  182. package/lib/figma/geo-layout/geo-layout-actions.directive.d.ts +6 -0
  183. package/lib/figma/geo-layout/geo-layout.component.d.ts +48 -0
  184. package/lib/figma/geo-layout/geo-layout.types.d.ts +44 -0
  185. package/lib/figma/geo-layout/header/geo-layout-header.component.d.ts +31 -0
  186. package/lib/figma/geo-layout/header-actions/geo-layout-header-actions.component.d.ts +32 -0
  187. package/lib/figma/geo-layout/sidebar/geo-layout-sidebar.component.d.ts +34 -0
  188. package/lib/figma/geo-list-page/geo-list-page.component.d.ts +16 -0
  189. package/lib/figma/geo-login/geo-login.component.d.ts +27 -0
  190. package/lib/figma/geo-login/geo-login.types.d.ts +6 -0
  191. package/lib/figma/geo-map/chrome/geo-map-admin-filter/geo-map-admin-filter.component.d.ts +28 -0
  192. package/lib/figma/geo-map/chrome/geo-map-basemap-switcher/geo-map-basemap-switcher.component.d.ts +26 -0
  193. package/lib/figma/geo-map/chrome/geo-map-help/geo-map-help.component.d.ts +20 -0
  194. package/lib/figma/geo-map/chrome/geo-map-layer-card/geo-map-layer-card.component.d.ts +15 -0
  195. package/lib/figma/geo-map/chrome/geo-map-layer-panel/geo-map-layer-panel.component.d.ts +40 -0
  196. package/lib/figma/geo-map/chrome/geo-map-layers-drawer/geo-map-layers-drawer.component.d.ts +25 -0
  197. package/lib/figma/geo-map/chrome/geo-map-legend/geo-map-legend.component.d.ts +18 -0
  198. package/lib/figma/geo-map/chrome/geo-map-locate/geo-map-locate.component.d.ts +24 -0
  199. package/lib/figma/geo-map/chrome/geo-map-location-chip/geo-map-location-chip.component.d.ts +14 -0
  200. package/lib/figma/geo-map/chrome/geo-map-measure/geo-map-measure.component.d.ts +49 -0
  201. package/lib/figma/geo-map/chrome/geo-map-opacity/geo-map-opacity.component.d.ts +30 -0
  202. package/lib/figma/geo-map/chrome/geo-map-parcel-popup/geo-map-parcel-popup.component.d.ts +44 -0
  203. package/lib/figma/geo-map/chrome/geo-map-search/geo-map-search.component.d.ts +56 -0
  204. package/lib/figma/geo-map/chrome/geo-map-shell/geo-map-shell.component.d.ts +103 -0
  205. package/lib/figma/geo-map/chrome/geo-map-snapshot/geo-map-snapshot.component.d.ts +21 -0
  206. package/lib/figma/geo-map/chrome/geo-map-swipe/geo-map-swipe.component.d.ts +33 -0
  207. package/lib/figma/geo-map/chrome/geo-map-toolbar/geo-map-toolbar.component.d.ts +30 -0
  208. package/lib/figma/geo-map/chrome/geo-map-zoom/geo-map-zoom.component.d.ts +67 -0
  209. package/lib/figma/geo-map/geo-map-toolbar.icons.d.ts +17 -0
  210. package/lib/figma/geo-map/geo-map.component.d.ts +53 -0
  211. package/lib/figma/geo-map/geo-map.constants.d.ts +73 -0
  212. package/lib/figma/geo-map/geo-map.controller.d.ts +49 -0
  213. package/lib/figma/geo-map/geo-map.types.d.ts +224 -0
  214. package/lib/figma/geo-map/services/geo-map-layer.service.d.ts +42 -0
  215. package/lib/figma/geo-map/services/geo-map-projection.service.d.ts +32 -0
  216. package/lib/figma/geo-map/services/geo-map.service.d.ts +99 -0
  217. package/lib/figma/geo-map/utils/geo-map-fullscreen-overlay.util.d.ts +13 -0
  218. package/lib/figma/geo-map/utils/geo-map-interactions.util.d.ts +9 -0
  219. package/lib/figma/geo-overlap-result/geo-overlap-result.component.d.ts +18 -0
  220. package/lib/figma/geo-overlap-result/geo-overlap-result.types.d.ts +7 -0
  221. package/lib/figma/geo-page-header/geo-page-header.component.d.ts +16 -0
  222. package/lib/figma/geo-page-title/geo-page-title.component.d.ts +9 -9
  223. package/lib/figma/geo-pagination/geo-pagination.component.d.ts +9 -14
  224. package/lib/figma/geo-radio/geo-radio.component.d.ts +17 -15
  225. package/lib/figma/geo-select/geo-select.component.d.ts +24 -19
  226. package/lib/figma/geo-slider/geo-slider.component.d.ts +7 -9
  227. package/lib/figma/geo-stat-card/geo-stat-card.component.d.ts +50 -0
  228. package/lib/figma/geo-stat-card/geo-stat-card.types.d.ts +11 -0
  229. package/lib/figma/geo-status-tag/geo-status-tag.component.d.ts +7 -7
  230. package/lib/figma/geo-step-form-layout/geo-step-form-layout.component.d.ts +27 -29
  231. package/lib/figma/geo-stepper/geo-stepper.component.d.ts +6 -8
  232. package/lib/figma/geo-table/geo-column-picker/geo-column-picker.component.d.ts +6 -7
  233. package/lib/figma/geo-table/geo-row-actions/geo-row-actions.component.d.ts +11 -12
  234. package/lib/figma/geo-table/geo-table-filter/geo-table-filter.component.d.ts +21 -28
  235. package/lib/figma/geo-table/geo-table-pagination/geo-table-pagination.component.d.ts +17 -20
  236. package/lib/figma/geo-table/geo-table-toolbar/geo-table-toolbar.component.d.ts +17 -18
  237. package/lib/figma/geo-table/geo-table.component.d.ts +58 -62
  238. package/lib/figma/geo-tabs/geo-tabs.component.d.ts +14 -17
  239. package/lib/figma/geo-textarea/geo-textarea.component.d.ts +15 -13
  240. package/lib/figma/geo-toast/geo-toast.component.d.ts +11 -12
  241. package/lib/figma/geo-tree/geo-tree.component.d.ts +8 -13
  242. package/lib/figma/geo-typography/geo-typography.component.d.ts +13 -13
  243. package/lib/figma/geo-upload/geo-upload.component.d.ts +26 -28
  244. package/lib/figma/index.d.ts +49 -0
  245. package/lib/styles/tokens.d.ts +56 -23
  246. package/package.json +4 -2
  247. package/src/lib/figma/geo-map/assets/toolbar/fullscreen.svg +8 -0
  248. package/src/lib/figma/geo-map/assets/toolbar/home.svg +3 -0
  249. package/src/lib/figma/geo-map/assets/toolbar/layers.svg +3 -0
  250. package/src/lib/figma/geo-map/assets/toolbar/measure-area.svg +12 -0
  251. package/src/lib/figma/geo-map/assets/toolbar/measure-distance.svg +5 -0
  252. package/src/lib/figma/geo-map/assets/toolbar/pan.svg +13 -0
  253. package/src/lib/figma/geo-map/assets/toolbar/search.svg +3 -0
  254. package/src/lib/figma/geo-map/assets/toolbar/zoom-in.svg +3 -0
  255. package/src/lib/figma/geo-map/assets/toolbar/zoom-out.svg +5 -0
  256. package/src/lib/styles/design-tokens.scss +108 -35
  257. package/src/lib/styles/scrollbar.scss +2 -2
  258. package/src/lib/styles/theme.scss +1 -1
@@ -37,10 +37,10 @@ Thanh trượt số liên tục. Two-way [(value)] / (valueChange); min/max/step
37
37
 
38
38
  ## Binding
39
39
 
40
- **Not CVA.** Use two-way `value`:
40
+ **`model()` two-way** on `value`:
41
41
 
42
42
  ```html
43
- <geo-slider [(value)]="n" (valueChange)="onChange($event)"></geo-slider>
43
+ <geo-slider [(value)]="n"></geo-slider>
44
44
  ```
45
45
 
46
46
  ## Inputs
@@ -49,18 +49,16 @@ Every supported Input (do not invent others):
49
49
 
50
50
  | Input | Type | Default | Description |
51
51
  |-------|------|---------|-------------|
52
- | `value` | `number` | `0` | |
52
+ | `value` | `number` | `0` | Two-way `model()` (supports banana binding). |
53
53
  | `min` | `number` | `0` | — |
54
54
  | `max` | `number` | `100` | — |
55
55
  | `step` | `number` | `1` | — |
56
56
  | `disabled` | `boolean` | `false` | — |
57
- | `tipFormatter` | `(value: number)` | `> string` | — |
57
+ | `tipFormatter` | `((value: number) => string) \| undefined` | `undefined` | — |
58
58
 
59
59
  ## Outputs
60
60
 
61
- | Output | Payload | Description |
62
- |--------|---------|-------------|
63
- | `valueChange` | `EventEmitter<number>` | — |
61
+ _None_
64
62
 
65
63
 
66
64
  ## Examples
@@ -0,0 +1,98 @@
1
+ # geo-stat-card
2
+
3
+ > Complete usage reference for **GeoStatCardComponent** (`@geoit/ui`)
4
+ >
5
+ > Read this file before using the component. Use **only** the Inputs/Outputs listed here.
6
+
7
+ ## Summary
8
+ GeoStatCardComponent
9
+
10
+ ## Import
11
+
12
+ ```ts
13
+ import { GeoStatCardComponent } from '@geoit/ui';
14
+ ```
15
+
16
+ Add to the consuming standalone component:
17
+
18
+ ```ts
19
+ imports: [GeoStatCardComponent]
20
+ ```
21
+
22
+ ## Selector
23
+ `geo-stat-card`
24
+
25
+ ## Category
26
+ `other`
27
+
28
+ ## When to use
29
+
30
+
31
+ ## Do not use when
32
+
33
+
34
+
35
+ ## Binding
36
+
37
+ Standalone component — drive via Inputs (`input()` / `model()`) and Outputs (`output()`). Banana bindings work for any `model()` fields (e.g. `[(open)]`, `[(pageIndex)]`).
38
+
39
+ ## Inputs
40
+
41
+ Every supported Input (do not invent others):
42
+
43
+ | Input | Type | Default | Description |
44
+ |-------|------|---------|-------------|
45
+ | `label` | `string` | `''` | — |
46
+ | `value` | `string \| number` | `''` | — |
47
+ | `unit` | `string` | `''` | — |
48
+ | `icon` | `string` | `'bar-chart'` | — |
49
+ | `hint` | `string` | `''` | — |
50
+ | `clickable` | `boolean` | `false` | — |
51
+ | `animate` | `boolean` | `true` | Count-up number animation. Honors `prefers-reduced-motion`. |
52
+ | `animationDuration` | `number` | `1000` | Count-up duration in ms. |
53
+ | `animationDelay` | `number` | `0` | Stagger delay before count-up starts (ms). |
54
+ | `item` | `GeoStatCardItem \| null` | `null` | Convenience: bind a whole item object. |
55
+
56
+ ## Outputs
57
+
58
+ | Output | Payload | Description |
59
+ |--------|---------|-------------|
60
+ | `clicked` | `OutputEmitterRef<void>` | — |
61
+
62
+ ## Related types
63
+
64
+ From `figma/geo-stat-card/geo-stat-card.types.ts`:
65
+
66
+ ```ts
67
+ export interface GeoStatCardItem {
68
+ id?: string;
69
+ label: string;
70
+ value: string | number;
71
+ /** Optional unit shown after value (e.g. m², thửa). */
72
+ unit?: string;
73
+ /** Ant Design icon name. */
74
+ icon?: string;
75
+ /** Optional helper / trend text. */
76
+ hint?: string;
77
+ }
78
+ ```
79
+
80
+ ## Examples
81
+
82
+ ### Example
83
+
84
+ ```html
85
+ <geo-stat-card></geo-stat-card>
86
+ ```
87
+
88
+ ## Package path
89
+ `node_modules/@geoit/ui/ai/components/geo-stat-card.md`
90
+
91
+ ## Source
92
+ `projects/geo-ui/src/lib/figma/geo-stat-card/geo-stat-card.component.ts`
93
+
94
+ ## Rules for AI / consumers
95
+ - Prefer this component over raw ng-zorro / HTML for the same UI role.
96
+ - Use design tokens (`var(--geo-*)`) — never hardcode brand colors or radius.
97
+ - Match props exactly to the Inputs table; do not invent unsupported inputs.
98
+ - Copy examples and adapt labels/bindings only.
@@ -37,7 +37,7 @@ Tag trạng thái (dot + label). status preset success|primary|error|warning|inf
37
37
 
38
38
  ## Binding
39
39
 
40
- Standalone presentational / container component — drive via Inputs and Outputs (no `ngModel` unless documented).
40
+ Standalone component — drive via Inputs (`input()` / `model()`) and Outputs (`output()`). Banana bindings work for any `model()` fields (e.g. `[(open)]`, `[(pageIndex)]`).
41
41
 
42
42
  ## Inputs
43
43
 
@@ -46,7 +46,7 @@ Every supported Input (do not invent others):
46
46
  | Input | Type | Default | Description |
47
47
  |-------|------|---------|-------------|
48
48
  | `status` | `GeoStatusPreset \| string` | `'success'` | Status preset or free-form string. Semantic: success \| primary \| error \| warning \| info \| teal \| neutral Legacy: completed \| cancelled \| in_progress \| adjusting |
49
- | `label` | `string` | | Override label text. |
49
+ | `label` | `string \| undefined` | `undefined` | Override label text. |
50
50
  | `showDot` | `boolean` | `true` | Show leading status dot (design default). |
51
51
 
52
52
  ## Outputs
@@ -37,7 +37,7 @@ Wizard full-page: stepper dọc + card nội dung + footer Hủy/Trở lại/Lư
37
37
 
38
38
  ## Binding
39
39
 
40
- Standalone presentational / container component — drive via Inputs and Outputs (no `ngModel` unless documented).
40
+ Standalone component — drive via Inputs (`input()` / `model()`) and Outputs (`output()`). Banana bindings work for any `model()` fields (e.g. `[(open)]`, `[(pageIndex)]`).
41
41
 
42
42
  ## Inputs
43
43
 
@@ -46,7 +46,7 @@ Every supported Input (do not invent others):
46
46
  | Input | Type | Default | Description |
47
47
  |-------|------|---------|-------------|
48
48
  | `steps` | `GeoStepperStep[]` | `[]` | — |
49
- | `activeIndex` | `number` | `0` | |
49
+ | `activeIndex` | `number` | `0` | Two-way `model()` (supports banana binding). |
50
50
  | `title` | `string` | `''` | — |
51
51
  | `clickableSteps` | `boolean` | `true` | — |
52
52
  | `showScrollButtons` | `boolean` | `true` | Hiện nút ↑/↓ góc phải card (chuyển bước). Mặc định `true`. |
@@ -67,12 +67,11 @@ Every supported Input (do not invent others):
67
67
 
68
68
  | Output | Payload | Description |
69
69
  |--------|---------|-------------|
70
- | `activeIndexChange` | `EventEmitter<number>` | — |
71
- | `stepSelect` | `EventEmitter<{ index: number; step: GeoStepperStep }>` | — |
72
- | `cancel` | `EventEmitter<void>` | — |
73
- | `previous` | `EventEmitter<void>` | — |
74
- | `save` | `EventEmitter<void>` | — |
75
- | `next` | `EventEmitter<void>` | — |
70
+ | `stepSelect` | `OutputEmitterRef<{ index: number; step: GeoStepperStep }>` | — |
71
+ | `cancel` | `OutputEmitterRef<void>` | — |
72
+ | `previous` | `OutputEmitterRef<void>` | — |
73
+ | `save` | `OutputEmitterRef<void>` | — |
74
+ | `next` | `OutputEmitterRef<void>` | — |
76
75
 
77
76
  ## Related types
78
77
 
@@ -37,7 +37,7 @@ Chỉ báo bước. [steps] {key,label}[]; [activeIndex]; orientation horizontal
37
37
 
38
38
  ## Binding
39
39
 
40
- Standalone presentational / container component — drive via Inputs and Outputs (no `ngModel` unless documented).
40
+ Standalone component — drive via Inputs (`input()` / `model()`) and Outputs (`output()`). Banana bindings work for any `model()` fields (e.g. `[(open)]`, `[(pageIndex)]`).
41
41
 
42
42
  ## Inputs
43
43
 
@@ -46,7 +46,7 @@ Every supported Input (do not invent others):
46
46
  | Input | Type | Default | Description |
47
47
  |-------|------|---------|-------------|
48
48
  | `steps` | `GeoStepperStep[]` | `[]` | — |
49
- | `activeIndex` | `number` | `0` | |
49
+ | `activeIndex` | `number` | `0` | Two-way `model()` (supports banana binding). |
50
50
  | `orientation` | `'vertical' \| 'horizontal'` | `'horizontal'` | Mặc định horizontal theo design form modal. |
51
51
  | `clickable` | `boolean` | `true` | Cho phép click để đổi bước. |
52
52
 
@@ -54,8 +54,7 @@ Every supported Input (do not invent others):
54
54
 
55
55
  | Output | Payload | Description |
56
56
  |--------|---------|-------------|
57
- | `activeIndexChange` | `EventEmitter<number>` | — |
58
- | `stepSelect` | `EventEmitter<{ index: number; step: GeoStepperStep }>` | — |
57
+ | `stepSelect` | `OutputEmitterRef<{ index: number; step: GeoStepperStep }>` | — |
59
58
 
60
59
  ## Related types
61
60
 
@@ -38,7 +38,7 @@ Thanh lọc bảng: ô tìm + bộ lọc nâng cao (ng-content). (search)/(reset
38
38
 
39
39
  ## Binding
40
40
 
41
- Standalone presentational / container component — drive via Inputs and Outputs (no `ngModel` unless documented).
41
+ Standalone component — drive via Inputs (`input()` / `model()`) and Outputs (`output()`). Banana bindings work for any `model()` fields (e.g. `[(open)]`, `[(pageIndex)]`).
42
42
 
43
43
  ## Inputs
44
44
 
@@ -55,7 +55,7 @@ Every supported Input (do not invent others):
55
55
  | `searchLoading` | `boolean` | `false` | — |
56
56
  | `showAdvancedToggle` | `boolean` | `true` | Hiện nút mở/đóng slot `[advanced]`. |
57
57
  | `showReset` | `boolean` | `true` | — |
58
- | `advancedExpanded` | `boolean` | `false` | Mở panel field nâng cao (`[advanced]`). |
58
+ | `advancedExpanded` | `boolean` | `false` | Mở panel field nâng cao (`[advanced]`). — Two-way `model()` (supports banana binding). |
59
59
  | `advancedFilterCount` | `number` | `0` | Số field advanced đang có giá trị — hiện badge trên nút expand. Parent tự tính (vd. `countFilledFilters(query, ADVANCED_KEYS)`). |
60
60
  | `filterToggleTitle` | `string` | `'Bộ lọc nâng cao'` | — |
61
61
  | `resetTitle` | `string` | `'Xóa bộ lọc'` | — |
@@ -64,9 +64,8 @@ Every supported Input (do not invent others):
64
64
 
65
65
  | Output | Payload | Description |
66
66
  |--------|---------|-------------|
67
- | `search` | `EventEmitter<void>` | — |
68
- | `reset` | `EventEmitter<void>` | — |
69
- | `advancedExpandedChange` | `EventEmitter<boolean>` | — |
67
+ | `search` | `OutputEmitterRef<void>` | — |
68
+ | `reset` | `OutputEmitterRef<void>` | — |
70
69
 
71
70
 
72
71
  ## Examples
@@ -37,7 +37,7 @@ Footer phân trang riêng cho bảng (nhãn khoảng + đổi page size). [pageI
37
37
 
38
38
  ## Binding
39
39
 
40
- Standalone presentational / container component — drive via Inputs and Outputs (no `ngModel` unless documented).
40
+ Standalone component — drive via Inputs (`input()` / `model()`) and Outputs (`output()`). Banana bindings work for any `model()` fields (e.g. `[(open)]`, `[(pageIndex)]`).
41
41
 
42
42
  ## Inputs
43
43
 
@@ -45,8 +45,8 @@ Every supported Input (do not invent others):
45
45
 
46
46
  | Input | Type | Default | Description |
47
47
  |-------|------|---------|-------------|
48
- | `pageIndex` | `number` | `1` | |
49
- | `pageSize` | `number` | `10` | |
48
+ | `pageIndex` | `number` | `1` | Two-way `model()` (supports banana binding). |
49
+ | `pageSize` | `number` | `10` | Two-way `model()` (supports banana binding). |
50
50
  | `total` | `number` | `0` | — |
51
51
  | `pageSizeOptions` | `number[]` | `DEFAULT_UI_TABLE_PAGE_SIZE_OPTIONS` | — |
52
52
  | `showSizeChanger` | `boolean` | `true` | — |
@@ -56,10 +56,7 @@ Every supported Input (do not invent others):
56
56
 
57
57
  ## Outputs
58
58
 
59
- | Output | Payload | Description |
60
- |--------|---------|-------------|
61
- | `pageIndexChange` | `EventEmitter<number>` | — |
62
- | `pageSizeChange` | `EventEmitter<number>` | — |
59
+ _None_
63
60
 
64
61
 
65
62
  ## Examples
@@ -37,7 +37,7 @@ Toolbar danh sách: số kết quả, xóa/xuất/thêm, ẩn hiện cột. (add
37
37
 
38
38
  ## Binding
39
39
 
40
- Standalone presentational / container component — drive via Inputs and Outputs (no `ngModel` unless documented).
40
+ Standalone component — drive via Inputs (`input()` / `model()`) and Outputs (`output()`). Banana bindings work for any `model()` fields (e.g. `[(open)]`, `[(pageIndex)]`).
41
41
 
42
42
  ## Inputs
43
43
 
@@ -54,17 +54,17 @@ Every supported Input (do not invent others):
54
54
  | `showAdd` | `boolean` | `true` | — |
55
55
  | `addLabel` | `string` | `'Thêm mới'` | — |
56
56
  | `columnItems` | `GeoColumnPickerItem[]` | `[]` | — |
57
- | `columnStorageKey` | `string` | | Key lưu trạng thái ẩn/hiện cột trong sessionStorage |
57
+ | `columnStorageKey` | `string \| undefined` | `undefined` | Key lưu trạng thái ẩn/hiện cột trong sessionStorage |
58
58
 
59
59
  ## Outputs
60
60
 
61
61
  | Output | Payload | Description |
62
62
  |--------|---------|-------------|
63
- | `deleteClick` | `EventEmitter<void>` | — |
64
- | `exportClick` | `EventEmitter<void>` | — |
65
- | `toggleColumns` | `EventEmitter<void>` | — |
66
- | `columnApply` | `EventEmitter<GeoColumnPickerApplyPayload>` | — |
67
- | `addClick` | `EventEmitter<void>` | — |
63
+ | `deleteClick` | `OutputEmitterRef<void>` | — |
64
+ | `exportClick` | `OutputEmitterRef<void>` | — |
65
+ | `toggleColumns` | `OutputEmitterRef<void>` | — |
66
+ | `columnApply` | `OutputEmitterRef<GeoColumnPickerApplyPayload>` | — |
67
+ | `addClick` | `OutputEmitterRef<void>` | — |
68
68
 
69
69
 
70
70
  ## Examples
@@ -37,7 +37,7 @@ Bảng dữ liệu: [columns] GeoTableColumn[] + [data]. Hỗ trợ renderAs ind
37
37
 
38
38
  ## Binding
39
39
 
40
- Standalone presentational / container component — drive via Inputs and Outputs (no `ngModel` unless documented).
40
+ Standalone component — drive via Inputs (`input()` / `model()`) and Outputs (`output()`). Banana bindings work for any `model()` fields (e.g. `[(open)]`, `[(pageIndex)]`).
41
41
 
42
42
  ## Inputs
43
43
 
@@ -56,42 +56,39 @@ Every supported Input (do not invent others):
56
56
  | `tableLayout` | `'auto' \| 'fixed'` | `'auto'` | — |
57
57
  | `showPagination` | `boolean` | `true` | — |
58
58
  | `frontPagination` | `boolean` | `true` | — |
59
- | `pageIndex` | `number` | `1` | |
60
- | `pageSize` | `number` | `10` | |
61
- | `total` | `number` | | — |
59
+ | `pageIndex` | `number` | `1` | Two-way `model()` (supports banana binding). |
60
+ | `pageSize` | `number` | `10` | Two-way `model()` (supports banana binding). |
61
+ | `total` | `number \| undefined` | `undefined` | — |
62
62
  | `pageSizeOptions` | `number[]` | `DEFAULT_UI_TABLE_PAGE_SIZE_OPTIONS` | — |
63
63
  | `showSizeChanger` | `boolean` | `false` | — |
64
64
  | `showQuickJumper` | `boolean` | `false` | — |
65
65
  | `hideOnSinglePage` | `boolean` | `false` | — |
66
66
  | `simplePagination` | `boolean` | `false` | — |
67
67
  | `paginationPosition` | `'top' \| 'bottom' \| 'both'` | `'bottom'` | — |
68
- | `scroll` | `{ x?: string; y?: string }` | `{}` | — |
69
- | `scrollY` | `string` | | — |
68
+ | `scroll` | `{ x?: string; y?: string }` | | — |
69
+ | `scrollY` | `string \| undefined` | `undefined` | — |
70
70
  | `autoScroll` | `boolean` | `false` | Tự bật scroll ngang theo tổng width cột. Khi có cột `fixed`, scroll.x luôn được tính (bắt buộc với nz-table fixed). |
71
- | `tableTitle` | `string` | | — |
72
- | `footer` | `string` | | — |
71
+ | `tableTitle` | `string \| undefined` | `undefined` | — |
72
+ | `footer` | `string \| undefined` | `undefined` | — |
73
73
  | `emptyText` | `string` | `'Không có dữ liệu'` | — |
74
74
  | `showTotalRange` | `boolean` | `false` | — |
75
75
  | `selectable` | `boolean` | `false` | — |
76
76
  | `rowKey` | `string` | `'id'` | — |
77
- | `selectedKeys` | `string[]` | `[]` | |
78
- | `mobileTitleKey` | `string` | | Mobile card: key cột làm tiêu đề. Ưu tiên hơn `column.mobileTitle`; nếu không set thì lấy cột dữ liệu đầu tiên. |
77
+ | `selectedKeys` | `string[]` | `[]` | Two-way `model()` (supports banana binding). |
78
+ | `mobileTitleKey` | `string \| undefined` | `undefined` | Mobile card: key cột làm tiêu đề. Ưu tiên hơn `column.mobileTitle`; nếu không set thì lấy cột dữ liệu đầu tiên. |
79
79
  | `mobileCardView` | `boolean` | `true` | Bật/tắt chuyển card trên mobile (mặc định bật). |
80
80
 
81
81
  ## Outputs
82
82
 
83
83
  | Output | Payload | Description |
84
84
  |--------|---------|-------------|
85
- | `rowClick` | `EventEmitter<Record<string, unknown>>` | — |
86
- | `rowEdit` | `EventEmitter<Record<string, unknown>>` | — |
87
- | `rowMore` | `EventEmitter<Record<string, unknown>>` | — |
88
- | `rowAction` | `EventEmitter<{ row: Record<string, unknown>; action: string }>` | — |
89
- | `pageIndexChange` | `EventEmitter<number>` | — |
90
- | `pageSizeChange` | `EventEmitter<number>` | — |
91
- | `queryParams` | `EventEmitter<NzTableQueryParams>` | — |
92
- | `currentPageDataChange` | `EventEmitter<readonly Record<string, unknown>[]>` | — |
93
- | `selectedKeysChange` | `EventEmitter<string[]>` | — |
94
- | `selectionChange` | `EventEmitter<Record<string, unknown>[]>` | — |
85
+ | `rowClick` | `OutputEmitterRef<Record<string, unknown>>` | — |
86
+ | `rowEdit` | `OutputEmitterRef<Record<string, unknown>>` | — |
87
+ | `rowMore` | `OutputEmitterRef<Record<string, unknown>>` | — |
88
+ | `rowAction` | `OutputEmitterRef<{ row: Record<string, unknown>; action: string }>` | — |
89
+ | `queryParams` | `OutputEmitterRef<NzTableQueryParams>` | — |
90
+ | `currentPageDataChange` | `OutputEmitterRef<readonly Record<string, unknown>[]>` | — |
91
+ | `selectionChange` | `OutputEmitterRef<Record<string, unknown>[]>` | — |
95
92
 
96
93
  ## Related types
97
94
 
@@ -37,7 +37,7 @@ Tab ngang brand ink. [items] {key,title}[]; nội dung qua <ng-template uiTab="k
37
37
 
38
38
  ## Binding
39
39
 
40
- Standalone presentational / container component — drive via Inputs and Outputs (no `ngModel` unless documented).
40
+ Standalone component — drive via Inputs (`input()` / `model()`) and Outputs (`output()`). Banana bindings work for any `model()` fields (e.g. `[(open)]`, `[(pageIndex)]`).
41
41
 
42
42
  ## Inputs
43
43
 
@@ -48,8 +48,8 @@ Every supported Input (do not invent others):
48
48
  | `items` | `GeoTabItem[]` | `[]` | — |
49
49
  | `type` | `'line' \| 'card'` | `'line'` | — |
50
50
  | `size` | `'default' \| 'large' \| 'small'` | `'default'` | — |
51
- | `selectedIndex` | `number` | `0` | |
52
- | `selectedKey` | `string` | | |
51
+ | `selectedIndex` | `number` | `0` | Two-way `model()` (supports banana binding). |
52
+ | `selectedKey` | `string \| undefined` | `undefined` | Two-way `model()` (supports banana binding). |
53
53
  | `centered` | `boolean` | `false` | — |
54
54
  | `animated` | `boolean` | `true` | — |
55
55
 
@@ -57,9 +57,7 @@ Every supported Input (do not invent others):
57
57
 
58
58
  | Output | Payload | Description |
59
59
  |--------|---------|-------------|
60
- | `selectedIndexChange` | `EventEmitter<number>` | — |
61
- | `selectedKeyChange` | `EventEmitter<string>` | — |
62
- | `tabChange` | `EventEmitter<{ index: number; key: string }>` | — |
60
+ | `tabChange` | `OutputEmitterRef<{ index: number; key: string }>` | — |
63
61
 
64
62
  ## Related types
65
63
 
@@ -48,6 +48,8 @@ Supports **ControlValueAccessor**.
48
48
 
49
49
  Also import `FormsModule` (template-driven) or `ReactiveFormsModule`.
50
50
 
51
+ Library API uses Angular 18 `input()` / `output()` signals under the hood.
52
+
51
53
  ## Inputs
52
54
 
53
55
  Every supported Input (do not invent others):
@@ -61,14 +63,14 @@ Every supported Input (do not invent others):
61
63
  | `required` | `boolean` | `false` | — |
62
64
  | `error` | `boolean` | `false` | — |
63
65
  | `errorMessage` | `string` | `''` | — |
64
- | `maxlength` | `number` | | — |
66
+ | `maxlength` | `number \| undefined` | `undefined` | — |
65
67
  | `block` | `boolean` | `true` | — |
66
68
 
67
69
  ## Outputs
68
70
 
69
71
  | Output | Payload | Description |
70
72
  |--------|---------|-------------|
71
- | `valueChange` | `EventEmitter<string>` | — |
73
+ | `valueChange` | `OutputEmitterRef<string>` | — |
72
74
 
73
75
 
74
76
  ## Examples
@@ -38,7 +38,7 @@ Thông báo tạm thời. Ưu tiên inject GeoToastService (success/error/warnin
38
38
 
39
39
  ## Binding
40
40
 
41
- Standalone presentational / container component — drive via Inputs and Outputs (no `ngModel` unless documented).
41
+ Standalone component — drive via Inputs (`input()` / `model()`) and Outputs (`output()`). Banana bindings work for any `model()` fields (e.g. `[(open)]`, `[(pageIndex)]`).
42
42
 
43
43
  ## Inputs
44
44
 
@@ -51,14 +51,14 @@ Every supported Input (do not invent others):
51
51
  | `message` | `string` | `''` | — |
52
52
  | `closable` | `boolean` | `true` | — |
53
53
  | `showIcon` | `boolean` | `true` | — |
54
- | `visible` | `boolean` | `true` | |
55
- | `icon` | `string` | | Override Ant Design icon type. |
54
+ | `visible` | `boolean` | `true` | Two-way `model()` (supports banana binding). |
55
+ | `icon` | `string \| undefined` | `undefined` | Override Ant Design icon type. |
56
56
 
57
57
  ## Outputs
58
58
 
59
59
  | Output | Payload | Description |
60
60
  |--------|---------|-------------|
61
- | `closed` | `EventEmitter<void>` | — |
61
+ | `closed` | `OutputEmitterRef<void>` | — |
62
62
 
63
63
  ## Related types
64
64
 
@@ -37,7 +37,7 @@ Cây phân cấp. [nodes] GeoTreeNode[]; bật checkable + [(checkedKeys)]; [(ex
37
37
 
38
38
  ## Binding
39
39
 
40
- Standalone presentational / container component — drive via Inputs and Outputs (no `ngModel` unless documented).
40
+ Standalone component — drive via Inputs (`input()` / `model()`) and Outputs (`output()`). Banana bindings work for any `model()` fields (e.g. `[(open)]`, `[(pageIndex)]`).
41
41
 
42
42
  ## Inputs
43
43
 
@@ -47,8 +47,8 @@ Every supported Input (do not invent others):
47
47
  |-------|------|---------|-------------|
48
48
  | `nodes` | `GeoTreeNode[]` | `[]` | — |
49
49
  | `checkable` | `boolean` | `false` | — |
50
- | `checkedKeys` | `Array<string \| number>` | `[]` | |
51
- | `expandedKeys` | `Array<string \| number>` | `[]` | |
50
+ | `checkedKeys` | `Array<string \| number>` | `[]` | Two-way `model()` (supports banana binding). |
51
+ | `expandedKeys` | `Array<string \| number>` | `[]` | Two-way `model()` (supports banana binding). |
52
52
  | `showLine` | `boolean` | `false` | — |
53
53
  | `blockNode` | `boolean` | `false` | — |
54
54
 
@@ -56,9 +56,7 @@ Every supported Input (do not invent others):
56
56
 
57
57
  | Output | Payload | Description |
58
58
  |--------|---------|-------------|
59
- | `checkedKeysChange` | `EventEmitter<Array<string \| number>>` | — |
60
- | `expandedKeysChange` | `EventEmitter<Array<string \| number>>` | — |
61
- | `nodeClick` | `EventEmitter<NzFormatEmitEvent>` | — |
59
+ | `nodeClick` | `OutputEmitterRef<NzFormatEmitEvent>` | — |
62
60
 
63
61
  ## Related types
64
62
 
@@ -37,7 +37,7 @@ Text theo type scale GEO. variant h1–h4|subtitle|body|body-small|caption|…;
37
37
 
38
38
  ## Binding
39
39
 
40
- Standalone presentational / container component — drive via Inputs and Outputs (no `ngModel` unless documented).
40
+ Standalone component — drive via Inputs (`input()` / `model()`) and Outputs (`output()`). Banana bindings work for any `model()` fields (e.g. `[(open)]`, `[(pageIndex)]`).
41
41
 
42
42
  ## Inputs
43
43
 
@@ -37,7 +37,7 @@ Vùng kéo-thả upload + danh sách tiến độ. accept/maxSize; [(fileList)];
37
37
 
38
38
  ## Binding
39
39
 
40
- Standalone presentational / container component — drive via Inputs and Outputs (no `ngModel` unless documented).
40
+ Standalone component — drive via Inputs (`input()` / `model()`) and Outputs (`output()`). Banana bindings work for any `model()` fields (e.g. `[(open)]`, `[(pageIndex)]`).
41
41
 
42
42
  ## Inputs
43
43
 
@@ -58,23 +58,22 @@ Every supported Input (do not invent others):
58
58
  | `titleSuffix` | `string` | `'để tải lên'` | — |
59
59
  | `listTitle` | `string` | `'Tập tin đính kèm'` | — |
60
60
  | `showListTitle` | `boolean` | `true` | — |
61
- | `fileList` | `GeoUploadFile[]` | `[]` | Controlled file list. |
62
- | `headers` | `{} \| ((file: NzUploadFile) => {} \| Observable<{}>)` | | — |
63
- | `data` | `{} \| ((file: NzUploadFile) => {} \| Observable<{}>)` | | — |
61
+ | `fileList` | `GeoUploadFile[]` | `[]` | Controlled file list. — Two-way `model()` (supports banana binding). |
62
+ | `headers` | `{} \| ((file: NzUploadFile) => {} \| Observable<{}>) \| undefined` | `undefined` | — |
63
+ | `data` | `{} \| ((file: NzUploadFile) => {} \| Observable<{}>) \| undefined` | `undefined` | — |
64
64
  | `name` | `string` | `'file'` | — |
65
65
  | `withCredentials` | `boolean` | `false` | — |
66
66
  | `directory` | `boolean` | `false` | — |
67
- | `customRequest` | `(item: NzUploadXHRArgs) => Subscription` | | Custom XHR — mặc định simulate progress khi không có `action`. |
68
- | `beforeUpload` | `( file: NzUploadFile, fileList: NzUploadFile[] )` | `> boolean \| Observable<boolean>` | — |
67
+ | `customRequest` | `GeoUploadCustomRequest \| undefined` | `undefined` | Custom XHR — mặc định simulate progress khi không có `action`. |
68
+ | `beforeUpload` | `((file: NzUploadFile, fileList: NzUploadFile[]) => boolean \| Observable<boolean>) \| undefined` | `undefined` | — |
69
69
 
70
70
  ## Outputs
71
71
 
72
72
  | Output | Payload | Description |
73
73
  |--------|---------|-------------|
74
- | `fileListChange` | `EventEmitter<GeoUploadFile[]>` | — |
75
- | `change` | `EventEmitter<NzUploadChangeParam>` | — |
76
- | `remove` | `EventEmitter<GeoUploadFile>` | — |
77
- | `reject` | `EventEmitter<{ file: File; reason: 'type' \| 'size' }>` | — |
74
+ | `change` | `OutputEmitterRef<NzUploadChangeParam>` | — |
75
+ | `remove` | `OutputEmitterRef<GeoUploadFile>` | — |
76
+ | `reject` | `OutputEmitterRef<{ file: File; reason: 'type' \| 'size' }>` | — |
78
77
 
79
78
  ## Related types
80
79