@geoit/ui 0.0.4 → 0.0.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (258) hide show
  1. package/AGENTS.md +12 -8
  2. package/README.md +94 -66
  3. package/ai/AGENTS.md +106 -16
  4. package/ai/README.md +35 -1
  5. package/ai/catalog.json +2855 -275
  6. package/ai/components/geo-alert.md +3 -3
  7. package/ai/components/geo-back-button.md +2 -2
  8. package/ai/components/geo-breadcrumb.md +1 -1
  9. package/ai/components/geo-button.md +3 -3
  10. package/ai/components/geo-chart.md +115 -0
  11. package/ai/components/geo-checkbox.md +4 -6
  12. package/ai/components/geo-column-picker.md +3 -3
  13. package/ai/components/geo-confirm-modal.md +4 -5
  14. package/ai/components/geo-dashboard.md +102 -0
  15. package/ai/components/geo-date-picker.md +5 -3
  16. package/ai/components/geo-date-range-picker.md +5 -3
  17. package/ai/components/geo-empty-state.md +75 -0
  18. package/ai/components/geo-feedback-form.md +97 -0
  19. package/ai/components/geo-file-picker.md +4 -2
  20. package/ai/components/geo-forgot-password.md +81 -0
  21. package/ai/components/geo-form-modal.md +9 -10
  22. package/ai/components/geo-icon.md +3 -3
  23. package/ai/components/geo-input.md +8 -6
  24. package/ai/components/geo-layout-footer.md +70 -0
  25. package/ai/components/geo-layout-header-actions.md +82 -0
  26. package/ai/components/geo-layout-header.md +89 -0
  27. package/ai/components/geo-layout-sidebar.md +86 -0
  28. package/ai/components/geo-layout.md +155 -0
  29. package/ai/components/geo-list-page.md +75 -0
  30. package/ai/components/geo-login.md +106 -0
  31. package/ai/components/geo-map-admin-filter.md +85 -0
  32. package/ai/components/geo-map-basemap-switcher.md +79 -0
  33. package/ai/components/geo-map-help.md +72 -0
  34. package/ai/components/geo-map-layer-card.md +73 -0
  35. package/ai/components/geo-map-layer-panel.md +75 -0
  36. package/ai/components/geo-map-layers-drawer.md +78 -0
  37. package/ai/components/geo-map-legend.md +74 -0
  38. package/ai/components/geo-map-locate.md +75 -0
  39. package/ai/components/geo-map-location-chip.md +71 -0
  40. package/ai/components/geo-map-measure.md +74 -0
  41. package/ai/components/geo-map-opacity.md +75 -0
  42. package/ai/components/geo-map-parcel-popup.md +84 -0
  43. package/ai/components/geo-map-search.md +89 -0
  44. package/ai/components/geo-map-shell.md +146 -0
  45. package/ai/components/geo-map-snapshot.md +75 -0
  46. package/ai/components/geo-map-swipe.md +73 -0
  47. package/ai/components/geo-map-toolbar.md +81 -0
  48. package/ai/components/geo-map-zoom.md +74 -0
  49. package/ai/components/geo-map.md +212 -0
  50. package/ai/components/geo-overlap-result.md +88 -0
  51. package/ai/components/geo-page-header.md +72 -0
  52. package/ai/components/geo-page-title.md +1 -1
  53. package/ai/components/geo-pagination.md +4 -7
  54. package/ai/components/geo-radio.md +3 -1
  55. package/ai/components/geo-row-actions.md +3 -3
  56. package/ai/components/geo-select.md +4 -2
  57. package/ai/components/geo-slider.md +6 -8
  58. package/ai/components/geo-stat-card.md +98 -0
  59. package/ai/components/geo-status-tag.md +2 -2
  60. package/ai/components/geo-step-form-layout.md +7 -8
  61. package/ai/components/geo-stepper.md +3 -4
  62. package/ai/components/geo-table-filter.md +4 -5
  63. package/ai/components/geo-table-pagination.md +4 -7
  64. package/ai/components/geo-table-toolbar.md +7 -7
  65. package/ai/components/geo-table.md +17 -20
  66. package/ai/components/geo-tabs.md +4 -6
  67. package/ai/components/geo-textarea.md +4 -2
  68. package/ai/components/geo-toast.md +4 -4
  69. package/ai/components/geo-tree.md +4 -6
  70. package/ai/components/geo-typography.md +1 -1
  71. package/ai/components/geo-upload.md +9 -10
  72. package/ai/mockup.html +1194 -0
  73. package/ai/recipes.md +184 -85
  74. package/esm2022/lib/figma/geo-alert/geo-alert.component.mjs +19 -36
  75. package/esm2022/lib/figma/geo-back-button/geo-back-button.component.mjs +14 -24
  76. package/esm2022/lib/figma/geo-breadcrumb/geo-breadcrumb.component.mjs +8 -11
  77. package/esm2022/lib/figma/geo-button/geo-button.component.mjs +30 -59
  78. package/esm2022/lib/figma/geo-chart/geo-chart.component.mjs +88 -0
  79. package/esm2022/lib/figma/geo-chart/geo-chart.types.mjs +2 -0
  80. package/esm2022/lib/figma/geo-checkbox/geo-checkbox.component.mjs +11 -22
  81. package/esm2022/lib/figma/geo-confirm-modal/geo-confirm-modal.component.mjs +22 -54
  82. package/esm2022/lib/figma/geo-dashboard/geo-dashboard.component.mjs +49 -0
  83. package/esm2022/lib/figma/geo-dashboard/geo-dashboard.types.mjs +2 -0
  84. package/esm2022/lib/figma/geo-date-picker/geo-date-picker.component.mjs +48 -78
  85. package/esm2022/lib/figma/geo-date-range-picker/geo-date-range-picker.component.mjs +47 -75
  86. package/esm2022/lib/figma/geo-empty-state/geo-empty-state.component.mjs +25 -0
  87. package/esm2022/lib/figma/geo-feedback-form/geo-feedback-form.component.mjs +75 -0
  88. package/esm2022/lib/figma/geo-feedback-form/geo-feedback-form.types.mjs +2 -0
  89. package/esm2022/lib/figma/geo-file-picker/geo-file-picker.component.mjs +59 -81
  90. package/esm2022/lib/figma/geo-forgot-password/geo-forgot-password.component.mjs +51 -0
  91. package/esm2022/lib/figma/geo-form-modal/geo-form-modal.component.mjs +45 -112
  92. package/esm2022/lib/figma/geo-icon/geo-icon.component.mjs +22 -32
  93. package/esm2022/lib/figma/geo-input/geo-input.component.mjs +41 -70
  94. package/esm2022/lib/figma/geo-layout/footer/geo-layout-footer.component.mjs +18 -0
  95. package/esm2022/lib/figma/geo-layout/geo-layout-actions.directive.mjs +15 -0
  96. package/esm2022/lib/figma/geo-layout/geo-layout.component.mjs +79 -0
  97. package/esm2022/lib/figma/geo-layout/geo-layout.types.mjs +42 -0
  98. package/esm2022/lib/figma/geo-layout/header/geo-layout-header.component.mjs +60 -0
  99. package/esm2022/lib/figma/geo-layout/header-actions/geo-layout-header-actions.component.mjs +70 -0
  100. package/esm2022/lib/figma/geo-layout/sidebar/geo-layout-sidebar.component.mjs +90 -0
  101. package/esm2022/lib/figma/geo-list-page/geo-list-page.component.mjs +22 -0
  102. package/esm2022/lib/figma/geo-login/geo-login.component.mjs +58 -0
  103. package/esm2022/lib/figma/geo-login/geo-login.types.mjs +2 -0
  104. package/esm2022/lib/figma/geo-map/chrome/geo-map-admin-filter/geo-map-admin-filter.component.mjs +52 -0
  105. package/esm2022/lib/figma/geo-map/chrome/geo-map-basemap-switcher/geo-map-basemap-switcher.component.mjs +61 -0
  106. package/esm2022/lib/figma/geo-map/chrome/geo-map-help/geo-map-help.component.mjs +26 -0
  107. package/esm2022/lib/figma/geo-map/chrome/geo-map-layer-card/geo-map-layer-card.component.mjs +24 -0
  108. package/esm2022/lib/figma/geo-map/chrome/geo-map-layer-panel/geo-map-layer-panel.component.mjs +146 -0
  109. package/esm2022/lib/figma/geo-map/chrome/geo-map-layers-drawer/geo-map-layers-drawer.component.mjs +37 -0
  110. package/esm2022/lib/figma/geo-map/chrome/geo-map-legend/geo-map-legend.component.mjs +30 -0
  111. package/esm2022/lib/figma/geo-map/chrome/geo-map-locate/geo-map-locate.component.mjs +72 -0
  112. package/esm2022/lib/figma/geo-map/chrome/geo-map-location-chip/geo-map-location-chip.component.mjs +21 -0
  113. package/esm2022/lib/figma/geo-map/chrome/geo-map-measure/geo-map-measure.component.mjs +375 -0
  114. package/esm2022/lib/figma/geo-map/chrome/geo-map-opacity/geo-map-opacity.component.mjs +94 -0
  115. package/esm2022/lib/figma/geo-map/chrome/geo-map-parcel-popup/geo-map-parcel-popup.component.mjs +136 -0
  116. package/esm2022/lib/figma/geo-map/chrome/geo-map-search/geo-map-search.component.mjs +182 -0
  117. package/esm2022/lib/figma/geo-map/chrome/geo-map-shell/geo-map-shell.component.mjs +577 -0
  118. package/esm2022/lib/figma/geo-map/chrome/geo-map-snapshot/geo-map-snapshot.component.mjs +93 -0
  119. package/esm2022/lib/figma/geo-map/chrome/geo-map-swipe/geo-map-swipe.component.mjs +129 -0
  120. package/esm2022/lib/figma/geo-map/chrome/geo-map-toolbar/geo-map-toolbar.component.mjs +64 -0
  121. package/esm2022/lib/figma/geo-map/chrome/geo-map-zoom/geo-map-zoom.component.mjs +295 -0
  122. package/esm2022/lib/figma/geo-map/geo-map-toolbar.icons.mjs +18 -0
  123. package/esm2022/lib/figma/geo-map/geo-map.component.mjs +144 -0
  124. package/esm2022/lib/figma/geo-map/geo-map.constants.mjs +497 -0
  125. package/esm2022/lib/figma/geo-map/geo-map.controller.mjs +71 -0
  126. package/esm2022/lib/figma/geo-map/geo-map.types.mjs +2 -0
  127. package/esm2022/lib/figma/geo-map/services/geo-map-layer.service.mjs +368 -0
  128. package/esm2022/lib/figma/geo-map/services/geo-map-projection.service.mjs +110 -0
  129. package/esm2022/lib/figma/geo-map/services/geo-map.service.mjs +540 -0
  130. package/esm2022/lib/figma/geo-map/utils/geo-map-fullscreen-overlay.util.mjs +47 -0
  131. package/esm2022/lib/figma/geo-map/utils/geo-map-interactions.util.mjs +30 -0
  132. package/esm2022/lib/figma/geo-overlap-result/geo-overlap-result.component.mjs +25 -0
  133. package/esm2022/lib/figma/geo-overlap-result/geo-overlap-result.types.mjs +2 -0
  134. package/esm2022/lib/figma/geo-page-header/geo-page-header.component.mjs +23 -0
  135. package/esm2022/lib/figma/geo-page-title/geo-page-title.component.mjs +20 -35
  136. package/esm2022/lib/figma/geo-pagination/geo-pagination.component.mjs +13 -43
  137. package/esm2022/lib/figma/geo-radio/geo-radio.component.mjs +32 -52
  138. package/esm2022/lib/figma/geo-select/geo-select.component.mjs +46 -72
  139. package/esm2022/lib/figma/geo-slider/geo-slider.component.mjs +12 -28
  140. package/esm2022/lib/figma/geo-stat-card/geo-stat-card.component.mjs +163 -0
  141. package/esm2022/lib/figma/geo-stat-card/geo-stat-card.types.mjs +2 -0
  142. package/esm2022/lib/figma/geo-status-tag/geo-status-tag.component.mjs +23 -27
  143. package/esm2022/lib/figma/geo-step-form-layout/geo-step-form-layout.component.mjs +39 -96
  144. package/esm2022/lib/figma/geo-stepper/geo-stepper.component.mjs +18 -33
  145. package/esm2022/lib/figma/geo-table/geo-column-picker/geo-column-picker.component.mjs +14 -24
  146. package/esm2022/lib/figma/geo-table/geo-row-actions/geo-row-actions.component.mjs +18 -36
  147. package/esm2022/lib/figma/geo-table/geo-table-filter/geo-table-filter.component.mjs +41 -98
  148. package/esm2022/lib/figma/geo-table/geo-table-pagination/geo-table-pagination.component.mjs +40 -73
  149. package/esm2022/lib/figma/geo-table/geo-table-toolbar/geo-table-toolbar.component.mjs +26 -56
  150. package/esm2022/lib/figma/geo-table/geo-table.component.mjs +110 -210
  151. package/esm2022/lib/figma/geo-tabs/geo-tabs.component.mjs +33 -63
  152. package/esm2022/lib/figma/geo-textarea/geo-textarea.component.mjs +28 -44
  153. package/esm2022/lib/figma/geo-toast/geo-toast.component.mjs +18 -39
  154. package/esm2022/lib/figma/geo-tree/geo-tree.component.mjs +12 -40
  155. package/esm2022/lib/figma/geo-typography/geo-typography.component.mjs +49 -64
  156. package/esm2022/lib/figma/geo-upload/geo-upload.component.mjs +50 -101
  157. package/esm2022/lib/figma/index.mjs +50 -1
  158. package/esm2022/lib/styles/tokens.mjs +56 -24
  159. package/fesm2022/geoit-ui.mjs +5981 -1825
  160. package/fesm2022/geoit-ui.mjs.map +1 -1
  161. package/lib/figma/geo-alert/geo-alert.component.d.ts +10 -11
  162. package/lib/figma/geo-back-button/geo-back-button.component.d.ts +6 -7
  163. package/lib/figma/geo-breadcrumb/geo-breadcrumb.component.d.ts +2 -2
  164. package/lib/figma/geo-button/geo-button.component.d.ts +21 -17
  165. package/lib/figma/geo-chart/geo-chart.component.d.ts +40 -0
  166. package/lib/figma/geo-chart/geo-chart.types.d.ts +13 -0
  167. package/lib/figma/geo-checkbox/geo-checkbox.component.d.ts +6 -7
  168. package/lib/figma/geo-confirm-modal/geo-confirm-modal.component.d.ts +15 -17
  169. package/lib/figma/geo-dashboard/geo-dashboard.component.d.ts +29 -0
  170. package/lib/figma/geo-dashboard/geo-dashboard.types.d.ts +7 -0
  171. package/lib/figma/geo-date-picker/geo-date-picker.component.d.ts +26 -21
  172. package/lib/figma/geo-date-range-picker/geo-date-range-picker.component.d.ts +25 -20
  173. package/lib/figma/geo-empty-state/geo-empty-state.component.d.ts +17 -0
  174. package/lib/figma/geo-feedback-form/geo-feedback-form.component.d.ts +36 -0
  175. package/lib/figma/geo-feedback-form/geo-feedback-form.types.d.ts +8 -0
  176. package/lib/figma/geo-file-picker/geo-file-picker.component.d.ts +23 -20
  177. package/lib/figma/geo-forgot-password/geo-forgot-password.component.d.ts +24 -0
  178. package/lib/figma/geo-form-modal/geo-form-modal.component.d.ts +33 -35
  179. package/lib/figma/geo-icon/geo-icon.component.d.ts +7 -7
  180. package/lib/figma/geo-input/geo-input.component.d.ts +23 -21
  181. package/lib/figma/geo-layout/footer/geo-layout-footer.component.d.ts +10 -0
  182. package/lib/figma/geo-layout/geo-layout-actions.directive.d.ts +6 -0
  183. package/lib/figma/geo-layout/geo-layout.component.d.ts +48 -0
  184. package/lib/figma/geo-layout/geo-layout.types.d.ts +44 -0
  185. package/lib/figma/geo-layout/header/geo-layout-header.component.d.ts +31 -0
  186. package/lib/figma/geo-layout/header-actions/geo-layout-header-actions.component.d.ts +32 -0
  187. package/lib/figma/geo-layout/sidebar/geo-layout-sidebar.component.d.ts +34 -0
  188. package/lib/figma/geo-list-page/geo-list-page.component.d.ts +16 -0
  189. package/lib/figma/geo-login/geo-login.component.d.ts +27 -0
  190. package/lib/figma/geo-login/geo-login.types.d.ts +6 -0
  191. package/lib/figma/geo-map/chrome/geo-map-admin-filter/geo-map-admin-filter.component.d.ts +28 -0
  192. package/lib/figma/geo-map/chrome/geo-map-basemap-switcher/geo-map-basemap-switcher.component.d.ts +26 -0
  193. package/lib/figma/geo-map/chrome/geo-map-help/geo-map-help.component.d.ts +20 -0
  194. package/lib/figma/geo-map/chrome/geo-map-layer-card/geo-map-layer-card.component.d.ts +15 -0
  195. package/lib/figma/geo-map/chrome/geo-map-layer-panel/geo-map-layer-panel.component.d.ts +40 -0
  196. package/lib/figma/geo-map/chrome/geo-map-layers-drawer/geo-map-layers-drawer.component.d.ts +25 -0
  197. package/lib/figma/geo-map/chrome/geo-map-legend/geo-map-legend.component.d.ts +18 -0
  198. package/lib/figma/geo-map/chrome/geo-map-locate/geo-map-locate.component.d.ts +24 -0
  199. package/lib/figma/geo-map/chrome/geo-map-location-chip/geo-map-location-chip.component.d.ts +14 -0
  200. package/lib/figma/geo-map/chrome/geo-map-measure/geo-map-measure.component.d.ts +49 -0
  201. package/lib/figma/geo-map/chrome/geo-map-opacity/geo-map-opacity.component.d.ts +30 -0
  202. package/lib/figma/geo-map/chrome/geo-map-parcel-popup/geo-map-parcel-popup.component.d.ts +44 -0
  203. package/lib/figma/geo-map/chrome/geo-map-search/geo-map-search.component.d.ts +56 -0
  204. package/lib/figma/geo-map/chrome/geo-map-shell/geo-map-shell.component.d.ts +103 -0
  205. package/lib/figma/geo-map/chrome/geo-map-snapshot/geo-map-snapshot.component.d.ts +21 -0
  206. package/lib/figma/geo-map/chrome/geo-map-swipe/geo-map-swipe.component.d.ts +33 -0
  207. package/lib/figma/geo-map/chrome/geo-map-toolbar/geo-map-toolbar.component.d.ts +30 -0
  208. package/lib/figma/geo-map/chrome/geo-map-zoom/geo-map-zoom.component.d.ts +67 -0
  209. package/lib/figma/geo-map/geo-map-toolbar.icons.d.ts +17 -0
  210. package/lib/figma/geo-map/geo-map.component.d.ts +53 -0
  211. package/lib/figma/geo-map/geo-map.constants.d.ts +73 -0
  212. package/lib/figma/geo-map/geo-map.controller.d.ts +49 -0
  213. package/lib/figma/geo-map/geo-map.types.d.ts +224 -0
  214. package/lib/figma/geo-map/services/geo-map-layer.service.d.ts +42 -0
  215. package/lib/figma/geo-map/services/geo-map-projection.service.d.ts +32 -0
  216. package/lib/figma/geo-map/services/geo-map.service.d.ts +99 -0
  217. package/lib/figma/geo-map/utils/geo-map-fullscreen-overlay.util.d.ts +13 -0
  218. package/lib/figma/geo-map/utils/geo-map-interactions.util.d.ts +9 -0
  219. package/lib/figma/geo-overlap-result/geo-overlap-result.component.d.ts +18 -0
  220. package/lib/figma/geo-overlap-result/geo-overlap-result.types.d.ts +7 -0
  221. package/lib/figma/geo-page-header/geo-page-header.component.d.ts +16 -0
  222. package/lib/figma/geo-page-title/geo-page-title.component.d.ts +9 -9
  223. package/lib/figma/geo-pagination/geo-pagination.component.d.ts +9 -14
  224. package/lib/figma/geo-radio/geo-radio.component.d.ts +17 -15
  225. package/lib/figma/geo-select/geo-select.component.d.ts +24 -19
  226. package/lib/figma/geo-slider/geo-slider.component.d.ts +7 -9
  227. package/lib/figma/geo-stat-card/geo-stat-card.component.d.ts +50 -0
  228. package/lib/figma/geo-stat-card/geo-stat-card.types.d.ts +11 -0
  229. package/lib/figma/geo-status-tag/geo-status-tag.component.d.ts +7 -7
  230. package/lib/figma/geo-step-form-layout/geo-step-form-layout.component.d.ts +27 -29
  231. package/lib/figma/geo-stepper/geo-stepper.component.d.ts +6 -8
  232. package/lib/figma/geo-table/geo-column-picker/geo-column-picker.component.d.ts +6 -7
  233. package/lib/figma/geo-table/geo-row-actions/geo-row-actions.component.d.ts +11 -12
  234. package/lib/figma/geo-table/geo-table-filter/geo-table-filter.component.d.ts +21 -28
  235. package/lib/figma/geo-table/geo-table-pagination/geo-table-pagination.component.d.ts +17 -20
  236. package/lib/figma/geo-table/geo-table-toolbar/geo-table-toolbar.component.d.ts +17 -18
  237. package/lib/figma/geo-table/geo-table.component.d.ts +58 -62
  238. package/lib/figma/geo-tabs/geo-tabs.component.d.ts +14 -17
  239. package/lib/figma/geo-textarea/geo-textarea.component.d.ts +15 -13
  240. package/lib/figma/geo-toast/geo-toast.component.d.ts +11 -12
  241. package/lib/figma/geo-tree/geo-tree.component.d.ts +8 -13
  242. package/lib/figma/geo-typography/geo-typography.component.d.ts +13 -13
  243. package/lib/figma/geo-upload/geo-upload.component.d.ts +26 -28
  244. package/lib/figma/index.d.ts +49 -0
  245. package/lib/styles/tokens.d.ts +56 -23
  246. package/package.json +4 -2
  247. package/src/lib/figma/geo-map/assets/toolbar/fullscreen.svg +8 -0
  248. package/src/lib/figma/geo-map/assets/toolbar/home.svg +3 -0
  249. package/src/lib/figma/geo-map/assets/toolbar/layers.svg +3 -0
  250. package/src/lib/figma/geo-map/assets/toolbar/measure-area.svg +12 -0
  251. package/src/lib/figma/geo-map/assets/toolbar/measure-distance.svg +5 -0
  252. package/src/lib/figma/geo-map/assets/toolbar/pan.svg +13 -0
  253. package/src/lib/figma/geo-map/assets/toolbar/search.svg +3 -0
  254. package/src/lib/figma/geo-map/assets/toolbar/zoom-in.svg +3 -0
  255. package/src/lib/figma/geo-map/assets/toolbar/zoom-out.svg +5 -0
  256. package/src/lib/styles/design-tokens.scss +108 -35
  257. package/src/lib/styles/scrollbar.scss +2 -2
  258. package/src/lib/styles/theme.scss +1 -1
