@geoit/ui 0.0.8 → 0.1.0
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.
- package/ai/AGENTS.md +4 -0
- package/ai/README.md +4 -1
- package/ai/catalog.json +194 -64
- package/ai/components/geo-accordion.md +92 -0
- package/ai/components/geo-detail-view.md +91 -0
- package/ai/components/geo-map-admin-filter.md +0 -1
- package/ai/components/geo-map-legend.md +0 -1
- package/ai/components/geo-map-shell.md +0 -7
- package/ai/components/geo-switch.md +76 -0
- package/ai/components/geo-tree.md +0 -2
- package/ai/mockup.html +2 -2
- package/esm2022/lib/figma/geo-accordion/geo-accordion.component.mjs +67 -0
- package/esm2022/lib/figma/geo-accordion/geo-accordion.types.mjs +2 -0
- package/esm2022/lib/figma/geo-chart/geo-chart.component.mjs +3 -14
- package/esm2022/lib/figma/geo-detail-view/geo-detail-view.component.mjs +47 -0
- package/esm2022/lib/figma/geo-detail-view/geo-detail-view.types.mjs +2 -0
- package/esm2022/lib/figma/geo-list-page/geo-list-page.component.mjs +3 -3
- package/esm2022/lib/figma/geo-map/chrome/geo-map-admin-filter/geo-map-admin-filter.component.mjs +3 -5
- package/esm2022/lib/figma/geo-map/chrome/geo-map-basemap-switcher/geo-map-basemap-switcher.component.mjs +3 -3
- package/esm2022/lib/figma/geo-map/chrome/geo-map-layers-drawer/geo-map-layers-drawer.component.mjs +3 -3
- package/esm2022/lib/figma/geo-map/chrome/geo-map-legend/geo-map-legend.component.mjs +3 -5
- package/esm2022/lib/figma/geo-map/chrome/geo-map-locate/geo-map-locate.component.mjs +3 -3
- package/esm2022/lib/figma/geo-map/chrome/geo-map-opacity/geo-map-opacity.component.mjs +3 -3
- package/esm2022/lib/figma/geo-map/chrome/geo-map-parcel-popup/geo-map-parcel-popup.component.mjs +2 -2
- package/esm2022/lib/figma/geo-map/chrome/geo-map-search/geo-map-search.component.mjs +3 -3
- package/esm2022/lib/figma/geo-map/chrome/geo-map-shell/geo-map-shell.component.mjs +3 -22
- package/esm2022/lib/figma/geo-map/chrome/geo-map-snapshot/geo-map-snapshot.component.mjs +3 -3
- package/esm2022/lib/figma/geo-map/chrome/geo-map-toolbar/geo-map-toolbar.component.mjs +3 -3
- package/esm2022/lib/figma/geo-map/chrome/geo-map-zoom/geo-map-zoom.component.mjs +3 -3
- package/esm2022/lib/figma/geo-map/geo-map.constants.mjs +1 -13
- package/esm2022/lib/figma/geo-switch/geo-switch.component.mjs +44 -0
- package/esm2022/lib/figma/geo-tree/geo-tree.component.mjs +3 -17
- package/esm2022/lib/figma/index.mjs +6 -1
- package/fesm2022/geoit-ui.mjs +191 -105
- package/fesm2022/geoit-ui.mjs.map +1 -1
- package/lib/figma/geo-accordion/geo-accordion.component.d.ts +34 -0
- package/lib/figma/geo-accordion/geo-accordion.types.d.ts +7 -0
- package/lib/figma/geo-chart/geo-chart.component.d.ts +0 -9
- package/lib/figma/geo-detail-view/geo-detail-view.component.d.ts +30 -0
- package/lib/figma/geo-detail-view/geo-detail-view.types.d.ts +8 -0
- package/lib/figma/geo-map/chrome/geo-map-admin-filter/geo-map-admin-filter.component.d.ts +1 -3
- package/lib/figma/geo-map/chrome/geo-map-legend/geo-map-legend.component.d.ts +1 -3
- package/lib/figma/geo-map/chrome/geo-map-shell/geo-map-shell.component.d.ts +2 -19
- package/lib/figma/geo-map/geo-map.constants.d.ts +0 -6
- package/lib/figma/geo-switch/geo-switch.component.d.ts +25 -0
- package/lib/figma/geo-tree/geo-tree.component.d.ts +1 -5
- package/lib/figma/index.d.ts +5 -0
- package/package.json +1 -1
package/ai/AGENTS.md
CHANGED
|
@@ -95,6 +95,7 @@ Standalone consumers:
|
|
|
95
95
|
|------------|---------|
|
|
96
96
|
| `geo-input`, `geo-textarea`, `geo-select`, `geo-radio`, `geo-date-picker`, `geo-date-range-picker`, `geo-file-picker` | **CVA** → `[(ngModel)]` or reactive forms |
|
|
97
97
|
| `geo-checkbox` | `[(checked)]` (not CVA) |
|
|
98
|
+
| `geo-switch` | `[(checked)]` (not CVA, same as `geo-checkbox`) |
|
|
98
99
|
| `geo-slider` | `[(value)]` (`model()`) |
|
|
99
100
|
| Overlays (`geo-form-modal`, search panels, …) | often `[(open)]` / `[(visible)]` |
|
|
100
101
|
|
|
@@ -120,6 +121,7 @@ See [`recipes.md`](./recipes.md) for copy-paste screens:
|
|
|
120
121
|
| Select | `geo-select` |
|
|
121
122
|
| Exclusive options | `geo-radio` |
|
|
122
123
|
| Checkbox | `geo-checkbox` |
|
|
124
|
+
| Toggle on/off | `geo-switch` |
|
|
123
125
|
| Date / date range | `geo-date-picker` / `geo-date-range-picker` |
|
|
124
126
|
| Dialog form | `geo-form-modal` |
|
|
125
127
|
| Confirm delete | `geo-confirm-modal` |
|
|
@@ -134,6 +136,8 @@ See [`recipes.md`](./recipes.md) for copy-paste screens:
|
|
|
134
136
|
| Overlap analysis | `geo-overlap-result` |
|
|
135
137
|
| Empty region | `geo-empty-state` |
|
|
136
138
|
| Status pill | `geo-status-tag` |
|
|
139
|
+
| Collapsible sections | `geo-accordion` |
|
|
140
|
+
| Read-only entity detail | `geo-detail-view` |
|
|
137
141
|
| Transient notice | `GeoToastService` / `geo-toast` |
|
|
138
142
|
| Inline notice | `geo-alert` |
|
|
139
143
|
| Upload drag-drop | `geo-upload` |
|
package/ai/README.md
CHANGED
|
@@ -6,6 +6,7 @@ Agent rules: [`AGENTS.md`](./AGENTS.md) · Recipes: [`recipes.md`](./recipes.md)
|
|
|
6
6
|
|
|
7
7
|
| Selector | Category | Summary | Doc |
|
|
8
8
|
|----------|----------|---------|-----|
|
|
9
|
+
| `geo-accordion` | navigation | Collapsible panel group (nz-collapse); content via ng-template uiPanel. | [geo-accordion.md](./components/geo-accordion.md) |
|
|
9
10
|
| `geo-alert` | feedback | Inline alert banner (success/error/warning/info). | [geo-alert.md](./components/geo-alert.md) |
|
|
10
11
|
| `geo-back-button` | navigation | Back navigation control (history or custom click). | [geo-back-button.md](./components/geo-back-button.md) |
|
|
11
12
|
| `geo-breadcrumb` | navigation | Breadcrumb trail; last item active (primary). | [geo-breadcrumb.md](./components/geo-breadcrumb.md) |
|
|
@@ -17,6 +18,7 @@ Agent rules: [`AGENTS.md`](./AGENTS.md) · Recipes: [`recipes.md`](./recipes.md)
|
|
|
17
18
|
| `geo-dashboard` | layout | Composed dashboard: period, KPI cards, ward/mismatch charts. | [geo-dashboard.md](./components/geo-dashboard.md) |
|
|
18
19
|
| `geo-date-picker` | forms | Single date (optional time) picker. | [geo-date-picker.md](./components/geo-date-picker.md) |
|
|
19
20
|
| `geo-date-range-picker` | forms | Start–end date range picker. | [geo-date-range-picker.md](./components/geo-date-range-picker.md) |
|
|
21
|
+
| `geo-detail-view` | display | Read-only key/value grid (nz-descriptions); value tùy biến qua ng-template uiDetailItem. | [geo-detail-view.md](./components/geo-detail-view.md) |
|
|
20
22
|
| `geo-empty-state` | feedback | Empty region placeholder (icon + title + optional action). | [geo-empty-state.md](./components/geo-empty-state.md) |
|
|
21
23
|
| `geo-feedback-form` | forms | Citizen feedback / phản ánh form with validation. | [geo-feedback-form.md](./components/geo-feedback-form.md) |
|
|
22
24
|
| `geo-file-picker` | forms | Compact file input for forms (button + filename). | [geo-file-picker.md](./components/geo-file-picker.md) |
|
|
@@ -62,6 +64,7 @@ Agent rules: [`AGENTS.md`](./AGENTS.md) · Recipes: [`recipes.md`](./recipes.md)
|
|
|
62
64
|
| `geo-status-tag` | display | Pill status tag with optional dot (success/error/warning/info/teal/…). | [geo-status-tag.md](./components/geo-status-tag.md) |
|
|
63
65
|
| `geo-step-form-layout` | layout | Full-page multi-step form: vertical stepper + content card + footer actions. | [geo-step-form-layout.md](./components/geo-step-form-layout.md) |
|
|
64
66
|
| `geo-stepper` | navigation | Steps indicator (horizontal default). Active=primary, completed=success+check. | [geo-stepper.md](./components/geo-stepper.md) |
|
|
67
|
+
| `geo-switch` | forms | On/off toggle (nz-switch) with optional trailing label; bind with [(checked)] (not CVA). | [geo-switch.md](./components/geo-switch.md) |
|
|
65
68
|
| `geo-table` | data | Data table with pagination, selection, row actions, mobile card mode. | [geo-table.md](./components/geo-table.md) |
|
|
66
69
|
| `geo-table-filter` | data | Table filter bar with search + advanced filters. | [geo-table-filter.md](./components/geo-table-filter.md) |
|
|
67
70
|
| `geo-table-pagination` | data | Table-specific pagination footer (range label + size). | [geo-table-pagination.md](./components/geo-table-pagination.md) |
|
|
@@ -73,6 +76,6 @@ Agent rules: [`AGENTS.md`](./AGENTS.md) · Recipes: [`recipes.md`](./recipes.md)
|
|
|
73
76
|
| `geo-typography` | display | Text with GEO type scale (h1–tiny) and semantic colors. | [geo-typography.md](./components/geo-typography.md) |
|
|
74
77
|
| `geo-upload` | forms | Drag-drop upload zone with progress list. | [geo-upload.md](./components/geo-upload.md) |
|
|
75
78
|
|
|
76
|
-
Generated: 2026-09-
|
|
79
|
+
Generated: 2026-09-09T08:26:14.960Z
|
|
77
80
|
|
|
78
81
|
Regenerate: `npm run ai:docs`
|
package/ai/catalog.json
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"package": "@geoit/ui",
|
|
3
3
|
"import": "@geoit/ui",
|
|
4
|
-
"version": "0.0
|
|
5
|
-
"generatedAt": "2026-09-
|
|
4
|
+
"version": "0.1.0",
|
|
5
|
+
"generatedAt": "2026-09-09T08:26:14.960Z",
|
|
6
6
|
"styles": [
|
|
7
7
|
"@geoit/ui/src/lib/styles/design-tokens.scss",
|
|
8
8
|
"@geoit/ui/src/lib/styles/theme.scss"
|
|
@@ -26,6 +26,68 @@
|
|
|
26
26
|
"Import from @geoit/ui (scoped package)."
|
|
27
27
|
],
|
|
28
28
|
"components": [
|
|
29
|
+
{
|
|
30
|
+
"name": "GeoAccordionComponent",
|
|
31
|
+
"selector": "geo-accordion",
|
|
32
|
+
"category": "navigation",
|
|
33
|
+
"summary": "Collapsible panel group (nz-collapse); content via ng-template uiPanel.",
|
|
34
|
+
"whenToUse": "Các khối nội dung có thể thu gọn/mở rộng trên cùng một trang (FAQ, nhóm trường form dài).",
|
|
35
|
+
"doNotUseWhen": "Điều hướng giữa các section ngang hàng luôn hiển thị — use geo-tabs.",
|
|
36
|
+
"howTo": "",
|
|
37
|
+
"tips": [],
|
|
38
|
+
"binding": "none",
|
|
39
|
+
"cva": false,
|
|
40
|
+
"path": "projects/geo-ui/src/lib/figma/geo-accordion/geo-accordion.component.ts",
|
|
41
|
+
"doc": "ai/components/geo-accordion.md",
|
|
42
|
+
"inputs": [
|
|
43
|
+
{
|
|
44
|
+
"name": "items",
|
|
45
|
+
"type": "GeoAccordionItem[]",
|
|
46
|
+
"default": "[]",
|
|
47
|
+
"note": ""
|
|
48
|
+
},
|
|
49
|
+
{
|
|
50
|
+
"name": "accordion",
|
|
51
|
+
"type": "boolean",
|
|
52
|
+
"default": "false",
|
|
53
|
+
"note": "`true` → chỉ 1 panel mở tại một thời điểm (maps to `nzAccordion`)."
|
|
54
|
+
},
|
|
55
|
+
{
|
|
56
|
+
"name": "bordered",
|
|
57
|
+
"type": "boolean",
|
|
58
|
+
"default": "true",
|
|
59
|
+
"note": ""
|
|
60
|
+
},
|
|
61
|
+
{
|
|
62
|
+
"name": "ghost",
|
|
63
|
+
"type": "boolean",
|
|
64
|
+
"default": "false",
|
|
65
|
+
"note": ""
|
|
66
|
+
},
|
|
67
|
+
{
|
|
68
|
+
"name": "activeKeys",
|
|
69
|
+
"type": "string[]",
|
|
70
|
+
"default": "[]",
|
|
71
|
+
"note": "Two-way `model()` (supports banana binding)."
|
|
72
|
+
}
|
|
73
|
+
],
|
|
74
|
+
"outputs": [
|
|
75
|
+
{
|
|
76
|
+
"name": "panelChange",
|
|
77
|
+
"type": "OutputEmitterRef<{ key: string; active: boolean }>",
|
|
78
|
+
"note": ""
|
|
79
|
+
}
|
|
80
|
+
],
|
|
81
|
+
"examples": [
|
|
82
|
+
{
|
|
83
|
+
"title": "Example",
|
|
84
|
+
"lang": "html",
|
|
85
|
+
"code": "<geo-accordion [items]=\"[{ key: 'a', title: 'Panel A' }, { key: 'b', title: 'Panel B' }]\" [(activeKeys)]=\"keys\">\n <ng-template uiPanel=\"a\">Content A</ng-template>\n <ng-template uiPanel=\"b\">Content B</ng-template>\n</geo-accordion>"
|
|
86
|
+
}
|
|
87
|
+
],
|
|
88
|
+
"example": "<geo-accordion [items]=\"[{ key: 'a', title: 'Panel A' }, { key: 'b', title: 'Panel B' }]\" [(activeKeys)]=\"keys\">\n <ng-template uiPanel=\"a\">Content A</ng-template>\n <ng-template uiPanel=\"b\">Content B</ng-template>\n</geo-accordion>",
|
|
89
|
+
"related": []
|
|
90
|
+
},
|
|
29
91
|
{
|
|
30
92
|
"name": "GeoAlertComponent",
|
|
31
93
|
"selector": "geo-alert",
|
|
@@ -1045,6 +1107,68 @@
|
|
|
1045
1107
|
"geo-table-filter"
|
|
1046
1108
|
]
|
|
1047
1109
|
},
|
|
1110
|
+
{
|
|
1111
|
+
"name": "GeoDetailViewComponent",
|
|
1112
|
+
"selector": "geo-detail-view",
|
|
1113
|
+
"category": "display",
|
|
1114
|
+
"summary": "Read-only key/value grid (nz-descriptions); value tùy biến qua ng-template uiDetailItem.",
|
|
1115
|
+
"whenToUse": "Trang/khối xem chi tiết hồ sơ, thửa đất, người dùng… (không chỉnh sửa).",
|
|
1116
|
+
"doNotUseWhen": "Cần nhập liệu — use geo-input/geo-select trong form.",
|
|
1117
|
+
"howTo": "",
|
|
1118
|
+
"tips": [],
|
|
1119
|
+
"binding": "none",
|
|
1120
|
+
"cva": false,
|
|
1121
|
+
"path": "projects/geo-ui/src/lib/figma/geo-detail-view/geo-detail-view.component.ts",
|
|
1122
|
+
"doc": "ai/components/geo-detail-view.md",
|
|
1123
|
+
"inputs": [
|
|
1124
|
+
{
|
|
1125
|
+
"name": "title",
|
|
1126
|
+
"type": "string",
|
|
1127
|
+
"default": "''",
|
|
1128
|
+
"note": ""
|
|
1129
|
+
},
|
|
1130
|
+
{
|
|
1131
|
+
"name": "items",
|
|
1132
|
+
"type": "GeoDetailViewItem[]",
|
|
1133
|
+
"default": "[]",
|
|
1134
|
+
"note": ""
|
|
1135
|
+
},
|
|
1136
|
+
{
|
|
1137
|
+
"name": "column",
|
|
1138
|
+
"type": "number",
|
|
1139
|
+
"default": "2",
|
|
1140
|
+
"note": ""
|
|
1141
|
+
},
|
|
1142
|
+
{
|
|
1143
|
+
"name": "bordered",
|
|
1144
|
+
"type": "boolean",
|
|
1145
|
+
"default": "true",
|
|
1146
|
+
"note": ""
|
|
1147
|
+
},
|
|
1148
|
+
{
|
|
1149
|
+
"name": "layout",
|
|
1150
|
+
"type": "'horizontal' | 'vertical'",
|
|
1151
|
+
"default": "'horizontal'",
|
|
1152
|
+
"note": ""
|
|
1153
|
+
},
|
|
1154
|
+
{
|
|
1155
|
+
"name": "size",
|
|
1156
|
+
"type": "'default' | 'small'",
|
|
1157
|
+
"default": "'default'",
|
|
1158
|
+
"note": ""
|
|
1159
|
+
}
|
|
1160
|
+
],
|
|
1161
|
+
"outputs": [],
|
|
1162
|
+
"examples": [
|
|
1163
|
+
{
|
|
1164
|
+
"title": "Example",
|
|
1165
|
+
"lang": "html",
|
|
1166
|
+
"code": "<geo-detail-view title=\"Thông tin thửa đất\" [items]=\"[{ key: 'code', label: 'Mã thửa', value: 'A-123' }, { key: 'status', label: 'Trạng thái' }]\" [column]=\"2\">\n <ng-template uiDetailItem=\"status\"><geo-status-tag status=\"active\"></geo-status-tag></ng-template>\n</geo-detail-view>"
|
|
1167
|
+
}
|
|
1168
|
+
],
|
|
1169
|
+
"example": "<geo-detail-view title=\"Thông tin thửa đất\" [items]=\"[{ key: 'code', label: 'Mã thửa', value: 'A-123' }, { key: 'status', label: 'Trạng thái' }]\" [column]=\"2\">\n <ng-template uiDetailItem=\"status\"><geo-status-tag status=\"active\"></geo-status-tag></ng-template>\n</geo-detail-view>",
|
|
1170
|
+
"related": []
|
|
1171
|
+
},
|
|
1048
1172
|
{
|
|
1049
1173
|
"name": "GeoEmptyStateComponent",
|
|
1050
1174
|
"selector": "geo-empty-state",
|
|
@@ -2610,12 +2734,6 @@
|
|
|
2610
2734
|
"default": "[]",
|
|
2611
2735
|
"note": ""
|
|
2612
2736
|
},
|
|
2613
|
-
{
|
|
2614
|
-
"name": "selectionMode",
|
|
2615
|
-
"type": "'single' | 'multi'",
|
|
2616
|
-
"default": "'multi'",
|
|
2617
|
-
"note": "`single` — chọn đúng 1 xã/phường (BR-06-03); `multi` — checkbox nhiều cấp (mặc định)."
|
|
2618
|
-
},
|
|
2619
2737
|
{
|
|
2620
2738
|
"name": "checkedKeys",
|
|
2621
2739
|
"type": "Array<string | number>",
|
|
@@ -2966,12 +3084,6 @@
|
|
|
2966
3084
|
"default": "[]",
|
|
2967
3085
|
"note": ""
|
|
2968
3086
|
},
|
|
2969
|
-
{
|
|
2970
|
-
"name": "catalogMissing",
|
|
2971
|
-
"type": "boolean",
|
|
2972
|
-
"default": "false",
|
|
2973
|
-
"note": "True khi danh mục chú giải không tải được (`ERR_MAP_LEGEND_CATALOG_MISSING`)."
|
|
2974
|
-
},
|
|
2975
3087
|
{
|
|
2976
3088
|
"name": "open",
|
|
2977
3089
|
"type": "boolean",
|
|
@@ -3464,30 +3576,12 @@
|
|
|
3464
3576
|
"default": "GEO_MAP_DEMO_ADMIN_NODES",
|
|
3465
3577
|
"note": ""
|
|
3466
3578
|
},
|
|
3467
|
-
{
|
|
3468
|
-
"name": "adminSelectionMode",
|
|
3469
|
-
"type": "'single' | 'multi'",
|
|
3470
|
-
"default": "'multi'",
|
|
3471
|
-
"note": "`single` — chọn đúng 1 xã/phường (BR-06-03); `multi` — checkbox nhiều cấp (mặc định)."
|
|
3472
|
-
},
|
|
3473
3579
|
{
|
|
3474
3580
|
"name": "locationLabel",
|
|
3475
3581
|
"type": "string",
|
|
3476
3582
|
"default": "'Phường 1 — TP Đà Lạt, Lâm Đồng'",
|
|
3477
3583
|
"note": ""
|
|
3478
3584
|
},
|
|
3479
|
-
{
|
|
3480
|
-
"name": "measureDisclaimer",
|
|
3481
|
-
"type": "string | null",
|
|
3482
|
-
"default": "'Giá trị tham khảo trên bản đồ, không có giá trị pháp lý. Diện tích pháp lý của thửa đất lấy theo hồ sơ địa chính.'",
|
|
3483
|
-
"note": "Ghi chú pháp lý hiển thị khi đang đo (BR-10-03). `null` ẩn ghi chú — mặc định giữ nguyên câu chữ đã dùng ở `qh-map-shell`."
|
|
3484
|
-
},
|
|
3485
|
-
{
|
|
3486
|
-
"name": "legendCatalogMissing",
|
|
3487
|
-
"type": "boolean",
|
|
3488
|
-
"default": "false",
|
|
3489
|
-
"note": "True khi danh mục chú giải không tải được (`ERR_MAP_LEGEND_CATALOG_MISSING`)."
|
|
3490
|
-
},
|
|
3491
3585
|
{
|
|
3492
3586
|
"name": "parcelAudience",
|
|
3493
3587
|
"type": "GeoMapParcelAudience",
|
|
@@ -3614,21 +3708,11 @@
|
|
|
3614
3708
|
"type": "OutputEmitterRef<GeoMapClickEvent>",
|
|
3615
3709
|
"note": ""
|
|
3616
3710
|
},
|
|
3617
|
-
{
|
|
3618
|
-
"name": "located",
|
|
3619
|
-
"type": "OutputEmitterRef<[number, number]>",
|
|
3620
|
-
"note": ""
|
|
3621
|
-
},
|
|
3622
3711
|
{
|
|
3623
3712
|
"name": "locateDenied",
|
|
3624
3713
|
"type": "OutputEmitterRef<void>",
|
|
3625
3714
|
"note": ""
|
|
3626
3715
|
},
|
|
3627
|
-
{
|
|
3628
|
-
"name": "locateError",
|
|
3629
|
-
"type": "OutputEmitterRef<{ reason: GeoMapLocateErrorReason; message?: string }>",
|
|
3630
|
-
"note": ""
|
|
3631
|
-
},
|
|
3632
3716
|
{
|
|
3633
3717
|
"name": "actionClick",
|
|
3634
3718
|
"type": "OutputEmitterRef<GeoMapToolbarAction>",
|
|
@@ -3658,16 +3742,6 @@
|
|
|
3658
3742
|
"name": "adminApply",
|
|
3659
3743
|
"type": "OutputEmitterRef<Array<string | number>>",
|
|
3660
3744
|
"note": ""
|
|
3661
|
-
},
|
|
3662
|
-
{
|
|
3663
|
-
"name": "snapshotCaptured",
|
|
3664
|
-
"type": "OutputEmitterRef<void>",
|
|
3665
|
-
"note": ""
|
|
3666
|
-
},
|
|
3667
|
-
{
|
|
3668
|
-
"name": "snapshotError",
|
|
3669
|
-
"type": "OutputEmitterRef<unknown>",
|
|
3670
|
-
"note": ""
|
|
3671
3745
|
}
|
|
3672
3746
|
],
|
|
3673
3747
|
"examples": [
|
|
@@ -4920,6 +4994,74 @@
|
|
|
4920
4994
|
"geo-tabs"
|
|
4921
4995
|
]
|
|
4922
4996
|
},
|
|
4997
|
+
{
|
|
4998
|
+
"name": "GeoSwitchComponent",
|
|
4999
|
+
"selector": "geo-switch",
|
|
5000
|
+
"category": "forms",
|
|
5001
|
+
"summary": "On/off toggle (nz-switch) with optional trailing label; bind with [(checked)] (not CVA).",
|
|
5002
|
+
"whenToUse": "Bật/tắt trạng thái tức thì, không cần nút Lưu — hiển thị/ẩn, kích hoạt/vô hiệu hóa.",
|
|
5003
|
+
"doNotUseWhen": "Lựa chọn trong form cần submit — use geo-checkbox.",
|
|
5004
|
+
"howTo": "",
|
|
5005
|
+
"tips": [],
|
|
5006
|
+
"binding": "none",
|
|
5007
|
+
"cva": false,
|
|
5008
|
+
"path": "projects/geo-ui/src/lib/figma/geo-switch/geo-switch.component.ts",
|
|
5009
|
+
"doc": "ai/components/geo-switch.md",
|
|
5010
|
+
"inputs": [
|
|
5011
|
+
{
|
|
5012
|
+
"name": "label",
|
|
5013
|
+
"type": "string",
|
|
5014
|
+
"default": "''",
|
|
5015
|
+
"note": ""
|
|
5016
|
+
},
|
|
5017
|
+
{
|
|
5018
|
+
"name": "checked",
|
|
5019
|
+
"type": "boolean",
|
|
5020
|
+
"default": "false",
|
|
5021
|
+
"note": "Two-way: `[(checked)]`. — Two-way `model()` (supports banana binding)."
|
|
5022
|
+
},
|
|
5023
|
+
{
|
|
5024
|
+
"name": "disabled",
|
|
5025
|
+
"type": "boolean",
|
|
5026
|
+
"default": "false",
|
|
5027
|
+
"note": ""
|
|
5028
|
+
},
|
|
5029
|
+
{
|
|
5030
|
+
"name": "loading",
|
|
5031
|
+
"type": "boolean",
|
|
5032
|
+
"default": "false",
|
|
5033
|
+
"note": ""
|
|
5034
|
+
},
|
|
5035
|
+
{
|
|
5036
|
+
"name": "size",
|
|
5037
|
+
"type": "'default' | 'small'",
|
|
5038
|
+
"default": "'default'",
|
|
5039
|
+
"note": ""
|
|
5040
|
+
},
|
|
5041
|
+
{
|
|
5042
|
+
"name": "checkedLabel",
|
|
5043
|
+
"type": "string",
|
|
5044
|
+
"default": "''",
|
|
5045
|
+
"note": "Text hiển thị trong pill khi bật."
|
|
5046
|
+
},
|
|
5047
|
+
{
|
|
5048
|
+
"name": "uncheckedLabel",
|
|
5049
|
+
"type": "string",
|
|
5050
|
+
"default": "''",
|
|
5051
|
+
"note": "Text hiển thị trong pill khi tắt."
|
|
5052
|
+
}
|
|
5053
|
+
],
|
|
5054
|
+
"outputs": [],
|
|
5055
|
+
"examples": [
|
|
5056
|
+
{
|
|
5057
|
+
"title": "Example",
|
|
5058
|
+
"lang": "html",
|
|
5059
|
+
"code": "<geo-switch label=\"Kích hoạt\" [(checked)]=\"active\"></geo-switch>"
|
|
5060
|
+
}
|
|
5061
|
+
],
|
|
5062
|
+
"example": "<geo-switch label=\"Kích hoạt\" [(checked)]=\"active\"></geo-switch>",
|
|
5063
|
+
"related": []
|
|
5064
|
+
},
|
|
4923
5065
|
{
|
|
4924
5066
|
"name": "GeoTableComponent",
|
|
4925
5067
|
"selector": "geo-table",
|
|
@@ -5831,24 +5973,12 @@
|
|
|
5831
5973
|
"default": "false",
|
|
5832
5974
|
"note": ""
|
|
5833
5975
|
},
|
|
5834
|
-
{
|
|
5835
|
-
"name": "selectionMode",
|
|
5836
|
-
"type": "'single' | 'multi'",
|
|
5837
|
-
"default": "'multi'",
|
|
5838
|
-
"note": "`single` — click chọn đúng 1 node (BR-06-03); `multi` — giữ hành vi checkbox hiện có."
|
|
5839
|
-
},
|
|
5840
5976
|
{
|
|
5841
5977
|
"name": "checkedKeys",
|
|
5842
5978
|
"type": "Array<string | number>",
|
|
5843
5979
|
"default": "[]",
|
|
5844
5980
|
"note": "Two-way `model()` (supports banana binding)."
|
|
5845
5981
|
},
|
|
5846
|
-
{
|
|
5847
|
-
"name": "selectedKeys",
|
|
5848
|
-
"type": "Array<string | number>",
|
|
5849
|
-
"default": "[]",
|
|
5850
|
-
"note": "Two-way `model()` (supports banana binding)."
|
|
5851
|
-
},
|
|
5852
5982
|
{
|
|
5853
5983
|
"name": "expandedKeys",
|
|
5854
5984
|
"type": "Array<string | number>",
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
# geo-accordion
|
|
2
|
+
|
|
3
|
+
> Complete usage reference for **GeoAccordionComponent** (`@geoit/ui`)
|
|
4
|
+
>
|
|
5
|
+
> Read this file before using the component. Use **only** the Inputs/Outputs listed here.
|
|
6
|
+
|
|
7
|
+
## Summary
|
|
8
|
+
Collapsible panel group (nz-collapse); content via ng-template uiPanel.
|
|
9
|
+
|
|
10
|
+
## Import
|
|
11
|
+
|
|
12
|
+
```ts
|
|
13
|
+
import { GeoAccordionComponent } from '@geoit/ui';
|
|
14
|
+
```
|
|
15
|
+
|
|
16
|
+
Add to the consuming standalone component:
|
|
17
|
+
|
|
18
|
+
```ts
|
|
19
|
+
imports: [GeoAccordionComponent]
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
## Selector
|
|
23
|
+
`geo-accordion`
|
|
24
|
+
|
|
25
|
+
## Category
|
|
26
|
+
`navigation`
|
|
27
|
+
|
|
28
|
+
## When to use
|
|
29
|
+
Các khối nội dung có thể thu gọn/mở rộng trên cùng một trang (FAQ, nhóm trường form dài).
|
|
30
|
+
|
|
31
|
+
## Do not use when
|
|
32
|
+
Điều hướng giữa các section ngang hàng luôn hiển thị — use geo-tabs.
|
|
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
|
+
| `items` | `GeoAccordionItem[]` | `[]` | — |
|
|
46
|
+
| `accordion` | `boolean` | `false` | `true` → chỉ 1 panel mở tại một thời điểm (maps to `nzAccordion`). |
|
|
47
|
+
| `bordered` | `boolean` | `true` | — |
|
|
48
|
+
| `ghost` | `boolean` | `false` | — |
|
|
49
|
+
| `activeKeys` | `string[]` | `[]` | Two-way `model()` (supports banana binding). |
|
|
50
|
+
|
|
51
|
+
## Outputs
|
|
52
|
+
|
|
53
|
+
| Output | Payload | Description |
|
|
54
|
+
|--------|---------|-------------|
|
|
55
|
+
| `panelChange` | `OutputEmitterRef<{ key: string; active: boolean }>` | — |
|
|
56
|
+
|
|
57
|
+
## Related types
|
|
58
|
+
|
|
59
|
+
From `figma/geo-accordion/geo-accordion.types.ts`:
|
|
60
|
+
|
|
61
|
+
```ts
|
|
62
|
+
export interface GeoAccordionItem {
|
|
63
|
+
key: string;
|
|
64
|
+
title: string;
|
|
65
|
+
disabled?: boolean;
|
|
66
|
+
/** Text phụ hiển thị bên phải header (vd: trạng thái, số lượng). */
|
|
67
|
+
extra?: string;
|
|
68
|
+
}
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
## Examples
|
|
72
|
+
|
|
73
|
+
### Example
|
|
74
|
+
|
|
75
|
+
```html
|
|
76
|
+
<geo-accordion [items]="[{ key: 'a', title: 'Panel A' }, { key: 'b', title: 'Panel B' }]" [(activeKeys)]="keys">
|
|
77
|
+
<ng-template uiPanel="a">Content A</ng-template>
|
|
78
|
+
<ng-template uiPanel="b">Content B</ng-template>
|
|
79
|
+
</geo-accordion>
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
## Package path
|
|
83
|
+
`node_modules/@geoit/ui/ai/components/geo-accordion.md`
|
|
84
|
+
|
|
85
|
+
## Source
|
|
86
|
+
`projects/geo-ui/src/lib/figma/geo-accordion/geo-accordion.component.ts`
|
|
87
|
+
|
|
88
|
+
## Rules for AI / consumers
|
|
89
|
+
- Prefer this component over raw ng-zorro / HTML for the same UI role.
|
|
90
|
+
- Use design tokens (`var(--geo-*)`) — never hardcode brand colors or radius.
|
|
91
|
+
- Match props exactly to the Inputs table; do not invent unsupported inputs.
|
|
92
|
+
- Copy examples and adapt labels/bindings only.
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
# geo-detail-view
|
|
2
|
+
|
|
3
|
+
> Complete usage reference for **GeoDetailViewComponent** (`@geoit/ui`)
|
|
4
|
+
>
|
|
5
|
+
> Read this file before using the component. Use **only** the Inputs/Outputs listed here.
|
|
6
|
+
|
|
7
|
+
## Summary
|
|
8
|
+
Read-only key/value grid (nz-descriptions); value tùy biến qua ng-template uiDetailItem.
|
|
9
|
+
|
|
10
|
+
## Import
|
|
11
|
+
|
|
12
|
+
```ts
|
|
13
|
+
import { GeoDetailViewComponent } from '@geoit/ui';
|
|
14
|
+
```
|
|
15
|
+
|
|
16
|
+
Add to the consuming standalone component:
|
|
17
|
+
|
|
18
|
+
```ts
|
|
19
|
+
imports: [GeoDetailViewComponent]
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
## Selector
|
|
23
|
+
`geo-detail-view`
|
|
24
|
+
|
|
25
|
+
## Category
|
|
26
|
+
`display`
|
|
27
|
+
|
|
28
|
+
## When to use
|
|
29
|
+
Trang/khối xem chi tiết hồ sơ, thửa đất, người dùng… (không chỉnh sửa).
|
|
30
|
+
|
|
31
|
+
## Do not use when
|
|
32
|
+
Cần nhập liệu — use geo-input/geo-select trong form.
|
|
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` | `''` | — |
|
|
46
|
+
| `items` | `GeoDetailViewItem[]` | `[]` | — |
|
|
47
|
+
| `column` | `number` | `2` | — |
|
|
48
|
+
| `bordered` | `boolean` | `true` | — |
|
|
49
|
+
| `layout` | `'horizontal' \| 'vertical'` | `'horizontal'` | — |
|
|
50
|
+
| `size` | `'default' \| 'small'` | `'default'` | — |
|
|
51
|
+
|
|
52
|
+
## Outputs
|
|
53
|
+
|
|
54
|
+
_None_
|
|
55
|
+
|
|
56
|
+
## Related types
|
|
57
|
+
|
|
58
|
+
From `figma/geo-detail-view/geo-detail-view.types.ts`:
|
|
59
|
+
|
|
60
|
+
```ts
|
|
61
|
+
export interface GeoDetailViewItem {
|
|
62
|
+
key: string;
|
|
63
|
+
label: string;
|
|
64
|
+
/** Bỏ qua nếu dùng `[uiDetailItem]` để chiếu nội dung tùy biến. */
|
|
65
|
+
value?: string | number | null;
|
|
66
|
+
/** Số cột chiếm dụng (mặc định 1). */
|
|
67
|
+
span?: number;
|
|
68
|
+
}
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
## Examples
|
|
72
|
+
|
|
73
|
+
### Example
|
|
74
|
+
|
|
75
|
+
```html
|
|
76
|
+
<geo-detail-view title="Thông tin thửa đất" [items]="[{ key: 'code', label: 'Mã thửa', value: 'A-123' }, { key: 'status', label: 'Trạng thái' }]" [column]="2">
|
|
77
|
+
<ng-template uiDetailItem="status"><geo-status-tag status="active"></geo-status-tag></ng-template>
|
|
78
|
+
</geo-detail-view>
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
## Package path
|
|
82
|
+
`node_modules/@geoit/ui/ai/components/geo-detail-view.md`
|
|
83
|
+
|
|
84
|
+
## Source
|
|
85
|
+
`projects/geo-ui/src/lib/figma/geo-detail-view/geo-detail-view.component.ts`
|
|
86
|
+
|
|
87
|
+
## Rules for AI / consumers
|
|
88
|
+
- Prefer this component over raw ng-zorro / HTML for the same UI role.
|
|
89
|
+
- Use design tokens (`var(--geo-*)`) — never hardcode brand colors or radius.
|
|
90
|
+
- Match props exactly to the Inputs table; do not invent unsupported inputs.
|
|
91
|
+
- Copy examples and adapt labels/bindings only.
|
|
@@ -45,7 +45,6 @@ Every supported Input (do not invent others):
|
|
|
45
45
|
| `open` | `boolean` | `false` | Two-way `model()` (supports banana binding). |
|
|
46
46
|
| `title` | `string` | `'Đơn vị hành chính'` | — |
|
|
47
47
|
| `nodes` | `GeoTreeNode[]` | `[]` | — |
|
|
48
|
-
| `selectionMode` | `'single' \| 'multi'` | `'multi'` | `single` — chọn đúng 1 xã/phường (BR-06-03); `multi` — checkbox nhiều cấp (mặc định). |
|
|
49
48
|
| `checkedKeys` | `Array<string \| number>` | `[]` | Two-way `model()` (supports banana binding). |
|
|
50
49
|
| `expandedKeys` | `Array<string \| number>` | `[]` | Two-way `model()` (supports banana binding). |
|
|
51
50
|
|
|
@@ -44,7 +44,6 @@ Every supported Input (do not invent others):
|
|
|
44
44
|
|-------|------|---------|-------------|
|
|
45
45
|
| `title` | `string` | `'Chú giải'` | — |
|
|
46
46
|
| `items` | `GeoMapLegendItem[]` | `[]` | — |
|
|
47
|
-
| `catalogMissing` | `boolean` | `false` | True khi danh mục chú giải không tải được (`ERR_MAP_LEGEND_CATALOG_MISSING`). |
|
|
48
47
|
| `open` | `boolean` | `false` | Two-way `model()` (supports banana binding). |
|
|
49
48
|
|
|
50
49
|
## Outputs
|
|
@@ -56,10 +56,7 @@ Every supported Input (do not invent others):
|
|
|
56
56
|
| `showNav` | `boolean` | `true` | — |
|
|
57
57
|
| `includeDemoLayers` | `boolean` | `true` | — |
|
|
58
58
|
| `adminNodes` | `GeoTreeNode[]` | `GEO_MAP_DEMO_ADMIN_NODES` | — |
|
|
59
|
-
| `adminSelectionMode` | `'single' \| 'multi'` | `'multi'` | `single` — chọn đúng 1 xã/phường (BR-06-03); `multi` — checkbox nhiều cấp (mặc định). |
|
|
60
59
|
| `locationLabel` | `string` | `'Phường 1 — TP Đà Lạt, Lâm Đồng'` | — |
|
|
61
|
-
| `measureDisclaimer` | `string \| null` | `'Giá trị tham khảo trên bản đồ, không có giá trị pháp lý. Diện tích pháp lý của thửa đất lấy theo hồ sơ địa chính.'` | Ghi chú pháp lý hiển thị khi đang đo (BR-10-03). `null` ẩn ghi chú — mặc định giữ nguyên câu chữ đã dùng ở `qh-map-shell`. |
|
|
62
|
-
| `legendCatalogMissing` | `boolean` | `false` | True khi danh mục chú giải không tải được (`ERR_MAP_LEGEND_CATALOG_MISSING`). |
|
|
63
60
|
| `parcelAudience` | `GeoMapParcelAudience` | `'citizen'` | — |
|
|
64
61
|
| `provinceExtent` | `readonly [number, number, number, number]` | `GEO_MAP_DEFAULT_PROVINCE_EXTENT_4326` | — |
|
|
65
62
|
| `demoSearch` | `boolean` | `true` | When true, shell seeds mock search results (Storybook / demos). |
|
|
@@ -86,17 +83,13 @@ Every supported Input (do not invent others):
|
|
|
86
83
|
|--------|---------|-------------|
|
|
87
84
|
| `mapReady` | `OutputEmitterRef<GeoMapController>` | — |
|
|
88
85
|
| `mapClick` | `OutputEmitterRef<GeoMapClickEvent>` | — |
|
|
89
|
-
| `located` | `OutputEmitterRef<[number, number]>` | — |
|
|
90
86
|
| `locateDenied` | `OutputEmitterRef<void>` | — |
|
|
91
|
-
| `locateError` | `OutputEmitterRef<{ reason: GeoMapLocateErrorReason; message?: string }>` | — |
|
|
92
87
|
| `actionClick` | `OutputEmitterRef<GeoMapToolbarAction>` | — |
|
|
93
88
|
| `search` | `OutputEmitterRef<GeoMapSearchQuery>` | — |
|
|
94
89
|
| `searchReset` | `OutputEmitterRef<void>` | — |
|
|
95
90
|
| `resultSelect` | `OutputEmitterRef<GeoMapSearchResultItem>` | — |
|
|
96
91
|
| `parcelExport` | `OutputEmitterRef<GeoMapParcelDetail>` | — |
|
|
97
92
|
| `adminApply` | `OutputEmitterRef<Array<string \| number>>` | — |
|
|
98
|
-
| `snapshotCaptured` | `OutputEmitterRef<void>` | — |
|
|
99
|
-
| `snapshotError` | `OutputEmitterRef<unknown>` | — |
|
|
100
93
|
|
|
101
94
|
|
|
102
95
|
## Examples
|