@geoit/ui 0.0.2

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 (165) hide show
  1. package/AGENTS.md +25 -0
  2. package/README.md +46 -0
  3. package/ai/AGENTS.md +86 -0
  4. package/ai/README.md +44 -0
  5. package/ai/catalog.json +882 -0
  6. package/ai/components/geo-alert.md +56 -0
  7. package/ai/components/geo-back-button.md +54 -0
  8. package/ai/components/geo-breadcrumb.md +52 -0
  9. package/ai/components/geo-button.md +63 -0
  10. package/ai/components/geo-checkbox.md +54 -0
  11. package/ai/components/geo-column-picker.md +54 -0
  12. package/ai/components/geo-confirm-modal.md +70 -0
  13. package/ai/components/geo-date-picker.md +65 -0
  14. package/ai/components/geo-date-range-picker.md +64 -0
  15. package/ai/components/geo-file-picker.md +62 -0
  16. package/ai/components/geo-form-modal.md +88 -0
  17. package/ai/components/geo-icon.md +53 -0
  18. package/ai/components/geo-input.md +65 -0
  19. package/ai/components/geo-page-title.md +53 -0
  20. package/ai/components/geo-pagination.md +59 -0
  21. package/ai/components/geo-radio.md +67 -0
  22. package/ai/components/geo-row-actions.md +54 -0
  23. package/ai/components/geo-select.md +68 -0
  24. package/ai/components/geo-slider.md +56 -0
  25. package/ai/components/geo-status-tag.md +51 -0
  26. package/ai/components/geo-step-form-layout.md +81 -0
  27. package/ai/components/geo-stepper.md +63 -0
  28. package/ai/components/geo-table-filter.md +65 -0
  29. package/ai/components/geo-table-pagination.md +59 -0
  30. package/ai/components/geo-table-toolbar.md +64 -0
  31. package/ai/components/geo-table.md +98 -0
  32. package/ai/components/geo-tabs.md +62 -0
  33. package/ai/components/geo-textarea.md +59 -0
  34. package/ai/components/geo-toast.md +61 -0
  35. package/ai/components/geo-tree.md +58 -0
  36. package/ai/components/geo-typography.md +57 -0
  37. package/ai/components/geo-upload.md +78 -0
  38. package/ai/recipes.md +111 -0
  39. package/esm2022/geoit-ui.mjs +5 -0
  40. package/esm2022/lib/figma/geo-alert/geo-alert.component.mjs +58 -0
  41. package/esm2022/lib/figma/geo-alert/geo-alert.types.mjs +7 -0
  42. package/esm2022/lib/figma/geo-back-button/geo-back-button.component.mjs +48 -0
  43. package/esm2022/lib/figma/geo-breadcrumb/geo-breadcrumb.component.mjs +33 -0
  44. package/esm2022/lib/figma/geo-breadcrumb/geo-breadcrumb.types.mjs +2 -0
  45. package/esm2022/lib/figma/geo-button/geo-button.component.mjs +77 -0
  46. package/esm2022/lib/figma/geo-button/geo-button.types.mjs +2 -0
  47. package/esm2022/lib/figma/geo-checkbox/geo-checkbox.component.mjs +34 -0
  48. package/esm2022/lib/figma/geo-confirm-modal/geo-confirm-modal.component.mjs +76 -0
  49. package/esm2022/lib/figma/geo-confirm-modal/geo-confirm-modal.types.mjs +2 -0
  50. package/esm2022/lib/figma/geo-date-picker/geo-date-picker.component.mjs +119 -0
  51. package/esm2022/lib/figma/geo-date-picker/geo-date-picker.types.mjs +2 -0
  52. package/esm2022/lib/figma/geo-date-range-picker/geo-date-range-picker.component.mjs +116 -0
  53. package/esm2022/lib/figma/geo-date-range-picker/geo-date-range-picker.types.mjs +2 -0
  54. package/esm2022/lib/figma/geo-file-picker/geo-file-picker.component.mjs +145 -0
  55. package/esm2022/lib/figma/geo-file-picker/geo-file-picker.types.mjs +2 -0
  56. package/esm2022/lib/figma/geo-form-modal/geo-form-modal.component.mjs +153 -0
  57. package/esm2022/lib/figma/geo-icon/geo-icon.component.mjs +51 -0
  58. package/esm2022/lib/figma/geo-icon/geo-icon.types.mjs +8 -0
  59. package/esm2022/lib/figma/geo-input/geo-input.component.mjs +118 -0
  60. package/esm2022/lib/figma/geo-page-title/geo-page-title.component.mjs +51 -0
  61. package/esm2022/lib/figma/geo-pagination/geo-pagination.component.mjs +54 -0
  62. package/esm2022/lib/figma/geo-radio/geo-radio.component.mjs +95 -0
  63. package/esm2022/lib/figma/geo-radio/geo-radio.types.mjs +2 -0
  64. package/esm2022/lib/figma/geo-select/geo-select.component.mjs +113 -0
  65. package/esm2022/lib/figma/geo-select/geo-select.types.mjs +2 -0
  66. package/esm2022/lib/figma/geo-slider/geo-slider.component.mjs +43 -0
  67. package/esm2022/lib/figma/geo-status-tag/geo-status-tag.component.mjs +62 -0
  68. package/esm2022/lib/figma/geo-status-tag/geo-status-tag.types.mjs +30 -0
  69. package/esm2022/lib/figma/geo-step-form-layout/geo-step-form-layout.component.mjs +157 -0
  70. package/esm2022/lib/figma/geo-step-form-layout/geo-step-form-layout.types.mjs +2 -0
  71. package/esm2022/lib/figma/geo-stepper/geo-stepper.component.mjs +77 -0
  72. package/esm2022/lib/figma/geo-stepper/geo-stepper.types.mjs +2 -0
  73. package/esm2022/lib/figma/geo-table/geo-column-picker/geo-column-picker.component.mjs +65 -0
  74. package/esm2022/lib/figma/geo-table/geo-column-picker/geo-column-picker.storage.mjs +31 -0
  75. package/esm2022/lib/figma/geo-table/geo-column-picker/geo-column-picker.types.mjs +2 -0
  76. package/esm2022/lib/figma/geo-table/geo-row-actions/geo-row-actions.component.mjs +64 -0
  77. package/esm2022/lib/figma/geo-table/geo-row-actions/geo-row-actions.types.mjs +24 -0
  78. package/esm2022/lib/figma/geo-table/geo-table-filter/geo-table-filter.component.mjs +195 -0
  79. package/esm2022/lib/figma/geo-table/geo-table-pagination/geo-table-pagination.component.mjs +118 -0
  80. package/esm2022/lib/figma/geo-table/geo-table-toolbar/geo-table-toolbar.component.mjs +68 -0
  81. package/esm2022/lib/figma/geo-table/geo-table.component.mjs +381 -0
  82. package/esm2022/lib/figma/geo-table/geo-table.types.mjs +4 -0
  83. package/esm2022/lib/figma/geo-tabs/geo-tabs.component.mjs +94 -0
  84. package/esm2022/lib/figma/geo-tabs/geo-tabs.types.mjs +2 -0
  85. package/esm2022/lib/figma/geo-textarea/geo-textarea.component.mjs +85 -0
  86. package/esm2022/lib/figma/geo-toast/geo-toast.component.mjs +57 -0
  87. package/esm2022/lib/figma/geo-toast/geo-toast.service.mjs +116 -0
  88. package/esm2022/lib/figma/geo-toast/geo-toast.types.mjs +13 -0
  89. package/esm2022/lib/figma/geo-tree/geo-tree.component.mjs +52 -0
  90. package/esm2022/lib/figma/geo-tree/geo-tree.types.mjs +2 -0
  91. package/esm2022/lib/figma/geo-typography/geo-typography.component.mjs +112 -0
  92. package/esm2022/lib/figma/geo-typography/geo-typography.types.mjs +96 -0
  93. package/esm2022/lib/figma/geo-upload/geo-upload.component.mjs +218 -0
  94. package/esm2022/lib/figma/geo-upload/geo-upload.types.mjs +30 -0
  95. package/esm2022/lib/figma/index.mjs +56 -0
  96. package/esm2022/lib/ng-zorro/ng-zorro-antd.module.mjs +293 -0
  97. package/esm2022/lib/styles/tokens.mjs +144 -0
  98. package/esm2022/public-api.mjs +7 -0
  99. package/fesm2022/geoit-ui.mjs +3805 -0
  100. package/fesm2022/geoit-ui.mjs.map +1 -0
  101. package/index.d.ts +5 -0
  102. package/lib/figma/geo-alert/geo-alert.component.d.ts +17 -0
  103. package/lib/figma/geo-alert/geo-alert.types.d.ts +2 -0
  104. package/lib/figma/geo-back-button/geo-back-button.component.d.ts +18 -0
  105. package/lib/figma/geo-breadcrumb/geo-breadcrumb.component.d.ts +12 -0
  106. package/lib/figma/geo-breadcrumb/geo-breadcrumb.types.d.ts +10 -0
  107. package/lib/figma/geo-button/geo-button.component.d.ts +27 -0
  108. package/lib/figma/geo-button/geo-button.types.d.ts +4 -0
  109. package/lib/figma/geo-checkbox/geo-checkbox.component.d.ts +12 -0
  110. package/lib/figma/geo-confirm-modal/geo-confirm-modal.component.d.ts +24 -0
  111. package/lib/figma/geo-confirm-modal/geo-confirm-modal.types.d.ts +5 -0
  112. package/lib/figma/geo-date-picker/geo-date-picker.component.d.ts +35 -0
  113. package/lib/figma/geo-date-picker/geo-date-picker.types.d.ts +2 -0
  114. package/lib/figma/geo-date-range-picker/geo-date-range-picker.component.d.ts +34 -0
  115. package/lib/figma/geo-date-range-picker/geo-date-range-picker.types.d.ts +2 -0
  116. package/lib/figma/geo-file-picker/geo-file-picker.component.d.ts +39 -0
  117. package/lib/figma/geo-file-picker/geo-file-picker.types.d.ts +4 -0
  118. package/lib/figma/geo-form-modal/geo-form-modal.component.d.ts +57 -0
  119. package/lib/figma/geo-icon/geo-icon.component.d.ts +19 -0
  120. package/lib/figma/geo-icon/geo-icon.types.d.ts +3 -0
  121. package/lib/figma/geo-input/geo-input.component.d.ts +37 -0
  122. package/lib/figma/geo-page-title/geo-page-title.component.d.ts +22 -0
  123. package/lib/figma/geo-pagination/geo-pagination.component.d.ts +21 -0
  124. package/lib/figma/geo-radio/geo-radio.component.d.ts +31 -0
  125. package/lib/figma/geo-radio/geo-radio.types.d.ts +9 -0
  126. package/lib/figma/geo-select/geo-select.component.d.ts +33 -0
  127. package/lib/figma/geo-select/geo-select.types.d.ts +7 -0
  128. package/lib/figma/geo-slider/geo-slider.component.d.ts +17 -0
  129. package/lib/figma/geo-status-tag/geo-status-tag.component.d.ts +18 -0
  130. package/lib/figma/geo-status-tag/geo-status-tag.types.d.ts +13 -0
  131. package/lib/figma/geo-step-form-layout/geo-step-form-layout.component.d.ts +67 -0
  132. package/lib/figma/geo-step-form-layout/geo-step-form-layout.types.d.ts +9 -0
  133. package/lib/figma/geo-stepper/geo-stepper.component.d.ts +42 -0
  134. package/lib/figma/geo-stepper/geo-stepper.types.d.ts +9 -0
  135. package/lib/figma/geo-table/geo-column-picker/geo-column-picker.component.d.ts +20 -0
  136. package/lib/figma/geo-table/geo-column-picker/geo-column-picker.storage.d.ts +5 -0
  137. package/lib/figma/geo-table/geo-column-picker/geo-column-picker.types.d.ts +17 -0
  138. package/lib/figma/geo-table/geo-row-actions/geo-row-actions.component.d.ts +21 -0
  139. package/lib/figma/geo-table/geo-row-actions/geo-row-actions.types.d.ts +13 -0
  140. package/lib/figma/geo-table/geo-table-filter/geo-table-filter.component.d.ts +75 -0
  141. package/lib/figma/geo-table/geo-table-pagination/geo-table-pagination.component.d.ts +33 -0
  142. package/lib/figma/geo-table/geo-table-toolbar/geo-table-toolbar.component.d.ts +24 -0
  143. package/lib/figma/geo-table/geo-table.component.d.ts +113 -0
  144. package/lib/figma/geo-table/geo-table.types.d.ts +47 -0
  145. package/lib/figma/geo-tabs/geo-tabs.component.d.ts +31 -0
  146. package/lib/figma/geo-tabs/geo-tabs.types.d.ts +7 -0
  147. package/lib/figma/geo-textarea/geo-textarea.component.d.ts +27 -0
  148. package/lib/figma/geo-toast/geo-toast.component.d.ts +23 -0
  149. package/lib/figma/geo-toast/geo-toast.service.d.ts +33 -0
  150. package/lib/figma/geo-toast/geo-toast.types.d.ts +45 -0
  151. package/lib/figma/geo-tree/geo-tree.component.d.ts +23 -0
  152. package/lib/figma/geo-tree/geo-tree.types.d.ts +12 -0
  153. package/lib/figma/geo-typography/geo-typography.component.d.ts +35 -0
  154. package/lib/figma/geo-typography/geo-typography.types.d.ts +12 -0
  155. package/lib/figma/geo-upload/geo-upload.component.d.ts +59 -0
  156. package/lib/figma/geo-upload/geo-upload.types.d.ts +13 -0
  157. package/lib/figma/index.d.ts +55 -0
  158. package/lib/ng-zorro/ng-zorro-antd.module.d.ts +76 -0
  159. package/lib/styles/tokens.d.ts +184 -0
  160. package/package.json +38 -0
  161. package/public-api.d.ts +3 -0
  162. package/src/lib/styles/design-tokens.scss +143 -0
  163. package/src/lib/styles/geo-toast-notification.scss +129 -0
  164. package/src/lib/styles/scrollbar.scss +38 -0
  165. package/src/lib/styles/theme.scss +153 -0