@@ -37,7 +37,7 @@ Hiển thị banner trạng thái cố định trong layout (form/page). Dùng t
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
 
@@ -49,14 +49,14 @@ Every supported Input (do not invent others):
49
49
  | `title` | `string` | `''` | — |
50
50
  | `message` | `string` | `''` | — |
51
51
  | `closable` | `boolean` | `true` | — |
52
- | `visible` | `boolean` | `true` | |
52
+ | `visible` | `boolean` | `true` | Two-way `model()` (supports banana binding). |
53
53
  | `showIcon` | `boolean` | `true` | — |
54
54
 
55
55
  ## Outputs
56
56
 
57
57
  | Output | Payload | Description |
58
58
  |--------|---------|-------------|
59
- | `closed` | `EventEmitter<void>` | — |
59
+ | `closed` | `OutputEmitterRef<void>` | — |
60
60
 
61
61
  ## Related types
62
62
 
@@ -37,7 +37,7 @@ Nút quay lại trên trang chi tiết/sửa. Mặc định historyBack=true; ho
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,7 +54,7 @@ Every supported Input (do not invent others):
54
54
 
55
55
  | Output | Payload | Description |
56
56
  |--------|---------|-------------|
57
- | `clicked` | `EventEmitter<MouseEvent>` | — |
57
+ | `clicked` | `OutputEmitterRef<MouseEvent>` | — |
58
58
 
