@alaarab/ogrid-angular 2.0.8 → 2.0.11

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (24) hide show
  1. package/dist/esm/components/base-column-chooser.component.js +78 -0
  2. package/dist/esm/components/base-column-header-filter.component.js +266 -0
  3. package/dist/esm/components/base-datagrid-table.component.js +116 -5
  4. package/dist/esm/components/base-pagination-controls.component.js +72 -0
  5. package/dist/esm/components/empty-state.component.js +22 -10
  6. package/dist/esm/components/grid-context-menu.component.js +65 -26
  7. package/dist/esm/components/marching-ants-overlay.component.js +78 -69
  8. package/dist/esm/components/ogrid-layout.component.js +32 -18
  9. package/dist/esm/components/sidebar.component.js +45 -42
  10. package/dist/esm/components/status-bar.component.js +43 -23
  11. package/dist/esm/index.js +3 -0
  12. package/dist/esm/services/ogrid.service.js +14 -4
  13. package/dist/types/components/base-column-chooser.component.d.ts +37 -0
  14. package/dist/types/components/base-column-header-filter.component.d.ts +90 -0
  15. package/dist/types/components/base-datagrid-table.component.d.ts +19 -0
  16. package/dist/types/components/base-pagination-controls.component.d.ts +34 -0
  17. package/dist/types/components/empty-state.component.d.ts +5 -4
  18. package/dist/types/components/grid-context-menu.component.d.ts +16 -16
  19. package/dist/types/components/marching-ants-overlay.component.d.ts +14 -14
  20. package/dist/types/components/ogrid-layout.component.d.ts +5 -5
  21. package/dist/types/components/sidebar.component.d.ts +1 -1
  22. package/dist/types/components/status-bar.component.d.ts +10 -10
  23. package/dist/types/index.d.ts +5 -0
  24. package/package.json +2 -2
@@ -4,41 +4,61 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
4
4
  else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
5
  return c > 3 && r && Object.defineProperty(target, key, r), r;
6
6
  };
7
- import { Component, input } from '@angular/core';
7
+ import { Component, Input } from '@angular/core';
8
8
  import { CommonModule } from '@angular/common';
9
9
  import { getStatusBarParts } from '@alaarab/ogrid-core';
10
10
  let StatusBarComponent = class StatusBarComponent {
11
11
  constructor() {
12
- this.totalCount = input.required();
13
- this.filteredCount = input(undefined);
14
- this.selectedCount = input(undefined);
15
- this.selectedCellCount = input(undefined);
16
- this.aggregation = input(undefined);
17
- this.suppressRowCount = input(undefined);
18
- this.classNames = input(undefined);
19
- this.parts = () => {
20
- return getStatusBarParts({
21
- totalCount: this.totalCount(),
22
- filteredCount: this.filteredCount(),
23
- selectedCount: this.selectedCount(),
24
- selectedCellCount: this.selectedCellCount(),
25
- aggregation: this.aggregation() ?? undefined,
26
- suppressRowCount: this.suppressRowCount(),
27
- });
28
- };
12
+ this.filteredCount = undefined;
13
+ this.selectedCount = undefined;
14
+ this.selectedCellCount = undefined;
15
+ this.aggregation = undefined;
16
+ this.suppressRowCount = undefined;
17
+ this.classNames = undefined;
18
+ }
19
+ getParts() {
20
+ return getStatusBarParts({
21
+ totalCount: this.totalCount,
22
+ filteredCount: this.filteredCount,
23
+ selectedCount: this.selectedCount,
24
+ selectedCellCount: this.selectedCellCount,
25
+ aggregation: this.aggregation ?? undefined,
26
+ suppressRowCount: this.suppressRowCount,
27
+ });
29
28
  }
30
29
  };
