@geoit/ui 0.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/AGENTS.md +25 -0
- package/README.md +46 -0
- package/ai/AGENTS.md +86 -0
- package/ai/README.md +44 -0
- package/ai/catalog.json +882 -0
- package/ai/components/geo-alert.md +56 -0
- package/ai/components/geo-back-button.md +54 -0
- package/ai/components/geo-breadcrumb.md +52 -0
- package/ai/components/geo-button.md +63 -0
- package/ai/components/geo-checkbox.md +54 -0
- package/ai/components/geo-column-picker.md +54 -0
- package/ai/components/geo-confirm-modal.md +70 -0
- package/ai/components/geo-date-picker.md +65 -0
- package/ai/components/geo-date-range-picker.md +64 -0
- package/ai/components/geo-file-picker.md +62 -0
- package/ai/components/geo-form-modal.md +88 -0
- package/ai/components/geo-icon.md +53 -0
- package/ai/components/geo-input.md +65 -0
- package/ai/components/geo-page-title.md +53 -0
- package/ai/components/geo-pagination.md +59 -0
- package/ai/components/geo-radio.md +67 -0
- package/ai/components/geo-row-actions.md +54 -0
- package/ai/components/geo-select.md +68 -0
- package/ai/components/geo-slider.md +56 -0
- package/ai/components/geo-status-tag.md +51 -0
- package/ai/components/geo-step-form-layout.md +81 -0
- package/ai/components/geo-stepper.md +63 -0
- package/ai/components/geo-table-filter.md +65 -0
- package/ai/components/geo-table-pagination.md +59 -0
- package/ai/components/geo-table-toolbar.md +64 -0
- package/ai/components/geo-table.md +98 -0
- package/ai/components/geo-tabs.md +62 -0
- package/ai/components/geo-textarea.md +59 -0
- package/ai/components/geo-toast.md +61 -0
- package/ai/components/geo-tree.md +58 -0
- package/ai/components/geo-typography.md +57 -0
- package/ai/components/geo-upload.md +78 -0
- package/ai/recipes.md +111 -0
- package/esm2022/geoit-ui.mjs +5 -0
- package/esm2022/lib/figma/geo-alert/geo-alert.component.mjs +58 -0
- package/esm2022/lib/figma/geo-alert/geo-alert.types.mjs +7 -0
- package/esm2022/lib/figma/geo-back-button/geo-back-button.component.mjs +48 -0
- package/esm2022/lib/figma/geo-breadcrumb/geo-breadcrumb.component.mjs +33 -0
- package/esm2022/lib/figma/geo-breadcrumb/geo-breadcrumb.types.mjs +2 -0
- package/esm2022/lib/figma/geo-button/geo-button.component.mjs +77 -0
- package/esm2022/lib/figma/geo-button/geo-button.types.mjs +2 -0
- package/esm2022/lib/figma/geo-checkbox/geo-checkbox.component.mjs +34 -0
- package/esm2022/lib/figma/geo-confirm-modal/geo-confirm-modal.component.mjs +76 -0
- package/esm2022/lib/figma/geo-confirm-modal/geo-confirm-modal.types.mjs +2 -0
- package/esm2022/lib/figma/geo-date-picker/geo-date-picker.component.mjs +119 -0
- package/esm2022/lib/figma/geo-date-picker/geo-date-picker.types.mjs +2 -0
- package/esm2022/lib/figma/geo-date-range-picker/geo-date-range-picker.component.mjs +116 -0
- package/esm2022/lib/figma/geo-date-range-picker/geo-date-range-picker.types.mjs +2 -0
- package/esm2022/lib/figma/geo-file-picker/geo-file-picker.component.mjs +145 -0
- package/esm2022/lib/figma/geo-file-picker/geo-file-picker.types.mjs +2 -0
- package/esm2022/lib/figma/geo-form-modal/geo-form-modal.component.mjs +153 -0
- package/esm2022/lib/figma/geo-icon/geo-icon.component.mjs +51 -0
- package/esm2022/lib/figma/geo-icon/geo-icon.types.mjs +8 -0
- package/esm2022/lib/figma/geo-input/geo-input.component.mjs +118 -0
- package/esm2022/lib/figma/geo-page-title/geo-page-title.component.mjs +51 -0
- package/esm2022/lib/figma/geo-pagination/geo-pagination.component.mjs +54 -0
- package/esm2022/lib/figma/geo-radio/geo-radio.component.mjs +95 -0
- package/esm2022/lib/figma/geo-radio/geo-radio.types.mjs +2 -0
- package/esm2022/lib/figma/geo-select/geo-select.component.mjs +113 -0
- package/esm2022/lib/figma/geo-select/geo-select.types.mjs +2 -0
- package/esm2022/lib/figma/geo-slider/geo-slider.component.mjs +43 -0
- package/esm2022/lib/figma/geo-status-tag/geo-status-tag.component.mjs +62 -0
- package/esm2022/lib/figma/geo-status-tag/geo-status-tag.types.mjs +30 -0
- package/esm2022/lib/figma/geo-step-form-layout/geo-step-form-layout.component.mjs +157 -0
- package/esm2022/lib/figma/geo-step-form-layout/geo-step-form-layout.types.mjs +2 -0
- package/esm2022/lib/figma/geo-stepper/geo-stepper.component.mjs +77 -0
- package/esm2022/lib/figma/geo-stepper/geo-stepper.types.mjs +2 -0
- package/esm2022/lib/figma/geo-table/geo-column-picker/geo-column-picker.component.mjs +65 -0
- package/esm2022/lib/figma/geo-table/geo-column-picker/geo-column-picker.storage.mjs +31 -0
- package/esm2022/lib/figma/geo-table/geo-column-picker/geo-column-picker.types.mjs +2 -0
- package/esm2022/lib/figma/geo-table/geo-row-actions/geo-row-actions.component.mjs +64 -0
- package/esm2022/lib/figma/geo-table/geo-row-actions/geo-row-actions.types.mjs +24 -0
- package/esm2022/lib/figma/geo-table/geo-table-filter/geo-table-filter.component.mjs +195 -0
- package/esm2022/lib/figma/geo-table/geo-table-pagination/geo-table-pagination.component.mjs +118 -0
- package/esm2022/lib/figma/geo-table/geo-table-toolbar/geo-table-toolbar.component.mjs +68 -0
- package/esm2022/lib/figma/geo-table/geo-table.component.mjs +381 -0
- package/esm2022/lib/figma/geo-table/geo-table.types.mjs +4 -0
- package/esm2022/lib/figma/geo-tabs/geo-tabs.component.mjs +94 -0
- package/esm2022/lib/figma/geo-tabs/geo-tabs.types.mjs +2 -0
- package/esm2022/lib/figma/geo-textarea/geo-textarea.component.mjs +85 -0
- package/esm2022/lib/figma/geo-toast/geo-toast.component.mjs +57 -0
- package/esm2022/lib/figma/geo-toast/geo-toast.service.mjs +116 -0
- package/esm2022/lib/figma/geo-toast/geo-toast.types.mjs +13 -0
- package/esm2022/lib/figma/geo-tree/geo-tree.component.mjs +52 -0
- package/esm2022/lib/figma/geo-tree/geo-tree.types.mjs +2 -0
- package/esm2022/lib/figma/geo-typography/geo-typography.component.mjs +112 -0
- package/esm2022/lib/figma/geo-typography/geo-typography.types.mjs +96 -0
- package/esm2022/lib/figma/geo-upload/geo-upload.component.mjs +218 -0
- package/esm2022/lib/figma/geo-upload/geo-upload.types.mjs +30 -0
- package/esm2022/lib/figma/index.mjs +56 -0
- package/esm2022/lib/ng-zorro/ng-zorro-antd.module.mjs +293 -0
- package/esm2022/lib/styles/tokens.mjs +144 -0
- package/esm2022/public-api.mjs +7 -0
- package/fesm2022/geoit-ui.mjs +3805 -0
- package/fesm2022/geoit-ui.mjs.map +1 -0
- package/index.d.ts +5 -0
- package/lib/figma/geo-alert/geo-alert.component.d.ts +17 -0
- package/lib/figma/geo-alert/geo-alert.types.d.ts +2 -0
- package/lib/figma/geo-back-button/geo-back-button.component.d.ts +18 -0
- package/lib/figma/geo-breadcrumb/geo-breadcrumb.component.d.ts +12 -0
- package/lib/figma/geo-breadcrumb/geo-breadcrumb.types.d.ts +10 -0
- package/lib/figma/geo-button/geo-button.component.d.ts +27 -0
- package/lib/figma/geo-button/geo-button.types.d.ts +4 -0
- package/lib/figma/geo-checkbox/geo-checkbox.component.d.ts +12 -0
- package/lib/figma/geo-confirm-modal/geo-confirm-modal.component.d.ts +24 -0
- package/lib/figma/geo-confirm-modal/geo-confirm-modal.types.d.ts +5 -0
- package/lib/figma/geo-date-picker/geo-date-picker.component.d.ts +35 -0
- package/lib/figma/geo-date-picker/geo-date-picker.types.d.ts +2 -0
- package/lib/figma/geo-date-range-picker/geo-date-range-picker.component.d.ts +34 -0
- package/lib/figma/geo-date-range-picker/geo-date-range-picker.types.d.ts +2 -0
- package/lib/figma/geo-file-picker/geo-file-picker.component.d.ts +39 -0
- package/lib/figma/geo-file-picker/geo-file-picker.types.d.ts +4 -0
- package/lib/figma/geo-form-modal/geo-form-modal.component.d.ts +57 -0
- package/lib/figma/geo-icon/geo-icon.component.d.ts +19 -0
- package/lib/figma/geo-icon/geo-icon.types.d.ts +3 -0
- package/lib/figma/geo-input/geo-input.component.d.ts +37 -0
- package/lib/figma/geo-page-title/geo-page-title.component.d.ts +22 -0
- package/lib/figma/geo-pagination/geo-pagination.component.d.ts +21 -0
- package/lib/figma/geo-radio/geo-radio.component.d.ts +31 -0
- package/lib/figma/geo-radio/geo-radio.types.d.ts +9 -0
- package/lib/figma/geo-select/geo-select.component.d.ts +33 -0
- package/lib/figma/geo-select/geo-select.types.d.ts +7 -0
- package/lib/figma/geo-slider/geo-slider.component.d.ts +17 -0
- package/lib/figma/geo-status-tag/geo-status-tag.component.d.ts +18 -0
- package/lib/figma/geo-status-tag/geo-status-tag.types.d.ts +13 -0
- package/lib/figma/geo-step-form-layout/geo-step-form-layout.component.d.ts +67 -0
- package/lib/figma/geo-step-form-layout/geo-step-form-layout.types.d.ts +9 -0
- package/lib/figma/geo-stepper/geo-stepper.component.d.ts +42 -0
- package/lib/figma/geo-stepper/geo-stepper.types.d.ts +9 -0
- package/lib/figma/geo-table/geo-column-picker/geo-column-picker.component.d.ts +20 -0
- package/lib/figma/geo-table/geo-column-picker/geo-column-picker.storage.d.ts +5 -0
- package/lib/figma/geo-table/geo-column-picker/geo-column-picker.types.d.ts +17 -0
- package/lib/figma/geo-table/geo-row-actions/geo-row-actions.component.d.ts +21 -0
- package/lib/figma/geo-table/geo-row-actions/geo-row-actions.types.d.ts +13 -0
- package/lib/figma/geo-table/geo-table-filter/geo-table-filter.component.d.ts +75 -0
- package/lib/figma/geo-table/geo-table-pagination/geo-table-pagination.component.d.ts +33 -0
- package/lib/figma/geo-table/geo-table-toolbar/geo-table-toolbar.component.d.ts +24 -0
- package/lib/figma/geo-table/geo-table.component.d.ts +113 -0
- package/lib/figma/geo-table/geo-table.types.d.ts +47 -0
- package/lib/figma/geo-tabs/geo-tabs.component.d.ts +31 -0
- package/lib/figma/geo-tabs/geo-tabs.types.d.ts +7 -0
- package/lib/figma/geo-textarea/geo-textarea.component.d.ts +27 -0
- package/lib/figma/geo-toast/geo-toast.component.d.ts +23 -0
- package/lib/figma/geo-toast/geo-toast.service.d.ts +33 -0
- package/lib/figma/geo-toast/geo-toast.types.d.ts +45 -0
- package/lib/figma/geo-tree/geo-tree.component.d.ts +23 -0
- package/lib/figma/geo-tree/geo-tree.types.d.ts +12 -0
- package/lib/figma/geo-typography/geo-typography.component.d.ts +35 -0
- package/lib/figma/geo-typography/geo-typography.types.d.ts +12 -0
- package/lib/figma/geo-upload/geo-upload.component.d.ts +59 -0
- package/lib/figma/geo-upload/geo-upload.types.d.ts +13 -0
- package/lib/figma/index.d.ts +55 -0
- package/lib/ng-zorro/ng-zorro-antd.module.d.ts +76 -0
- package/lib/styles/tokens.d.ts +184 -0
- package/package.json +38 -0
- package/public-api.d.ts +3 -0
- package/src/lib/styles/design-tokens.scss +143 -0
- package/src/lib/styles/geo-toast-notification.scss +129 -0
- package/src/lib/styles/scrollbar.scss +38 -0
- package/src/lib/styles/theme.scss +153 -0
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import { EventEmitter } from '@angular/core';
|
|
2
|
+
import { GeoStepperStep } from '../geo-stepper/geo-stepper.types';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
/**
|
|
5
|
+
* Layout form page multi-step: cột trái stepper + cột phải form card.
|
|
6
|
+
*
|
|
7
|
+
* ```html
|
|
8
|
+
* <geo-step-form-layout
|
|
9
|
+
* title="Thêm mới ..."
|
|
10
|
+
* [steps]="steps"
|
|
11
|
+
* [activeIndex]="activeIndex"
|
|
12
|
+
* [showScrollButtons]="true"
|
|
13
|
+
* (cancel)="onCancel()"
|
|
14
|
+
* (save)="onSave()"
|
|
15
|
+
* (next)="onNext()"
|
|
16
|
+
* >
|
|
17
|
+
* <form>...</form>
|
|
18
|
+
* </geo-step-form-layout>
|
|
19
|
+
* ```
|
|
20
|
+
*/
|
|
21
|
+
export declare class GeoStepFormLayoutComponent {
|
|
22
|
+
steps: GeoStepperStep[];
|
|
23
|
+
activeIndex: number;
|
|
24
|
+
title: string;
|
|
25
|
+
clickableSteps: boolean;
|
|
26
|
+
/** Hiện nút ↑/↓ góc phải card (chuyển bước). Mặc định `true`. */
|
|
27
|
+
showScrollButtons: boolean;
|
|
28
|
+
showCancel: boolean;
|
|
29
|
+
showPrevious: boolean;
|
|
30
|
+
showSave: boolean;
|
|
31
|
+
showNext: boolean;
|
|
32
|
+
cancelLabel: string;
|
|
33
|
+
previousLabel: string;
|
|
34
|
+
saveLabel: string;
|
|
35
|
+
nextLabel: string;
|
|
36
|
+
finishLabel: string;
|
|
37
|
+
saveLoading: boolean;
|
|
38
|
+
nextLoading: boolean;
|
|
39
|
+
/** Ẩn footer actions (dùng slot `[footer]` hoặc không cần nút). */
|
|
40
|
+
hideDefaultFooter: boolean;
|
|
41
|
+
activeIndexChange: EventEmitter<number>;
|
|
42
|
+
stepSelect: EventEmitter<{
|
|
43
|
+
index: number;
|
|
44
|
+
step: GeoStepperStep;
|
|
45
|
+
}>;
|
|
46
|
+
cancel: EventEmitter<void>;
|
|
47
|
+
previous: EventEmitter<void>;
|
|
48
|
+
save: EventEmitter<void>;
|
|
49
|
+
next: EventEmitter<void>;
|
|
50
|
+
get isLastStep(): boolean;
|
|
51
|
+
get canGoPreviousStep(): boolean;
|
|
52
|
+
get canGoNextStep(): boolean;
|
|
53
|
+
get resolvedNextLabel(): string;
|
|
54
|
+
onActiveIndexChange(index: number): void;
|
|
55
|
+
onStepSelect(event: {
|
|
56
|
+
index: number;
|
|
57
|
+
step: GeoStepperStep;
|
|
58
|
+
}): void;
|
|
59
|
+
onCancel(): void;
|
|
60
|
+
onPrevious(): void;
|
|
61
|
+
onSave(): void;
|
|
62
|
+
onNext(): void;
|
|
63
|
+
goAdjacentStep(direction: 'up' | 'down'): void;
|
|
64
|
+
private findAdjacentStepIndex;
|
|
65
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<GeoStepFormLayoutComponent, never>;
|
|
66
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<GeoStepFormLayoutComponent, "geo-step-form-layout", never, { "steps": { "alias": "steps"; "required": false; }; "activeIndex": { "alias": "activeIndex"; "required": false; }; "title": { "alias": "title"; "required": false; }; "clickableSteps": { "alias": "clickableSteps"; "required": false; }; "showScrollButtons": { "alias": "showScrollButtons"; "required": false; }; "showCancel": { "alias": "showCancel"; "required": false; }; "showPrevious": { "alias": "showPrevious"; "required": false; }; "showSave": { "alias": "showSave"; "required": false; }; "showNext": { "alias": "showNext"; "required": false; }; "cancelLabel": { "alias": "cancelLabel"; "required": false; }; "previousLabel": { "alias": "previousLabel"; "required": false; }; "saveLabel": { "alias": "saveLabel"; "required": false; }; "nextLabel": { "alias": "nextLabel"; "required": false; }; "finishLabel": { "alias": "finishLabel"; "required": false; }; "saveLoading": { "alias": "saveLoading"; "required": false; }; "nextLoading": { "alias": "nextLoading"; "required": false; }; "hideDefaultFooter": { "alias": "hideDefaultFooter"; "required": false; }; }, { "activeIndexChange": "activeIndexChange"; "stepSelect": "stepSelect"; "cancel": "cancel"; "previous": "previous"; "save": "save"; "next": "next"; }, never, ["[sidebarExtra]", "*", "[footer]", "[footer]"], true, never>;
|
|
67
|
+
}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { EventEmitter } from '@angular/core';
|
|
2
|
+
import { GeoStepperOrientation, GeoStepperStep } from './geo-stepper.types';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
/**
|
|
5
|
+
* Steps / Stepper GEO — horizontal (mặc định) hoặc vertical.
|
|
6
|
+
*
|
|
7
|
+
* Custom qua `steps`, `activeIndex`, `orientation`, `clickable`.
|
|
8
|
+
* Trong form modal: đặt `<geo-stepper>` vào body (content projection).
|
|
9
|
+
*
|
|
10
|
+
* @example
|
|
11
|
+
* ```html
|
|
12
|
+
* <geo-stepper
|
|
13
|
+
* [steps]="[
|
|
14
|
+
* { key: 'a', label: 'Bước 1' },
|
|
15
|
+
* { key: 'b', label: 'Bước 2' }
|
|
16
|
+
* ]"
|
|
17
|
+
* [activeIndex]="0"
|
|
18
|
+
* orientation="horizontal"
|
|
19
|
+
* (activeIndexChange)="onStep($event)"
|
|
20
|
+
* ></geo-stepper>
|
|
21
|
+
* ```
|
|
22
|
+
*/
|
|
23
|
+
export declare class GeoStepperComponent {
|
|
24
|
+
steps: GeoStepperStep[];
|
|
25
|
+
activeIndex: number;
|
|
26
|
+
/** Mặc định horizontal theo design form modal. */
|
|
27
|
+
orientation: GeoStepperOrientation;
|
|
28
|
+
/** Cho phép click để đổi bước. */
|
|
29
|
+
clickable: boolean;
|
|
30
|
+
activeIndexChange: EventEmitter<number>;
|
|
31
|
+
stepSelect: EventEmitter<{
|
|
32
|
+
index: number;
|
|
33
|
+
step: GeoStepperStep;
|
|
34
|
+
}>;
|
|
35
|
+
trackByIndex(index: number): number;
|
|
36
|
+
isActive(index: number): boolean;
|
|
37
|
+
isCompleted(index: number): boolean;
|
|
38
|
+
isPending(index: number): boolean;
|
|
39
|
+
onSelect(index: number, step: GeoStepperStep): void;
|
|
40
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<GeoStepperComponent, never>;
|
|
41
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<GeoStepperComponent, "geo-stepper", never, { "steps": { "alias": "steps"; "required": false; }; "activeIndex": { "alias": "activeIndex"; "required": false; }; "orientation": { "alias": "orientation"; "required": false; }; "clickable": { "alias": "clickable"; "required": false; }; }, { "activeIndexChange": "activeIndexChange"; "stepSelect": "stepSelect"; }, never, never, true, never>;
|
|
42
|
+
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export interface GeoStepperStep {
|
|
2
|
+
/** Unique key (optional). */
|
|
3
|
+
key?: string;
|
|
4
|
+
/** Label hiển thị bên cạnh số bước. */
|
|
5
|
+
label: string;
|
|
6
|
+
/** Disable click chọn bước. */
|
|
7
|
+
disabled?: boolean;
|
|
8
|
+
}
|
|
9
|
+
export type GeoStepperOrientation = 'vertical' | 'horizontal';
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { EventEmitter } from '@angular/core';
|
|
2
|
+
import { GeoColumnPickerApplyPayload, GeoColumnPickerItem } from './geo-column-picker.types';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
export declare class GeoColumnPickerComponent {
|
|
5
|
+
triggerLabel: string;
|
|
6
|
+
hint: string;
|
|
7
|
+
items: GeoColumnPickerItem[];
|
|
8
|
+
/** Lưu trạng thái ẩn/hiện cột theo session khi người dùng áp dụng */
|
|
9
|
+
storageKey?: string;
|
|
10
|
+
apply: EventEmitter<GeoColumnPickerApplyPayload>;
|
|
11
|
+
dropdownVisible: boolean;
|
|
12
|
+
draftItems: GeoColumnPickerItem[];
|
|
13
|
+
onDropdownVisibleChange(visible: boolean): void;
|
|
14
|
+
onItemChange(key: string, visible: boolean): void;
|
|
15
|
+
onApply(): void;
|
|
16
|
+
onReset(): void;
|
|
17
|
+
private syncDraft;
|
|
18
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<GeoColumnPickerComponent, never>;
|
|
19
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<GeoColumnPickerComponent, "geo-column-picker", never, { "triggerLabel": { "alias": "triggerLabel"; "required": false; }; "hint": { "alias": "hint"; "required": false; }; "items": { "alias": "items"; "required": false; }; "storageKey": { "alias": "storageKey"; "required": false; }; }, { "apply": "apply"; }, never, never, true, never>;
|
|
20
|
+
}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { GeoColumnPickerApplyPayload, GeoColumnPickerItem } from './geo-column-picker.types';
|
|
2
|
+
export declare function loadColumnPickerState(key: string): GeoColumnPickerApplyPayload | null;
|
|
3
|
+
export declare function saveColumnPickerState(key: string, payload: GeoColumnPickerApplyPayload): void;
|
|
4
|
+
export declare function applyColumnPickerState(items: GeoColumnPickerItem[], state: GeoColumnPickerApplyPayload): GeoColumnPickerItem[];
|
|
5
|
+
export declare function mergeColumnPickerItems(items: GeoColumnPickerItem[], key?: string): GeoColumnPickerItem[];
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/** @deprecated Không còn dùng — giữ để tương thích storage/payload cũ. */
|
|
2
|
+
export type GeoColumnPinSide = 'left' | 'right';
|
|
3
|
+
export interface GeoColumnPickerItem {
|
|
4
|
+
key: string;
|
|
5
|
+
title: string;
|
|
6
|
+
visible: boolean;
|
|
7
|
+
locked?: boolean;
|
|
8
|
+
/** @deprecated Không còn UI ghim/di chuyển cột. */
|
|
9
|
+
pinnable?: boolean;
|
|
10
|
+
/** @deprecated Không còn UI ghim/di chuyển cột. */
|
|
11
|
+
pinned?: GeoColumnPinSide | null;
|
|
12
|
+
}
|
|
13
|
+
export interface GeoColumnPickerApplyPayload {
|
|
14
|
+
visibility: Record<string, boolean>;
|
|
15
|
+
/** @deprecated Luôn `{}` từ picker mới — giữ field để tương thích. */
|
|
16
|
+
pinned: Record<string, GeoColumnPinSide | null>;
|
|
17
|
+
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { EventEmitter } from '@angular/core';
|
|
2
|
+
import { GeoRowAction } from './geo-row-actions.types';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
export declare class GeoRowActionsComponent {
|
|
5
|
+
actions: GeoRowAction[] | null;
|
|
6
|
+
/** Action ưu tiên hiển thị khi có > 2 thao tác (mặc định: edit) */
|
|
7
|
+
primaryActionKey: string;
|
|
8
|
+
actionClick: EventEmitter<string>;
|
|
9
|
+
/** @deprecated Dùng `actionClick` với key `edit` */
|
|
10
|
+
edit: EventEmitter<void>;
|
|
11
|
+
/** @deprecated Dùng `actionClick` với key `more` */
|
|
12
|
+
more: EventEmitter<void>;
|
|
13
|
+
get resolvedActions(): GeoRowAction[];
|
|
14
|
+
get enabledActions(): GeoRowAction[];
|
|
15
|
+
get inlineActions(): GeoRowAction[];
|
|
16
|
+
get overflowActions(): GeoRowAction[];
|
|
17
|
+
get hasOverflow(): boolean;
|
|
18
|
+
onActionClick(event: Event, action: GeoRowAction): void;
|
|
19
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<GeoRowActionsComponent, never>;
|
|
20
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<GeoRowActionsComponent, "geo-row-actions", never, { "actions": { "alias": "actions"; "required": false; }; "primaryActionKey": { "alias": "primaryActionKey"; "required": false; }; }, { "actionClick": "actionClick"; "edit": "edit"; "more": "more"; }, never, never, true, never>;
|
|
21
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export interface GeoRowAction {
|
|
2
|
+
key: string;
|
|
3
|
+
icon: string;
|
|
4
|
+
label?: string;
|
|
5
|
+
title?: string;
|
|
6
|
+
iconTheme?: 'outline' | 'fill' | 'twotone';
|
|
7
|
+
disabled?: boolean;
|
|
8
|
+
danger?: boolean;
|
|
9
|
+
}
|
|
10
|
+
export declare const DEFAULT_UI_ROW_ACTIONS: GeoRowAction[];
|
|
11
|
+
/** ≤2: hiện hết; >2: primary + danger (vd. Sửa + Xóa), còn lại vào menu. */
|
|
12
|
+
export declare function pickInlineRowActions(actions: GeoRowAction[], primaryActionKey?: string): GeoRowAction[];
|
|
13
|
+
export declare function pickOverflowRowActions(actions: GeoRowAction[], primaryActionKey?: string): GeoRowAction[];
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
import { AfterViewInit, EventEmitter, OnChanges, OnDestroy, SimpleChanges } from '@angular/core';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
/**
|
|
4
|
+
* Thanh lọc phía trên bảng: field chính + actions (Tìm kiếm / Bộ lọc nâng cao / Reset).
|
|
5
|
+
*
|
|
6
|
+
* ## Số cột hiển thị
|
|
7
|
+
* - `[columns]="4"` — 4 cột field + 1 cột actions = grid 5 cột đều.
|
|
8
|
+
* - `[responsiveColumns]="false"` — giữ đúng `columns`, không giảm theo breakpoint.
|
|
9
|
+
*
|
|
10
|
+
* ## Layout
|
|
11
|
+
* - Grid đều `columns + 1`: field cột 1..N, actions cột cuối.
|
|
12
|
+
* - Advanced span full width (`1 / -1`) với cùng `columns + 1` cột → phủ cả cột button.
|
|
13
|
+
* - Stacked (màn hẹp): actions → fields → advanced.
|
|
14
|
+
*
|
|
15
|
+
* ## Content projection
|
|
16
|
+
* - Default: luôn hiện. Slot `[advanced]`: chỉ hiện khi `advancedExpanded`.
|
|
17
|
+
*/
|
|
18
|
+
export declare class GeoTableFilterComponent implements AfterViewInit, OnChanges, OnDestroy {
|
|
19
|
+
private readonly host;
|
|
20
|
+
private readonly ngZone;
|
|
21
|
+
private readonly cdr;
|
|
22
|
+
/**
|
|
23
|
+
* Số cột field mỗi hàng (mặc định 4 → tổng 5 cột gồm actions).
|
|
24
|
+
* Ví dụ: 4 field + columns=2 → 2 hàng × 2 cột field (+ 1 cột actions).
|
|
25
|
+
*/
|
|
26
|
+
columns: number;
|
|
27
|
+
/**
|
|
28
|
+
* Khi `true` (mặc định): số cột thực tế ≤ `columns` theo breakpoint.
|
|
29
|
+
* Khi `false`: luôn dùng đúng `columns`.
|
|
30
|
+
*/
|
|
31
|
+
responsiveColumns: boolean;
|
|
32
|
+
/** Đưa actions lên hàng đầu khi màn hẹp (stacked). */
|
|
33
|
+
responsiveCollapse: boolean;
|
|
34
|
+
/** Breakpoint chuyển layout stacked (px). */
|
|
35
|
+
mobileBreakpoint: number;
|
|
36
|
+
/** Khoảng cách grid (px). */
|
|
37
|
+
gap: number;
|
|
38
|
+
searchLabel: string;
|
|
39
|
+
searchLoading: boolean;
|
|
40
|
+
/** Hiện nút mở/đóng slot `[advanced]`. */
|
|
41
|
+
showAdvancedToggle: boolean;
|
|
42
|
+
showReset: boolean;
|
|
43
|
+
/** Mở panel field nâng cao (`[advanced]`). */
|
|
44
|
+
advancedExpanded: boolean;
|
|
45
|
+
/**
|
|
46
|
+
* Số field advanced đang có giá trị — hiện badge trên nút expand.
|
|
47
|
+
* Parent tự tính (vd. `countFilledFilters(query, ADVANCED_KEYS)`).
|
|
48
|
+
*/
|
|
49
|
+
advancedFilterCount: number;
|
|
50
|
+
filterToggleTitle: string;
|
|
51
|
+
resetTitle: string;
|
|
52
|
+
search: EventEmitter<void>;
|
|
53
|
+
reset: EventEmitter<void>;
|
|
54
|
+
advancedExpandedChange: EventEmitter<boolean>;
|
|
55
|
+
effectiveCols: number;
|
|
56
|
+
stackedLayout: boolean;
|
|
57
|
+
private resizeObserver?;
|
|
58
|
+
private layoutFrame?;
|
|
59
|
+
get hostColumns(): number;
|
|
60
|
+
/** Tổng cột grid = field cols + 1 cột actions. */
|
|
61
|
+
get hostTotalColumns(): number;
|
|
62
|
+
get hostGap(): number;
|
|
63
|
+
get stackedLayoutClass(): boolean;
|
|
64
|
+
ngOnChanges(changes: SimpleChanges): void;
|
|
65
|
+
ngAfterViewInit(): void;
|
|
66
|
+
ngOnDestroy(): void;
|
|
67
|
+
toggleAdvanced(): void;
|
|
68
|
+
onSearch(): void;
|
|
69
|
+
onReset(): void;
|
|
70
|
+
private scheduleLayout;
|
|
71
|
+
private updateResponsiveLayout;
|
|
72
|
+
private getEffectiveCols;
|
|
73
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<GeoTableFilterComponent, never>;
|
|
74
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<GeoTableFilterComponent, "geo-table-filter", never, { "columns": { "alias": "columns"; "required": false; }; "responsiveColumns": { "alias": "responsiveColumns"; "required": false; }; "responsiveCollapse": { "alias": "responsiveCollapse"; "required": false; }; "mobileBreakpoint": { "alias": "mobileBreakpoint"; "required": false; }; "gap": { "alias": "gap"; "required": false; }; "searchLabel": { "alias": "searchLabel"; "required": false; }; "searchLoading": { "alias": "searchLoading"; "required": false; }; "showAdvancedToggle": { "alias": "showAdvancedToggle"; "required": false; }; "showReset": { "alias": "showReset"; "required": false; }; "advancedExpanded": { "alias": "advancedExpanded"; "required": false; }; "advancedFilterCount": { "alias": "advancedFilterCount"; "required": false; }; "filterToggleTitle": { "alias": "filterToggleTitle"; "required": false; }; "resetTitle": { "alias": "resetTitle"; "required": false; }; }, { "search": "search"; "reset": "reset"; "advancedExpandedChange": "advancedExpandedChange"; }, never, ["*", "[advanced]"], true, never>;
|
|
75
|
+
}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { EventEmitter } from '@angular/core';
|
|
2
|
+
import { GeoSelectOption } from '../../geo-select/geo-select.types';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
export type GeoTablePaginationPageItem = number | 'ellipsis';
|
|
5
|
+
export declare class GeoTablePaginationComponent {
|
|
6
|
+
pageIndex: number;
|
|
7
|
+
pageSize: number;
|
|
8
|
+
total: number;
|
|
9
|
+
pageSizeOptions: number[];
|
|
10
|
+
showSizeChanger: boolean;
|
|
11
|
+
hideOnSinglePage: boolean;
|
|
12
|
+
showTotalRange: boolean;
|
|
13
|
+
sizeLabel: string;
|
|
14
|
+
pageIndexChange: EventEmitter<number>;
|
|
15
|
+
pageSizeChange: EventEmitter<number>;
|
|
16
|
+
get rangeStart(): number;
|
|
17
|
+
get rangeEnd(): number;
|
|
18
|
+
get totalPages(): number;
|
|
19
|
+
get sizeOptions(): GeoSelectOption<number>[];
|
|
20
|
+
get visible(): boolean;
|
|
21
|
+
get pages(): GeoTablePaginationPageItem[];
|
|
22
|
+
get isFirstPage(): boolean;
|
|
23
|
+
get isLastPage(): boolean;
|
|
24
|
+
onPageSizeChange(value: string | number | Array<string | number> | null): void;
|
|
25
|
+
goToFirst(): void;
|
|
26
|
+
goToPrev(): void;
|
|
27
|
+
goToNext(): void;
|
|
28
|
+
goToLast(): void;
|
|
29
|
+
goToPage(page: number): void;
|
|
30
|
+
private buildPageList;
|
|
31
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<GeoTablePaginationComponent, never>;
|
|
32
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<GeoTablePaginationComponent, "geo-table-pagination", never, { "pageIndex": { "alias": "pageIndex"; "required": false; }; "pageSize": { "alias": "pageSize"; "required": false; }; "total": { "alias": "total"; "required": false; }; "pageSizeOptions": { "alias": "pageSizeOptions"; "required": false; }; "showSizeChanger": { "alias": "showSizeChanger"; "required": false; }; "hideOnSinglePage": { "alias": "hideOnSinglePage"; "required": false; }; "showTotalRange": { "alias": "showTotalRange"; "required": false; }; "sizeLabel": { "alias": "sizeLabel"; "required": false; }; }, { "pageIndexChange": "pageIndexChange"; "pageSizeChange": "pageSizeChange"; }, never, never, true, never>;
|
|
33
|
+
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { EventEmitter } from '@angular/core';
|
|
2
|
+
import { GeoColumnPickerApplyPayload, GeoColumnPickerItem } from '../geo-column-picker/geo-column-picker.types';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
export declare class GeoTableToolbarComponent {
|
|
5
|
+
resultLabel: string;
|
|
6
|
+
resultCount: number | null;
|
|
7
|
+
selectedCount: number;
|
|
8
|
+
showDelete: boolean;
|
|
9
|
+
showExport: boolean;
|
|
10
|
+
showColumnToggle: boolean;
|
|
11
|
+
showAdd: boolean;
|
|
12
|
+
addLabel: string;
|
|
13
|
+
columnItems: GeoColumnPickerItem[];
|
|
14
|
+
/** Key lưu trạng thái ẩn/hiện cột trong sessionStorage */
|
|
15
|
+
columnStorageKey?: string;
|
|
16
|
+
deleteClick: EventEmitter<void>;
|
|
17
|
+
exportClick: EventEmitter<void>;
|
|
18
|
+
toggleColumns: EventEmitter<void>;
|
|
19
|
+
columnApply: EventEmitter<GeoColumnPickerApplyPayload>;
|
|
20
|
+
addClick: EventEmitter<void>;
|
|
21
|
+
get displayResultLabel(): string;
|
|
22
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<GeoTableToolbarComponent, never>;
|
|
23
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<GeoTableToolbarComponent, "geo-table-toolbar", never, { "resultLabel": { "alias": "resultLabel"; "required": false; }; "resultCount": { "alias": "resultCount"; "required": false; }; "selectedCount": { "alias": "selectedCount"; "required": false; }; "showDelete": { "alias": "showDelete"; "required": false; }; "showExport": { "alias": "showExport"; "required": false; }; "showColumnToggle": { "alias": "showColumnToggle"; "required": false; }; "showAdd": { "alias": "showAdd"; "required": false; }; "addLabel": { "alias": "addLabel"; "required": false; }; "columnItems": { "alias": "columnItems"; "required": false; }; "columnStorageKey": { "alias": "columnStorageKey"; "required": false; }; }, { "deleteClick": "deleteClick"; "exportClick": "exportClick"; "toggleColumns": "toggleColumns"; "columnApply": "columnApply"; "addClick": "addClick"; }, never, never, true, never>;
|
|
24
|
+
}
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
import { EventEmitter, OnChanges, SimpleChanges } from '@angular/core';
|
|
2
|
+
import { NzTableQueryParams, NzTableSize } from 'ng-zorro-antd/table';
|
|
3
|
+
import { type GeoRowAction } from './geo-row-actions/geo-row-actions.types';
|
|
4
|
+
import { GeoTableColumn, GeoTablePaginationPosition } from './geo-table.types';
|
|
5
|
+
import * as i0 from "@angular/core";
|
|
6
|
+
export declare class GeoTableComponent implements OnChanges {
|
|
7
|
+
columns: GeoTableColumn[];
|
|
8
|
+
data: Record<string, unknown>[];
|
|
9
|
+
loading: boolean;
|
|
10
|
+
bordered: boolean;
|
|
11
|
+
outerBordered: boolean;
|
|
12
|
+
size: NzTableSize;
|
|
13
|
+
striped: boolean;
|
|
14
|
+
clickable: boolean;
|
|
15
|
+
tableLayout: 'auto' | 'fixed';
|
|
16
|
+
showPagination: boolean;
|
|
17
|
+
frontPagination: boolean;
|
|
18
|
+
pageIndex: number;
|
|
19
|
+
pageSize: number;
|
|
20
|
+
total?: number;
|
|
21
|
+
pageSizeOptions: number[];
|
|
22
|
+
showSizeChanger: boolean;
|
|
23
|
+
showQuickJumper: boolean;
|
|
24
|
+
hideOnSinglePage: boolean;
|
|
25
|
+
simplePagination: boolean;
|
|
26
|
+
paginationPosition: GeoTablePaginationPosition;
|
|
27
|
+
scroll: {
|
|
28
|
+
x?: string;
|
|
29
|
+
y?: string;
|
|
30
|
+
};
|
|
31
|
+
scrollY?: string;
|
|
32
|
+
/**
|
|
33
|
+
* Tự bật scroll ngang theo tổng width cột.
|
|
34
|
+
* Khi có cột `fixed`, scroll.x luôn được tính (bắt buộc với nz-table fixed).
|
|
35
|
+
*/
|
|
36
|
+
autoScroll: boolean;
|
|
37
|
+
tableTitle?: string;
|
|
38
|
+
footer?: string;
|
|
39
|
+
emptyText: string;
|
|
40
|
+
showTotalRange: boolean;
|
|
41
|
+
selectable: boolean;
|
|
42
|
+
rowKey: string;
|
|
43
|
+
selectedKeys: string[];
|
|
44
|
+
/**
|
|
45
|
+
* Mobile card: key cột làm tiêu đề.
|
|
46
|
+
* Ưu tiên hơn `column.mobileTitle`; nếu không set thì lấy cột dữ liệu đầu tiên.
|
|
47
|
+
*/
|
|
48
|
+
mobileTitleKey?: string;
|
|
49
|
+
/** Bật/tắt chuyển card trên mobile (mặc định bật). */
|
|
50
|
+
mobileCardView: boolean;
|
|
51
|
+
rowClick: EventEmitter<Record<string, unknown>>;
|
|
52
|
+
rowEdit: EventEmitter<Record<string, unknown>>;
|
|
53
|
+
rowMore: EventEmitter<Record<string, unknown>>;
|
|
54
|
+
rowAction: EventEmitter<{
|
|
55
|
+
row: Record<string, unknown>;
|
|
56
|
+
action: string;
|
|
57
|
+
}>;
|
|
58
|
+
pageIndexChange: EventEmitter<number>;
|
|
59
|
+
pageSizeChange: EventEmitter<number>;
|
|
60
|
+
queryParams: EventEmitter<NzTableQueryParams>;
|
|
61
|
+
currentPageDataChange: EventEmitter<readonly Record<string, unknown>[]>;
|
|
62
|
+
selectedKeysChange: EventEmitter<string[]>;
|
|
63
|
+
selectionChange: EventEmitter<Record<string, unknown>[]>;
|
|
64
|
+
allChecked: boolean;
|
|
65
|
+
indeterminate: boolean;
|
|
66
|
+
private sortFnCache;
|
|
67
|
+
ngOnChanges(changes: SimpleChanges): void;
|
|
68
|
+
get visibleColumns(): GeoTableColumn[];
|
|
69
|
+
get computedTotal(): number;
|
|
70
|
+
get paginatedData(): Record<string, unknown>[];
|
|
71
|
+
get shouldShowPagination(): boolean;
|
|
72
|
+
get hasFixedColumns(): boolean;
|
|
73
|
+
/** Có cột fixed → table-layout fixed để header/body cùng width cột. */
|
|
74
|
+
get computedTableLayout(): 'auto' | 'fixed';
|
|
75
|
+
/** Đồng bộ width cột khi scrollY tách header/body thành 2 bảng. */
|
|
76
|
+
get widthConfig(): Array<string | null>;
|
|
77
|
+
get computedScroll(): {
|
|
78
|
+
x?: string;
|
|
79
|
+
y?: string;
|
|
80
|
+
};
|
|
81
|
+
get mobileTitleColumn(): GeoTableColumn | null;
|
|
82
|
+
get mobileBodyColumns(): GeoTableColumn[];
|
|
83
|
+
get mobileActionsColumn(): GeoTableColumn | null;
|
|
84
|
+
getRowActions(col: GeoTableColumn, row: Record<string, unknown>): GeoRowAction[];
|
|
85
|
+
getMobileHeaderActions(col: GeoTableColumn, row: Record<string, unknown>): GeoRowAction[];
|
|
86
|
+
getMobileFooterActions(col: GeoTableColumn, row: Record<string, unknown>): GeoRowAction[];
|
|
87
|
+
hasFilters(col: GeoTableColumn): boolean;
|
|
88
|
+
getSortFn(col: GeoTableColumn): (a: Record<string, unknown>, b: Record<string, unknown>) => number;
|
|
89
|
+
getCellValue(row: Record<string, unknown>, key: string): string;
|
|
90
|
+
/** Tiêu đề cột luôn căn giữa theo quy tắc accessibility */
|
|
91
|
+
getHeaderAlign(_col: GeoTableColumn): 'left' | 'center' | 'right';
|
|
92
|
+
/**
|
|
93
|
+
* Căn lề ô dữ liệu:
|
|
94
|
+
* - text → trái, number → phải, date → giữa
|
|
95
|
+
* - index / status / actions → giữa
|
|
96
|
+
*/
|
|
97
|
+
getCellAlign(col: GeoTableColumn): 'left' | 'center' | 'right';
|
|
98
|
+
getRowIndex(rowIndex: number): number;
|
|
99
|
+
trackRow(index: number, row: Record<string, unknown>): string;
|
|
100
|
+
isRowSelected(row: Record<string, unknown>): boolean;
|
|
101
|
+
onAllChecked(checked: boolean): void;
|
|
102
|
+
onItemChecked(row: Record<string, unknown>, checked: boolean): void;
|
|
103
|
+
onPageIndexChange(index: number): void;
|
|
104
|
+
onPageSizeChange(size: number): void;
|
|
105
|
+
onRowActionClick(row: Record<string, unknown>, actionKey: string): void;
|
|
106
|
+
onMobileCardClick(row: Record<string, unknown>, event: Event): void;
|
|
107
|
+
private computeMinTableWidth;
|
|
108
|
+
private refreshSelectionState;
|
|
109
|
+
private get selectionRows();
|
|
110
|
+
private emitSelection;
|
|
111
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<GeoTableComponent, never>;
|
|
112
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<GeoTableComponent, "geo-table", never, { "columns": { "alias": "columns"; "required": false; }; "data": { "alias": "data"; "required": false; }; "loading": { "alias": "loading"; "required": false; }; "bordered": { "alias": "bordered"; "required": false; }; "outerBordered": { "alias": "outerBordered"; "required": false; }; "size": { "alias": "size"; "required": false; }; "striped": { "alias": "striped"; "required": false; }; "clickable": { "alias": "clickable"; "required": false; }; "tableLayout": { "alias": "tableLayout"; "required": false; }; "showPagination": { "alias": "showPagination"; "required": false; }; "frontPagination": { "alias": "frontPagination"; "required": false; }; "pageIndex": { "alias": "pageIndex"; "required": false; }; "pageSize": { "alias": "pageSize"; "required": false; }; "total": { "alias": "total"; "required": false; }; "pageSizeOptions": { "alias": "pageSizeOptions"; "required": false; }; "showSizeChanger": { "alias": "showSizeChanger"; "required": false; }; "showQuickJumper": { "alias": "showQuickJumper"; "required": false; }; "hideOnSinglePage": { "alias": "hideOnSinglePage"; "required": false; }; "simplePagination": { "alias": "simplePagination"; "required": false; }; "paginationPosition": { "alias": "paginationPosition"; "required": false; }; "scroll": { "alias": "scroll"; "required": false; }; "scrollY": { "alias": "scrollY"; "required": false; }; "autoScroll": { "alias": "autoScroll"; "required": false; }; "tableTitle": { "alias": "tableTitle"; "required": false; }; "footer": { "alias": "footer"; "required": false; }; "emptyText": { "alias": "emptyText"; "required": false; }; "showTotalRange": { "alias": "showTotalRange"; "required": false; }; "selectable": { "alias": "selectable"; "required": false; }; "rowKey": { "alias": "rowKey"; "required": false; }; "selectedKeys": { "alias": "selectedKeys"; "required": false; }; "mobileTitleKey": { "alias": "mobileTitleKey"; "required": false; }; "mobileCardView": { "alias": "mobileCardView"; "required": false; }; }, { "rowClick": "rowClick"; "rowEdit": "rowEdit"; "rowMore": "rowMore"; "rowAction": "rowAction"; "pageIndexChange": "pageIndexChange"; "pageSizeChange": "pageSizeChange"; "queryParams": "queryParams"; "currentPageDataChange": "currentPageDataChange"; "selectedKeysChange": "selectedKeysChange"; "selectionChange": "selectionChange"; }, never, never, true, never>;
|
|
113
|
+
}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import type { GeoRowAction } from './geo-row-actions/geo-row-actions.types';
|
|
2
|
+
export interface GeoTableFilter {
|
|
3
|
+
text: string;
|
|
4
|
+
value: string;
|
|
5
|
+
}
|
|
6
|
+
export type GeoTableCellRender = 'text' | 'index' | 'status' | 'actions';
|
|
7
|
+
/** Quy tắc căn lề dữ liệu: text → trái, number → phải, date → giữa */
|
|
8
|
+
export type GeoTableColumnDataType = 'text' | 'number' | 'date';
|
|
9
|
+
export interface GeoTableColumn {
|
|
10
|
+
key: string;
|
|
11
|
+
title: string;
|
|
12
|
+
width?: string;
|
|
13
|
+
/** Căn lề ô dữ liệu — nếu không set sẽ suy ra từ `dataType` / `renderAs` */
|
|
14
|
+
align?: 'left' | 'center' | 'right';
|
|
15
|
+
/** Kiểu dữ liệu để áp dụng quy tắc căn lề mặc định */
|
|
16
|
+
dataType?: GeoTableColumnDataType;
|
|
17
|
+
sortable?: boolean;
|
|
18
|
+
sortOrder?: 'ascend' | 'descend' | null;
|
|
19
|
+
sortFn?: (a: Record<string, unknown>, b: Record<string, unknown>) => number;
|
|
20
|
+
filters?: GeoTableFilter[];
|
|
21
|
+
filterMultiple?: boolean;
|
|
22
|
+
fixed?: 'left' | 'right';
|
|
23
|
+
ellipsis?: boolean;
|
|
24
|
+
wrap?: boolean;
|
|
25
|
+
renderAs?: GeoTableCellRender;
|
|
26
|
+
statusLabelKey?: string;
|
|
27
|
+
actions?: GeoRowAction[];
|
|
28
|
+
/**
|
|
29
|
+
* Resolve actions theo từng dòng (vd. ẩn/hiện theo trạng thái).
|
|
30
|
+
* Nếu có thì ưu tiên hơn `actions`.
|
|
31
|
+
*/
|
|
32
|
+
resolveActions?: (row: Record<string, unknown>) => GeoRowAction[];
|
|
33
|
+
/** Action key ưu tiên hiển thị khi có > 2 thao tác (mặc định: edit) */
|
|
34
|
+
primaryActionKey?: string;
|
|
35
|
+
visible?: boolean;
|
|
36
|
+
/**
|
|
37
|
+
* Mobile card: dùng cột này làm tiêu đề card.
|
|
38
|
+
* Nếu không cột nào set, lấy cột dữ liệu đầu tiên (không phải index/actions).
|
|
39
|
+
*/
|
|
40
|
+
mobileTitle?: boolean;
|
|
41
|
+
/** Mobile card: ẩn cột khỏi body card. */
|
|
42
|
+
mobileHidden?: boolean;
|
|
43
|
+
}
|
|
44
|
+
/** Breakpoint chuyển bảng → danh sách card (khớp layout mobile). */
|
|
45
|
+
export declare const UI_TABLE_MOBILE_BREAKPOINT = 767.98;
|
|
46
|
+
export type GeoTablePaginationPosition = 'top' | 'bottom' | 'both';
|
|
47
|
+
export declare const DEFAULT_UI_TABLE_PAGE_SIZE_OPTIONS: number[];
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { EventEmitter, QueryList, TemplateRef } from '@angular/core';
|
|
2
|
+
import { GeoTabItem, GeoTabsSize, GeoTabsType } from './geo-tabs.types';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
export declare class GeoTabDirective {
|
|
5
|
+
template: TemplateRef<unknown>;
|
|
6
|
+
key: string;
|
|
7
|
+
constructor(template: TemplateRef<unknown>);
|
|
8
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<GeoTabDirective, never>;
|
|
9
|
+
static ɵdir: i0.ɵɵDirectiveDeclaration<GeoTabDirective, "[uiTab]", never, { "key": { "alias": "uiTab"; "required": false; }; }, {}, never, never, true, never>;
|
|
10
|
+
}
|
|
11
|
+
export declare class GeoTabsComponent {
|
|
12
|
+
items: GeoTabItem[];
|
|
13
|
+
type: GeoTabsType;
|
|
14
|
+
size: GeoTabsSize;
|
|
15
|
+
selectedIndex: number;
|
|
16
|
+
selectedKey?: string;
|
|
17
|
+
centered: boolean;
|
|
18
|
+
animated: boolean;
|
|
19
|
+
selectedIndexChange: EventEmitter<number>;
|
|
20
|
+
selectedKeyChange: EventEmitter<string>;
|
|
21
|
+
tabChange: EventEmitter<{
|
|
22
|
+
index: number;
|
|
23
|
+
key: string;
|
|
24
|
+
}>;
|
|
25
|
+
tabTemplates: QueryList<GeoTabDirective>;
|
|
26
|
+
get resolvedSelectedIndex(): number;
|
|
27
|
+
getTemplate(key: string): TemplateRef<unknown> | null;
|
|
28
|
+
onSelectedIndexChange(index: number): void;
|
|
29
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<GeoTabsComponent, never>;
|
|
30
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<GeoTabsComponent, "geo-tabs", never, { "items": { "alias": "items"; "required": false; }; "type": { "alias": "type"; "required": false; }; "size": { "alias": "size"; "required": false; }; "selectedIndex": { "alias": "selectedIndex"; "required": false; }; "selectedKey": { "alias": "selectedKey"; "required": false; }; "centered": { "alias": "centered"; "required": false; }; "animated": { "alias": "animated"; "required": false; }; }, { "selectedIndexChange": "selectedIndexChange"; "selectedKeyChange": "selectedKeyChange"; "tabChange": "tabChange"; }, ["tabTemplates"], never, true, never>;
|
|
31
|
+
}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { EventEmitter } from '@angular/core';
|
|
2
|
+
import { ControlValueAccessor } from '@angular/forms';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
export declare class GeoTextareaComponent implements ControlValueAccessor {
|
|
5
|
+
label: string;
|
|
6
|
+
placeholder: string;
|
|
7
|
+
rows: number;
|
|
8
|
+
disabled: boolean;
|
|
9
|
+
required: boolean;
|
|
10
|
+
error: boolean;
|
|
11
|
+
errorMessage: string;
|
|
12
|
+
maxlength?: number;
|
|
13
|
+
block: boolean;
|
|
14
|
+
valueChange: EventEmitter<string>;
|
|
15
|
+
readonly errorMessageId: string;
|
|
16
|
+
value: string;
|
|
17
|
+
private onChange;
|
|
18
|
+
private onTouched;
|
|
19
|
+
onInput(value: string): void;
|
|
20
|
+
onBlur(): void;
|
|
21
|
+
writeValue(value: string | null): void;
|
|
22
|
+
registerOnChange(fn: (value: string) => void): void;
|
|
23
|
+
registerOnTouched(fn: () => void): void;
|
|
24
|
+
setDisabledState(isDisabled: boolean): void;
|
|
25
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<GeoTextareaComponent, never>;
|
|
26
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<GeoTextareaComponent, "geo-textarea", never, { "label": { "alias": "label"; "required": false; }; "placeholder": { "alias": "placeholder"; "required": false; }; "rows": { "alias": "rows"; "required": false; }; "disabled": { "alias": "disabled"; "required": false; }; "required": { "alias": "required"; "required": false; }; "error": { "alias": "error"; "required": false; }; "errorMessage": { "alias": "errorMessage"; "required": false; }; "maxlength": { "alias": "maxlength"; "required": false; }; "block": { "alias": "block"; "required": false; }; }, { "valueChange": "valueChange"; }, never, never, true, never>;
|
|
27
|
+
}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { EventEmitter } from '@angular/core';
|
|
2
|
+
import { GeoToastType } from './geo-toast.types';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
/**
|
|
5
|
+
* Toast / notification UI theo design GEO (left accent bar + icon + title + message).
|
|
6
|
+
* Dùng trực tiếp trong template, hoặc qua `GeoToastService` (Ant Design notification).
|
|
7
|
+
*/
|
|
8
|
+
export declare class GeoToastComponent {
|
|
9
|
+
type: GeoToastType;
|
|
10
|
+
title: string;
|
|
11
|
+
message: string;
|
|
12
|
+
closable: boolean;
|
|
13
|
+
showIcon: boolean;
|
|
14
|
+
visible: boolean;
|
|
15
|
+
/** Override Ant Design icon type. */
|
|
16
|
+
icon?: string;
|
|
17
|
+
closed: EventEmitter<void>;
|
|
18
|
+
get displayTitle(): string;
|
|
19
|
+
get iconType(): string;
|
|
20
|
+
onClose(): void;
|
|
21
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<GeoToastComponent, never>;
|
|
22
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<GeoToastComponent, "geo-toast", never, { "type": { "alias": "type"; "required": false; }; "title": { "alias": "title"; "required": false; }; "message": { "alias": "message"; "required": false; }; "closable": { "alias": "closable"; "required": false; }; "showIcon": { "alias": "showIcon"; "required": false; }; "visible": { "alias": "visible"; "required": false; }; "icon": { "alias": "icon"; "required": false; }; }, { "closed": "closed"; }, never, never, true, never>;
|
|
23
|
+
}
|