59
59
 
60
60
  ## Examples
@@ -37,7 +37,7 @@ Primary navigation / sidebar menus.
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 @@ CTA chính của GEO UI. appearance primary|secondary|tertiary; color brand|dang
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,7 +47,7 @@ Every supported Input (do not invent others):
47
47
  |-------|------|---------|-------------|
48
48
  | `appearance` | `'primary' \| 'secondary' \| 'tertiary'` | `'primary'` | — |
49
49
  | `color` | `'brand' \| 'danger' \| 'warning' \| 'success'` | `'brand'` | — |
50
- | `icon` | `string` | | — |
50
+ | `icon` | `string \| undefined` | `undefined` | — |
51
51
  | `iconTheme` | `'outline' \| 'fill' \| 'twotone'` | `'outline'` | — |
52
52
  | `iconPlacement` | `'start' \| 'end'` | `'start'` | Vị trí icon: `start` (trái) hoặc `end` (phải). |
53
53
  | `iconOnly` | `boolean` | `false` | — |
@@ -62,7 +62,7 @@ Every supported Input (do not invent others):
62
62
 
63
63
  | Output | Payload | Description |
64
64
  |--------|---------|-------------|
65
- | `clicked` | `EventEmitter<MouseEvent>` | — |
65
+ | `clicked` | `OutputEmitterRef<MouseEvent>` | — |
66
66
 
