@geoit/ui 0.0.4 → 0.0.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/AGENTS.md +12 -8
- package/README.md +94 -66
- package/ai/AGENTS.md +106 -16
- package/ai/README.md +35 -1
- package/ai/catalog.json +2855 -275
- package/ai/components/geo-alert.md +3 -3
- package/ai/components/geo-back-button.md +2 -2
- package/ai/components/geo-breadcrumb.md +1 -1
- package/ai/components/geo-button.md +3 -3
- package/ai/components/geo-chart.md +115 -0
- package/ai/components/geo-checkbox.md +4 -6
- package/ai/components/geo-column-picker.md +3 -3
- package/ai/components/geo-confirm-modal.md +4 -5
- package/ai/components/geo-dashboard.md +102 -0
- package/ai/components/geo-date-picker.md +5 -3
- package/ai/components/geo-date-range-picker.md +5 -3
- package/ai/components/geo-empty-state.md +75 -0
- package/ai/components/geo-feedback-form.md +97 -0
- package/ai/components/geo-file-picker.md +4 -2
- package/ai/components/geo-forgot-password.md +81 -0
- package/ai/components/geo-form-modal.md +9 -10
- package/ai/components/geo-icon.md +3 -3
- package/ai/components/geo-input.md +8 -6
- package/ai/components/geo-layout-footer.md +70 -0
- package/ai/components/geo-layout-header-actions.md +82 -0
- package/ai/components/geo-layout-header.md +89 -0
- package/ai/components/geo-layout-sidebar.md +86 -0
- package/ai/components/geo-layout.md +155 -0
- package/ai/components/geo-list-page.md +75 -0
- package/ai/components/geo-login.md +106 -0
- package/ai/components/geo-map-admin-filter.md +85 -0
- package/ai/components/geo-map-basemap-switcher.md +79 -0
- package/ai/components/geo-map-help.md +72 -0
- package/ai/components/geo-map-layer-card.md +73 -0
- package/ai/components/geo-map-layer-panel.md +75 -0
- package/ai/components/geo-map-layers-drawer.md +78 -0
- package/ai/components/geo-map-legend.md +74 -0
- package/ai/components/geo-map-locate.md +75 -0
- package/ai/components/geo-map-location-chip.md +71 -0
- package/ai/components/geo-map-measure.md +74 -0
- package/ai/components/geo-map-opacity.md +75 -0
- package/ai/components/geo-map-parcel-popup.md +84 -0
- package/ai/components/geo-map-search.md +89 -0
- package/ai/components/geo-map-shell.md +146 -0
- package/ai/components/geo-map-snapshot.md +75 -0
- package/ai/components/geo-map-swipe.md +73 -0
- package/ai/components/geo-map-toolbar.md +81 -0
- package/ai/components/geo-map-zoom.md +74 -0
- package/ai/components/geo-map.md +212 -0
- package/ai/components/geo-overlap-result.md +88 -0
- package/ai/components/geo-page-header.md +72 -0
- package/ai/components/geo-page-title.md +1 -1
- package/ai/components/geo-pagination.md +4 -7
- package/ai/components/geo-radio.md +3 -1
- package/ai/components/geo-row-actions.md +3 -3
- package/ai/components/geo-select.md +4 -2
- package/ai/components/geo-slider.md +6 -8
- package/ai/components/geo-stat-card.md +98 -0
- package/ai/components/geo-status-tag.md +2 -2
- package/ai/components/geo-step-form-layout.md +7 -8
- package/ai/components/geo-stepper.md +3 -4
- package/ai/components/geo-table-filter.md +4 -5
- package/ai/components/geo-table-pagination.md +4 -7
- package/ai/components/geo-table-toolbar.md +7 -7
- package/ai/components/geo-table.md +17 -20
- package/ai/components/geo-tabs.md +4 -6
- package/ai/components/geo-textarea.md +4 -2
- package/ai/components/geo-toast.md +4 -4
- package/ai/components/geo-tree.md +4 -6
- package/ai/components/geo-typography.md +1 -1
- package/ai/components/geo-upload.md +9 -10
- package/ai/mockup.html +1194 -0
- package/ai/recipes.md +184 -85
- package/esm2022/lib/figma/geo-alert/geo-alert.component.mjs +19 -36
- package/esm2022/lib/figma/geo-back-button/geo-back-button.component.mjs +14 -24
- package/esm2022/lib/figma/geo-breadcrumb/geo-breadcrumb.component.mjs +8 -11
- package/esm2022/lib/figma/geo-button/geo-button.component.mjs +30 -59
- package/esm2022/lib/figma/geo-chart/geo-chart.component.mjs +88 -0
- package/esm2022/lib/figma/geo-chart/geo-chart.types.mjs +2 -0
- package/esm2022/lib/figma/geo-checkbox/geo-checkbox.component.mjs +11 -22
- package/esm2022/lib/figma/geo-confirm-modal/geo-confirm-modal.component.mjs +22 -54
- package/esm2022/lib/figma/geo-dashboard/geo-dashboard.component.mjs +49 -0
- package/esm2022/lib/figma/geo-dashboard/geo-dashboard.types.mjs +2 -0
- package/esm2022/lib/figma/geo-date-picker/geo-date-picker.component.mjs +48 -78
- package/esm2022/lib/figma/geo-date-range-picker/geo-date-range-picker.component.mjs +47 -75
- package/esm2022/lib/figma/geo-empty-state/geo-empty-state.component.mjs +25 -0
- package/esm2022/lib/figma/geo-feedback-form/geo-feedback-form.component.mjs +75 -0
- package/esm2022/lib/figma/geo-feedback-form/geo-feedback-form.types.mjs +2 -0
- package/esm2022/lib/figma/geo-file-picker/geo-file-picker.component.mjs +59 -81
- package/esm2022/lib/figma/geo-forgot-password/geo-forgot-password.component.mjs +51 -0
- package/esm2022/lib/figma/geo-form-modal/geo-form-modal.component.mjs +45 -112
- package/esm2022/lib/figma/geo-icon/geo-icon.component.mjs +22 -32
- package/esm2022/lib/figma/geo-input/geo-input.component.mjs +41 -70
- package/esm2022/lib/figma/geo-layout/footer/geo-layout-footer.component.mjs +18 -0
- package/esm2022/lib/figma/geo-layout/geo-layout-actions.directive.mjs +15 -0
- package/esm2022/lib/figma/geo-layout/geo-layout.component.mjs +79 -0
- package/esm2022/lib/figma/geo-layout/geo-layout.types.mjs +42 -0
- package/esm2022/lib/figma/geo-layout/header/geo-layout-header.component.mjs +60 -0
- package/esm2022/lib/figma/geo-layout/header-actions/geo-layout-header-actions.component.mjs +70 -0
- package/esm2022/lib/figma/geo-layout/sidebar/geo-layout-sidebar.component.mjs +90 -0
- package/esm2022/lib/figma/geo-list-page/geo-list-page.component.mjs +22 -0
- package/esm2022/lib/figma/geo-login/geo-login.component.mjs +58 -0
- package/esm2022/lib/figma/geo-login/geo-login.types.mjs +2 -0
- package/esm2022/lib/figma/geo-map/chrome/geo-map-admin-filter/geo-map-admin-filter.component.mjs +52 -0
- package/esm2022/lib/figma/geo-map/chrome/geo-map-basemap-switcher/geo-map-basemap-switcher.component.mjs +61 -0
- package/esm2022/lib/figma/geo-map/chrome/geo-map-help/geo-map-help.component.mjs +26 -0
- package/esm2022/lib/figma/geo-map/chrome/geo-map-layer-card/geo-map-layer-card.component.mjs +24 -0
- package/esm2022/lib/figma/geo-map/chrome/geo-map-layer-panel/geo-map-layer-panel.component.mjs +146 -0
- package/esm2022/lib/figma/geo-map/chrome/geo-map-layers-drawer/geo-map-layers-drawer.component.mjs +37 -0
- package/esm2022/lib/figma/geo-map/chrome/geo-map-legend/geo-map-legend.component.mjs +30 -0
- package/esm2022/lib/figma/geo-map/chrome/geo-map-locate/geo-map-locate.component.mjs +72 -0
- package/esm2022/lib/figma/geo-map/chrome/geo-map-location-chip/geo-map-location-chip.component.mjs +21 -0
- package/esm2022/lib/figma/geo-map/chrome/geo-map-measure/geo-map-measure.component.mjs +375 -0
- package/esm2022/lib/figma/geo-map/chrome/geo-map-opacity/geo-map-opacity.component.mjs +94 -0
- package/esm2022/lib/figma/geo-map/chrome/geo-map-parcel-popup/geo-map-parcel-popup.component.mjs +136 -0
- package/esm2022/lib/figma/geo-map/chrome/geo-map-search/geo-map-search.component.mjs +182 -0
- package/esm2022/lib/figma/geo-map/chrome/geo-map-shell/geo-map-shell.component.mjs +577 -0
- package/esm2022/lib/figma/geo-map/chrome/geo-map-snapshot/geo-map-snapshot.component.mjs +93 -0
- package/esm2022/lib/figma/geo-map/chrome/geo-map-swipe/geo-map-swipe.component.mjs +129 -0
- package/esm2022/lib/figma/geo-map/chrome/geo-map-toolbar/geo-map-toolbar.component.mjs +64 -0
- package/esm2022/lib/figma/geo-map/chrome/geo-map-zoom/geo-map-zoom.component.mjs +295 -0
- package/esm2022/lib/figma/geo-map/geo-map-toolbar.icons.mjs +18 -0
- package/esm2022/lib/figma/geo-map/geo-map.component.mjs +144 -0
- package/esm2022/lib/figma/geo-map/geo-map.constants.mjs +497 -0
- package/esm2022/lib/figma/geo-map/geo-map.controller.mjs +71 -0
- package/esm2022/lib/figma/geo-map/geo-map.types.mjs +2 -0
- package/esm2022/lib/figma/geo-map/services/geo-map-layer.service.mjs +368 -0
- package/esm2022/lib/figma/geo-map/services/geo-map-projection.service.mjs +110 -0
- package/esm2022/lib/figma/geo-map/services/geo-map.service.mjs +540 -0
- package/esm2022/lib/figma/geo-map/utils/geo-map-fullscreen-overlay.util.mjs +47 -0
- package/esm2022/lib/figma/geo-map/utils/geo-map-interactions.util.mjs +30 -0
- package/esm2022/lib/figma/geo-overlap-result/geo-overlap-result.component.mjs +25 -0
- package/esm2022/lib/figma/geo-overlap-result/geo-overlap-result.types.mjs +2 -0
- package/esm2022/lib/figma/geo-page-header/geo-page-header.component.mjs +23 -0
- package/esm2022/lib/figma/geo-page-title/geo-page-title.component.mjs +20 -35
- package/esm2022/lib/figma/geo-pagination/geo-pagination.component.mjs +13 -43
- package/esm2022/lib/figma/geo-radio/geo-radio.component.mjs +32 -52
- package/esm2022/lib/figma/geo-select/geo-select.component.mjs +46 -72
- package/esm2022/lib/figma/geo-slider/geo-slider.component.mjs +12 -28
- package/esm2022/lib/figma/geo-stat-card/geo-stat-card.component.mjs +163 -0
- package/esm2022/lib/figma/geo-stat-card/geo-stat-card.types.mjs +2 -0
- package/esm2022/lib/figma/geo-status-tag/geo-status-tag.component.mjs +23 -27
- package/esm2022/lib/figma/geo-step-form-layout/geo-step-form-layout.component.mjs +39 -96
- package/esm2022/lib/figma/geo-stepper/geo-stepper.component.mjs +18 -33
- package/esm2022/lib/figma/geo-table/geo-column-picker/geo-column-picker.component.mjs +14 -24
- package/esm2022/lib/figma/geo-table/geo-row-actions/geo-row-actions.component.mjs +18 -36
- package/esm2022/lib/figma/geo-table/geo-table-filter/geo-table-filter.component.mjs +41 -98
- package/esm2022/lib/figma/geo-table/geo-table-pagination/geo-table-pagination.component.mjs +40 -73
- package/esm2022/lib/figma/geo-table/geo-table-toolbar/geo-table-toolbar.component.mjs +26 -56
- package/esm2022/lib/figma/geo-table/geo-table.component.mjs +110 -210
- package/esm2022/lib/figma/geo-tabs/geo-tabs.component.mjs +33 -63
- package/esm2022/lib/figma/geo-textarea/geo-textarea.component.mjs +28 -44
- package/esm2022/lib/figma/geo-toast/geo-toast.component.mjs +18 -39
- package/esm2022/lib/figma/geo-tree/geo-tree.component.mjs +12 -40
- package/esm2022/lib/figma/geo-typography/geo-typography.component.mjs +49 -64
- package/esm2022/lib/figma/geo-upload/geo-upload.component.mjs +50 -101
- package/esm2022/lib/figma/index.mjs +50 -1
- package/esm2022/lib/styles/tokens.mjs +56 -24
- package/fesm2022/geoit-ui.mjs +5981 -1825
- package/fesm2022/geoit-ui.mjs.map +1 -1
- package/lib/figma/geo-alert/geo-alert.component.d.ts +10 -11
- package/lib/figma/geo-back-button/geo-back-button.component.d.ts +6 -7
- package/lib/figma/geo-breadcrumb/geo-breadcrumb.component.d.ts +2 -2
- package/lib/figma/geo-button/geo-button.component.d.ts +21 -17
- package/lib/figma/geo-chart/geo-chart.component.d.ts +40 -0
- package/lib/figma/geo-chart/geo-chart.types.d.ts +13 -0
- package/lib/figma/geo-checkbox/geo-checkbox.component.d.ts +6 -7
- package/lib/figma/geo-confirm-modal/geo-confirm-modal.component.d.ts +15 -17
- package/lib/figma/geo-dashboard/geo-dashboard.component.d.ts +29 -0
- package/lib/figma/geo-dashboard/geo-dashboard.types.d.ts +7 -0
- package/lib/figma/geo-date-picker/geo-date-picker.component.d.ts +26 -21
- package/lib/figma/geo-date-range-picker/geo-date-range-picker.component.d.ts +25 -20
- package/lib/figma/geo-empty-state/geo-empty-state.component.d.ts +17 -0
- package/lib/figma/geo-feedback-form/geo-feedback-form.component.d.ts +36 -0
- package/lib/figma/geo-feedback-form/geo-feedback-form.types.d.ts +8 -0
- package/lib/figma/geo-file-picker/geo-file-picker.component.d.ts +23 -20
- package/lib/figma/geo-forgot-password/geo-forgot-password.component.d.ts +24 -0
- package/lib/figma/geo-form-modal/geo-form-modal.component.d.ts +33 -35
- package/lib/figma/geo-icon/geo-icon.component.d.ts +7 -7
- package/lib/figma/geo-input/geo-input.component.d.ts +23 -21
- package/lib/figma/geo-layout/footer/geo-layout-footer.component.d.ts +10 -0
- package/lib/figma/geo-layout/geo-layout-actions.directive.d.ts +6 -0
- package/lib/figma/geo-layout/geo-layout.component.d.ts +48 -0
- package/lib/figma/geo-layout/geo-layout.types.d.ts +44 -0
- package/lib/figma/geo-layout/header/geo-layout-header.component.d.ts +31 -0
- package/lib/figma/geo-layout/header-actions/geo-layout-header-actions.component.d.ts +32 -0
- package/lib/figma/geo-layout/sidebar/geo-layout-sidebar.component.d.ts +34 -0
- package/lib/figma/geo-list-page/geo-list-page.component.d.ts +16 -0
- package/lib/figma/geo-login/geo-login.component.d.ts +27 -0
- package/lib/figma/geo-login/geo-login.types.d.ts +6 -0
- package/lib/figma/geo-map/chrome/geo-map-admin-filter/geo-map-admin-filter.component.d.ts +28 -0
- package/lib/figma/geo-map/chrome/geo-map-basemap-switcher/geo-map-basemap-switcher.component.d.ts +26 -0
- package/lib/figma/geo-map/chrome/geo-map-help/geo-map-help.component.d.ts +20 -0
- package/lib/figma/geo-map/chrome/geo-map-layer-card/geo-map-layer-card.component.d.ts +15 -0
- package/lib/figma/geo-map/chrome/geo-map-layer-panel/geo-map-layer-panel.component.d.ts +40 -0
- package/lib/figma/geo-map/chrome/geo-map-layers-drawer/geo-map-layers-drawer.component.d.ts +25 -0
- package/lib/figma/geo-map/chrome/geo-map-legend/geo-map-legend.component.d.ts +18 -0
- package/lib/figma/geo-map/chrome/geo-map-locate/geo-map-locate.component.d.ts +24 -0
- package/lib/figma/geo-map/chrome/geo-map-location-chip/geo-map-location-chip.component.d.ts +14 -0
- package/lib/figma/geo-map/chrome/geo-map-measure/geo-map-measure.component.d.ts +49 -0
- package/lib/figma/geo-map/chrome/geo-map-opacity/geo-map-opacity.component.d.ts +30 -0
- package/lib/figma/geo-map/chrome/geo-map-parcel-popup/geo-map-parcel-popup.component.d.ts +44 -0
- package/lib/figma/geo-map/chrome/geo-map-search/geo-map-search.component.d.ts +56 -0
- package/lib/figma/geo-map/chrome/geo-map-shell/geo-map-shell.component.d.ts +103 -0
- package/lib/figma/geo-map/chrome/geo-map-snapshot/geo-map-snapshot.component.d.ts +21 -0
- package/lib/figma/geo-map/chrome/geo-map-swipe/geo-map-swipe.component.d.ts +33 -0
- package/lib/figma/geo-map/chrome/geo-map-toolbar/geo-map-toolbar.component.d.ts +30 -0
- package/lib/figma/geo-map/chrome/geo-map-zoom/geo-map-zoom.component.d.ts +67 -0
- package/lib/figma/geo-map/geo-map-toolbar.icons.d.ts +17 -0
- package/lib/figma/geo-map/geo-map.component.d.ts +53 -0
- package/lib/figma/geo-map/geo-map.constants.d.ts +73 -0
- package/lib/figma/geo-map/geo-map.controller.d.ts +49 -0
- package/lib/figma/geo-map/geo-map.types.d.ts +224 -0
- package/lib/figma/geo-map/services/geo-map-layer.service.d.ts +42 -0
- package/lib/figma/geo-map/services/geo-map-projection.service.d.ts +32 -0
- package/lib/figma/geo-map/services/geo-map.service.d.ts +99 -0
- package/lib/figma/geo-map/utils/geo-map-fullscreen-overlay.util.d.ts +13 -0
- package/lib/figma/geo-map/utils/geo-map-interactions.util.d.ts +9 -0
- package/lib/figma/geo-overlap-result/geo-overlap-result.component.d.ts +18 -0
- package/lib/figma/geo-overlap-result/geo-overlap-result.types.d.ts +7 -0
- package/lib/figma/geo-page-header/geo-page-header.component.d.ts +16 -0
- package/lib/figma/geo-page-title/geo-page-title.component.d.ts +9 -9
- package/lib/figma/geo-pagination/geo-pagination.component.d.ts +9 -14
- package/lib/figma/geo-radio/geo-radio.component.d.ts +17 -15
- package/lib/figma/geo-select/geo-select.component.d.ts +24 -19
- package/lib/figma/geo-slider/geo-slider.component.d.ts +7 -9
- package/lib/figma/geo-stat-card/geo-stat-card.component.d.ts +50 -0
- package/lib/figma/geo-stat-card/geo-stat-card.types.d.ts +11 -0
- package/lib/figma/geo-status-tag/geo-status-tag.component.d.ts +7 -7
- package/lib/figma/geo-step-form-layout/geo-step-form-layout.component.d.ts +27 -29
- package/lib/figma/geo-stepper/geo-stepper.component.d.ts +6 -8
- package/lib/figma/geo-table/geo-column-picker/geo-column-picker.component.d.ts +6 -7
- package/lib/figma/geo-table/geo-row-actions/geo-row-actions.component.d.ts +11 -12
- package/lib/figma/geo-table/geo-table-filter/geo-table-filter.component.d.ts +21 -28
- package/lib/figma/geo-table/geo-table-pagination/geo-table-pagination.component.d.ts +17 -20
- package/lib/figma/geo-table/geo-table-toolbar/geo-table-toolbar.component.d.ts +17 -18
- package/lib/figma/geo-table/geo-table.component.d.ts +58 -62
- package/lib/figma/geo-tabs/geo-tabs.component.d.ts +14 -17
- package/lib/figma/geo-textarea/geo-textarea.component.d.ts +15 -13
- package/lib/figma/geo-toast/geo-toast.component.d.ts +11 -12
- package/lib/figma/geo-tree/geo-tree.component.d.ts +8 -13
- package/lib/figma/geo-typography/geo-typography.component.d.ts +13 -13
- package/lib/figma/geo-upload/geo-upload.component.d.ts +26 -28
- package/lib/figma/index.d.ts +49 -0
- package/lib/styles/tokens.d.ts +56 -23
- package/package.json +4 -2
- package/src/lib/figma/geo-map/assets/toolbar/fullscreen.svg +8 -0
- package/src/lib/figma/geo-map/assets/toolbar/home.svg +3 -0
- package/src/lib/figma/geo-map/assets/toolbar/layers.svg +3 -0
- package/src/lib/figma/geo-map/assets/toolbar/measure-area.svg +12 -0
- package/src/lib/figma/geo-map/assets/toolbar/measure-distance.svg +5 -0
- package/src/lib/figma/geo-map/assets/toolbar/pan.svg +13 -0
- package/src/lib/figma/geo-map/assets/toolbar/search.svg +3 -0
- package/src/lib/figma/geo-map/assets/toolbar/zoom-in.svg +3 -0
- package/src/lib/figma/geo-map/assets/toolbar/zoom-out.svg +5 -0
- package/src/lib/styles/design-tokens.scss +108 -35
- package/src/lib/styles/scrollbar.scss +2 -2
- package/src/lib/styles/theme.scss +1 -1
package/AGENTS.md
CHANGED
|
@@ -2,7 +2,18 @@
|
|
|
2
2
|
|
|
3
3
|
Package name: **`@geoit/ui`**
|
|
4
4
|
|
|
5
|
-
Canonical AI docs live under **`ai
|
|
5
|
+
Canonical AI docs live under **`ai/`**.
|
|
6
|
+
|
|
7
|
+
## Library code (`src/lib/figma`)
|
|
8
|
+
|
|
9
|
+
Use **Angular 18** conventions:
|
|
10
|
+
|
|
11
|
+
- `input()` / `output()` / `model()` — not `@Input` / `@Output`
|
|
12
|
+
- `ChangeDetectionStrategy.OnPush`
|
|
13
|
+
- `@if` / `@for`; `inject()` for DI
|
|
14
|
+
- See `.cursor/rules/angular-18-figma.mdc`
|
|
15
|
+
|
|
16
|
+
## AI docs
|
|
6
17
|
|
|
7
18
|
| File | Purpose |
|
|
8
19
|
|------|---------|
|
|
@@ -12,14 +23,7 @@ Canonical AI docs live under **`ai/`**:
|
|
|
12
23
|
| [`ai/recipes.md`](./ai/recipes.md) | Copy-paste UI recipes |
|
|
13
24
|
| [`ai/README.md`](./ai/README.md) | Index |
|
|
14
25
|
|
|
15
|
-
Regenerate component docs + catalog:
|
|
16
|
-
|
|
17
26
|
```bash
|
|
18
27
|
npm run ai:docs
|
|
19
|
-
```
|
|
20
|
-
|
|
21
|
-
Install in other projects:
|
|
22
|
-
|
|
23
|
-
```bash
|
|
24
28
|
npm install @geoit/ui
|
|
25
29
|
```
|
package/README.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# @geoit/ui
|
|
2
2
|
|
|
3
|
-
GEO design system for **Angular 18** + **ng-zorro 18**. Standalone components, design tokens, and AI-ready usage docs.
|
|
3
|
+
GEO design system for **Angular 18** + **ng-zorro 18**. Standalone components, design tokens, and AI-ready usage docs (shipped in the package under `ai/`).
|
|
4
4
|
|
|
5
5
|
## Install
|
|
6
6
|
|
|
@@ -12,63 +12,68 @@ npm install @geoit/ui
|
|
|
12
12
|
|
|
13
13
|
```bash
|
|
14
14
|
npm install @angular/animations@^18 @angular/common@^18 @angular/core@^18 \
|
|
15
|
-
@angular/forms@^18 @angular/cdk@^18 @ant-design/icons-angular@^18 ng-zorro-antd@^18
|
|
15
|
+
@angular/forms@^18 @angular/cdk@^18 @ant-design/icons-angular@^18 ng-zorro-antd@^18 \
|
|
16
|
+
ol@^10 proj4@^2
|
|
16
17
|
```
|
|
17
18
|
|
|
19
|
+
> `ol` + `proj4` are required when you use map components (`geo-map`, `geo-map-shell`, …).
|
|
20
|
+
|
|
18
21
|
## Setup styles (once per app)
|
|
19
22
|
|
|
20
23
|
In your global styles (e.g. `styles.scss`):
|
|
21
24
|
|
|
22
25
|
```scss
|
|
23
|
-
@import
|
|
24
|
-
@import
|
|
26
|
+
@import "node_modules/ng-zorro-antd/ng-zorro-antd.min.css";
|
|
27
|
+
@import "node_modules/@geoit/ui/src/lib/styles/design-tokens.scss";
|
|
28
|
+
@import "node_modules/@geoit/ui/src/lib/styles/theme.scss";
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
Providers (animations + Vietnamese i18n for date pickers):
|
|
32
|
+
|
|
33
|
+
```ts
|
|
34
|
+
import { provideAnimations } from "@angular/platform-browser/animations";
|
|
35
|
+
import { provideNzI18n, vi_VN } from "ng-zorro-antd/i18n";
|
|
36
|
+
import { registerLocaleData } from "@angular/common";
|
|
37
|
+
import vi from "@angular/common/locales/vi";
|
|
38
|
+
|
|
39
|
+
registerLocaleData(vi);
|
|
40
|
+
|
|
41
|
+
// in appConfig.providers:
|
|
42
|
+
provideAnimations(),
|
|
43
|
+
provideNzI18n(vi_VN),
|
|
25
44
|
```
|
|
26
45
|
|
|
27
46
|
Use tokens in your CSS — do not hardcode brand colors or radius:
|
|
28
47
|
|
|
29
48
|
- `var(--geo-color-primary-default)`
|
|
30
|
-
- `var(--geo-radius)` (default **
|
|
49
|
+
- `var(--geo-radius)` (default **8px**; md/lg/xl for chips & popovers)
|
|
31
50
|
|
|
32
51
|
## Quick start
|
|
33
52
|
|
|
34
53
|
```ts
|
|
35
|
-
import { Component } from
|
|
36
|
-
import { FormsModule } from
|
|
37
|
-
import {
|
|
38
|
-
GeoButtonComponent,
|
|
39
|
-
GeoInputComponent,
|
|
40
|
-
GeoFormModalComponent,
|
|
41
|
-
GeoToastService,
|
|
42
|
-
} from '@geoit/ui';
|
|
54
|
+
import { Component } from "@angular/core";
|
|
55
|
+
import { FormsModule } from "@angular/forms";
|
|
56
|
+
import { GeoButtonComponent, GeoInputComponent, GeoFormModalComponent, GeoToastService } from "@geoit/ui";
|
|
43
57
|
|
|
44
58
|
@Component({
|
|
45
59
|
standalone: true,
|
|
46
60
|
imports: [FormsModule, GeoButtonComponent, GeoInputComponent, GeoFormModalComponent],
|
|
47
61
|
template: `
|
|
48
|
-
<geo-button appearance="primary" color="brand" icon="plus" (clicked)="open = true">
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
<geo-form-modal
|
|
53
|
-
[open]="open"
|
|
54
|
-
title="Thêm mới"
|
|
55
|
-
cancelText="Hủy bỏ"
|
|
56
|
-
okText="Lưu"
|
|
57
|
-
(openChange)="open = $event"
|
|
58
|
-
(ok)="save()"
|
|
59
|
-
>
|
|
62
|
+
<geo-button appearance="primary" color="brand" icon="plus" (clicked)="open = true"> Thêm mới </geo-button>
|
|
63
|
+
|
|
64
|
+
<geo-form-modal [open]="open" title="Thêm mới" cancelText="Hủy bỏ" okText="Lưu" (openChange)="open = $event" (ok)="save()">
|
|
60
65
|
<geo-input label="Tên" [required]="true" [block]="true" [(ngModel)]="name"></geo-input>
|
|
61
66
|
</geo-form-modal>
|
|
62
67
|
`,
|
|
63
68
|
})
|
|
64
69
|
export class DemoComponent {
|
|
65
70
|
open = false;
|
|
66
|
-
name =
|
|
71
|
+
name = "";
|
|
67
72
|
|
|
68
73
|
constructor(private toast: GeoToastService) {}
|
|
69
74
|
|
|
70
75
|
save(): void {
|
|
71
|
-
this.toast.success(
|
|
76
|
+
this.toast.success("Thành công!", "Đã lưu.");
|
|
72
77
|
this.open = false;
|
|
73
78
|
}
|
|
74
79
|
}
|
|
@@ -76,33 +81,37 @@ export class DemoComponent {
|
|
|
76
81
|
|
|
77
82
|
## Common components
|
|
78
83
|
|
|
79
|
-
| Need
|
|
80
|
-
|
|
81
|
-
| Button / CTA
|
|
82
|
-
| Text field
|
|
83
|
-
| Select
|
|
84
|
-
| Checkbox
|
|
85
|
-
| Radio
|
|
86
|
-
|
|
|
87
|
-
|
|
|
88
|
-
|
|
|
89
|
-
|
|
|
90
|
-
|
|
|
91
|
-
|
|
|
92
|
-
|
|
|
93
|
-
|
|
|
94
|
-
|
|
|
95
|
-
|
|
|
96
|
-
|
|
|
84
|
+
| Need | Component | Example |
|
|
85
|
+
| --------------- | -------------------------------- | ----------------------------------------------------------------- |
|
|
86
|
+
| Button / CTA | `geo-button` | `<geo-button appearance="primary" color="brand">Lưu</geo-button>` |
|
|
87
|
+
| Text field | `geo-input` | `<geo-input label="Họ tên" [(ngModel)]="name" [block]="true">` |
|
|
88
|
+
| Select | `geo-select` | `<geo-select [options]="opts" [(ngModel)]="v" [block]="true">` |
|
|
89
|
+
| Checkbox | `geo-checkbox` | `<geo-checkbox label="Đồng ý" [(checked)]="ok">` |
|
|
90
|
+
| Radio | `geo-radio` | `<geo-radio [options]="opts" [(ngModel)]="v">` |
|
|
91
|
+
| Date / range | `geo-date-picker` / `geo-date-range-picker` | `[(ngModel)]` + `format="dd/MM/yyyy"` |
|
|
92
|
+
| Form dialog | `geo-form-modal` | See Quick start |
|
|
93
|
+
| Confirm delete | `geo-confirm-modal` | `[visible]` + `(confirm)` |
|
|
94
|
+
| Steps in dialog | `geo-form-modal` + `geo-stepper` | See recipes |
|
|
95
|
+
| App shell | `geo-layout` | menu + header + content |
|
|
96
|
+
| Page title | `geo-page-title` | `<geo-page-title title="Chi tiết hồ sơ">` |
|
|
97
|
+
| Breadcrumb | `geo-breadcrumb` | `[items]="[{ label, link? }]"` |
|
|
98
|
+
| Toast | `GeoToastService` | `this.toast.success(title, message)` |
|
|
99
|
+
| Alert | `geo-alert` | `type="success" \| "error" \| …` |
|
|
100
|
+
| Status pill | `geo-status-tag` | `status="success" label="Đã duyệt"` |
|
|
101
|
+
| Table | `geo-table` | `[columns]` + `[data]` + paging |
|
|
102
|
+
| Upload | `geo-upload` | Drag-drop multi-file |
|
|
103
|
+
| **Map portal** | **`geo-map-shell`** | Search + layers + legend + parcel (recommended) |
|
|
104
|
+
| Bare map | `geo-map` | OpenLayers host + `GeoMapController` |
|
|
105
|
+
| Typography | `geo-typography` | `variant="h3" \| "body" \| …` |
|
|
97
106
|
|
|
98
107
|
### Button API (quick)
|
|
99
108
|
|
|
100
|
-
| Input
|
|
101
|
-
|
|
102
|
-
| `appearance`
|
|
103
|
-
| `color`
|
|
104
|
-
| `icon` / `iconPlacement`
|
|
105
|
-
| `disabled` / `iconOnly` / `active` | boolean
|
|
109
|
+
| Input | Values | Default |
|
|
110
|
+
| ---------------------------------- | --------------------------------------------- | --------- |
|
|
111
|
+
| `appearance` | `primary` \| `secondary` \| `tertiary` | `primary` |
|
|
112
|
+
| `color` | `brand` \| `danger` \| `warning` \| `success` | `brand` |
|
|
113
|
+
| `icon` / `iconPlacement` | Ant icon name; `start` \| `end` | `start` |
|
|
114
|
+
| `disabled` / `iconOnly` / `active` | boolean | `false` |
|
|
106
115
|
|
|
107
116
|
```html
|
|
108
117
|
<geo-button appearance="primary" color="brand" icon="plus">Thêm mới</geo-button>
|
|
@@ -114,9 +123,25 @@ export class DemoComponent {
|
|
|
114
123
|
|
|
115
124
|
These implement **ControlValueAccessor** — use `[(ngModel)]` or reactive forms:
|
|
116
125
|
|
|
117
|
-
`geo-input`, `geo-textarea`, `geo-select`, `geo-radio`, `geo-date-picker`, `geo-date-range-picker`, `geo-
|
|
126
|
+
`geo-input`, `geo-textarea`, `geo-select`, `geo-radio`, `geo-date-picker`, `geo-date-range-picker`, `geo-file-picker`
|
|
127
|
+
|
|
128
|
+
- `geo-checkbox` → **`[(checked)]`** (not CVA)
|
|
129
|
+
- `geo-slider` → **`[(value)]`** (`model()`)
|
|
118
130
|
|
|
119
|
-
|
|
131
|
+
### Map portal (quick)
|
|
132
|
+
|
|
133
|
+
```html
|
|
134
|
+
<geo-map-shell
|
|
135
|
+
height="640px"
|
|
136
|
+
[demoSearch]="false"
|
|
137
|
+
parcelAudience="citizen"
|
|
138
|
+
[layers]="layers"
|
|
139
|
+
(mapReady)="ctrl = $event"
|
|
140
|
+
(search)="onSearch($event)"
|
|
141
|
+
></geo-map-shell>
|
|
142
|
+
```
|
|
143
|
+
|
|
144
|
+
See `ai/recipes.md` §13 and `ai/components/geo-map-shell.md`.
|
|
120
145
|
|
|
121
146
|
### Toast (preferred)
|
|
122
147
|
|
|
@@ -133,19 +158,20 @@ this.toast.error('Lỗi!', 'Không thể lưu.');
|
|
|
133
158
|
|
|
134
159
|
After install:
|
|
135
160
|
|
|
136
|
-
| Path
|
|
137
|
-
|
|
138
|
-
| `node_modules/@geoit/ui/ai/AGENTS.md`
|
|
139
|
-
| `node_modules/@geoit/ui/ai/README.md`
|
|
140
|
-
| `node_modules/@geoit/ui/ai/catalog.json`
|
|
161
|
+
| Path | Purpose |
|
|
162
|
+
| ------------------------------------------- | ----------------------------------------------- |
|
|
163
|
+
| `node_modules/@geoit/ui/ai/AGENTS.md` | Rules for humans & AI agents |
|
|
164
|
+
| `node_modules/@geoit/ui/ai/README.md` | Component index |
|
|
165
|
+
| `node_modules/@geoit/ui/ai/catalog.json` | Machine-readable catalog |
|
|
141
166
|
| `node_modules/@geoit/ui/ai/components/*.md` | **Per-component API** (inputs/outputs/examples) |
|
|
142
|
-
| `node_modules/@geoit/ui/ai/recipes.md`
|
|
167
|
+
| `node_modules/@geoit/ui/ai/recipes.md` | Copy-paste screen patterns |
|
|
143
168
|
|
|
144
169
|
Open a component doc before using it, e.g.:
|
|
145
170
|
|
|
146
171
|
```text
|
|
147
172
|
node_modules/@geoit/ui/ai/components/geo-button.md
|
|
148
173
|
node_modules/@geoit/ui/ai/components/geo-form-modal.md
|
|
174
|
+
node_modules/@geoit/ui/ai/components/geo-map-shell.md
|
|
149
175
|
node_modules/@geoit/ui/ai/components/geo-table.md
|
|
150
176
|
```
|
|
151
177
|
|
|
@@ -160,20 +186,22 @@ alwaysApply: true
|
|
|
160
186
|
---
|
|
161
187
|
|
|
162
188
|
UI must use `@geoit/ui`. Before writing UI, read:
|
|
189
|
+
|
|
163
190
|
- node_modules/@geoit/ui/ai/AGENTS.md
|
|
164
191
|
- node_modules/@geoit/ui/ai/catalog.json
|
|
165
192
|
- node_modules/@geoit/ui/ai/components/<selector>.md when needed
|
|
193
|
+
- node_modules/@geoit/ui/ai/recipes.md for screen patterns
|
|
166
194
|
```
|
|
167
195
|
|
|
168
196
|
## Design tokens
|
|
169
197
|
|
|
170
|
-
| Group
|
|
171
|
-
|
|
172
|
-
| Primary
|
|
173
|
-
| Neutral
|
|
174
|
-
| Semantic | success / error / warning / info
|
|
175
|
-
| Radius
|
|
176
|
-
| Font
|
|
198
|
+
| Group | Examples |
|
|
199
|
+
| -------- | ------------------------------------------------------------------------- |
|
|
200
|
+
| Primary | `--geo-color-primary-default` (`#9A4828`), hover, light, dark, background |
|
|
201
|
+
| Neutral | `--geo-color-neutral-900` … `100`, white |
|
|
202
|
+
| Semantic | success / error / warning / info |
|
|
203
|
+
| Radius | `--geo-radius` (8px) + `--geo-radius-{xs,sm,md,lg,xl,2xl,full}` |
|
|
204
|
+
| Font | `--geo-font-family` |
|
|
177
205
|
|
|
178
206
|
TypeScript mirror: `geoColorTokens` from `@geoit/ui` (via styles/tokens export).
|
|
179
207
|
|
package/ai/AGENTS.md
CHANGED
|
@@ -1,17 +1,73 @@
|
|
|
1
1
|
# GEO UI — Agent instructions
|
|
2
2
|
|
|
3
|
-
Instructions for AI coding agents
|
|
3
|
+
Instructions for **humans and AI coding agents** when building UI with **`@geoit/ui`** (installed from npm).
|
|
4
|
+
|
|
5
|
+
Package paths after install:
|
|
6
|
+
|
|
7
|
+
| Doc | Path |
|
|
8
|
+
|-----|------|
|
|
9
|
+
| This file | `node_modules/@geoit/ui/ai/AGENTS.md` |
|
|
10
|
+
| Index | `node_modules/@geoit/ui/ai/README.md` |
|
|
11
|
+
| Catalog | `node_modules/@geoit/ui/ai/catalog.json` |
|
|
12
|
+
| Per component | `node_modules/@geoit/ui/ai/components/<selector>.md` |
|
|
13
|
+
| Recipes | `node_modules/@geoit/ui/ai/recipes.md` |
|
|
4
14
|
|
|
5
15
|
## Mandatory
|
|
6
16
|
|
|
7
|
-
1. **Use `geo-*` components** from
|
|
8
|
-
2. **Do not** invent parallel wrappers or raw `nz-button` / `nz-input` / `nz-modal` when a `geo-*` equivalent exists.
|
|
17
|
+
1. **Use `geo-*` components** from `@geoit/ui` for all UI that has a match in the catalog.
|
|
18
|
+
2. **Do not** invent parallel wrappers or raw `nz-button` / `nz-input` / `nz-modal` / `nz-date-picker` when a `geo-*` equivalent exists.
|
|
9
19
|
3. **Do not hardcode** brand colors or border-radius. Use tokens:
|
|
10
20
|
- Colors: `var(--geo-color-*)` or `geoColorTokens` from `@geoit/ui`
|
|
11
|
-
- Radius: `var(--geo-radius)` (default **
|
|
12
|
-
4. Before implementing a component, **read
|
|
21
|
+
- Radius: `var(--geo-radius)` (default **8px**; scale: sm 6 / md 10 / lg 12 / xl 14)
|
|
22
|
+
4. Before implementing a component, **read** `ai/components/<selector>.md` (Inputs/Outputs/Examples/Tips) and/or `ai/catalog.json`.
|
|
13
23
|
5. Prefer **copying examples** from those docs — adapt labels/bindings only; do not invent props.
|
|
14
24
|
|
|
25
|
+
## Install (consumer app)
|
|
26
|
+
|
|
27
|
+
```bash
|
|
28
|
+
npm install @geoit/ui
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
Peer dependencies (install if missing):
|
|
32
|
+
|
|
33
|
+
```bash
|
|
34
|
+
npm install @angular/animations@^18 @angular/common@^18 @angular/core@^18 \
|
|
35
|
+
@angular/forms@^18 @angular/cdk@^18 @ant-design/icons-angular@^18 ng-zorro-antd@^18 \
|
|
36
|
+
ol@^10 proj4@^2
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
> `ol` + `proj4` are required for map components (`geo-map`, `geo-map-shell`, …).
|
|
40
|
+
|
|
41
|
+
## Styles (once per app)
|
|
42
|
+
|
|
43
|
+
In global styles (e.g. `styles.scss`):
|
|
44
|
+
|
|
45
|
+
```scss
|
|
46
|
+
@import "node_modules/@geoit/ui/src/lib/styles/design-tokens.scss";
|
|
47
|
+
@import "node_modules/@geoit/ui/src/lib/styles/theme.scss";
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
Also load ng-zorro CSS once (if not already):
|
|
51
|
+
|
|
52
|
+
```scss
|
|
53
|
+
@import "node_modules/ng-zorro-antd/ng-zorro-antd.min.css";
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
App providers typically need animations + ng-zorro i18n (vi):
|
|
57
|
+
|
|
58
|
+
```ts
|
|
59
|
+
import { provideAnimations } from "@angular/platform-browser/animations";
|
|
60
|
+
import { provideNzI18n, vi_VN } from "ng-zorro-antd/i18n";
|
|
61
|
+
import { registerLocaleData } from "@angular/common";
|
|
62
|
+
import vi from "@angular/common/locales/vi";
|
|
63
|
+
|
|
64
|
+
registerLocaleData(vi);
|
|
65
|
+
|
|
66
|
+
export const appConfig = {
|
|
67
|
+
providers: [provideAnimations(), provideNzI18n(vi_VN), /* … */],
|
|
68
|
+
};
|
|
69
|
+
```
|
|
70
|
+
|
|
15
71
|
## Import pattern
|
|
16
72
|
|
|
17
73
|
```ts
|
|
@@ -19,8 +75,9 @@ import {
|
|
|
19
75
|
GeoButtonComponent,
|
|
20
76
|
GeoInputComponent,
|
|
21
77
|
GeoFormModalComponent,
|
|
22
|
-
|
|
23
|
-
|
|
78
|
+
GeoMapShellComponent,
|
|
79
|
+
GeoToastService,
|
|
80
|
+
} from "@geoit/ui";
|
|
24
81
|
```
|
|
25
82
|
|
|
26
83
|
Standalone consumers:
|
|
@@ -32,21 +89,27 @@ Standalone consumers:
|
|
|
32
89
|
})
|
|
33
90
|
```
|
|
34
91
|
|
|
35
|
-
|
|
92
|
+
### Form controls & binding
|
|
36
93
|
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
94
|
+
| Components | Binding |
|
|
95
|
+
|------------|---------|
|
|
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
|
+
| `geo-checkbox` | `[(checked)]` (not CVA) |
|
|
98
|
+
| `geo-slider` | `[(value)]` (`model()`) |
|
|
99
|
+
| Overlays (`geo-form-modal`, search panels, …) | often `[(open)]` / `[(visible)]` |
|
|
41
100
|
|
|
42
101
|
## Composition recipes
|
|
43
102
|
|
|
44
|
-
See [`recipes.md`](./recipes.md) for:
|
|
103
|
+
See [`recipes.md`](./recipes.md) for copy-paste screens:
|
|
45
104
|
|
|
46
105
|
- Form modal + steps
|
|
47
106
|
- Page: breadcrumb + page title
|
|
48
107
|
- Table + toolbar + filter
|
|
49
108
|
- Toast via service
|
|
109
|
+
- App shell (`geo-layout`)
|
|
110
|
+
- Dashboard
|
|
111
|
+
- Auth login / forgot password
|
|
112
|
+
- **Map portal (`geo-map-shell`)**
|
|
50
113
|
|
|
51
114
|
## Decision cheat-sheet
|
|
52
115
|
|
|
@@ -57,31 +120,58 @@ See [`recipes.md`](./recipes.md) for:
|
|
|
57
120
|
| Select | `geo-select` |
|
|
58
121
|
| Exclusive options | `geo-radio` |
|
|
59
122
|
| Checkbox | `geo-checkbox` |
|
|
123
|
+
| Date / date range | `geo-date-picker` / `geo-date-range-picker` |
|
|
60
124
|
| Dialog form | `geo-form-modal` |
|
|
61
125
|
| Confirm delete | `geo-confirm-modal` |
|
|
62
126
|
| Multi-step in dialog | `geo-form-modal` + `geo-stepper` |
|
|
63
127
|
| Multi-step full page | `geo-step-form-layout` |
|
|
64
|
-
|
|
|
128
|
+
| App shell (sider+header) | `geo-layout` |
|
|
129
|
+
| Layout pieces | `geo-layout-sidebar` / `geo-layout-header` / `geo-layout-footer` |
|
|
130
|
+
| Page heading | `geo-page-title` (+ `geo-breadcrumb`) or `geo-page-header` |
|
|
131
|
+
| Dashboard KPI / chart | `geo-stat-card` / `geo-chart` / `geo-dashboard` |
|
|
132
|
+
| Login / forgot password | `geo-login` / `geo-forgot-password` |
|
|
133
|
+
| Feedback form | `geo-feedback-form` |
|
|
134
|
+
| Overlap analysis | `geo-overlap-result` |
|
|
135
|
+
| Empty region | `geo-empty-state` |
|
|
65
136
|
| Status pill | `geo-status-tag` |
|
|
66
137
|
| Transient notice | `GeoToastService` / `geo-toast` |
|
|
67
138
|
| Inline notice | `geo-alert` |
|
|
68
139
|
| Upload drag-drop | `geo-upload` |
|
|
69
140
|
| Compact file field | `geo-file-picker` |
|
|
70
141
|
| Data grid | `geo-table` (+ toolbar/filter) |
|
|
142
|
+
| **Map portal (recommended)** | **`geo-map-shell`** |
|
|
143
|
+
| Bare OpenLayers host | `geo-map` + `GeoMapController` |
|
|
144
|
+
| Map chrome pieces | `geo-map-toolbar`, `geo-map-search`, `geo-map-layers-drawer`, … |
|
|
71
145
|
| Typography | `geo-typography` |
|
|
72
146
|
|
|
147
|
+
## Map guidance
|
|
148
|
+
|
|
149
|
+
1. Prefer **`geo-map-shell`** for portal tra cứu (search, ĐVHC, layers, legend, measure, basemap, parcel popup).
|
|
150
|
+
2. Use **`geo-map`** alone only for embedded/minimal maps.
|
|
151
|
+
3. Import constants/types from `@geoit/ui` (`GEO_MAP_DEFAULT_*`, `GeoMapLayerConfig`, …).
|
|
152
|
+
4. Do **not** invent VN-2000 proj4 strings — pass via `projections` / env.
|
|
153
|
+
5. Peer deps: `ol`, `proj4`.
|
|
154
|
+
|
|
73
155
|
## Anti-patterns
|
|
74
156
|
|
|
75
157
|
- Hardcoded `#9A4828`, `border-radius: 8px`, etc.
|
|
76
158
|
- Custom modal markup instead of `geo-form-modal`
|
|
159
|
+
- Raw `nz-date-picker` / `nz-select` instead of `geo-date-picker` / `geo-select`
|
|
77
160
|
- Using Ant Design Steps instead of `geo-stepper`
|
|
161
|
+
- Assembling map chrome from scratch when `geo-map-shell` fits
|
|
78
162
|
- Mixing Inter/system fonts inconsistently — use `--geo-font-family`
|
|
79
163
|
|
|
164
|
+
## Library maintainers only
|
|
165
|
+
|
|
166
|
+
When changing `projects/geo-ui/src/lib/figma`:
|
|
167
|
+
|
|
168
|
+
- Angular **18**: `input()` / `output()` / `model()`, `OnPush`, `@if`/`@for`, `inject()`
|
|
169
|
+
- Do **not** add new `@Input` / `@Output` / `EventEmitter`
|
|
170
|
+
- After API changes: `npm run ai:docs` (regenerates this package’s `ai/`)
|
|
171
|
+
|
|
80
172
|
## Catalog
|
|
81
173
|
|
|
82
174
|
- Index: [`README.md`](./README.md)
|
|
83
175
|
- Machine catalog: [`catalog.json`](./catalog.json) (includes input types/defaults)
|
|
84
176
|
- Per component: [`components/`](./components/) — full Inputs/Outputs tables
|
|
85
177
|
- Recipes: [`recipes.md`](./recipes.md)
|
|
86
|
-
|
|
87
|
-
Regenerate docs: `npm run ai:docs`
|
package/ai/README.md
CHANGED
|
@@ -10,21 +10,55 @@ Agent rules: [`AGENTS.md`](./AGENTS.md) · Recipes: [`recipes.md`](./recipes.md)
|
|
|
10
10
|
| `geo-back-button` | navigation | Back navigation control (history or custom click). | [geo-back-button.md](./components/geo-back-button.md) |
|
|
11
11
|
| `geo-breadcrumb` | navigation | Breadcrumb trail; last item active (primary). | [geo-breadcrumb.md](./components/geo-breadcrumb.md) |
|
|
12
12
|
| `geo-button` | actions | Primary action button with brand/semantic colors and icons. | [geo-button.md](./components/geo-button.md) |
|
|
13
|
+
| `geo-chart` | data | Bar / donut chart for dashboard statistics (ApexCharts). | [geo-chart.md](./components/geo-chart.md) |
|
|
13
14
|
| `geo-checkbox` | forms | Checkbox with label; bind with [(checked)] (not CVA/ngModel). | [geo-checkbox.md](./components/geo-checkbox.md) |
|
|
14
15
|
| `geo-column-picker` | data | Column visibility picker for tables (optional persistence). | [geo-column-picker.md](./components/geo-column-picker.md) |
|
|
15
16
|
| `geo-confirm-modal` | overlay | Confirm / danger dialog (destroy actions). | [geo-confirm-modal.md](./components/geo-confirm-modal.md) |
|
|
17
|
+
| `geo-dashboard` | layout | Composed dashboard: period, KPI cards, ward/mismatch charts. | [geo-dashboard.md](./components/geo-dashboard.md) |
|
|
16
18
|
| `geo-date-picker` | forms | Single date (optional time) picker. | [geo-date-picker.md](./components/geo-date-picker.md) |
|
|
17
19
|
| `geo-date-range-picker` | forms | Start–end date range picker. | [geo-date-range-picker.md](./components/geo-date-range-picker.md) |
|
|
20
|
+
| `geo-empty-state` | feedback | Empty region placeholder (icon + title + optional action). | [geo-empty-state.md](./components/geo-empty-state.md) |
|
|
21
|
+
| `geo-feedback-form` | forms | Citizen feedback / phản ánh form with validation. | [geo-feedback-form.md](./components/geo-feedback-form.md) |
|
|
18
22
|
| `geo-file-picker` | forms | Compact file input for forms (button + filename). | [geo-file-picker.md](./components/geo-file-picker.md) |
|
|
23
|
+
| `geo-forgot-password` | forms | Forgot-password form (email + submit / back to login). | [geo-forgot-password.md](./components/geo-forgot-password.md) |
|
|
19
24
|
| `geo-form-modal` | overlay | Form modal: fixed header/footer, scrollable body via ng-content. | [geo-form-modal.md](./components/geo-form-modal.md) |
|
|
20
25
|
| `geo-icon` | display | Ant Design icon wrapper with GEO size/color tokens. | [geo-icon.md](./components/geo-icon.md) |
|
|
21
26
|
| `geo-input` | forms | Text input with label, validation, icons; CVA/ngModel. | [geo-input.md](./components/geo-input.md) |
|
|
27
|
+
| `geo-layout` | layout | App shell composing sidebar + header + content + footer. | [geo-layout.md](./components/geo-layout.md) |
|
|
28
|
+
| `geo-layout-footer` | layout | Minimal layout footer with copyright text + content slot. | [geo-layout-footer.md](./components/geo-layout-footer.md) |
|
|
29
|
+
| `geo-layout-header` | layout | Soft top bar: toggle + breadcrumb + user/notification actions. | [geo-layout-header.md](./components/geo-layout-header.md) |
|
|
30
|
+
| `geo-layout-header-actions` | layout | Header actions: notification/subsystem icons + user chip with popovers. | [geo-layout-header-actions.md](./components/geo-layout-header-actions.md) |
|
|
31
|
+
| `geo-layout-sidebar` | layout | White sidebar: brand + recursive menu (collapse / mobile drawer). | [geo-layout-sidebar.md](./components/geo-layout-sidebar.md) |
|
|
32
|
+
| `geo-list-page` | layout | List page chrome: title + breadcrumb shell for admin CRUD screens. | [geo-list-page.md](./components/geo-list-page.md) |
|
|
33
|
+
| `geo-login` | forms | Login form (username, password, captcha, remember). | [geo-login.md](./components/geo-login.md) |
|
|
34
|
+
| `geo-map` | map | OpenLayers map host with basemap, typed layers, and GeoMapController. | [geo-map.md](./components/geo-map.md) |
|
|
35
|
+
| `geo-map-admin-filter` | map | Administrative unit tree filter (ĐVHC) for map extent. | [geo-map-admin-filter.md](./components/geo-map-admin-filter.md) |
|
|
36
|
+
| `geo-map-basemap-switcher` | map | Basemap preview chip (e.g. street ↔ satellite). | [geo-map-basemap-switcher.md](./components/geo-map-basemap-switcher.md) |
|
|
37
|
+
| `geo-map-help` | map | Map help / hướng dẫn popover with sections. | [geo-map-help.md](./components/geo-map-help.md) |
|
|
38
|
+
| `geo-map-layer-card` | map | Basemap / layer preview card (thumbnail + title). | [geo-map-layer-card.md](./components/geo-map-layer-card.md) |
|
|
39
|
+
| `geo-map-layer-panel` | map | Layer list with visibility / opacity / group selection. | [geo-map-layer-panel.md](./components/geo-map-layer-panel.md) |
|
|
40
|
+
| `geo-map-layers-drawer` | map | Popover/drawer hosting the layer panel (“Lớp bản đồ”). | [geo-map-layers-drawer.md](./components/geo-map-layers-drawer.md) |
|
|
41
|
+
| `geo-map-legend` | map | Map legend popover / panel with color swatches. | [geo-map-legend.md](./components/geo-map-legend.md) |
|
|
42
|
+
| `geo-map-locate` | map | Geolocation button (browser GPS) for the map view. | [geo-map-locate.md](./components/geo-map-locate.md) |
|
|
43
|
+
| `geo-map-location-chip` | map | Location breadcrumb chip shown on the map (ward / province). | [geo-map-location-chip.md](./components/geo-map-location-chip.md) |
|
|
44
|
+
| `geo-map-measure` | map | Distance / area measure interaction on the map. | [geo-map-measure.md](./components/geo-map-measure.md) |
|
|
45
|
+
| `geo-map-opacity` | map | Layer opacity slider bound to a map layer id. | [geo-map-opacity.md](./components/geo-map-opacity.md) |
|
|
46
|
+
| `geo-map-parcel-popup` | map | Parcel detail popup (citizen / specialist audience). | [geo-map-parcel-popup.md](./components/geo-map-parcel-popup.md) |
|
|
47
|
+
| `geo-map-search` | map | Map search panel (owner / certificate / parcel / address / coordinates). | [geo-map-search.md](./components/geo-map-search.md) |
|
|
48
|
+
| `geo-map-shell` | map | Full map portal chrome: search, ĐVHC, layers, legend, measure, basemap, parcel popup. | [geo-map-shell.md](./components/geo-map-shell.md) |
|
|
49
|
+
| `geo-map-snapshot` | map | Capture current map canvas to image / download. | [geo-map-snapshot.md](./components/geo-map-snapshot.md) |
|
|
50
|
+
| `geo-map-swipe` | map | Swipe compare control between two map layers. | [geo-map-swipe.md](./components/geo-map-swipe.md) |
|
|
51
|
+
| `geo-map-toolbar` | map | Vertical map tool strip (search, pan, measure, layers, …). | [geo-map-toolbar.md](./components/geo-map-toolbar.md) |
|
|
52
|
+
| `geo-map-zoom` | map | Zoom +/- and optional province / home navigation control. | [geo-map-zoom.md](./components/geo-map-zoom.md) |
|
|
53
|
+
| `geo-overlap-result` | data | Overlap analysis result list (planning type, area, percent). | [geo-overlap-result.md](./components/geo-overlap-result.md) |
|
|
54
|
+
| `geo-page-header` | display | Compact page header block (title + optional actions slot). | [geo-page-header.md](./components/geo-page-header.md) |
|
|
22
55
|
| `geo-page-title` | display | Page title (uppercase) with short primary accent underline; uses geo-typography. | [geo-page-title.md](./components/geo-page-title.md) |
|
|
23
56
|
| `geo-pagination` | navigation | Standalone pagination control. | [geo-pagination.md](./components/geo-pagination.md) |
|
|
24
57
|
| `geo-radio` | forms | Radio group (horizontal/vertical or button style). | [geo-radio.md](./components/geo-radio.md) |
|
|
25
58
|
| `geo-row-actions` | data | Row action icons/menu (edit, more, custom). | [geo-row-actions.md](./components/geo-row-actions.md) |
|
|
26
59
|
| `geo-select` | forms | Select / multi-select dropdown. | [geo-select.md](./components/geo-select.md) |
|
|
27
60
|
| `geo-slider` | forms | Numeric range slider. | [geo-slider.md](./components/geo-slider.md) |
|
|
61
|
+
| `geo-stat-card` | data | KPI stat card (label, value, optional delta / icon). | [geo-stat-card.md](./components/geo-stat-card.md) |
|
|
28
62
|
| `geo-status-tag` | display | Pill status tag with optional dot (success/error/warning/info/teal/…). | [geo-status-tag.md](./components/geo-status-tag.md) |
|
|
29
63
|
| `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) |
|
|
30
64
|
| `geo-stepper` | navigation | Steps indicator (horizontal default). Active=primary, completed=success+check. | [geo-stepper.md](./components/geo-stepper.md) |
|
|
@@ -39,6 +73,6 @@ Agent rules: [`AGENTS.md`](./AGENTS.md) · Recipes: [`recipes.md`](./recipes.md)
|
|
|
39
73
|
| `geo-typography` | display | Text with GEO type scale (h1–tiny) and semantic colors. | [geo-typography.md](./components/geo-typography.md) |
|
|
40
74
|
| `geo-upload` | forms | Drag-drop upload zone with progress list. | [geo-upload.md](./components/geo-upload.md) |
|
|
41
75
|
|
|
42
|
-
Generated: 2026-
|
|
76
|
+
Generated: 2026-09-03T03:52:29.749Z
|
|
43
77
|
|
|
44
78
|
Regenerate: `npm run ai:docs`
|