@@ -0,0 +1,882 @@
1
+ {
2
+ "package": "@geoit/ui",
3
+ "import": "@geoit/ui",
4
+ "version": "0.0.1",
5
+ "generatedAt": "2026-07-27T01:27:04.549Z",
6
+ "styles": [
7
+ "projects/geo-ui/src/lib/styles/design-tokens.scss",
8
+ "projects/geo-ui/src/lib/styles/theme.scss"
9
+ ],
10
+ "tokens": {
11
+ "radius": "var(--geo-radius) /* 6px */",
12
+ "primary": "var(--geo-color-primary-default)",
13
+ "docs": "projects/geo-ui/src/lib/styles/design-tokens.scss"
14
+ },
15
+ "rules": [
16
+ "Always use geo-* components from @geoit/ui for UI.",
17
+ "Never hardcode hex colors or border-radius; use CSS variables.",
18
+ "Compose geo-form-modal + geo-stepper for multi-step dialogs.",
19
+ "Read ai/components/<selector>.md before implementing a component.",
20
+ "Import from @geoit/ui (scoped package)."
21
+ ],
22
+ "components": [
23
+ {
24
+ "name": "GeoAlertComponent",
25
+ "selector": "geo-alert",
26
+ "category": "feedback",
27
+ "summary": "Inline alert banner (success/error/warning/info).",
28
+ "whenToUse": "Form-level or page-level status messages that stay in layout.",
29
+ "doNotUseWhen": "Transient notifications — use geo-toast / GeoToastService.",
30
+ "path": "projects/geo-ui/src/lib/figma/geo-alert/geo-alert.component.ts",
31
+ "doc": "ai/components/geo-alert.md",
32
+ "inputs": [
33
+ "type",
34
+ "title",
35
+ "message",
36
+ "closable",
37
+ "visible",
38
+ "showIcon"
39
+ ],
40
+ "outputs": [
41
+ "closed"
42
+ ],
43
+ "example": "<geo-alert type=\"success\" title=\"Thành công\" message=\"Đã lưu.\"></geo-alert>"
44
+ },
45
+ {
46
+ "name": "GeoBackButtonComponent",
47
+ "selector": "geo-back-button",
48
+ "category": "navigation",
49
+ "summary": "Back navigation control (history or custom click).",
50
+ "whenToUse": "Detail/edit pages that return to a list.",
51
+ "doNotUseWhen": "Primary CTA — use geo-button.",
52
+ "path": "projects/geo-ui/src/lib/figma/geo-back-button/geo-back-button.component.ts",
53
+ "doc": "ai/components/geo-back-button.md",
54
+ "inputs": [
55
+ "ariaLabel",
56
+ "title",
57
+ "disabled",
58
+ "historyBack"
59
+ ],
60
+ "outputs": [
61
+ "clicked"
62
+ ],
63
+ "example": "<geo-back-button (clicked)=\"goBack()\"></geo-back-button>"
64
+ },
65
+ {
66
+ "name": "GeoBreadcrumbComponent",
67
+ "selector": "geo-breadcrumb",
68
+ "category": "navigation",
69
+ "summary": "Breadcrumb trail; last item active (primary).",
70
+ "whenToUse": "Page hierarchy under page title.",
71
+ "doNotUseWhen": "Primary navigation / sidebar menus.",
72
+ "path": "projects/geo-ui/src/lib/figma/geo-breadcrumb/geo-breadcrumb.component.ts",
73
+ "doc": "ai/components/geo-breadcrumb.md",
74
+ "inputs": [
75
+ "items"
76
+ ],
77
+ "outputs": [],
78
+ "example": "<geo-breadcrumb [items]=\"[\n { label: 'Trang chủ', link: '/' },\n { label: 'Chi tiết' }\n]\"></geo-breadcrumb>"
79
+ },
80
+ {
81
+ "name": "GeoButtonComponent",
82
+ "selector": "geo-button",
83
+ "category": "actions",
84
+ "summary": "Primary action button with brand/semantic colors and icons.",
85
+ "whenToUse": "All CTAs, form submit/cancel, toolbar actions.",
86
+ "doNotUseWhen": "Do not use raw ant-btn or native button for branded UI.",
87
+ "path": "projects/geo-ui/src/lib/figma/geo-button/geo-button.component.ts",
88
+ "doc": "ai/components/geo-button.md",
89
+ "inputs": [
90
+ "appearance",
91
+ "color",
92
+ "icon",
93
+ "iconTheme",
94
+ "iconPlacement",
95
+ "iconOnly",
96
+ "type",
97
+ "disabled",
98
+ "tooltip",
99
+ "tooltipPlacement",
100
+ "active",
101
+ "title"
102
+ ],
103
+ "outputs": [
104
+ "clicked"
105
+ ],
106
+ "example": "<geo-button appearance=\"primary\" color=\"brand\" icon=\"plus\">Thêm mới</geo-button>\n<geo-button appearance=\"primary\" icon=\"right\" iconPlacement=\"end\">Tiếp theo</geo-button>"
107
+ },
108
+ {
109
+ "name": "GeoCheckboxComponent",
110
+ "selector": "geo-checkbox",
111
+ "category": "forms",
112
+ "summary": "Checkbox with label; supports CVA / ngModel.",
113
+ "whenToUse": "Boolean / multi-select options in forms.",
114
+ "doNotUseWhen": "Single exclusive choice — use geo-radio.",
115
+ "path": "projects/geo-ui/src/lib/figma/geo-checkbox/geo-checkbox.component.ts",
116
+ "doc": "ai/components/geo-checkbox.md",
117
+ "inputs": [
118
+ "label",
119
+ "checked",
120
+ "disabled",
121
+ "indeterminate"
122
+ ],
123
+ "outputs": [
124
+ "checkedChange"
125
+ ],
126
+ "example": "<geo-checkbox label=\"Tôi đồng ý\" [(ngModel)]=\"agreed\"></geo-checkbox>"
127
+ },
128
+ {
129
+ "name": "GeoColumnPickerComponent",
130
+ "selector": "geo-column-picker",
131
+ "category": "data",
132
+ "summary": "Column visibility picker for tables (optional persistence).",
133
+ "whenToUse": "Let users show/hide table columns.",
134
+ "doNotUseWhen": "Static tables with fixed columns.",
135
+ "path": "projects/geo-ui/src/lib/figma/geo-table/geo-column-picker/geo-column-picker.component.ts",
136
+ "doc": "ai/components/geo-column-picker.md",
137
+ "inputs": [
138
+ "triggerLabel",
139
+ "hint",
140
+ "items",
141
+ "storageKey"
142
+ ],
143
+ "outputs": [
144
+ "apply"
145
+ ],
146
+ "example": "<geo-column-picker [items]=\"cols\" (apply)=\"onCols($event)\"></geo-column-picker>"
147
+ },
148
+ {
149
+ "name": "GeoConfirmModalComponent",
150
+ "selector": "geo-confirm-modal",
151
+ "category": "overlay",
152
+ "summary": "Confirm / danger dialog (destroy actions).",
153
+ "whenToUse": "Delete, irreversible actions.",
154
+ "doNotUseWhen": "Multi-field forms — use geo-form-modal.",
155
+ "path": "projects/geo-ui/src/lib/figma/geo-confirm-modal/geo-confirm-modal.component.ts",
156
+ "doc": "ai/components/geo-confirm-modal.md",
157
+ "inputs": [
158
+ "visible",
159
+ "title",
160
+ "message",
161
+ "highlight",
162
+ "description",
163
+ "cancelText",
164
+ "confirmText",
165
+ "confirmLoading",
166
+ "width",
167
+ "maskClosable",
168
+ "closable"
169
+ ],
170
+ "outputs": [
171
+ "visibleChange",
172
+ "confirm",
173
+ "cancel"
174
+ ],
175
+ "example": "<geo-confirm-modal\n [visible]=\"open\"\n title=\"Xóa hồ sơ?\"\n message=\"Hành động không thể hoàn tác.\"\n confirmText=\"Xóa\"\n (confirm)=\"onDelete()\"\n (visibleChange)=\"open = $event\"\n></geo-confirm-modal>"
176
+ },
177
+ {
178
+ "name": "GeoDatePickerComponent",
179
+ "selector": "geo-date-picker",
180
+ "category": "forms",
181
+ "summary": "Single date (optional time) picker.",
182
+ "whenToUse": "One date field in forms.",
183
+ "doNotUseWhen": "Date range — use geo-date-range-picker.",
184
+ "path": "projects/geo-ui/src/lib/figma/geo-date-picker/geo-date-picker.component.ts",
185
+ "doc": "ai/components/geo-date-picker.md",
186
+ "inputs": [
187
+ "label",
188
+ "placeholder",
189
+ "format",
190
+ "mode",
191
+ "size",
192
+ "disabled",
193
+ "required",
194
+ "error",
195
+ "errorMessage",
196
+ "allowClear",
197
+ "showToday",
198
+ "showTime",
199
+ "block",
200
+ "width",
201
+ "disabledDate"
202
+ ],
203
+ "outputs": [
204
+ "valueChange"
205
+ ],
206
+ "example": "<geo-date-picker label=\"Ngày tạo\" [required]=\"true\" [(ngModel)]=\"date\" [block]=\"true\"></geo-date-picker>"
207
+ },
208
+ {
209
+ "name": "GeoDateRangePickerComponent",
210
+ "selector": "geo-date-range-picker",
211
+ "category": "forms",
212
+ "summary": "Start–end date range picker.",
213
+ "whenToUse": "Filters and period selection.",
214
+ "doNotUseWhen": "Single date — use geo-date-picker.",
215
+ "path": "projects/geo-ui/src/lib/figma/geo-date-range-picker/geo-date-range-picker.component.ts",
216
+ "doc": "ai/components/geo-date-range-picker.md",
217
+ "inputs": [
218
+ "label",
219
+ "placeholder",
220
+ "format",
221
+ "size",
222
+ "disabled",
223
+ "required",
224
+ "error",
225
+ "errorMessage",
226
+ "allowClear",
227
+ "showTime",
228
+ "block",
229
+ "width",
230
+ "disabledDate",
231
+ "separator"
232
+ ],
233
+ "outputs": [
234
+ "valueChange"
235
+ ],
236
+ "example": "<geo-date-range-picker label=\"Khoảng thời gian\" [(ngModel)]=\"range\" [block]=\"true\"></geo-date-range-picker>"
237
+ },
238
+ {
239
+ "name": "GeoFilePickerComponent",
240
+ "selector": "geo-file-picker",
241
+ "category": "forms",
242
+ "summary": "Compact file input for forms (button + filename).",
243
+ "whenToUse": "Single/small file field inside a form row.",
244
+ "doNotUseWhen": "Drag-drop multi upload with progress — use geo-upload.",
245
+ "path": "projects/geo-ui/src/lib/figma/geo-file-picker/geo-file-picker.component.ts",
246
+ "doc": "ai/components/geo-file-picker.md",
247
+ "inputs": [
248
+ "label",
249
+ "placeholder",
250
+ "buttonText",
251
+ "required",
252
+ "disabled",
253
+ "accept",
254
+ "multiple",
255
+ "error",
256
+ "errorMessage",
257
+ "block",
258
+ "width",
259
+ "selectedName"
260
+ ],
261
+ "outputs": [
262
+ "fileChange"
263
+ ],
264
+ "example": "<geo-file-picker label=\"Đính kèm\" accept=\".pdf,.png\" (fileChange)=\"onFile($event)\" [block]=\"true\"></geo-file-picker>"
265
+ },
266
+ {
267
+ "name": "GeoFormModalComponent",
268
+ "selector": "geo-form-modal",
269
+ "category": "overlay",
270
+ "summary": "Form modal: fixed header/footer, scrollable body via ng-content.",
271
+ "whenToUse": "Create/edit dialogs; compose geo-stepper inside body for multi-step.",
272
+ "doNotUseWhen": "Full-page wizards — use geo-step-form-layout.",
273
+ "path": "projects/geo-ui/src/lib/figma/geo-form-modal/geo-form-modal.component.ts",
274
+ "doc": "ai/components/geo-form-modal.md",
275
+ "inputs": [
276
+ "open",
277
+ "title",
278
+ "titleUppercase",
279
+ "okText",
280
+ "cancelText",
281
+ "cancelIcon",
282
+ "cancelIconPlacement",
283
+ "okIcon",
284
+ "okIconPlacement",
285
+ "secondaryOkText",
286
+ "confirmLoading",
287
+ "okDisabled",
288
+ "readonly",
289
+ "width",
290
+ "closable",
291
+ "mask",
292
+ "maskClosable",
293
+ "keyboard",
294
+ "centered",
295
+ "zIndex",
296
+ "className",
297
+ "wrapClassName",
298
+ "bodyScroll",
299
+ "bodyMaxHeight"
300
+ ],
301
+ "outputs": [
302
+ "openChange",
303
+ "ok",
304
+ "secondaryOk",
305
+ "cancel",
306
+ "afterOpen",
307
+ "afterClose"
308
+ ],
309
+ "example": "<geo-form-modal\n [open]=\"open\"\n title=\"Thêm mới\"\n cancelText=\"Hủy bỏ\"\n okText=\"Lưu\"\n (openChange)=\"open = $event\"\n (ok)=\"save()\"\n>\n <geo-input label=\"Tên\" [required]=\"true\" [block]=\"true\" [(ngModel)]=\"name\"></geo-input>\n</geo-form-modal>"
310
+ },
311
+ {
312
+ "name": "GeoIconComponent",
313
+ "selector": "geo-icon",
314
+ "category": "display",
315
+ "summary": "Ant Design icon wrapper with GEO size/color tokens.",
316
+ "whenToUse": "Standalone icons; buttons usually use geo-button [icon].",
317
+ "doNotUseWhen": "Do not hardcode icon hex colors — use color token names.",
318
+ "path": "projects/geo-ui/src/lib/figma/geo-icon/geo-icon.component.ts",
319
+ "doc": "ai/components/geo-icon.md",
320
+ "inputs": [
321
+ "type",
322
+ "theme",
323
+ "spin",
324
+ "size",
325
+ "color"
326
+ ],
327
+ "outputs": [],
328
+ "example": "<geo-icon type=\"search\" size=\"md\" color=\"primary\"></geo-icon>"
329
+ },
330
+ {
331
+ "name": "GeoInputComponent",
332
+ "selector": "geo-input",
333
+ "category": "forms",
334
+ "summary": "Text input with label, validation, icons; CVA/ngModel.",
335
+ "whenToUse": "Default text fields in forms.",
336
+ "doNotUseWhen": "Long text — use geo-textarea; select options — use geo-select.",
337
+ "path": "projects/geo-ui/src/lib/figma/geo-input/geo-input.component.ts",
338
+ "doc": "ai/components/geo-input.md",
339
+ "inputs": [
340
+ "label",
341
+ "placeholder",
342
+ "type",
343
+ "disabled",
344
+ "readonly",
345
+ "required",
346
+ "error",
347
+ "errorMessage",
348
+ "maxlength",
349
+ "prefixIcon",
350
+ "suffixIcon",
351
+ "allowClear",
352
+ "block",
353
+ "width"
354
+ ],
355
+ "outputs": [
356
+ "valueChange",
357
+ "enterPressed"
358
+ ],
359
+ "example": "<geo-input label=\"Họ tên\" [required]=\"true\" [block]=\"true\" [(ngModel)]=\"name\"></geo-input>"
360
+ },
361
+ {
362
+ "name": "GeoPageTitleComponent",
363
+ "selector": "geo-page-title",
364
+ "category": "display",
365
+ "summary": "Page title (uppercase) with short primary accent underline; uses geo-typography.",
366
+ "whenToUse": "Top of detail/list pages, often under breadcrumb.",
367
+ "doNotUseWhen": "Modal titles — geo-form-modal has its own title.",
368
+ "path": "projects/geo-ui/src/lib/figma/geo-page-title/geo-page-title.component.ts",
369
+ "doc": "ai/components/geo-page-title.md",
370
+ "inputs": [
371
+ "title",
372
+ "uppercase",
373
+ "accentWidth",
374
+ "accentHeight",
375
+ "level"
376
+ ],
377
+ "outputs": [],
378
+ "example": "<geo-page-title title=\"Thông tin chi tiết hồ sơ\" [level]=\"3\"></geo-page-title>"
379
+ },
380
+ {
381
+ "name": "GeoPaginationComponent",
382
+ "selector": "geo-pagination",
383
+ "category": "navigation",
384
+ "summary": "Standalone pagination control.",
385
+ "whenToUse": "Paging outside geo-table.",
386
+ "doNotUseWhen": "Inside tables prefer geo-table / geo-table-pagination.",
387
+ "path": "projects/geo-ui/src/lib/figma/geo-pagination/geo-pagination.component.ts",
388
+ "doc": "ai/components/geo-pagination.md",
389
+ "inputs": [
390
+ "pageIndex",
391
+ "pageSize",
392
+ "total",
393
+ "size",
394
+ "simple",
395
+ "hideOnSinglePage",
396
+ "showSizeChanger",
397
+ "pageSizeOptions"
398
+ ],
399
+ "outputs": [
400
+ "pageIndexChange",
401
+ "pageSizeChange"
402
+ ],
403
+ "example": "<geo-pagination [pageIndex]=\"1\" [pageSize]=\"10\" [total]=\"100\" (pageIndexChange)=\"onPage($event)\"></geo-pagination>"
404
+ },
405
+ {
406
+ "name": "GeoRadioComponent",
407
+ "selector": "geo-radio",
408
+ "category": "forms",
409
+ "summary": "Radio group (horizontal/vertical or button style).",
410
+ "whenToUse": "Exclusive choice among few options.",
411
+ "doNotUseWhen": "Many options — use geo-select.",
412
+ "path": "projects/geo-ui/src/lib/figma/geo-radio/geo-radio.component.ts",
413
+ "doc": "ai/components/geo-radio.md",
414
+ "inputs": [
415
+ "options",
416
+ "label",
417
+ "size",
418
+ "layout",
419
+ "buttonStyle",
420
+ "buttonAppearance",
421
+ "disabled",
422
+ "required",
423
+ "error",
424
+ "errorMessage",
425
+ "block"
426
+ ],
427
+ "outputs": [
428
+ "valueChange"
429
+ ],
430
+ "example": "<geo-radio\n label=\"Loại yêu cầu\"\n layout=\"vertical\"\n [options]=\"[{ label: 'A', value: 'a' }, { label: 'B', value: 'b' }]\"\n [(ngModel)]=\"type\"\n [block]=\"true\"\n></geo-radio>"
431
+ },
432
+ {
433
+ "name": "GeoRowActionsComponent",
434
+ "selector": "geo-row-actions",
435
+ "category": "data",
436
+ "summary": "Row action icons/menu (edit, more, custom).",
437
+ "whenToUse": "Actions column inside geo-table.",
438
+ "doNotUseWhen": "Page-level CTAs — use geo-button.",
439
+ "path": "projects/geo-ui/src/lib/figma/geo-table/geo-row-actions/geo-row-actions.component.ts",
440
+ "doc": "ai/components/geo-row-actions.md",
441
+ "inputs": [
442
+ "actions",
443
+ "primaryActionKey"
444
+ ],
445
+ "outputs": [
446
+ "actionClick",
447
+ "edit",
448
+ "more"
449
+ ],
450
+ "example": "<geo-row-actions [actions]=\"actions\" (actionClick)=\"onAction($event)\"></geo-row-actions>"
451
+ },
452
+ {
453
+ "name": "GeoSelectComponent",
454
+ "selector": "geo-select",
455
+ "category": "forms",
456
+ "summary": "Select / multi-select dropdown.",
457
+ "whenToUse": "Choosing from a list of options.",
458
+ "doNotUseWhen": "2–3 exclusive options may use geo-radio instead.",
459
+ "path": "projects/geo-ui/src/lib/figma/geo-select/geo-select.component.ts",
460
+ "doc": "ai/components/geo-select.md",
461
+ "inputs": [
462
+ "options",
463
+ "label",
464
+ "placeholder",
465
+ "size",
466
+ "mode",
467
+ "disabled",
468
+ "required",
469
+ "error",
470
+ "errorMessage",
471
+ "allowClear",
472
+ "showSearch",
473
+ "block",
474
+ "width"
475
+ ],
476
+ "outputs": [
477
+ "valueChange"
478
+ ],
479
+ "example": "<geo-select\n label=\"Trạng thái\"\n [options]=\"[{ label: 'Active', value: 1 }, { label: 'Inactive', value: 0 }]\"\n [(ngModel)]=\"status\"\n [block]=\"true\"\n></geo-select>"
480
+ },
481
+ {
482
+ "name": "GeoSliderComponent",
483
+ "selector": "geo-slider",
484
+ "category": "forms",
485
+ "summary": "Numeric range slider.",
486
+ "whenToUse": "Continuous numeric value in a range.",
487
+ "doNotUseWhen": "Discrete small sets — use select/radio.",
488
+ "path": "projects/geo-ui/src/lib/figma/geo-slider/geo-slider.component.ts",
489
+ "doc": "ai/components/geo-slider.md",
490
+ "inputs": [
491
+ "value",
492
+ "min",
493
+ "max",
494
+ "step",
495
+ "disabled",
496
+ "tipFormatter"
497
+ ],
498
+ "outputs": [
499
+ "valueChange"
500
+ ],
501
+ "example": "<geo-slider [min]=\"0\" [max]=\"100\" [(ngModel)]=\"percent\"></geo-slider>"
502
+ },
503
+ {
504
+ "name": "GeoStatusTagComponent",
505
+ "selector": "geo-status-tag",
506
+ "category": "display",
507
+ "summary": "Pill status tag with optional dot (success/error/warning/info/teal/…).",
508
+ "whenToUse": "Status in tables, cards, lists.",
509
+ "doNotUseWhen": "Clickable filters — use button/tabs.",
510
+ "path": "projects/geo-ui/src/lib/figma/geo-status-tag/geo-status-tag.component.ts",
511
+ "doc": "ai/components/geo-status-tag.md",
512
+ "inputs": [
513
+ "status",
514
+ "label",
515
+ "showDot"
516
+ ],
517
+ "outputs": [],
518
+ "example": "<geo-status-tag status=\"success\" label=\"Hoạt động\"></geo-status-tag>"
519
+ },
520
+ {
521
+ "name": "GeoStepFormLayoutComponent",
522
+ "selector": "geo-step-form-layout",
523
+ "category": "layout",
524
+ "summary": "Full-page multi-step form: vertical stepper + content card + footer actions.",
525
+ "whenToUse": "Long registration / create wizards as a page.",
526
+ "doNotUseWhen": "Dialogs — use geo-form-modal + geo-stepper.",
527
+ "path": "projects/geo-ui/src/lib/figma/geo-step-form-layout/geo-step-form-layout.component.ts",
528
+ "doc": "ai/components/geo-step-form-layout.md",
529
+ "inputs": [
530
+ "steps",
531
+ "activeIndex",
532
+ "title",
533
+ "clickableSteps",
534
+ "showScrollButtons",
535
+ "showCancel",
536
+ "showPrevious",
537
+ "showSave",
538
+ "showNext",
539
+ "cancelLabel",
540
+ "previousLabel",
541
+ "saveLabel",
542
+ "nextLabel",
543
+ "finishLabel",
544
+ "saveLoading",
545
+ "nextLoading",
546
+ "hideDefaultFooter"
547
+ ],
548
+ "outputs": [
549
+ "activeIndexChange",
550
+ "stepSelect",
551
+ "cancel",
552
+ "previous",
553
+ "save",
554
+ "next"
555
+ ],
556
+ "example": "<geo-step-form-layout\n title=\"Thêm mới\"\n [steps]=\"steps\"\n [activeIndex]=\"i\"\n (next)=\"goNext()\"\n (previous)=\"goPrev()\"\n (cancel)=\"cancel()\"\n>\n <!-- step content -->\n</geo-step-form-layout>"
557
+ },
558
+ {
559
+ "name": "GeoStepperComponent",
560
+ "selector": "geo-stepper",
561
+ "category": "navigation",
562
+ "summary": "Steps indicator (horizontal default). Active=primary, completed=success+check.",
563
+ "whenToUse": "Multi-step flows; place inside geo-form-modal body or pages.",
564
+ "doNotUseWhen": "Tabs for peer sections — use geo-tabs.",
565
+ "path": "projects/geo-ui/src/lib/figma/geo-stepper/geo-stepper.component.ts",
566
+ "doc": "ai/components/geo-stepper.md",
567
+ "inputs": [
568
+ "steps",
569
+ "activeIndex",
570
+ "orientation",
571
+ "clickable"
572
+ ],
573
+ "outputs": [
574
+ "activeIndexChange",
575
+ "stepSelect"
576
+ ],
577
+ "example": "<geo-stepper\n [steps]=\"[\n { key: 'a', label: '1. Thông tin' },\n { key: 'b', label: '2. Xác nhận' }\n ]\"\n [activeIndex]=\"0\"\n orientation=\"horizontal\"\n [clickable]=\"false\"\n></geo-stepper>"
578
+ },
579
+ {
580
+ "name": "GeoTableComponent",
581
+ "selector": "geo-table",
582
+ "category": "data",
583
+ "summary": "Data table with pagination, selection, row actions, mobile card mode.",
584
+ "whenToUse": "List/index screens with structured rows.",
585
+ "doNotUseWhen": "Simple key-value detail — use typography/grid.",
586
+ "path": "projects/geo-ui/src/lib/figma/geo-table/geo-table.component.ts",
587
+ "doc": "ai/components/geo-table.md",
588
+ "inputs": [
589
+ "columns",
590
+ "data",
591
+ "loading",
592
+ "bordered",
593
+ "outerBordered",
594
+ "size",
595
+ "striped",
596
+ "clickable",
597
+ "tableLayout",
598
+ "showPagination",
599
+ "frontPagination",
600
+ "pageIndex",
601
+ "pageSize",
602
+ "total",
603
+ "pageSizeOptions",
604
+ "showSizeChanger",
605
+ "showQuickJumper",
606
+ "hideOnSinglePage",
607
+ "simplePagination",
608
+ "paginationPosition",
609
+ "scroll",
610
+ "scrollY",
611
+ "autoScroll",
612
+ "tableTitle",
613
+ "footer",
614
+ "emptyText",
615
+ "showTotalRange",
616
+ "selectable",
617
+ "rowKey",
618
+ "selectedKeys",
619
+ "mobileTitleKey",
620
+ "mobileCardView"
621
+ ],
622
+ "outputs": [
623
+ "rowClick",
624
+ "rowEdit",
625
+ "rowMore",
626
+ "rowAction",
627
+ "pageIndexChange",
628
+ "pageSizeChange",
629
+ "queryParams",
630
+ "currentPageDataChange",
631
+ "selectedKeysChange",
632
+ "selectionChange"
633
+ ],
634
+ "example": "<geo-table\n [columns]=\"columns\"\n [data]=\"rows\"\n [total]=\"total\"\n [pageIndex]=\"page\"\n [pageSize]=\"10\"\n (pageIndexChange)=\"onPage($event)\"\n></geo-table>"
635
+ },
636
+ {
637
+ "name": "GeoTableFilterComponent",
638
+ "selector": "geo-table-filter",
639
+ "category": "data",
640
+ "summary": "Table filter bar with search + advanced filters.",
641
+ "whenToUse": "Above geo-table for query/filter UX.",
642
+ "doNotUseWhen": "Standalone forms unrelated to tables.",
643
+ "path": "projects/geo-ui/src/lib/figma/geo-table/geo-table-filter/geo-table-filter.component.ts",
644
+ "doc": "ai/components/geo-table-filter.md",
645
+ "inputs": [
646
+ "columns",
647
+ "responsiveColumns",
648
+ "responsiveCollapse",
649
+ "mobileBreakpoint",
650
+ "gap",
651
+ "searchLabel",
652
+ "searchLoading",
653
+ "showAdvancedToggle",
654
+ "showReset",
655
+ "advancedExpanded",
656
+ "advancedFilterCount",
657
+ "filterToggleTitle",
658
+ "resetTitle"
659
+ ],
660
+ "outputs": [
661
+ "search",
662
+ "reset",
663
+ "advancedExpandedChange"
664
+ ],
665
+ "example": "<geo-table-filter (search)=\"onSearch()\" (reset)=\"onReset()\"></geo-table-filter>"
666
+ },
667
+ {
668
+ "name": "GeoTablePaginationComponent",
669
+ "selector": "geo-table-pagination",
670
+ "category": "data",
671
+ "summary": "Table-specific pagination footer (range label + size).",
672
+ "whenToUse": "Custom table footers; geo-table has built-in paging too.",
673
+ "doNotUseWhen": "Non-table paging — use geo-pagination.",
674
+ "path": "projects/geo-ui/src/lib/figma/geo-table/geo-table-pagination/geo-table-pagination.component.ts",
675
+ "doc": "ai/components/geo-table-pagination.md",
676
+ "inputs": [
677
+ "pageIndex",
678
+ "pageSize",
679
+ "total",
680
+ "pageSizeOptions",
681
+ "showSizeChanger",
682
+ "hideOnSinglePage",
683
+ "showTotalRange",
684
+ "sizeLabel"
685
+ ],
686
+ "outputs": [
687
+ "pageIndexChange",
688
+ "pageSizeChange"
689
+ ],
690
+ "example": "<geo-table-pagination [pageIndex]=\"1\" [pageSize]=\"10\" [total]=\"200\"></geo-table-pagination>"
691
+ },
692
+ {
693
+ "name": "GeoTableToolbarComponent",
694
+ "selector": "geo-table-toolbar",
695
+ "category": "data",
696
+ "summary": "Table toolbar: result count, delete/export/add, column toggle.",
697
+ "whenToUse": "Above geo-table for bulk actions.",
698
+ "doNotUseWhen": "Page header actions unrelated to table.",
699
+ "path": "projects/geo-ui/src/lib/figma/geo-table/geo-table-toolbar/geo-table-toolbar.component.ts",
700
+ "doc": "ai/components/geo-table-toolbar.md",
701
+ "inputs": [
702
+ "resultLabel",
703
+ "resultCount",
704
+ "selectedCount",
705
+ "showDelete",
706
+ "showExport",
707
+ "showColumnToggle",
708
+ "showAdd",
709
+ "addLabel",
710
+ "columnItems",
711
+ "columnStorageKey"
712
+ ],
713
+ "outputs": [
714
+ "deleteClick",
715
+ "exportClick",
716
+ "toggleColumns",
717
+ "columnApply",
718
+ "addClick"
719
+ ],
720
+ "example": "<geo-table-toolbar [resultCount]=\"20\" [showAdd]=\"true\" (addClick)=\"add()\"></geo-table-toolbar>"
721
+ },
722
+ {
723
+ "name": "GeoTabsComponent",
724
+ "selector": "geo-tabs",
725
+ "category": "navigation",
726
+ "summary": "Tab set with brand ink bar; content via ng-template uiTab.",
727
+ "whenToUse": "Peer sections on one page (info / history / files).",
728
+ "doNotUseWhen": "Ordered wizard steps — use geo-stepper.",
729
+ "path": "projects/geo-ui/src/lib/figma/geo-tabs/geo-tabs.component.ts",
730
+ "doc": "ai/components/geo-tabs.md",
731
+ "inputs": [
732
+ "items",
733
+ "type",
734
+ "size",
735
+ "selectedIndex",
736
+ "selectedKey",
737
+ "centered",
738
+ "animated"
739
+ ],
740
+ "outputs": [
741
+ "selectedIndexChange",
742
+ "selectedKeyChange",
743
+ "tabChange"
744
+ ],
745
+ "example": "<geo-tabs [items]=\"[{ key: 'a', title: 'Tab A' }, { key: 'b', title: 'Tab B' }]\" [(selectedIndex)]=\"i\">\n <ng-template uiTab=\"a\">Content A</ng-template>\n <ng-template uiTab=\"b\">Content B</ng-template>\n</geo-tabs>"
746
+ },
747
+ {
748
+ "name": "GeoTextareaComponent",
749
+ "selector": "geo-textarea",
750
+ "category": "forms",
751
+ "summary": "Multi-line text field with label/validation.",
752
+ "whenToUse": "Notes, descriptions, long text.",
753
+ "doNotUseWhen": "Single-line — use geo-input.",
754
+ "path": "projects/geo-ui/src/lib/figma/geo-textarea/geo-textarea.component.ts",
755
+ "doc": "ai/components/geo-textarea.md",
756
+ "inputs": [
757
+ "label",
758
+ "placeholder",
759
+ "rows",
760
+ "disabled",
761
+ "required",
762
+ "error",
763
+ "errorMessage",
764
+ "maxlength",
765
+ "block"
766
+ ],
767
+ "outputs": [
768
+ "valueChange"
769
+ ],
770
+ "example": "<geo-textarea label=\"Ghi chú\" [rows]=\"4\" [block]=\"true\" [(ngModel)]=\"note\"></geo-textarea>"
771
+ },
772
+ {
773
+ "name": "GeoToastComponent",
774
+ "selector": "geo-toast",
775
+ "category": "feedback",
776
+ "summary": "Toast UI; prefer GeoToastService for app-wide notifications.",
777
+ "whenToUse": "Transient success/error after actions.",
778
+ "doNotUseWhen": "Persistent inline messages — use geo-alert.",
779
+ "path": "projects/geo-ui/src/lib/figma/geo-toast/geo-toast.component.ts",
780
+ "doc": "ai/components/geo-toast.md",
781
+ "inputs": [
782
+ "type",
783
+ "title",
784
+ "message",
785
+ "closable",
786
+ "showIcon",
787
+ "visible",
788
+ "icon"
789
+ ],
790
+ "outputs": [
791
+ "closed"
792
+ ],
793
+ "example": "// Preferred\nthis.toast.success('Thành công!', 'Đã lưu hồ sơ.');\n\n// Or static\n<geo-toast type=\"success\" title=\"Thành công!\" message=\"Đã lưu.\"></geo-toast>"
794
+ },
795
+ {
796
+ "name": "GeoTreeComponent",
797
+ "selector": "geo-tree",
798
+ "category": "data",
799
+ "summary": "Tree view with checkable / expandable nodes.",
800
+ "whenToUse": "Hierarchy selection (org, folder, category).",
801
+ "doNotUseWhen": "Flat lists — use geo-table or select.",
802
+ "path": "projects/geo-ui/src/lib/figma/geo-tree/geo-tree.component.ts",
803
+ "doc": "ai/components/geo-tree.md",
804
+ "inputs": [
805
+ "nodes",
806
+ "checkable",
807
+ "checkedKeys",
808
+ "expandedKeys",
809
+ "showLine",
810
+ "blockNode"
811
+ ],
812
+ "outputs": [
813
+ "checkedKeysChange",
814
+ "expandedKeysChange",
815
+ "nodeClick"
816
+ ],
817
+ "example": "<geo-tree [nodes]=\"nodes\" [checkable]=\"true\" [(checkedKeys)]=\"checked\"></geo-tree>"
818
+ },
819
+ {
820
+ "name": "GeoTypographyComponent",
821
+ "selector": "geo-typography",
822
+ "category": "display",
823
+ "summary": "Text with GEO type scale (h1–tiny) and semantic colors.",
824
+ "whenToUse": "All readable text; prefer over raw h1/p with custom CSS.",
825
+ "doNotUseWhen": "Do not hardcode font-size/color — use variant/color props.",
826
+ "path": "projects/geo-ui/src/lib/figma/geo-typography/geo-typography.component.ts",
827
+ "doc": "ai/components/geo-typography.md",
828
+ "inputs": [
829
+ "variant",
830
+ "color",
831
+ "strong",
832
+ "underline",
833
+ "delete",
834
+ "mark",
835
+ "code",
836
+ "disabled"
837
+ ],
838
+ "outputs": [],
839
+ "example": "<geo-typography variant=\"h3\">Tiêu đề</geo-typography>\n<geo-typography variant=\"body\" color=\"secondary\">Mô tả phụ</geo-typography>"
840
+ },
841
+ {
842
+ "name": "GeoUploadComponent",
843
+ "selector": "geo-upload",
844
+ "category": "forms",
845
+ "summary": "Drag-drop upload zone with progress list.",
846
+ "whenToUse": "Multi-file upload with progress UI.",
847
+ "doNotUseWhen": "Simple one-file form field — use geo-file-picker.",
848
+ "path": "projects/geo-ui/src/lib/figma/geo-upload/geo-upload.component.ts",
849
+ "doc": "ai/components/geo-upload.md",
850
+ "inputs": [
851
+ "action",
852
+ "accept",
853
+ "maxSize",
854
+ "multiple",
855
+ "disabled",
856
+ "error",
857
+ "errorMessage",
858
+ "hint",
859
+ "titlePrefix",
860
+ "selectText",
861
+ "titleSuffix",
862
+ "listTitle",
863
+ "showListTitle",
864
+ "fileList",
865
+ "headers",
866
+ "data",
867
+ "name",
868
+ "withCredentials",
869
+ "directory",
870
+ "customRequest",
871
+ "beforeUpload"
872
+ ],
873
+ "outputs": [
874
+ "fileListChange",
875
+ "change",
876
+ "remove",
877
+ "reject"
878
+ ],
879
+ "example": "<geo-upload\n accept=\".png,.jpg\"\n [maxSize]=\"1048576\"\n [(fileList)]=\"files\"\n></geo-upload>"
880
+ }
881
+ ]
882
+ }