67
67
  ## Related types
68
68
 
@@ -0,0 +1,115 @@
1
+ # geo-chart
2
+
3
+ > Complete usage reference for **GeoChartComponent** (`@geoit/ui`)
4
+ >
5
+ > Read this file before using the component. Use **only** the Inputs/Outputs listed here.
6
+
7
+ ## Summary
8
+ Bar / donut chart for dashboard statistics (ApexCharts).
9
+
10
+ ## Import
11
+
12
+ ```ts
13
+ import { GeoChartComponent } from '@geoit/ui';
14
+ ```
15
+
16
+ Add to the consuming standalone component:
17
+
18
+ ```ts
19
+ imports: [GeoChartComponent]
20
+ ```
21
+
22
+ ## Selector
23
+ `geo-chart`
24
+
25
+ ## Category
26
+ `data`
27
+
28
+ ## When to use
29
+ KPI breakdowns on dashboard pages.
30
+
31
+ ## Do not use when
32
+ Maps / spatial — use geo-map; single KPI — use geo-stat-card.
33
+
34
+ ## How to use
35
+
36
+ Biểu đồ bar/donut cho dashboard. [data] = { label, value, color? }[]; (segmentClick) khi click lát.
37
+
38
+ ## Binding
39
+
40
+ Standalone component — drive via Inputs (`input()` / `model()`) and Outputs (`output()`). Banana bindings work for any `model()` fields (e.g. `[(open)]`, `[(pageIndex)]`).
41
+
42
+ ## Inputs
43
+
44
+ Every supported Input (do not invent others):
45
+
46
+ | Input | Type | Default | Description |
47
+ |-------|------|---------|-------------|
48
+ | `type` | `'bar' \| 'donut'` | `'bar'` | — |
49
+ | `title` | `string` | `''` | — |
50
+ | `data` | `GeoChartDatum[]` | `[]` | — |
51
+ | `height` | `number` | `260` | — |
52
+ | `showLegend` | `boolean` | `true` | — |
53
+ | `showSort` | `boolean` | `false` | — |
54
+ | `sort` | `'none' \| 'asc' \| 'desc'` | `'desc'` | Two-way `model()` (supports banana binding). |
55
+ | `emptyText` | `string` | `'Chưa có dữ liệu thống kê.'` | — |
56
+ | `unit` | `string` | `''` | — |
57
+
58
+ ## Outputs
59
+
60
+ | Output | Payload | Description |
61
+ |--------|---------|-------------|
62
+ | `segmentClick` | `OutputEmitterRef<GeoChartSegmentClick>` | — |
63
+ | `sortChange` | `OutputEmitterRef<'none' \| 'asc' \| 'desc'>` | — |
64
+
65
+ ## Related types
66
+
67
+ From `figma/geo-chart/geo-chart.types.ts`:
68
+
69
+ ```ts
70
+ export interface GeoChartDatum {
71
+ id?: string;
72
+ label: string;
73
+ value: number;
74
+ /** Optional CSS color; prefer design tokens when possible. */
75
+ color?: string;
76
+ }
77
+
78
+ export interface GeoChartSegmentClick {
79
+ datum: GeoChartDatum;
80
+ index: number;
81
+ }
82
+
83
+ export type GeoChartType = 'bar' | 'donut';
84
+
85
+ export type GeoChartSort = 'none' | 'asc' | 'desc';
86
+ ```
87
+
88
+ ## Examples
89
+
90
+ ### Bar
91
+
92
+ ```html
93
+ <geo-chart type="bar" title="Theo xã" [data]="wardData" [height]="280"></geo-chart>
94
+ ```
95
+
96
+ ## Tips
97
+
98
+ - Màu ưu tiên CSS var(--geo-color-*).
99
+ - KPI đơn → geo-stat-card; ghép sẵn → geo-dashboard.
100
+ ## Related components
101
+
102
+ - [`geo-stat-card`](./geo-stat-card.md)
103
+ - [`geo-dashboard`](./geo-dashboard.md)
104
+ - [`geo-empty-state`](./geo-empty-state.md)
105
+ ## Package path
106
+ `node_modules/@geoit/ui/ai/components/geo-chart.md`
107
+
108
+ ## Source
109
+ `projects/geo-ui/src/lib/figma/geo-chart/geo-chart.component.ts`
110
+
111
+ ## Rules for AI / consumers
112
+ - Prefer this component over raw ng-zorro / HTML for the same UI role.
113
+ - Use design tokens (`var(--geo-*)`) — never hardcode brand colors or radius.
114
+ - Match props exactly to the Inputs table; do not invent unsupported inputs.
115
+ - Copy examples and adapt labels/bindings only.
@@ -37,10 +37,10 @@ Checkbox có label. Two-way bằng [(checked)] / (checkedChange) — không ph
37
37
 