30
+ __decorate([
31
+ Input({ required: true })
32
+ ], StatusBarComponent.prototype, "totalCount", void 0);
33
+ __decorate([
34
+ Input()
35
+ ], StatusBarComponent.prototype, "filteredCount", void 0);
36
+ __decorate([
37
+ Input()
38
+ ], StatusBarComponent.prototype, "selectedCount", void 0);
39
+ __decorate([
40
+ Input()
41
+ ], StatusBarComponent.prototype, "selectedCellCount", void 0);
42
+ __decorate([
43
+ Input()
44
+ ], StatusBarComponent.prototype, "aggregation", void 0);
45
+ __decorate([
46
+ Input()
47
+ ], StatusBarComponent.prototype, "suppressRowCount", void 0);
48
+ __decorate([
49
+ Input()
50
+ ], StatusBarComponent.prototype, "classNames", void 0);
31
51
  StatusBarComponent = __decorate([
32
52
  Component({
33
53
  selector: 'ogrid-status-bar',
34
54
  standalone: true,
35
55
  imports: [CommonModule],
36
56
  template: `
37
- <div [class]="classNames()?.statusBar ?? ''" role="status" aria-live="polite">
38
- @for (part of parts(); track part.key) {
39
- <span [class]="classNames()?.statusBarItem ?? ''">
40
- <span [class]="classNames()?.statusBarLabel ?? ''">{{ part.label }}</span>
41
- <span [class]="classNames()?.statusBarValue ?? ''">{{ part.value.toLocaleString() }}</span>
57
+ <div [class]="classNames?.statusBar ?? ''" role="status" aria-live="polite">
58
+ @for (part of getParts(); track part.key) {
59
+ <span [class]="classNames?.statusBarItem ?? ''">
60
+ <span [class]="classNames?.statusBarLabel ?? ''">{{ part.label }}</span>
61
+ <span [class]="classNames?.statusBarValue ?? ''">{{ part.value.toLocaleString() }}</span>
42
62
  </span>
43
63
  }
44
64
  </div>
package/dist/esm/index.js CHANGED
@@ -16,4 +16,7 @@ export { SideBarComponent } from './components/sidebar.component';
16
16
  export { MarchingAntsOverlayComponent } from './components/marching-ants-overlay.component';
17
17
  export { EmptyStateComponent } from './components/empty-state.component';
18
18
  export { BaseDataGridTableComponent } from './components/base-datagrid-table.component';
19
+ export { BaseColumnHeaderFilterComponent } from './components/base-column-header-filter.component';
20
+ export { BaseColumnChooserComponent } from './components/base-column-chooser.component';
21
+ export { BasePaginationControlsComponent } from './components/base-pagination-controls.component';
19
22
  export { getHeaderFilterConfig, getCellRenderDescriptor, resolveCellDisplayContent, resolveCellStyle, createDebouncedSignal, createDebouncedCallback, debounce, createLatestRef, createLatestCallback, } from './utils';
@@ -403,10 +403,20 @@ let OGridService = class OGridService {
403
403
  }
404
404
  handleSort(columnKey) {
405
405
  const sort = this.sort();
406
- this.setSort({
407
- field: columnKey,
408
- direction: sort.field === columnKey && sort.direction === 'asc' ? 'desc' : 'asc',
409
- });
406
+ if (sort.field === columnKey) {
407
+ // Cycle: asc → desc → clear
408
+ if (sort.direction === 'asc') {
409
+ this.setSort({ field: columnKey, direction: 'desc' });
410
+ }
411
+ else {
412
+ // Clear sort (empty field means no column is sorted)
413
+ this.setSort({ field: '', direction: 'asc' });
414
+ }
415
+ }
416
+ else {
417
+ // Start new sort
418
+ this.setSort({ field: columnKey, direction: 'asc' });
419
+ }
410
420
  }
411
421
  handleFilterChange(key, value) {
412
422
  this.setFilters(mergeFilter(this.filters(), key, value));
@@ -0,0 +1,37 @@
1
+ import { EventEmitter } from '@angular/core';
2
+ import type { IColumnDefinition } from '../types';
3
+ export interface IColumnChooserProps {
4
+ columns: IColumnDefinition[];
5
+ visibleColumns: Set<string>;
6
+ onVisibilityChange: (columnKey: string, visible: boolean) => void;
7
+ }
8
+ /**
9
+ * Abstract base class containing all shared TypeScript logic for ColumnChooser components.
10
+ * Framework-specific UI packages extend this with their templates and style overrides.
11
+ *
12
+ * Subclasses must:
13
+ * 1. Provide a @Component decorator with template and styles
14
+ * 2. Handle their own click-outside behavior (host binding or effect)
15
+ */
16
+ export declare abstract class BaseColumnChooserComponent {
17
+ private readonly _columns;
18
+ private readonly _visibleColumns;
19
+ set columns(v: IColumnDefinition[]);
20
+ get columns(): IColumnDefinition[];
21
+ set visibleColumns(v: Set<string>);
22
+ get visibleColumns(): Set<string>;
23
+ visibilityChange: EventEmitter<{
24
+ columnKey: string;
25
+ visible: boolean;
26
+ }>;
27
+ readonly isOpen: import("@angular/core").WritableSignal<boolean>;
28
+ readonly visibleCount: import("@angular/core").Signal<number>;
29
+ readonly totalCount: import("@angular/core").Signal<number>;
30
+ toggle(): void;
31
+ onCheckboxChange(columnKey: string, event: Event): void;
32
+ onToggle(columnKey: string, checked: boolean): void;
33
+ selectAll(): void;
34
+ clearAll(): void;
35
+ onClearAll(): void;
36
+ onSelectAll(): void;
37
+ }
@@ -0,0 +1,90 @@
1
+ import { ElementRef } from '@angular/core';
2
+ import type { ColumnFilterType, IDateFilterValue, UserLike } from '../types';
3
+ export interface IColumnHeaderFilterProps {
4
+ columnKey: string;
5
+ columnName: string;
6
+ filterType: ColumnFilterType;
7
+ isSorted?: boolean;
8
+ isSortedDescending?: boolean;
9
+ onSort?: () => void;
10
+ selectedValues?: string[];
11
+ onFilterChange?: (values: string[]) => void;
12
+ options?: string[];
13
+ isLoadingOptions?: boolean;
14
+ textValue?: string;
15
+ onTextChange?: (value: string) => void;
16
+ selectedUser?: UserLike;
17
+ onUserChange?: (user: UserLike | undefined) => void;
18
+ peopleSearch?: (query: string) => Promise<UserLike[]>;
19
+ dateValue?: IDateFilterValue;
20
+ onDateChange?: (value: IDateFilterValue | undefined) => void;
21
+ }
22
+ /**
23
+ * Abstract base class containing all shared TypeScript logic for ColumnHeaderFilter components.
24
+ * Framework-specific UI packages extend this with their templates and style overrides.
25
+ *
26
+ * Subclasses must:
27
+ * 1. Provide a @Component decorator with template and styles
28
+ * 2. Implement abstract accessor for headerEl (ViewChild reference)
29
+ */
30
+ export declare abstract class BaseColumnHeaderFilterComponent {
31
+ columnKey: string;
32
+ columnName: string;
33
+ private readonly _filterType;
34
+ private readonly _selectedValues;
35
+ private readonly _options;
36
+ private readonly _textValue;
37
+ private readonly _selectedUser;
38
+ private readonly _dateValue;
39
+ set filterType(v: ColumnFilterType);
40
+ get filterType(): ColumnFilterType;
41
+ set selectedValues(v: string[] | undefined);
42
+ get selectedValues(): string[] | undefined;
43
+ set options(v: string[] | undefined);
44
+ get options(): string[] | undefined;
45
+ set textValue(v: string);
46
+ get textValue(): string;
47
+ set selectedUser(v: UserLike | undefined);
48
+ get selectedUser(): UserLike | undefined;
49
+ set dateValue(v: IDateFilterValue | undefined);
50
+ get dateValue(): IDateFilterValue | undefined;
51
+ isSorted: boolean;
52
+ isSortedDescending: boolean;
53
+ onSort: (() => void) | undefined;
54
+ onFilterChange: ((values: string[]) => void) | undefined;
55
+ isLoadingOptions: boolean;
56
+ onTextChange: ((value: string) => void) | undefined;
57
+ onUserChange: ((user: UserLike | undefined) => void) | undefined;
58
+ peopleSearch: ((query: string) => Promise<UserLike[]>) | undefined;
59
+ onDateChange: ((value: IDateFilterValue | undefined) => void) | undefined;
60
+ protected abstract getHeaderEl(): ElementRef<HTMLElement> | undefined;
61
+ readonly isFilterOpen: import("@angular/core").WritableSignal<boolean>;
62
+ readonly tempTextValue: import("@angular/core").WritableSignal<string>;
63
+ readonly searchText: import("@angular/core").WritableSignal<string>;
64
+ readonly tempSelected: import("@angular/core").WritableSignal<Set<string>>;
65
+ readonly peopleSearchText: import("@angular/core").WritableSignal<string>;
66
+ readonly peopleSuggestions: import("@angular/core").WritableSignal<UserLike[]>;
67
+ readonly isPeopleLoading: import("@angular/core").WritableSignal<boolean>;
68
+ readonly tempDateFrom: import("@angular/core").WritableSignal<string>;
69
+ readonly tempDateTo: import("@angular/core").WritableSignal<string>;
70
+ readonly popoverTop: import("@angular/core").WritableSignal<number>;
71
+ readonly popoverLeft: import("@angular/core").WritableSignal<number>;
72
+ private peopleDebounceTimer;
73
+ readonly hasActiveFilter: import("@angular/core").Signal<boolean>;
74
+ readonly filteredOptions: import("@angular/core").Signal<string[]>;
75
+ asInputValue(event: Event): string;
76
+ toggleFilter(event: MouseEvent): void;
77
+ onTextKeydown(event: KeyboardEvent): void;
78
+ handleTextApply(): void;
79
+ handleTextClear(): void;
80
+ handleCheckboxChange(option: string, event: Event): void;
81
+ handleSelectAllFiltered(): void;
82
+ handleClearSelection(): void;
83
+ handleApplyMultiSelect(): void;
84
+ onPeopleSearchInput(event: Event): void;
85
+ handleUserSelect(user: UserLike): void;
86
+ handleClearUser(): void;
87
+ handleDateApply(): void;
88
+ handleDateClear(): void;
89
+ onDocumentClick(event: MouseEvent, selectorName: string): void;
90
+ }
@@ -19,12 +19,16 @@ export declare abstract class BaseDataGridTableComponent<T = unknown> {
19
19
  readonly virtualScrollService: VirtualScrollService;
20
20
  protected lastMouseShift: boolean;
21
21
  readonly columnSizingVersion: import("@angular/core").WritableSignal<number>;
22
+ protected readonly wrapperElSignal: import("@angular/core").WritableSignal<HTMLElement | null>;
23
+ protected readonly tableContainerElSignal: import("@angular/core").WritableSignal<HTMLElement | null>;
22
24
  /** Return the IOGridDataGridProps from however the subclass receives them */
23
25
  protected abstract getProps(): IOGridDataGridProps<T> | undefined;
24
26
  /** Return the wrapper element ref */
25
27
  protected abstract getWrapperRef(): ElementRef<HTMLElement> | undefined;
26
28
  /** Return the table container element ref */
27
29
  protected abstract getTableContainerRef(): ElementRef<HTMLElement> | undefined;
30
+ /** Lifecycle hook — populate element signals from @ViewChild refs */
31
+ ngAfterViewInit(): void;
28
32
  readonly state: import("@angular/core").Signal<import("../services/datagrid-state.service").DataGridStateResult<T>>;
29
33
  readonly tableContainerEl: import("@angular/core").Signal<HTMLElement | null>;
30
34
  readonly allItems: import("@angular/core").Signal<T[]>;
@@ -46,6 +50,8 @@ export declare abstract class BaseDataGridTableComponent<T = unknown> {
46
50
  readonly currentPage: import("@angular/core").Signal<number>;
47
51
  readonly pageSize: import("@angular/core").Signal<number>;
48
52
  readonly rowNumberOffset: import("@angular/core").Signal<number>;
53
+ readonly propsVisibleColumns: import("@angular/core").Signal<Set<string> | undefined>;
54
+ readonly propsColumnOrder: import("@angular/core").Signal<string[] | undefined>;
49
55
  readonly visibleCols: import("@angular/core").Signal<IColumnDef<T>[]>;
50
56
  readonly hasCheckboxCol: import("@angular/core").Signal<boolean>;
51
57
  readonly hasRowNumbersCol: import("@angular/core").Signal<boolean>;
@@ -123,6 +129,10 @@ export declare abstract class BaseDataGridTableComponent<T = unknown> {
123
129
  minWidth: number;
124
130
  width: number;
125
131
  }[]>;
132
+ readonly pinningOffsets: import("@angular/core").Signal<{
133
+ leftOffsets: Record<string, number>;
134
+ rightOffsets: Record<string, number>;
135
+ }>;
126
136
  /**
127
137
  * Initialize base wiring effects. Must be called from subclass constructor
128
138
  * (effects need to run inside an injection context).
@@ -138,6 +148,8 @@ export declare abstract class BaseDataGridTableComponent<T = unknown> {
138
148
  buildPopoverEditorProps(item: T, col: IColumnDef<T>, descriptor: CellRenderDescriptor): unknown;
139
149
  getSelectValues(col: IColumnDef<T>): string[];
140
150
  formatDateForInput(value: unknown): string;
151
+ getPinnedLeftOffset(columnId: string): number | null;
152
+ getPinnedRightOffset(columnId: string): number | null;
141
153
  onWrapperScroll(event: Event): void;
142
154
  setPopoverAnchorEl(el: HTMLElement | null): void;
143
155
  setPendingEditorValue(value: unknown): void;
@@ -173,4 +185,11 @@ export declare abstract class BaseDataGridTableComponent<T = unknown> {
173
185
  canPinRight: boolean;
174
186
  canUnpin: boolean;
175
187
  };
188
+ onSortAsc(columnId: string): void;
189
+ onSortDesc(columnId: string): void;
190
+ onClearSort(): void;
191
+ getSortState(columnId: string): 'asc' | 'desc' | null;
192
+ onAutosizeColumn(columnId: string): void;
193
+ onAutosizeAllColumns(): void;
194
+ private measureColumnContentWidth;
176
195
  }
@@ -0,0 +1,34 @@
1
+ import { EventEmitter } from '@angular/core';
2
+ /**
3
+ * Abstract base class containing all shared TypeScript logic for PaginationControls components.
4
+ * Framework-specific UI packages extend this with their templates and style overrides.
5
+ *
6
+ * Subclasses must:
7
+ * 1. Provide a @Component decorator with template and styles
8
+ *
9
+ * Uses @Input setter + signal pattern so computed() can track dependencies.
10
+ * (Plain @Input properties are NOT tracked by computed() — only signals are.)
11
+ */
12
+ export declare abstract class BasePaginationControlsComponent {
13
+ private readonly _currentPage;
14
+ private readonly _pageSize;
15
+ private readonly _totalCount;
16
+ private readonly _pageSizeOptions;
17
+ private readonly _entityLabelPlural;
18
+ set currentPage(v: number);
19
+ get currentPage(): number;
20
+ set pageSize(v: number);
21
+ get pageSize(): number;
22
+ set totalCount(v: number);
23
+ get totalCount(): number;
24
+ set pageSizeOptions(v: number[] | undefined);
25
+ get pageSizeOptions(): number[] | undefined;
26
+ set entityLabelPlural(v: string);
27
+ get entityLabelPlural(): string;
28
+ pageChange: EventEmitter<number>;
29
+ pageSizeChange: EventEmitter<number>;
30
+ readonly labelPlural: import("@angular/core").Signal<string>;
31
+ readonly vm: import("@angular/core").Signal<import("@alaarab/ogrid-core").PaginationViewModel | null>;
32
+ onPageSizeSelect(event: Event): void;
33
+ onPageSizeChange(value: string): void;
34
+ }
@@ -1,6 +1,7 @@
1
+ import { EventEmitter } from '@angular/core';
1
2
  export declare class EmptyStateComponent {
2
- readonly message: import("@angular/core").InputSignal<string | undefined>;
3
- readonly hasActiveFilters: import("@angular/core").InputSignal<boolean>;
4
- readonly render: import("@angular/core").InputSignal<unknown>;
5
- readonly clearAll: import("@angular/core").OutputEmitterRef<void>;
3
+ message: string | undefined;
4
+ hasActiveFilters: boolean;
5
+ render: unknown;
6
+ clearAll: EventEmitter<void>;
6
7
  }
@@ -1,27 +1,27 @@
1
- import { ElementRef } from '@angular/core';
1
+ import { EventEmitter, ElementRef } from '@angular/core';
2
2
  import { GRID_CONTEXT_MENU_ITEMS, formatShortcut } from '@alaarab/ogrid-core';
3
3
  export declare class GridContextMenuComponent {
4
4
  private destroyRef;
5
- readonly x: import("@angular/core").InputSignal<number>;
6
- readonly y: import("@angular/core").InputSignal<number>;
7
- readonly hasSelection: import("@angular/core").InputSignal<boolean>;
8
- readonly canUndoProp: import("@angular/core").InputSignal<boolean>;
9
- readonly canRedoProp: import("@angular/core").InputSignal<boolean>;
10
- readonly classNames: import("@angular/core").InputSignal<{
5
+ x: number;
6
+ y: number;
7
+ hasSelection: boolean;
8
+ canUndoProp: boolean;
9
+ canRedoProp: boolean;
10
+ classNames: {
11
11
  contextMenu?: string;
12
12
  contextMenuItem?: string;
13
13
  contextMenuItemLabel?: string;
14
14
  contextMenuItemShortcut?: string;
15
15
  contextMenuDivider?: string;
16
- } | undefined>;
17
- readonly copy: import("@angular/core").OutputEmitterRef<void>;
18
- readonly cut: import("@angular/core").OutputEmitterRef<void>;
19
- readonly paste: import("@angular/core").OutputEmitterRef<void>;
20
- readonly selectAll: import("@angular/core").OutputEmitterRef<void>;
21
- readonly undoAction: import("@angular/core").OutputEmitterRef<void>;
22
- readonly redoAction: import("@angular/core").OutputEmitterRef<void>;
23
- readonly close: import("@angular/core").OutputEmitterRef<void>;
24
- readonly menuRef: import("@angular/core").Signal<ElementRef<HTMLDivElement> | undefined>;
16
+ } | undefined;
17
+ copy: EventEmitter<void>;
18
+ cut: EventEmitter<void>;
19
+ paste: EventEmitter<void>;
20
+ selectAll: EventEmitter<void>;
21
+ undoAction: EventEmitter<void>;
22
+ redoAction: EventEmitter<void>;
23
+ close: EventEmitter<void>;
24
+ menuRef?: ElementRef<HTMLDivElement>;
25
25
  readonly menuItems: import("@alaarab/ogrid-core").GridContextMenuItem[];
26
26
  readonly formatShortcutFn: typeof formatShortcut;
27
27
  private clickOutsideHandler;
@@ -1,24 +1,24 @@
1
+ import { OnChanges, SimpleChanges } from '@angular/core';
1
2
  import type { ISelectionRange } from '../types';
2
- interface OverlayRect {
3
- top: number;
4
- left: number;
5
- width: number;
6
- height: number;
7
- }
8
- export declare class MarchingAntsOverlayComponent {
3
+ import { type OverlayRect } from '@alaarab/ogrid-core';
4
+ export declare class MarchingAntsOverlayComponent implements OnChanges {
9
5
  private destroyRef;
10
- readonly containerEl: import("@angular/core").InputSignal<HTMLElement | null>;
11
- readonly selectionRange: import("@angular/core").InputSignal<ISelectionRange | null>;
12
- readonly copyRange: import("@angular/core").InputSignal<ISelectionRange | null>;
13
- readonly cutRange: import("@angular/core").InputSignal<ISelectionRange | null>;
14
- readonly colOffset: import("@angular/core").InputSignal<number>;
15
- readonly columnSizingVersion: import("@angular/core").InputSignal<number>;
6
+ containerEl: HTMLElement | null;
7
+ selectionRange: ISelectionRange | null;
8
+ copyRange: ISelectionRange | null;
9
+ cutRange: ISelectionRange | null;
10
+ colOffset: number;
11
+ columnSizingVersion: number;
12
+ items: readonly unknown[];
13
+ visibleColumns: readonly string[] | undefined;
14
+ columnOrder: readonly string[] | undefined;
16
15
  readonly selRect: import("@angular/core").WritableSignal<OverlayRect | null>;
17
16
  readonly clipRect: import("@angular/core").WritableSignal<OverlayRect | null>;
18
17
  private rafId;
19
18
  private resizeObserver;
20
19
  constructor();
20
+ ngOnChanges(_changes: SimpleChanges): void;
21
+ private recalculate;
21
22
  clipRangeMatchesSel(): boolean;
22
23
  max0(n: number): number;
23
24
  }
24
- export {};
@@ -1,9 +1,9 @@
1
1
  import type { SideBarProps } from './sidebar.component';
2
2
  export declare class OGridLayoutComponent {
3
- readonly className: import("@angular/core").InputSignal<string | undefined>;
4
- readonly hasToolbar: import("@angular/core").InputSignal<boolean>;
5
- readonly hasToolbarBelow: import("@angular/core").InputSignal<boolean>;
6
- readonly hasPagination: import("@angular/core").InputSignal<boolean>;
7
- readonly sideBar: import("@angular/core").InputSignal<SideBarProps | null>;
3
+ className?: string;
4
+ hasToolbar: boolean;
5
+ hasToolbarBelow: boolean;
6
+ hasPagination: boolean;
7
+ sideBar: SideBarProps | null;
8
8
  readonly borderRadius = 6;
9
9
  }
@@ -21,7 +21,7 @@ export interface SideBarProps {
21
21
  filterOptions: Record<string, string[]>;
22
22
  }
23
23
  export declare class SideBarComponent {
24
- readonly sideBarProps: import("@angular/core").InputSignal<SideBarProps | null>;
24
+ sideBarProps: SideBarProps | null;
25
25
  readonly panelLabels: Record<SideBarPanelId, string>;
26
26
  readonly tabWidth = 36;
27
27
  readonly panelWidth = 240;
@@ -1,21 +1,21 @@
1
1
  export declare class StatusBarComponent {
2
- readonly totalCount: import("@angular/core").InputSignal<number>;
3
- readonly filteredCount: import("@angular/core").InputSignal<number | undefined>;
4
- readonly selectedCount: import("@angular/core").InputSignal<number | undefined>;
5
- readonly selectedCellCount: import("@angular/core").InputSignal<number | undefined>;
6
- readonly aggregation: import("@angular/core").InputSignal<{
2
+ totalCount: number;
3
+ filteredCount: number | undefined;
4
+ selectedCount: number | undefined;
5
+ selectedCellCount: number | undefined;
6
+ aggregation: {
7
7
  sum: number;
8
8
  avg: number;
9
9
  min: number;
10
10
  max: number;
11
11
  count: number;
12
- } | null | undefined>;
13
- readonly suppressRowCount: import("@angular/core").InputSignal<boolean | undefined>;
14
- readonly classNames: import("@angular/core").InputSignal<{
12
+ } | null | undefined;
13
+ suppressRowCount: boolean | undefined;
14
+ classNames: {
15
15
  statusBar?: string;
16
16
  statusBarItem?: string;
17
17
  statusBarLabel?: string;
18
18
  statusBarValue?: string;
19
- } | undefined>;
20
- protected readonly parts: () => import("@alaarab/ogrid-core").StatusBarPart[];
19
+ } | undefined;
20
+ getParts(): import("@alaarab/ogrid-core").StatusBarPart[];
21
21
  }
@@ -18,5 +18,10 @@ export type { SideBarProps, SideBarFilterColumn } from './components/sidebar.com
18
18
  export { MarchingAntsOverlayComponent } from './components/marching-ants-overlay.component';
19
19
  export { EmptyStateComponent } from './components/empty-state.component';
20
20
  export { BaseDataGridTableComponent } from './components/base-datagrid-table.component';
21
+ export { BaseColumnHeaderFilterComponent } from './components/base-column-header-filter.component';
22
+ export type { IColumnHeaderFilterProps } from './components/base-column-header-filter.component';
23
+ export { BaseColumnChooserComponent } from './components/base-column-chooser.component';
24
+ export type { IColumnChooserProps } from './components/base-column-chooser.component';
25
+ export { BasePaginationControlsComponent } from './components/base-pagination-controls.component';
21
26
  export type { HeaderFilterConfigInput, HeaderFilterConfig, CellRenderDescriptorInput, CellRenderDescriptor, CellRenderMode, } from './utils';
22
27
  export { getHeaderFilterConfig, getCellRenderDescriptor, resolveCellDisplayContent, resolveCellStyle, createDebouncedSignal, createDebouncedCallback, debounce, createLatestRef, createLatestCallback, } from './utils';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@alaarab/ogrid-angular",
3
- "version": "2.0.8",
3
+ "version": "2.0.11",
4
4
  "description": "OGrid Angular – Angular services, signals, and headless components for OGrid data grids.",
5
5
  "main": "dist/esm/index.js",
6
6
  "module": "dist/esm/index.js",
@@ -35,7 +35,7 @@
35
35
  "node": ">=18"
36
36
  },
37
37
  "dependencies": {
38
- "@alaarab/ogrid-core": "2.0.7"
38
+ "@alaarab/ogrid-core": "2.0.11"
39
39
  },
40
40
  "peerDependencies": {
41
41
  "@angular/core": "^21.0.0",