@geoit/ui 0.0.8 → 0.1.1
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 +202 -56
- 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 +3 -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 +16 -39
- package/esm2022/lib/figma/geo-map/chrome/geo-map-locate/geo-map-locate.util.mjs +38 -0
- 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 +23 -20
- 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 +5 -5
- 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 +262 -130
- 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-locate/geo-map-locate.util.d.ts +16 -0
- package/lib/figma/geo-map/chrome/geo-map-shell/geo-map-shell.component.d.ts +6 -14
- package/lib/figma/geo-map/geo-map.constants.d.ts +3 -3
- 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-11T02:34:24.165Z
|
|
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.
|
|
5
|
-
"generatedAt": "2026-09-
|
|
4
|
+
"version": "0.1.1",
|
|
5
|
+
"generatedAt": "2026-09-11T02:34:24.165Z",
|
|
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",
|
|
@@ -3446,6 +3558,12 @@
|
|
|
3446
3558
|
"default": "GEO_MAP_DEMO_LEGEND_ITEMS",
|
|
3447
3559
|
"note": ""
|
|
3448
3560
|
},
|
|
3561
|
+
{
|
|
3562
|
+
"name": "legendCatalogMissing",
|
|
3563
|
+
"type": "boolean",
|
|
3564
|
+
"default": "false",
|
|
3565
|
+
"note": "Host app sets true when the legend catalog (loại đất/ký hiệu/màu) failed to load."
|
|
3566
|
+
},
|
|
3449
3567
|
{
|
|
3450
3568
|
"name": "showNav",
|
|
3451
3569
|
"type": "boolean",
|
|
@@ -3464,30 +3582,12 @@
|
|
|
3464
3582
|
"default": "GEO_MAP_DEMO_ADMIN_NODES",
|
|
3465
3583
|
"note": ""
|
|
3466
3584
|
},
|
|
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
3585
|
{
|
|
3474
3586
|
"name": "locationLabel",
|
|
3475
3587
|
"type": "string",
|
|
3476
3588
|
"default": "'Phường 1 — TP Đà Lạt, Lâm Đồng'",
|
|
3477
3589
|
"note": ""
|
|
3478
3590
|
},
|
|
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
3591
|
{
|
|
3492
3592
|
"name": "parcelAudience",
|
|
3493
3593
|
"type": "GeoMapParcelAudience",
|
|
@@ -3616,7 +3716,7 @@
|
|
|
3616
3716
|
},
|
|
3617
3717
|
{
|
|
3618
3718
|
"name": "located",
|
|
3619
|
-
"type": "OutputEmitterRef<
|
|
3719
|
+
"type": "OutputEmitterRef<void>",
|
|
3620
3720
|
"note": ""
|
|
3621
3721
|
},
|
|
3622
3722
|
{
|
|
@@ -3626,7 +3726,7 @@
|
|
|
3626
3726
|
},
|
|
3627
3727
|
{
|
|
3628
3728
|
"name": "locateError",
|
|
3629
|
-
"type": "OutputEmitterRef<{ reason: GeoMapLocateErrorReason; message?: string }>",
|
|
3729
|
+
"type": "OutputEmitterRef<{ reason: GeoMapLocateErrorReason; message?: string; }>",
|
|
3630
3730
|
"note": ""
|
|
3631
3731
|
},
|
|
3632
3732
|
{
|
|
@@ -3658,16 +3758,6 @@
|
|
|
3658
3758
|
"name": "adminApply",
|
|
3659
3759
|
"type": "OutputEmitterRef<Array<string | number>>",
|
|
3660
3760
|
"note": ""
|
|
3661
|
-
},
|
|
3662
|
-
{
|
|
3663
|
-
"name": "snapshotCaptured",
|
|
3664
|
-
"type": "OutputEmitterRef<void>",
|
|
3665
|
-
"note": ""
|
|
3666
|
-
},
|
|
3667
|
-
{
|
|
3668
|
-
"name": "snapshotError",
|
|
3669
|
-
"type": "OutputEmitterRef<unknown>",
|
|
3670
|
-
"note": ""
|
|
3671
3761
|
}
|
|
3672
3762
|
],
|
|
3673
3763
|
"examples": [
|
|
@@ -4920,6 +5010,74 @@
|
|
|
4920
5010
|
"geo-tabs"
|
|
4921
5011
|
]
|
|
4922
5012
|
},
|
|
5013
|
+
{
|
|
5014
|
+
"name": "GeoSwitchComponent",
|
|
5015
|
+
"selector": "geo-switch",
|
|
5016
|
+
"category": "forms",
|
|
5017
|
+
"summary": "On/off toggle (nz-switch) with optional trailing label; bind with [(checked)] (not CVA).",
|
|
5018
|
+
"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.",
|
|
5019
|
+
"doNotUseWhen": "Lựa chọn trong form cần submit — use geo-checkbox.",
|
|
5020
|
+
"howTo": "",
|
|
5021
|
+
"tips": [],
|
|
5022
|
+
"binding": "none",
|
|
5023
|
+
"cva": false,
|
|
5024
|
+
"path": "projects/geo-ui/src/lib/figma/geo-switch/geo-switch.component.ts",
|
|
5025
|
+
"doc": "ai/components/geo-switch.md",
|
|
5026
|
+
"inputs": [
|
|
5027
|
+
{
|
|
5028
|
+
"name": "label",
|
|
5029
|
+
"type": "string",
|
|
5030
|
+
"default": "''",
|
|
5031
|
+
"note": ""
|
|
5032
|
+
},
|
|
5033
|
+
{
|
|
5034
|
+
"name": "checked",
|
|
5035
|
+
"type": "boolean",
|
|
5036
|
+
"default": "false",
|
|
5037
|
+
"note": "Two-way: `[(checked)]`. — Two-way `model()` (supports banana binding)."
|
|
5038
|
+
},
|
|
5039
|
+
{
|
|
5040
|
+
"name": "disabled",
|
|
5041
|
+
"type": "boolean",
|
|
5042
|
+
"default": "false",
|
|
5043
|
+
"note": ""
|
|
5044
|
+
},
|
|
5045
|
+
{
|
|
5046
|
+
"name": "loading",
|
|
5047
|
+
"type": "boolean",
|
|
5048
|
+
"default": "false",
|
|
5049
|
+
"note": ""
|
|
5050
|
+
},
|
|
5051
|
+
{
|
|
5052
|
+
"name": "size",
|
|
5053
|
+
"type": "'default' | 'small'",
|
|
5054
|
+
"default": "'default'",
|
|
5055
|
+
"note": ""
|
|
5056
|
+
},
|
|
5057
|
+
{
|
|
5058
|
+
"name": "checkedLabel",
|
|
5059
|
+
"type": "string",
|
|
5060
|
+
"default": "''",
|
|
5061
|
+
"note": "Text hiển thị trong pill khi bật."
|
|
5062
|
+
},
|
|
5063
|
+
{
|
|
5064
|
+
"name": "uncheckedLabel",
|
|
5065
|
+
"type": "string",
|
|
5066
|
+
"default": "''",
|
|
5067
|
+
"note": "Text hiển thị trong pill khi tắt."
|
|
5068
|
+
}
|
|
5069
|
+
],
|
|
5070
|
+
"outputs": [],
|
|
5071
|
+
"examples": [
|
|
5072
|
+
{
|
|
5073
|
+
"title": "Example",
|
|
5074
|
+
"lang": "html",
|
|
5075
|
+
"code": "<geo-switch label=\"Kích hoạt\" [(checked)]=\"active\"></geo-switch>"
|
|
5076
|
+
}
|
|
5077
|
+
],
|
|
5078
|
+
"example": "<geo-switch label=\"Kích hoạt\" [(checked)]=\"active\"></geo-switch>",
|
|
5079
|
+
"related": []
|
|
5080
|
+
},
|
|
4923
5081
|
{
|
|
4924
5082
|
"name": "GeoTableComponent",
|
|
4925
5083
|
"selector": "geo-table",
|
|
@@ -5831,24 +5989,12 @@
|
|
|
5831
5989
|
"default": "false",
|
|
5832
5990
|
"note": ""
|
|
5833
5991
|
},
|
|
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
5992
|
{
|
|
5841
5993
|
"name": "checkedKeys",
|
|
5842
5994
|
"type": "Array<string | number>",
|
|
5843
5995
|
"default": "[]",
|
|
5844
5996
|
"note": "Two-way `model()` (supports banana binding)."
|
|
5845
5997
|
},
|
|
5846
|
-
{
|
|
5847
|
-
"name": "selectedKeys",
|
|
5848
|
-
"type": "Array<string | number>",
|
|
5849
|
-
"default": "[]",
|
|
5850
|
-
"note": "Two-way `model()` (supports banana binding)."
|
|
5851
|
-
},
|
|
5852
5998
|
{
|
|
5853
5999
|
"name": "expandedKeys",
|
|
5854
6000
|
"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
|
|
@@ -53,13 +53,11 @@ Every supported Input (do not invent others):
|
|
|
53
53
|
| `toolbarActions` | `GeoMapToolbarAction[]` | `GEO_MAP_DEFAULT_TOOLBAR_ACTIONS` | — |
|
|
54
54
|
| `layers` | `GeoMapLayerConfig[]` | `[]` | Extra overlays merged after demo thematic + traffic. |
|
|
55
55
|
| `legendItems` | `GeoMapLegendItem[]` | `GEO_MAP_DEMO_LEGEND_ITEMS` | — |
|
|
56
|
+
| `legendCatalogMissing` | `boolean` | `false` | Host app sets true when the legend catalog (loại đất/ký hiệu/màu) failed to load. |
|
|
56
57
|
| `showNav` | `boolean` | `true` | — |
|
|
57
58
|
| `includeDemoLayers` | `boolean` | `true` | — |
|
|
58
59
|
| `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
60
|
| `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
61
|
| `parcelAudience` | `GeoMapParcelAudience` | `'citizen'` | — |
|
|
64
62
|
| `provinceExtent` | `readonly [number, number, number, number]` | `GEO_MAP_DEFAULT_PROVINCE_EXTENT_4326` | — |
|
|
65
63
|
| `demoSearch` | `boolean` | `true` | When true, shell seeds mock search results (Storybook / demos). |
|
|
@@ -86,17 +84,15 @@ Every supported Input (do not invent others):
|
|
|
86
84
|
|--------|---------|-------------|
|
|
87
85
|
| `mapReady` | `OutputEmitterRef<GeoMapController>` | — |
|
|
88
86
|
| `mapClick` | `OutputEmitterRef<GeoMapClickEvent>` | — |
|
|
89
|
-
| `located` | `OutputEmitterRef<
|
|
87
|
+
| `located` | `OutputEmitterRef<void>` | — |
|
|
90
88
|
| `locateDenied` | `OutputEmitterRef<void>` | — |
|
|
91
|
-
| `locateError` | `OutputEmitterRef<{ reason: GeoMapLocateErrorReason; message?: string }>` | — |
|
|
89
|
+
| `locateError` | `OutputEmitterRef<{ reason: GeoMapLocateErrorReason; message?: string; }>` | — |
|
|
92
90
|
| `actionClick` | `OutputEmitterRef<GeoMapToolbarAction>` | — |
|
|
93
91
|
| `search` | `OutputEmitterRef<GeoMapSearchQuery>` | — |
|
|
94
92
|
| `searchReset` | `OutputEmitterRef<void>` | — |
|
|
95
93
|
| `resultSelect` | `OutputEmitterRef<GeoMapSearchResultItem>` | — |
|
|
96
94
|
| `parcelExport` | `OutputEmitterRef<GeoMapParcelDetail>` | — |
|
|
97
95
|
| `adminApply` | `OutputEmitterRef<Array<string \| number>>` | — |
|
|
98
|
-
| `snapshotCaptured` | `OutputEmitterRef<void>` | — |
|
|
99
|
-
| `snapshotError` | `OutputEmitterRef<unknown>` | — |
|
|
100
96
|
|
|
101
97
|
|
|
102
98
|
## Examples
|