38
38
  ## Binding
39
39
 
40
- **Not CVA.** Use two-way `checked`:
40
+ **`model()` two-way** on `checked` (Angular 18):
41
41
 
42
42
  ```html
43
- <geo-checkbox [(checked)]="agreed" (checkedChange)="onChange($event)"></geo-checkbox>
43
+ <geo-checkbox [(checked)]="agreed"></geo-checkbox>
44
44
  ```
45
45
 
46
46
  ## Inputs
@@ -50,15 +50,13 @@ Every supported Input (do not invent others):
50
50
  | Input | Type | Default | Description |
51
51
  |-------|------|---------|-------------|
52
52
  | `label` | `string` | `''` | — |
53
- | `checked` | `boolean` | `false` | — |
53
+ | `checked` | `boolean` | `false` | Two-way: `[(checked)]`. Two-way `model()` (supports banana binding). |
54
54
  | `disabled` | `boolean` | `false` | — |
55
55
  | `indeterminate` | `boolean` | `false` | — |
56
56
 
57
57
  ## Outputs
58
58
 
59
- | Output | Payload | Description |
60
- |--------|---------|-------------|
61
- | `checkedChange` | `EventEmitter<boolean>` | — |
59
+ _None_
62
60
 
63
61
 
64
62
  ## Examples
