eru-grid 0.0.50 → 0.0.52

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "eru-grid",
3
- "version": "0.0.50",
3
+ "version": "0.0.52",
4
4
  "peerDependencies": {
5
5
  "@angular/common": "^21.1.2",
6
6
  "@angular/core": "^21.1.2",
@@ -10,6 +10,16 @@
10
10
  // Use Material's color tokens
11
11
  --grid-primary: #{mat.get-theme-color($theme, primary, 40)} !important;
12
12
  --grid-on-primary: #{mat.get-theme-color($theme, primary, 100)} !important;
13
+ --grid-primary-container: #{mat.get-theme-color($theme, primary-container)} !important;
14
+ --grid-on-primary-container: #{mat.get-theme-color($theme, on-primary-container)} !important;
15
+ --grid-secondary: #{mat.get-theme-color($theme, secondary)} !important;
16
+ --grid-on-secondary: #{mat.get-theme-color($theme, on-secondary)} !important;
17
+ --grid-secondary-container: #{mat.get-theme-color($theme, secondary-container)} !important;
18
+ --grid-on-secondary-container: #{mat.get-theme-color($theme, on-secondary-container)} !important;
19
+ --grid-tertiary: #{mat.get-theme-color($theme, tertiary)} !important;
20
+ --grid-on-tertiary: #{mat.get-theme-color($theme, on-tertiary)} !important;
21
+ --grid-tertiary-container: #{mat.get-theme-color($theme, tertiary-container)} !important;
22
+ --grid-on-tertiary-container: #{mat.get-theme-color($theme, on-tertiary-container)} !important;
13
23
  --grid-surface: #{mat.get-theme-color($theme, surface)} !important;
14
24
  --grid-surface-variant: #{mat.get-theme-color($theme, surface-variant)} !important;
15
25
  --grid-surface-container: #{mat.get-theme-color($theme, surface-container)} !important;
@@ -20,6 +30,11 @@
20
30
  --grid-outline-variant: #{mat.get-theme-color($theme, outline-variant)} !important;
21
31
  --grid-error: #{mat.get-theme-color($theme, error)} !important;
22
32
  --grid-error-container: #{mat.get-theme-color($theme, error-container)} !important;
33
+
34
+ // Base tokens — flip pure white/black (and a neutral border) by light/dark.
35
+ --grid-base-surface: light-dark(#ffffff, #1a1a1a) !important;
36
+ --grid-base-on-surface: light-dark(#000000, #ffffff) !important;
37
+ --grid-base-border: light-dark(#e5e7eb, #3a3a3a) !important;
23
38
 
24
39
  // Use Material's typography tokens - OVERRIDE fallback values
25
40
  --grid-font-family: #{mat.get-theme-typography($theme, body-large, font-family)} !important;
@@ -50,6 +65,16 @@
50
65
  // Color tokens
51
66
  --grid-primary: var(--mat-sys-primary, #6750a4);
52
67
  --grid-on-primary: var(--mat-sys-on-primary, #ffffff);
68
+ --grid-primary-container: var(--mat-sys-primary-container, #eaddff);
69
+ --grid-on-primary-container: var(--mat-sys-on-primary-container, #21005d);
70
+ --grid-secondary: var(--mat-sys-secondary, #625b71);
71
+ --grid-on-secondary: var(--mat-sys-on-secondary, #ffffff);
72
+ --grid-secondary-container: var(--mat-sys-secondary-container, #e8def8);
73
+ --grid-on-secondary-container: var(--mat-sys-on-secondary-container, #1d192b);
74
+ --grid-tertiary: var(--mat-sys-tertiary, #7d5260);
75
+ --grid-on-tertiary: var(--mat-sys-on-tertiary, #ffffff);
76
+ --grid-tertiary-container: var(--mat-sys-tertiary-container, #ffd8e4);
77
+ --grid-on-tertiary-container: var(--mat-sys-on-tertiary-container, #31111d);
53
78
  --grid-surface: var(--mat-sys-surface, #fef7ff);
54
79
  --grid-surface-variant: var(--mat-sys-surface-variant, #e7e0ec);
55
80
  --grid-surface-container: var(--mat-sys-surface-container, #f3edf7);
@@ -60,6 +85,11 @@
60
85
  --grid-outline-variant: var(--mat-sys-outline-variant, #cac4d0);
61
86
  --grid-error: var(--mat-sys-error, #ba1a1a);
62
87
  --grid-error-container: var(--mat-sys-error-container, #ffdad6);
88
+
89
+ // Base tokens — fixed white/black flip; host can override per mode.
90
+ --grid-base-surface: #ffffff;
91
+ --grid-base-on-surface: #000000;
92
+ --grid-base-border: #e5e7eb;
63
93
  --grid-outline-width: 1px;
64
94
 
65
95
  // Typography tokens
@@ -87,6 +117,19 @@
87
117
  .eru-grid-high-contrast {
88
118
  --grid-primary: #000000;
89
119
  --grid-on-primary: #ffffff;
120
+ --grid-primary-container: #e0e0e0;
121
+ --grid-on-primary-container: #000000;
122
+ --grid-secondary: #000000;
123
+ --grid-on-secondary: #ffffff;
124
+ --grid-secondary-container: #e0e0e0;
125
+ --grid-on-secondary-container: #000000;
126
+ --grid-tertiary: #000000;
127
+ --grid-on-tertiary: #ffffff;
128
+ --grid-tertiary-container: #e0e0e0;
129
+ --grid-on-tertiary-container: #000000;
130
+ --grid-base-surface: #ffffff;
131
+ --grid-base-on-surface: #000000;
132
+ --grid-base-border: #000000;
90
133
  --grid-surface: #ffffff;
91
134
  --grid-surface-variant: #f8f8f8;
92
135
  --grid-on-surface: #000000;
@@ -256,6 +256,8 @@ interface DynamicDataRequest {
256
256
  apiName?: string;
257
257
  apiField?: string;
258
258
  search?: string;
259
+ limit?: number;
260
+ skip?: number;
259
261
  filter?: Record<string, any>;
260
262
  }
261
263
  interface Field {
@@ -301,6 +303,7 @@ interface Field {
301
303
  to?: number | null;
302
304
  color?: string | null;
303
305
  }[];
306
+ cell_rules?: CellFormatRule[];
304
307
  data_length?: number;
305
308
  start_value?: number;
306
309
  end_value?: number;
@@ -385,6 +388,8 @@ interface Field {
385
388
  * searchable whether a picker needs a filter box depends on how
386
389
  * many options this grid shows, not on the field
387
390
  * dateTimeFormat legacy alias; the model writes `date_format`
391
+ * cell_rules conditional formatting is a grid feature; it
392
+ * overrides the field's `color_ranges` per grid
388
393
  *
389
394
  * See SEEDED_FIELD_KEYS for the middle ground: keys the data model supplies a
390
395
  * starting value for, which this grid may then override.
@@ -645,6 +650,26 @@ declare function cellStatAlias(field: string, stat: CellStatVerb, args?: {
645
650
  * rule stops the request without anyone remembering to.
646
651
  */
647
652
  declare function collectColumnStatRequests(columns: Field[] | null | undefined): ColumnStatRequest[];
653
+ /**
654
+ * True when this grid's column carries conditional formatting of its own.
655
+ *
656
+ * The test for "configured" is a non-empty list: an empty `cell_rules` is what
657
+ * removing the last rule leaves behind, and that has to read as "nothing
658
+ * configured here" so the data model's bands come back rather than the column
659
+ * being stuck with no formatting at all.
660
+ */
661
+ declare function hasOwnCellRules(column: Field | null | undefined): boolean;
662
+ /**
663
+ * The rules in force on a column: its own conditional formatting if configured,
664
+ * otherwise the data model's `color_ranges` bands.
665
+ *
666
+ * Conditional formatting is a property of this grid's view, `color_ranges` a
667
+ * property of the field — so the two are separate keys and this is the one place
668
+ * that decides between them. Every consumer (cell painting, stat requests, the
669
+ * design pane) reads through here, so they cannot disagree about which list is
670
+ * live.
671
+ */
672
+ declare function columnCellRules(column: Field | null | undefined): CellFormatRule[];
648
673
  /** A statistic's value, or null when it has not come back (or cannot apply). */
649
674
  declare function resolveStatValue(field: string, ref: CellStatRef | null | undefined, stats: Record<string, number> | null | undefined): number | null;
650
675
  /**
@@ -887,6 +912,19 @@ interface CellTextStyle {
887
912
  * the grid's own `--grid-*` set — a column styled with a token keeps tracking
888
913
  * the preset/theme instead of freezing one hex.
889
914
  */
915
+ /**
916
+ * Theme colours offerable on a column or a conditional-format rule.
917
+ *
918
+ * A one-for-one mirror of eru-studio's `colorTokens`, label for label, with
919
+ * `--studio-` swapped for `--grid-`: the two libraries dress the same page, so a
920
+ * colour chosen on a field and the same colour chosen on a grid column have to
921
+ * mean the same thing. Keep the two lists in step when either changes.
922
+ *
923
+ * 'Primary Light' used to sit in here and was never part of that set — nor was
924
+ * `--grid-primary-light` ever defined, so picking it produced an invalid
925
+ * `var()` and silently dropped whatever it was applied to. Its M3 equivalent is
926
+ * Primary Container, which is what studio calls it.
927
+ */
890
928
  declare const GRID_COLOR_TOKENS: {
891
929
  label: string;
892
930
  value: string;
@@ -928,6 +966,16 @@ declare function cellTextStyleToCss(style: CellTextStyle | null | undefined): Re
928
966
  * and currency.component — byte-identical, and two places to fix.
929
967
  */
930
968
  declare function abbreviateNumber(num: number, system: 'lacs' | 'mn', decimals: number): string;
969
+ /**
970
+ * Which scale a value abbreviates on when no `display_number_as` is chosen:
971
+ * the one its digit grouping already implies.
972
+ *
973
+ * `seperator` and `display_number_as` were asking the same question twice — the
974
+ * data model already says whether a field reads Indian or Western, and a column
975
+ * grouped 1,00,00,000 that abbreviates to 'mn' is a contradiction. So the
976
+ * grouping supplies the scale and 'Display as' stays editable to override it.
977
+ */
978
+ declare function abbreviationScaleFor(seperator: string | null | undefined): 'lacs' | 'mn';
931
979
  /**
932
980
  * Render a number or currency value the way its column configures it —
933
981
  * decimals, separator locale, abbreviation, optional symbol prefix.
@@ -2469,6 +2517,50 @@ declare function resolveRowValue(row: any, fieldName: string): any;
2469
2517
  */
2470
2518
  declare function evaluateRowCondition(expression: string | null | undefined, row: any): boolean;
2471
2519
 
2520
+ /**
2521
+ * Restricts an `<input type="text">` to a numeric value.
2522
+ *
2523
+ * Lives in eru-grid and is exported from its public API so the grid's cells and
2524
+ * eru-studio's page controls share one implementation — the same value typed in
2525
+ * a grid and on a page has to be accepted or rejected identically.
2526
+ *
2527
+ * Text rather than `type="number"` on purpose: a number input reformats the
2528
+ * value on its own, refuses to show a grouped or symbol-prefixed value, and
2529
+ * renders spinners the design does not use. Every eru-studio numeric field is
2530
+ * therefore a text input — which accepted any string at all until this.
2531
+ *
2532
+ * Filtering happens at `beforeinput`, so the character is judged in the context
2533
+ * it would land in: this is what tells a second '.' from the first, and a '-'
2534
+ * typed at the start from one typed mid-value. A `keypress` filter cannot see
2535
+ * either, and blur-time validation lets the user type a whole wrong value first.
2536
+ */
2537
+ declare class NumericInputDirective {
2538
+ private el;
2539
+ /** Allow a decimal point. Off for an integer-only field. */
2540
+ readonly allowDecimal: _angular_core.InputSignal<boolean>;
2541
+ /** Allow a leading minus. Off where a negative makes no sense. */
2542
+ readonly allowNegative: _angular_core.InputSignal<boolean>;
2543
+ /**
2544
+ * Would this be a valid numeric string, allowing the in-progress forms a
2545
+ * user necessarily passes through — '', '-', '1.' — none of which parse as a
2546
+ * number but all of which are on the way to one.
2547
+ */
2548
+ private isAcceptable;
2549
+ /** The value the input would hold if this event were allowed through. */
2550
+ private projectedValue;
2551
+ onBeforeInput(event: InputEvent): void;
2552
+ /**
2553
+ * A paste is filtered rather than blocked: pasting a formatted amount
2554
+ * ("$1,234.50") is a normal thing to do, and stripping it to 1234.50 is what
2555
+ * the user meant. Only a paste with no digits at all is rejected outright.
2556
+ */
2557
+ onPaste(event: ClipboardEvent): void;
2558
+ /** Digits, at most one decimal point, and a single leading minus. */
2559
+ private clean;
2560
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<NumericInputDirective, never>;
2561
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<NumericInputDirective, "input[eruNumericInput]", never, { "allowDecimal": { "alias": "eruAllowDecimal"; "required": false; "isSignal": true; }; "allowNegative": { "alias": "eruAllowNegative"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
2562
+ }
2563
+
2472
2564
  interface AttachmentConfig {
2473
2565
  disabled?: boolean;
2474
2566
  required?: boolean;
@@ -2572,6 +2664,80 @@ declare class CheckboxComponent {
2572
2664
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<CheckboxComponent, "eru-checkbox", never, { "value": { "alias": "value"; "required": false; "isSignal": true; }; "config": { "alias": "config"; "required": false; "isSignal": true; }; "isEditable": { "alias": "isEditable"; "required": false; "isSignal": true; }; "isActive": { "alias": "isActive"; "required": false; "isSignal": true; }; "isDrillable": { "alias": "isDrillable"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; }, { "valueChange": "valueChange"; "change": "change"; "blur": "blur"; "focus": "focus"; "drilldownClick": "drilldownClick"; "editModeChange": "editModeChange"; }, never, never, true, never>;
2573
2665
  }
2574
2666
 
2667
+ /** One chip. `color`/`background`/`dot` are optional: without them the chip
2668
+ * takes the neutral surface, which is what a plain value wants. */
2669
+ interface ChipListItem {
2670
+ label: string;
2671
+ color?: string | null;
2672
+ background?: string | null;
2673
+ dot?: string | null;
2674
+ }
2675
+ /**
2676
+ * A row of chips that fits its container, with a `+N` for the rest.
2677
+ *
2678
+ * Shared by the grid's and eru-studio's multi-selects so a set of values reads
2679
+ * the same in a cell, on a page and inside a select's trigger.
2680
+ *
2681
+ * Widths are MEASURED, not estimated. The tag cell assumes ~30px per chip,
2682
+ * which is close enough for short tags and wrong for the entity names a select
2683
+ * holds ("Acme Industries Pvt Ltd" is four times that) — it either wraps or
2684
+ * hides chips that would have fitted. Measuring with a canvas rather than by
2685
+ * rendering avoids the two-pass flicker of laying every chip out and then
2686
+ * hiding the overflow.
2687
+ */
2688
+ declare class ChipListComponent implements OnDestroy {
2689
+ private host;
2690
+ private readonly _chips;
2691
+ /** Plain labels — the neutral chip. */
2692
+ set labels(value: string[] | null | undefined);
2693
+ /**
2694
+ * Chips that carry their own colours — a tag or a status, where the colour is
2695
+ * part of the value's meaning rather than decoration. Takes precedence over
2696
+ * `labels`; set one or the other.
2697
+ */
2698
+ set chips(value: ChipListItem[] | null | undefined);
2699
+ private readonly _compact;
2700
+ set compact(value: boolean | null | undefined);
2701
+ /**
2702
+ * Width to fit into. 0 means "measure the host", which is what a page control
2703
+ * wants; a grid cell passes its column width, which is known before layout.
2704
+ */
2705
+ private readonly _availableWidth;
2706
+ set availableWidth(value: number | null | undefined);
2707
+ readonly isCompact: _angular_core.Signal<boolean>;
2708
+ /** Width assumed when nothing above the row constrains it. */
2709
+ private static readonly UNCONSTRAINED_WIDTH;
2710
+ private readonly measuredWidth;
2711
+ private observer;
2712
+ constructor();
2713
+ private observe;
2714
+ ngOnDestroy(): void;
2715
+ /**
2716
+ * The width to fit into.
2717
+ *
2718
+ * A grid cell hands us its column width and that is the constraint. A page
2719
+ * control does not: eru-studio sizes every field shell with `width:
2720
+ * fit-content`, so the host hugs whatever we just rendered — measuring the
2721
+ * host would mean measuring our own output, and the row could never grow past
2722
+ * the chip it happens to be showing. That is why view mode sat at one chip
2723
+ * while edit mode, which gets Material's fixed infix width, showed three.
2724
+ *
2725
+ * So when no width is given, look UP for the first ancestor that is wider
2726
+ * than the host: that is the box actually constraining the layout, and it
2727
+ * does not change when our content does.
2728
+ */
2729
+ private measure;
2730
+ /** Chip text width for the host's actual font, via a shared canvas. */
2731
+ private static canvas;
2732
+ private textWidth;
2733
+ private readonly fit;
2734
+ readonly visible: _angular_core.Signal<ChipListItem[]>;
2735
+ readonly hiddenCount: _angular_core.Signal<number>;
2736
+ readonly hiddenLabels: _angular_core.Signal<string>;
2737
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<ChipListComponent, never>;
2738
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<ChipListComponent, "eru-chip-list", never, { "labels": { "alias": "labels"; "required": false; }; "chips": { "alias": "chips"; "required": false; }; "compact": { "alias": "compact"; "required": false; }; "availableWidth": { "alias": "availableWidth"; "required": false; }; }, {}, never, never, true, never>;
2739
+ }
2740
+
2575
2741
  interface CompositePart {
2576
2742
  name: string;
2577
2743
  label: string;
@@ -3231,6 +3397,15 @@ declare class SelectComponent implements OnInit, AfterViewInit {
3231
3397
  editModeChange: EventEmitter<boolean>;
3232
3398
  currentValue: _angular_core.WritableSignal<any>;
3233
3399
  searchText: _angular_core.WritableSignal<string>;
3400
+ private static readonly OPTIONS_PAGE_SIZE;
3401
+ /** The rendered mat-select, for its `panel` element once the overlay opens. */
3402
+ private matSelect?;
3403
+ /** Debounced search text, sent to the consumer as `search` (→ field_str). */
3404
+ private readonly serverSearch;
3405
+ private readonly optionsSkip;
3406
+ /** Set when a short page comes back — nothing more to ask for. */
3407
+ private readonly optionsExhausted;
3408
+ private searchDebounce;
3234
3409
  error: _angular_core.WritableSignal<string>;
3235
3410
  isAllSelected: _angular_core.Signal<boolean>;
3236
3411
  isIndeterminate: _angular_core.Signal<boolean>;
@@ -3274,11 +3449,31 @@ declare class SelectComponent implements OnInit, AfterViewInit {
3274
3449
  */
3275
3450
  optionsCacheKey: _angular_core.Signal<string>;
3276
3451
  onSearchChange(searchValue: string): void;
3452
+ /**
3453
+ * Ask the consumer for the next page when the panel nears its end.
3454
+ *
3455
+ * Options are appended, never recycled: mat-select addresses MatOption
3456
+ * instances for its selection, trigger text and keyboard navigation, so a
3457
+ * virtual scroller destroying them as they leave the viewport breaks all
3458
+ * three. Paging the data while keeping the DOM is what is wanted here.
3459
+ */
3460
+ private panelScrollTeardown;
3461
+ /** Attach the paging listener to mat-select's panel once the overlay exists. */
3462
+ private attachPanelScroll;
3463
+ private detachPanelScroll;
3464
+ private onPanelScroll;
3277
3465
  onOpenedChange(opened: boolean): void;
3278
3466
  ngAfterViewInit(): void;
3279
3467
  onDrillableClick(event: Event): void;
3280
3468
  getProperty(property: string): any;
3281
3469
  hasRequiredValidation(): boolean;
3470
+ /**
3471
+ * Selected values as their option labels, for the chip row.
3472
+ *
3473
+ * Same resolution as formatDisplayValue — the chip list only changes how they
3474
+ * are laid out, so the two must never disagree about what a value is called.
3475
+ */
3476
+ readonly selectedLabels: _angular_core.Signal<string[]>;
3282
3477
  formatDisplayValue(): string;
3283
3478
  trackByValueAndIndex(index: number, option: any): string;
3284
3479
  /**
@@ -3417,6 +3612,13 @@ declare class TagComponent implements OnInit {
3417
3612
  label: any;
3418
3613
  color: any;
3419
3614
  }[]>;
3615
+ /**
3616
+ * Selected tags as coloured chips for the shared chip row.
3617
+ *
3618
+ * The colour is part of a tag's meaning, so it travels with the label rather
3619
+ * than the chip list assuming a neutral pill.
3620
+ */
3621
+ readonly tagChips: _angular_core.Signal<ChipListItem[]>;
3420
3622
  maxDisplayTags: _angular_core.Signal<number>;
3421
3623
  tagDisplay: _angular_core.Signal<{
3422
3624
  displayTags: string[];
@@ -3585,5 +3787,5 @@ declare class ThemeToggleComponent {
3585
3787
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<ThemeToggleComponent, "eru-theme-toggle", never, {}, {}, never, never, true, never>;
3586
3788
  }
3587
3789
 
3588
- export { ACTION_COLUMN_MIN_WIDTH, AttachmentComponent, CELL_RULE_OPERATORS, CheckboxComponent, ColumnConstraintsService, CompositeComponent, CurrencyComponent, CustomVirtualScrollStrategy, DATA_TYPES, DATETIME_FORMATS, DATE_FORMATS, DateComponent, DatetimeComponent, DurationComponent, EmailComponent, EruGridComponent, EruGridService, EruGridStore, GRID_COLOR_TOKENS, INHERITED_FIELD_KEYS, LocationComponent, MATERIAL_MODULES, MATERIAL_PROVIDERS, MONTH_SHORT_NAMES, NumberComponent, PRESENTATION_DATATYPES, PRESET_CONFIG_DEFAULTS, PRESET_MANAGED_FIELDS, PeopleComponent, PhoneComponent, PriorityComponent, ProgressComponent, RatingComponent, SEEDED_FIELD_KEYS, SELF_COLOURED_DATATYPES, SelectComponent, StatusComponent, TagComponent, TextareaComponent, TextboxComponent, ThemeService, ThemeToggleComponent, WebsiteComponent, abbreviateNumber, cellRuleBarPercent, cellRuleMatches, cellRuleToCss, cellStatAlias, cellTextStyleToCss, collectColumnStatRequests, composeColorValue, evaluateRowCondition, formatCellValue, formatDateWithPattern, formatNumberValue, matchCellRule, matchColorRange, normalizeDatatype, normalizeDateFormat, normalizeDateTimeFormat, parseCellDate, parseColorValue, parseDateWithPattern, readRowValue, resolveColumnRules, resolveRowValue, resolveStatValue, statusPillColors, tagPillColors };
3589
- export type { ActionClick, AggregationFunction, AttachmentConfig, BoardCardContext, CellFormatRule, CellRuleOperator, CellStatRef, CellStatVerb, CellTemplateContext, CellTextStyle, CellValueChange, ColorRangeBand, ColumnReorder, ColumnResize, ColumnStatRequest, ColumnWidthConstraints, CompositePart, CurrencyValidationResult, DataTypes, Drilldown, DurationValue, DynamicDataRequest, EmailValidationResult, ExcelDownloadPayload, ExcelDownloadRequest, ExcelPivotConfig, Field, GridAction, GridConfiguration, GridFeatures, GridMode, GridPreset, GridStyles, GridTokens, GroupItem$1 as GroupItem, LocationConfig, LocationValidationResult, NumberValidationResult, ParsedColorValue, PeopleOption, PersonCardContext, PivotColumnGroupState, PivotColumnHeader, PivotColumnKind, PivotConfiguration, PivotHeaderStructure, PivotMetadata, PivotResult, PivotRow, PivotRowKind, RatingConfig, Row, RowDataRequest, RowDataResponse, RowGrandTotal, RowGroup, ServerValidationNotice, StatusPillColors, TagPillColors, TextareaValidationResult, TextboxValidationResult, Theme, WebsiteValidationResult };
3790
+ export { ACTION_COLUMN_MIN_WIDTH, AttachmentComponent, CELL_RULE_OPERATORS, CheckboxComponent, ChipListComponent, ColumnConstraintsService, CompositeComponent, CurrencyComponent, CustomVirtualScrollStrategy, DATA_TYPES, DATETIME_FORMATS, DATE_FORMATS, DateComponent, DatetimeComponent, DurationComponent, EmailComponent, EruGridComponent, EruGridService, EruGridStore, GRID_COLOR_TOKENS, INHERITED_FIELD_KEYS, LocationComponent, MATERIAL_MODULES, MATERIAL_PROVIDERS, MONTH_SHORT_NAMES, NumberComponent, NumericInputDirective, PRESENTATION_DATATYPES, PRESET_CONFIG_DEFAULTS, PRESET_MANAGED_FIELDS, PeopleComponent, PhoneComponent, PriorityComponent, ProgressComponent, RatingComponent, SEEDED_FIELD_KEYS, SELF_COLOURED_DATATYPES, SelectComponent, StatusComponent, TagComponent, TextareaComponent, TextboxComponent, ThemeService, ThemeToggleComponent, WebsiteComponent, abbreviateNumber, abbreviationScaleFor, cellRuleBarPercent, cellRuleMatches, cellRuleToCss, cellStatAlias, cellTextStyleToCss, collectColumnStatRequests, columnCellRules, composeColorValue, evaluateRowCondition, formatCellValue, formatDateWithPattern, formatNumberValue, hasOwnCellRules, matchCellRule, matchColorRange, normalizeDatatype, normalizeDateFormat, normalizeDateTimeFormat, parseCellDate, parseColorValue, parseDateWithPattern, readRowValue, resolveColumnRules, resolveRowValue, resolveStatValue, statusPillColors, tagPillColors };
3791
+ export type { ActionClick, AggregationFunction, AttachmentConfig, BoardCardContext, CellFormatRule, CellRuleOperator, CellStatRef, CellStatVerb, CellTemplateContext, CellTextStyle, CellValueChange, ChipListItem, ColorRangeBand, ColumnReorder, ColumnResize, ColumnStatRequest, ColumnWidthConstraints, CompositePart, CurrencyValidationResult, DataTypes, Drilldown, DurationValue, DynamicDataRequest, EmailValidationResult, ExcelDownloadPayload, ExcelDownloadRequest, ExcelPivotConfig, Field, GridAction, GridConfiguration, GridFeatures, GridMode, GridPreset, GridStyles, GridTokens, GroupItem$1 as GroupItem, LocationConfig, LocationValidationResult, NumberValidationResult, ParsedColorValue, PeopleOption, PersonCardContext, PivotColumnGroupState, PivotColumnHeader, PivotColumnKind, PivotConfiguration, PivotHeaderStructure, PivotMetadata, PivotResult, PivotRow, PivotRowKind, RatingConfig, Row, RowDataRequest, RowDataResponse, RowGrandTotal, RowGroup, ServerValidationNotice, StatusPillColors, TagPillColors, TextareaValidationResult, TextboxValidationResult, Theme, WebsiteValidationResult };