@@ -37,7 +37,7 @@ Popup ẩn/hiện cột bảng. [items] GeoColumnPickerItem[]; (apply) nhận pa
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,13 +48,13 @@ Every supported Input (do not invent others):
48
48
  | `triggerLabel` | `string` | `'Ẩn hiện cột'` | — |
49
49
  | `hint` | `string` | `'Chọn cột hiển thị trên bảng.'` | — |
50
50
  | `items` | `GeoColumnPickerItem[]` | `[]` | — |
51
- | `storageKey` | `string` | | Lưu trạng thái ẩn/hiện cột theo session khi người dùng áp dụng |
51
+ | `storageKey` | `string \| undefined` | `undefined` | Lưu trạng thái ẩn/hiện cột theo session khi người dùng áp dụng |
52
52
 
53
53
  ## Outputs
54
54
 
55
55
  | Output | Payload | Description |
56
56
  |--------|---------|-------------|
57
- | `apply` | `EventEmitter<GeoColumnPickerApplyPayload>` | — |
57
+ | `apply` | `OutputEmitterRef<GeoColumnPickerApplyPayload>` | — |
58
58
 
59
59
  ## Related types
60
60
 
@@ -37,7 +37,7 @@ Dialog xác nhận hành động phá hủy (xóa). Điều khiển bằng [visi
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,7 +45,7 @@ Every supported Input (do not invent others):
45
45
 
46
46
  | Input | Type | Default | Description |
47
47
  |-------|------|---------|-------------|
48
- | `visible` | `boolean` | `false` | |
48
+ | `visible` | `boolean` | `false` | Two-way `model()` (supports banana binding). |
49
49
  | `title` | `string` | `'Xác nhận xoá'` | — |
50
50
  | `message` | `string` | `''` | — |
51
51
  | `highlight` | `string` | `''` | — |
@@ -61,9 +61,8 @@ Every supported Input (do not invent others):
61
61
 
62
62
  | Output | Payload | Description |
63
63
  |--------|---------|-------------|
64
- | `visibleChange` | `EventEmitter<boolean>` | — |
65
- | `confirm` | `EventEmitter<void>` | — |
66
- | `cancel` | `EventEmitter<void>` | — |
64
+ | `confirm` | `OutputEmitterRef<void>` | — |
65
+ | `cancel` | `OutputEmitterRef<void>` | — |
67
66
 
68
67
  ## Related types
69
68
 
@@ -0,0 +1,102 @@
1
+ # geo-dashboard
2
+
3
+ > Complete usage reference for **GeoDashboardComponent** (`@geoit/ui`)
4
+ >
5
+ > Read this file before using the component. Use **only** the Inputs/Outputs listed here.
6
+
7
+ ## Summary
8
+ Composed dashboard: period, KPI cards, ward/mismatch charts.
9
+
10
+ ## Import
11
+
12
+ ```ts
13
+ import { GeoDashboardComponent } from '@geoit/ui';
14
+ ```
15
+
16
+ Add to the consuming standalone component:
17
+
18
+ ```ts
19
+ imports: [GeoDashboardComponent]
20
+ ```
21
+
22
+ ## Selector
23
+ `geo-dashboard`
24
+
25
+ ## Category
26
+ `layout`
27
+
28
+ ## When to use
29
+ TCQH overview pages (thống kê nhanh).
30
+
31
+ ## Do not use when
32
+ Custom layouts — compose geo-stat-card + geo-chart yourself.
33
+
34
+ ## How to use
35
+
36
+ Dashboard ghép sẵn: stats + biểu đồ xã + lệch kỳ. [(period)] điều khiển kỳ thống kê.
37
+
38
+ ## Binding
39
+
40
+ Standalone component — drive via Inputs (`input()` / `model()`) and Outputs (`output()`). Banana bindings work for any `model()` fields (e.g. `[(open)]`, `[(pageIndex)]`).
41
+
42
+ ## Inputs
43
+
44
+ Every supported Input (do not invent others):
45
+
46
+ | Input | Type | Default | Description |
47
+ |-------|------|---------|-------------|
48
+ | `title` | `string` | `'Dashboard thống kê'` | — |
49
+ | `breadcrumb` | `GeoBreadcrumbItem[]` | `[ { label: 'Trang chủ', link: '/' }, { label: 'Dashboard' }, ]` | — |
50
+ | `stats` | `GeoStatCardItem[]` | `[]` | — |
51
+ | `wardChartTitle` | `string` | `'Diện tích quy hoạch theo phường/xã'` | — |
52
+ | `wardData` | `GeoChartDatum[]` | `[]` | — |
53
+ | `mismatchChartTitle` | `string` | `'Tỷ lệ thửa quy hoạch khác mục đích hiện trạng'` | — |
54
+ | `mismatchData` | `GeoChartDatum[]` | `[]` | — |
55
+ | `wardUnit` | `string` | `'ha'` | — |
56
+ | `period` | `GeoDateRangeValue` | `null` | Two-way `model()` (supports banana binding). |
57
+
58
+ ## Outputs
59
+
60
+ | Output | Payload | Description |
61
+ |--------|---------|-------------|
62
+ | `periodChange` | `OutputEmitterRef<GeoDateRangeValue>` | — |
63
+ | `mismatchSegmentClick` | `OutputEmitterRef<GeoChartSegmentClick>` | — |
64
+ | `wardSegmentClick` | `OutputEmitterRef<GeoChartSegmentClick>` | — |
65
+
66
+ ## Related types
67
+
68
+ From `figma/geo-dashboard/geo-dashboard.types.ts`:
69
+
70
+ ```ts
71
+ export interface GeoDashboardPeriodChange {
72
+ range: GeoDateRangeValue | null;
73
+ }
74
+ ```
75
+
76
+ ## Examples
77
+
78
+ ### Basic
79
+
80
+ ```html
81
+ <geo-dashboard [stats]="stats" [wardData]="wards" [mismatchData]="mismatch" [(period)]="period"></geo-dashboard>
82
+ ```
83
+
84
+ ## Tips
85
+
86
+ - Tự layout → geo-stat-card + geo-chart.
87
+ ## Related components
88
+
89
+ - [`geo-stat-card`](./geo-stat-card.md)
90
+ - [`geo-chart`](./geo-chart.md)
91
+ - [`geo-page-header`](./geo-page-header.md)
92
+ ## Package path
93
+ `node_modules/@geoit/ui/ai/components/geo-dashboard.md`
94
+
95
+ ## Source
96
+ `projects/geo-ui/src/lib/figma/geo-dashboard/geo-dashboard.component.ts`
97
+
98
+ ## Rules for AI / consumers
99
+ - Prefer this component over raw ng-zorro / HTML for the same UI role.
100
+ - Use design tokens (`var(--geo-*)`) — never hardcode brand colors or radius.
101
+ - Match props exactly to the Inputs table; do not invent unsupported inputs.
102
+ - Copy examples and adapt labels/bindings only.
@@ -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):
@@ -67,14 +69,14 @@ Every supported Input (do not invent others):
67
69
  | `showToday` | `boolean` | `true` | — |
68
70
  | `showTime` | `boolean` | `false` | — |
69
71
  | `block` | `boolean` | `false` | — |
70
- | `width` | `number \| string` | | — |
71
- | `disabledDate` | `(current: Date)` | `> boolean` | — |
72
+ | `width` | `number \| string \| undefined` | `undefined` | — |
73
+ | `disabledDate` | `((current: Date) => boolean) \| undefined` | `undefined` | — |
72
74
 
73
75
  ## Outputs
74
76
 
75
77
  | Output | Payload | Description |
76
78
  |--------|---------|-------------|
77
- | `valueChange` | `EventEmitter<Date \| null>` | — |
79
+ | `valueChange` | `OutputEmitterRef<Date \| null>` | — |
78
80
 
79
81
  ## Related types
80
82
 
@@ -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):
@@ -65,15 +67,15 @@ Every supported Input (do not invent others):
65
67
  | `allowClear` | `boolean` | `true` | — |
66
68
  | `showTime` | `boolean` | `false` | — |
67
69
  | `block` | `boolean` | `false` | — |
68
- | `width` | `number \| string` | | — |
69
- | `disabledDate` | `(current: Date)` | `> boolean` | — |
70
+ | `width` | `number \| string \| undefined` | `undefined` | — |
71
+ | `disabledDate` | `((current: Date) => boolean) \| undefined` | `undefined` | — |
70
72
  | `separator` | `string` | `'→'` | — |
71
73
 
72
74
  ## Outputs
73
75
 
74
76
  | Output | Payload | Description |
75
77
  |--------|---------|-------------|
76
- | `valueChange` | `EventEmitter<[Date, Date] \| null>` | — |
78
+ | `valueChange` | `OutputEmitterRef<[Date, Date] \| null>` | — |
77
79
 
78
80
  ## Related types
79
81
 
@@ -0,0 +1,75 @@
1
+ # geo-empty-state
2
+
3
+ > Complete usage reference for **GeoEmptyStateComponent** (`@geoit/ui`)
4
+ >
5
+ > Read this file before using the component. Use **only** the Inputs/Outputs listed here.
6
+
7
+ ## Summary
8
+ Empty region placeholder (icon + title + optional action).
9
+
10
+ ## Import
11
+
12
+ ```ts
13
+ import { GeoEmptyStateComponent } from '@geoit/ui';
14
+ ```
15
+
16
+ Add to the consuming standalone component:
17
+
18
+ ```ts
19
+ imports: [GeoEmptyStateComponent]
20
+ ```
21
+
22
+ ## Selector
23
+ `geo-empty-state`
24
+
25
+ ## Category
26
+ `feedback`
27
+
28
+ ## When to use
29
+ No data / no results areas inside pages or cards.
30
+
31
+ ## Do not use when
32
+ Inline form validation — use field errorMessage / geo-alert.
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
+ | `title` | `string` | `'Không có dữ liệu'` | — |
46
+ | `description` | `string` | `''` | — |
47
+ | `icon` | `string` | `'inbox'` | — |
48
+ | `actionLabel` | `string` | `''` | — |
49
+
50
+ ## Outputs
51
+
52
+ | Output | Payload | Description |
53
+ |--------|---------|-------------|
54
+ | `actionClick` | `OutputEmitterRef<void>` | — |
55
+
56
+
57
+ ## Examples
58
+
59
+ ### Example
60
+
61
+ ```html
62
+ <geo-empty-state title="Chưa có dữ liệu" description="Thử đổi bộ lọc."></geo-empty-state>
63
+ ```
64
+
65
+ ## Package path
66
+ `node_modules/@geoit/ui/ai/components/geo-empty-state.md`
67
+
68
+ ## Source
69
+ `projects/geo-ui/src/lib/figma/geo-empty-state/geo-empty-state.component.ts`
70
+
71
+ ## Rules for AI / consumers
72
+ - Prefer this component over raw ng-zorro / HTML for the same UI role.
73
+ - Use design tokens (`var(--geo-*)`) — never hardcode brand colors or radius.
74
+ - Match props exactly to the Inputs table; do not invent unsupported inputs.
75
+ - Copy examples and adapt labels/bindings only.
@@ -0,0 +1,97 @@
1
+ # geo-feedback-form
2
+
3
+ > Complete usage reference for **GeoFeedbackFormComponent** (`@geoit/ui`)
4
+ >
5
+ > Read this file before using the component. Use **only** the Inputs/Outputs listed here.
6
+
7
+ ## Summary
8
+ Citizen feedback / phản ánh form with validation.
9
+
10
+ ## Import
11
+
12
+ ```ts
13
+ import { GeoFeedbackFormComponent } from '@geoit/ui';
14
+ ```
15
+
16
+ Add to the consuming standalone component:
17
+
18
+ ```ts
19
+ imports: [GeoFeedbackFormComponent]
20
+ ```
21
+
22
+ ## Selector
23
+ `geo-feedback-form`
24
+
25
+ ## Category
26
+ `forms`
27
+
28
+ ## When to use
29
+ Public feedback submission pages.
30
+
31
+ ## Do not use when
32
+ Admin feedback inbox — use geo-list-page + geo-table.
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
+ | `title` | `string` | `'Gửi phản ánh, kiến nghị'` | — |
46
+ | `description` | `string` | `'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ó).'` | Mô tả ngắn dưới tiêu đề — giúp người dân hiểu quy trình xử lý. |
47
+ | `maxLength` | `number` | `1000` | — |
48
+ | `loading` | `boolean` | `false` | — |
49
+ | `showCancel` | `boolean` | `true` | Ẩn nút Hủy khi form dùng trên trang riêng (không phải dialog). |
50
+ | `fill` | `boolean` | `false` | Form chiếm hết chiều rộng/cao vùng chứa (trang full content). |
51
+ | `submitLabel` | `string` | `'Gửi phản ánh'` | — |
52
+ | `cancelLabel` | `string` | `'Hủy'` | — |
53
+ | `senderName` | `string` | `''` | Two-way `model()` (supports banana binding). |
54
+ | `content` | `string` | `''` | Two-way `model()` (supports banana binding). |
55
+
56
+ ## Outputs
57
+
58
+ | Output | Payload | Description |
59
+ |--------|---------|-------------|
60
+ | `submittedFeedback` | `OutputEmitterRef<GeoFeedbackPayload>` | — |
61
+ | `cancelled` | `OutputEmitterRef<void>` | — |
62
+
63
+ ## Related types
64
+
65
+ From `figma/geo-feedback-form/geo-feedback-form.types.ts`:
66
+
67
+ ```ts
68
+ export interface GeoFeedbackPayload {
69
+ senderName: string;
70
+ content: string;
71
+ }
72
+
73
+ export interface GeoFeedbackReplyPayload {
74
+ id: string;
75
+ reply: string;
76
+ }
77
+ ```
78
+
79
+ ## Examples
80
+
81
+ ### Example
82
+
83
+ ```html
84
+ <geo-feedback-form (submittedFeedback)="send($event)"></geo-feedback-form>
85
+ ```
86
+
87
+ ## Package path
88
+ `node_modules/@geoit/ui/ai/components/geo-feedback-form.md`
89
+
90
+ ## Source
91
+ `projects/geo-ui/src/lib/figma/geo-feedback-form/geo-feedback-form.component.ts`
92
+
93
+ ## Rules for AI / consumers
94
+ - Prefer this component over raw ng-zorro / HTML for the same UI role.
95
+ - Use design tokens (`var(--geo-*)`) — never hardcode brand colors or radius.
96
+ - Match props exactly to the Inputs table; do not invent unsupported inputs.
97
+ - Copy examples and adapt labels/bindings only.
@@ -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):
@@ -64,14 +66,14 @@ Every supported Input (do not invent others):
64
66
  | `error` | `boolean` | `false` | — |
65
67
  | `errorMessage` | `string` | `''` | — |
66
68
  | `block` | `boolean` | `false` | — |
67
- | `width` | `number \| string` | | — |
69
+ | `width` | `number \| string \| undefined` | `undefined` | — |
68
70
  | `selectedName` | `string` | `''` | Tên file đã upload (server) — hiện khi chưa có File local trong CVA. Dùng cho flow: chọn file → upload → giữ tên từ API. |
69
71
 
70
72
  ## Outputs
71
73
 
72
74
  | Output | Payload | Description |
73
75
  |--------|---------|-------------|
74
- | `fileChange` | `EventEmitter<File \| File[] \| null>` | — |
76
+ | `fileChange` | `OutputEmitterRef<File \| File[] \| null>` | — |
75
77
 
76
78
  ## Related types
77
79