@toolbox-web/grid-angular 0.4.0 → 0.6.0
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/README.md +296 -16
- package/feature-registry-C-cKloXB.js +45 -0
- package/features/clipboard.d.ts +18 -0
- package/features/clipboard.d.ts.map +1 -0
- package/features/clipboard.js +3 -0
- package/features/column-virtualization.d.ts +16 -0
- package/features/column-virtualization.d.ts.map +1 -0
- package/features/column-virtualization.js +3 -0
- package/features/context-menu.d.ts +16 -0
- package/features/context-menu.d.ts.map +1 -0
- package/features/context-menu.js +3 -0
- package/features/editing.d.ts +16 -0
- package/features/editing.d.ts.map +1 -0
- package/features/editing.js +3 -0
- package/features/export.d.ts +17 -0
- package/features/export.d.ts.map +1 -0
- package/features/export.js +3 -0
- package/features/filtering.d.ts +17 -0
- package/features/filtering.d.ts.map +1 -0
- package/features/filtering.js +3 -0
- package/features/grouping-columns.d.ts +16 -0
- package/features/grouping-columns.d.ts.map +1 -0
- package/features/grouping-columns.js +3 -0
- package/features/grouping-rows.d.ts +16 -0
- package/features/grouping-rows.d.ts.map +1 -0
- package/features/grouping-rows.js +3 -0
- package/features/index.d.ts +1 -0
- package/features/index.d.ts.map +1 -0
- package/features/index.js +22 -0
- package/features/master-detail.d.ts +16 -0
- package/features/master-detail.d.ts.map +1 -0
- package/features/master-detail.js +3 -0
- package/features/pinned-columns.d.ts +19 -0
- package/features/pinned-columns.d.ts.map +1 -0
- package/features/pinned-columns.js +3 -0
- package/features/pinned-rows.d.ts +16 -0
- package/features/pinned-rows.d.ts.map +1 -0
- package/features/pinned-rows.js +3 -0
- package/features/pivot.d.ts +16 -0
- package/features/pivot.d.ts.map +1 -0
- package/features/pivot.js +3 -0
- package/features/print.d.ts +16 -0
- package/features/print.d.ts.map +1 -0
- package/features/print.js +3 -0
- package/features/reorder.d.ts +16 -0
- package/features/reorder.d.ts.map +1 -0
- package/features/reorder.js +3 -0
- package/features/responsive.d.ts +16 -0
- package/features/responsive.d.ts.map +1 -0
- package/features/responsive.js +3 -0
- package/features/row-reorder.d.ts +16 -0
- package/features/row-reorder.d.ts.map +1 -0
- package/features/row-reorder.js +3 -0
- package/features/selection.d.ts +16 -0
- package/features/selection.d.ts.map +1 -0
- package/features/selection.js +3 -0
- package/features/server-side.d.ts +16 -0
- package/features/server-side.d.ts.map +1 -0
- package/features/server-side.js +3 -0
- package/features/sorting.d.ts +16 -0
- package/features/sorting.d.ts.map +1 -0
- package/features/sorting.js +3 -0
- package/features/tree.d.ts +16 -0
- package/features/tree.d.ts.map +1 -0
- package/features/tree.js +3 -0
- package/features/undo-redo.d.ts +18 -0
- package/features/undo-redo.d.ts.map +1 -0
- package/features/undo-redo.js +3 -0
- package/features/visibility.d.ts +16 -0
- package/features/visibility.d.ts.map +1 -0
- package/features/visibility.js +3 -0
- package/index.d.ts +7 -0
- package/index.d.ts.map +1 -1
- package/index.js +1272 -294
- package/lib/angular-column-config.d.ts +1 -1
- package/lib/angular-grid-adapter.d.ts +1 -1
- package/lib/angular-grid-adapter.d.ts.map +1 -1
- package/lib/base-grid-editor.d.ts +145 -0
- package/lib/base-grid-editor.d.ts.map +1 -0
- package/lib/directives/grid-column-editor.directive.d.ts +17 -0
- package/lib/directives/grid-column-editor.directive.d.ts.map +1 -1
- package/lib/directives/grid-detail-view.directive.d.ts +1 -1
- package/lib/directives/grid-form-array.directive.d.ts +141 -0
- package/lib/directives/grid-form-array.directive.d.ts.map +1 -0
- package/lib/directives/grid.directive.d.ts +554 -3
- package/lib/directives/grid.directive.d.ts.map +1 -1
- package/lib/directives/index.d.ts +2 -0
- package/lib/directives/index.d.ts.map +1 -1
- package/lib/directives/structural-directives.d.ts +10 -0
- package/lib/directives/structural-directives.d.ts.map +1 -1
- package/lib/feature-registry.d.ts +72 -0
- package/lib/feature-registry.d.ts.map +1 -0
- package/lib/grid-type-registry.d.ts +1 -1
- package/lib/inject-grid.d.ts +109 -0
- package/lib/inject-grid.d.ts.map +1 -0
- package/package.json +12 -2
package/README.md
CHANGED
|
@@ -14,6 +14,7 @@ Angular adapter for `@toolbox-web/grid` data grid component. Provides directives
|
|
|
14
14
|
- ✅ **Template-driven editors** - Use `<ng-template>` for custom cell editors
|
|
15
15
|
- ✅ **Component-class column config** - Specify component classes directly in `gridConfig.columns`
|
|
16
16
|
- ✅ **Type-level defaults** - App-wide renderers/editors via `provideGridTypeDefaults()`
|
|
17
|
+
- ✅ **Reactive Forms integration** - Use `formControlName` and `formControl` bindings
|
|
17
18
|
- ✅ **Auto-wiring** - Editor components just emit events, no manual binding needed
|
|
18
19
|
- ✅ **Full type safety** - Typed template contexts (`GridCellContext`, `GridEditorContext`)
|
|
19
20
|
- ✅ **Angular 17+** - Standalone components, signals support
|
|
@@ -149,13 +150,14 @@ export class MyGridComponent {}
|
|
|
149
150
|
|
|
150
151
|
**Template Context:**
|
|
151
152
|
|
|
152
|
-
| Variable | Type
|
|
153
|
-
| ----------- |
|
|
154
|
-
| `$implicit` | `TValue`
|
|
155
|
-
| `row` | `TRow`
|
|
156
|
-
| `column` | `unknown`
|
|
157
|
-
| `onCommit` | `Function`
|
|
158
|
-
| `onCancel` | `Function`
|
|
153
|
+
| Variable | Type | Description |
|
|
154
|
+
| ----------- | ----------------- | ------------------------------------------------------ |
|
|
155
|
+
| `$implicit` | `TValue` | The cell value (use with `let-value`) |
|
|
156
|
+
| `row` | `TRow` | The full row data object |
|
|
157
|
+
| `column` | `unknown` | The column configuration |
|
|
158
|
+
| `onCommit` | `Function` | Callback to commit (optional with auto-wire) |
|
|
159
|
+
| `onCancel` | `Function` | Callback to cancel (optional with auto-wire) |
|
|
160
|
+
| `control` | `AbstractControl` | FormControl for cell (when using FormArray+FormGroups) |
|
|
159
161
|
|
|
160
162
|
> **Auto-wiring:** If your editor component emits a `commit` event with the new value, the adapter automatically calls the grid's commit function. Similarly for `cancel`. This means you can skip the explicit `onCommit`/`onCancel` bindings!
|
|
161
163
|
|
|
@@ -485,19 +487,292 @@ Or import all plugins at once (larger bundle, but convenient):
|
|
|
485
487
|
import { SelectionPlugin, FilteringPlugin } from '@toolbox-web/grid/all';
|
|
486
488
|
```
|
|
487
489
|
|
|
490
|
+
## Reactive Forms Integration
|
|
491
|
+
|
|
492
|
+
The grid can be used as an Angular form control with `formControlName` or `formControl` bindings. This enables seamless integration with Angular's Reactive Forms system.
|
|
493
|
+
|
|
494
|
+
### Basic Usage with FormControl
|
|
495
|
+
|
|
496
|
+
```typescript
|
|
497
|
+
import { Component, CUSTOM_ELEMENTS_SCHEMA } from '@angular/core';
|
|
498
|
+
import { FormControl, ReactiveFormsModule } from '@angular/forms';
|
|
499
|
+
import { Grid, GridFormControl } from '@toolbox-web/grid-angular';
|
|
500
|
+
import { EditingPlugin } from '@toolbox-web/grid/plugins/editing';
|
|
501
|
+
import type { GridConfig } from '@toolbox-web/grid';
|
|
502
|
+
|
|
503
|
+
interface Employee {
|
|
504
|
+
name: string;
|
|
505
|
+
age: number;
|
|
506
|
+
}
|
|
507
|
+
|
|
508
|
+
@Component({
|
|
509
|
+
imports: [Grid, GridFormControl, ReactiveFormsModule],
|
|
510
|
+
schemas: [CUSTOM_ELEMENTS_SCHEMA],
|
|
511
|
+
template: `
|
|
512
|
+
<tbw-grid [formControl]="employeesControl" [gridConfig]="config" style="height: 400px; display: block;" />
|
|
513
|
+
|
|
514
|
+
<div>
|
|
515
|
+
<p>Form value: {{ employeesControl.value | json }}</p>
|
|
516
|
+
<p>Dirty: {{ employeesControl.dirty }}</p>
|
|
517
|
+
<p>Touched: {{ employeesControl.touched }}</p>
|
|
518
|
+
</div>
|
|
519
|
+
`,
|
|
520
|
+
})
|
|
521
|
+
export class MyComponent {
|
|
522
|
+
employeesControl = new FormControl<Employee[]>([
|
|
523
|
+
{ name: 'Alice', age: 30 },
|
|
524
|
+
{ name: 'Bob', age: 25 },
|
|
525
|
+
]);
|
|
526
|
+
|
|
527
|
+
config: GridConfig<Employee> = {
|
|
528
|
+
columns: [
|
|
529
|
+
{ field: 'name', header: 'Name', editable: true },
|
|
530
|
+
{ field: 'age', header: 'Age', editable: true, type: 'number' },
|
|
531
|
+
],
|
|
532
|
+
plugins: [new EditingPlugin({ editOn: 'dblclick' })],
|
|
533
|
+
};
|
|
534
|
+
}
|
|
535
|
+
```
|
|
536
|
+
|
|
537
|
+
### Usage with FormGroup
|
|
538
|
+
|
|
539
|
+
```typescript
|
|
540
|
+
import { Component, CUSTOM_ELEMENTS_SCHEMA } from '@angular/core';
|
|
541
|
+
import { FormControl, FormGroup, ReactiveFormsModule } from '@angular/forms';
|
|
542
|
+
import { Grid, GridFormControl } from '@toolbox-web/grid-angular';
|
|
543
|
+
import { EditingPlugin } from '@toolbox-web/grid/plugins/editing';
|
|
544
|
+
|
|
545
|
+
@Component({
|
|
546
|
+
imports: [Grid, GridFormControl, ReactiveFormsModule],
|
|
547
|
+
schemas: [CUSTOM_ELEMENTS_SCHEMA],
|
|
548
|
+
template: `
|
|
549
|
+
<form [formGroup]="form">
|
|
550
|
+
<tbw-grid formControlName="employees" [gridConfig]="config" style="height: 400px; display: block;" />
|
|
551
|
+
</form>
|
|
552
|
+
`,
|
|
553
|
+
})
|
|
554
|
+
export class MyComponent {
|
|
555
|
+
form = new FormGroup({
|
|
556
|
+
employees: new FormControl([
|
|
557
|
+
{ name: 'Alice', age: 30 },
|
|
558
|
+
{ name: 'Bob', age: 25 },
|
|
559
|
+
]),
|
|
560
|
+
});
|
|
561
|
+
|
|
562
|
+
config = {
|
|
563
|
+
columns: [
|
|
564
|
+
{ field: 'name', header: 'Name', editable: true },
|
|
565
|
+
{ field: 'age', header: 'Age', editable: true },
|
|
566
|
+
],
|
|
567
|
+
plugins: [new EditingPlugin()],
|
|
568
|
+
};
|
|
569
|
+
}
|
|
570
|
+
```
|
|
571
|
+
|
|
572
|
+
### How It Works
|
|
573
|
+
|
|
574
|
+
- **Form → Grid**: When the form value changes (e.g., via `setValue()` or `patchValue()`), the grid rows are updated
|
|
575
|
+
- **Grid → Form**: When a cell is edited and committed, the form value is updated with the new row data
|
|
576
|
+
- **Touched state**: The form becomes touched when the user clicks on the grid
|
|
577
|
+
- **Dirty state**: The form becomes dirty when any cell is edited
|
|
578
|
+
- **Disabled state**: When the form control is disabled, the grid adds a `.form-disabled` CSS class
|
|
579
|
+
|
|
580
|
+
### Validation
|
|
581
|
+
|
|
582
|
+
You can add validators to validate the entire grid data:
|
|
583
|
+
|
|
584
|
+
```typescript
|
|
585
|
+
import { Validators } from '@angular/forms';
|
|
586
|
+
|
|
587
|
+
employeesControl = new FormControl<Employee[]>([], [
|
|
588
|
+
Validators.required, // At least one row
|
|
589
|
+
Validators.minLength(2), // At least 2 rows
|
|
590
|
+
this.validateEmployees, // Custom validator
|
|
591
|
+
]);
|
|
592
|
+
|
|
593
|
+
validateEmployees(control: FormControl<Employee[]>) {
|
|
594
|
+
const employees = control.value || [];
|
|
595
|
+
const hasInvalidAge = employees.some((e) => e.age < 18);
|
|
596
|
+
return hasInvalidAge ? { invalidAge: true } : null;
|
|
597
|
+
}
|
|
598
|
+
```
|
|
599
|
+
|
|
600
|
+
### CSS Classes
|
|
601
|
+
|
|
602
|
+
Angular's form system automatically adds these classes to the grid element:
|
|
603
|
+
|
|
604
|
+
- `.ng-valid` / `.ng-invalid` - Validation state
|
|
605
|
+
- `.ng-pristine` / `.ng-dirty` - Edit state
|
|
606
|
+
- `.ng-untouched` / `.ng-touched` - Touch state
|
|
607
|
+
|
|
608
|
+
Additionally, when the control is disabled:
|
|
609
|
+
|
|
610
|
+
- `.form-disabled` - Added by `GridFormControl`
|
|
611
|
+
|
|
612
|
+
You can style these states:
|
|
613
|
+
|
|
614
|
+
```css
|
|
615
|
+
tbw-grid.ng-invalid.ng-touched {
|
|
616
|
+
border: 2px solid red;
|
|
617
|
+
}
|
|
618
|
+
|
|
619
|
+
tbw-grid.form-disabled {
|
|
620
|
+
opacity: 0.6;
|
|
621
|
+
pointer-events: none;
|
|
622
|
+
}
|
|
623
|
+
```
|
|
624
|
+
|
|
625
|
+
### Advanced: Cell-Level FormControls with FormArray
|
|
626
|
+
|
|
627
|
+
For fine-grained control over validation and form state at the cell level, use a `FormArray` of `FormGroup`s. This approach exposes the `FormControl` for each cell in the editor context, allowing custom editors to bind directly:
|
|
628
|
+
|
|
629
|
+
```typescript
|
|
630
|
+
import { Component, CUSTOM_ELEMENTS_SCHEMA, input, output } from '@angular/core';
|
|
631
|
+
import { FormArray, FormControl, FormGroup, ReactiveFormsModule, Validators } from '@angular/forms';
|
|
632
|
+
import { Grid, GridFormControl, TbwEditor, TbwRenderer } from '@toolbox-web/grid-angular';
|
|
633
|
+
import { EditingPlugin } from '@toolbox-web/grid/plugins/editing';
|
|
634
|
+
|
|
635
|
+
// Custom editor that uses the FormControl directly
|
|
636
|
+
@Component({
|
|
637
|
+
selector: 'app-validated-input',
|
|
638
|
+
standalone: true,
|
|
639
|
+
imports: [ReactiveFormsModule],
|
|
640
|
+
template: `
|
|
641
|
+
@if (control()) {
|
|
642
|
+
<input [formControl]="control()" [class.is-invalid]="control()!.invalid && control()!.touched" />
|
|
643
|
+
@if (control()!.invalid && control()!.touched) {
|
|
644
|
+
<small class="error">{{ getErrorMessage() }}</small>
|
|
645
|
+
}
|
|
646
|
+
}
|
|
647
|
+
`,
|
|
648
|
+
styles: `
|
|
649
|
+
.is-invalid {
|
|
650
|
+
border-color: red;
|
|
651
|
+
}
|
|
652
|
+
.error {
|
|
653
|
+
color: red;
|
|
654
|
+
font-size: 0.8em;
|
|
655
|
+
}
|
|
656
|
+
`,
|
|
657
|
+
})
|
|
658
|
+
export class ValidatedInputComponent {
|
|
659
|
+
control = input<AbstractControl>();
|
|
660
|
+
commit = output<string>();
|
|
661
|
+
|
|
662
|
+
getErrorMessage(): string {
|
|
663
|
+
const ctrl = this.control();
|
|
664
|
+
if (ctrl?.hasError('required')) return 'Required';
|
|
665
|
+
if (ctrl?.hasError('min')) return 'Too low';
|
|
666
|
+
return 'Invalid';
|
|
667
|
+
}
|
|
668
|
+
}
|
|
669
|
+
|
|
670
|
+
@Component({
|
|
671
|
+
imports: [Grid, GridFormControl, TbwRenderer, TbwEditor, ReactiveFormsModule, ValidatedInputComponent],
|
|
672
|
+
schemas: [CUSTOM_ELEMENTS_SCHEMA],
|
|
673
|
+
template: `
|
|
674
|
+
<tbw-grid [formControl]="employeesArray" [gridConfig]="config">
|
|
675
|
+
<tbw-grid-column field="age" editable>
|
|
676
|
+
<span *tbwRenderer="let value">{{ value }}</span>
|
|
677
|
+
<!-- The 'control' property gives you the FormControl for this cell -->
|
|
678
|
+
<app-validated-input *tbwEditor="let value; control as ctrl" [control]="ctrl" />
|
|
679
|
+
</tbw-grid-column>
|
|
680
|
+
</tbw-grid>
|
|
681
|
+
`,
|
|
682
|
+
})
|
|
683
|
+
export class MyComponent {
|
|
684
|
+
// Use FormArray with FormGroups for cell-level control access
|
|
685
|
+
employeesArray = new FormArray([
|
|
686
|
+
new FormGroup({
|
|
687
|
+
name: new FormControl('Alice', Validators.required),
|
|
688
|
+
age: new FormControl(30, [Validators.required, Validators.min(18)]),
|
|
689
|
+
}),
|
|
690
|
+
new FormGroup({
|
|
691
|
+
name: new FormControl('Bob', Validators.required),
|
|
692
|
+
age: new FormControl(25, [Validators.required, Validators.min(18)]),
|
|
693
|
+
}),
|
|
694
|
+
]);
|
|
695
|
+
|
|
696
|
+
config = {
|
|
697
|
+
columns: [
|
|
698
|
+
{ field: 'name', header: 'Name', editable: true },
|
|
699
|
+
{ field: 'age', header: 'Age', editable: true },
|
|
700
|
+
],
|
|
701
|
+
plugins: [new EditingPlugin()],
|
|
702
|
+
};
|
|
703
|
+
}
|
|
704
|
+
```
|
|
705
|
+
|
|
706
|
+
**Editor Context with FormControl:**
|
|
707
|
+
|
|
708
|
+
| Variable | Type | Description |
|
|
709
|
+
| ---------- | ----------------- | ------------------------------------------------------------------ |
|
|
710
|
+
| `value` | `TValue` | The cell value |
|
|
711
|
+
| `row` | `TRow` | The full row data |
|
|
712
|
+
| `control` | `AbstractControl` | The FormControl for this cell (if using FormArray with FormGroups) |
|
|
713
|
+
| `onCommit` | `Function` | Callback to commit the value |
|
|
714
|
+
| `onCancel` | `Function` | Callback to cancel editing |
|
|
715
|
+
|
|
716
|
+
> **Note:** The `control` property is only available when:
|
|
717
|
+
>
|
|
718
|
+
> - The grid is bound to a `FormArray` (not a `FormControl<T[]>`)
|
|
719
|
+
> - The `FormArray` contains `FormGroup` controls (not raw `FormControl`s)
|
|
720
|
+
> - The `FormGroup` has a control for the column's field name
|
|
721
|
+
|
|
722
|
+
### Row-Level Validation
|
|
723
|
+
|
|
724
|
+
When using `FormArray` with `FormGroup`s, you can also access row-level validation state through the `FormArrayContext`. This is useful for styling entire rows based on their validation state or displaying row-level error summaries.
|
|
725
|
+
|
|
726
|
+
```typescript
|
|
727
|
+
import { getFormArrayContext, type FormArrayContext } from '@toolbox-web/grid-angular';
|
|
728
|
+
|
|
729
|
+
// Get the context from a grid element
|
|
730
|
+
const context = getFormArrayContext(gridElement);
|
|
731
|
+
|
|
732
|
+
if (context?.hasFormGroups) {
|
|
733
|
+
// Check if row 0 is valid
|
|
734
|
+
const isValid = context.isRowValid(0); // true if all controls in row are valid
|
|
735
|
+
|
|
736
|
+
// Check if row has been touched
|
|
737
|
+
const isTouched = context.isRowTouched(0); // true if any control touched
|
|
738
|
+
|
|
739
|
+
// Check if row is dirty
|
|
740
|
+
const isDirty = context.isRowDirty(0); // true if any control changed
|
|
741
|
+
|
|
742
|
+
// Get all errors for a row
|
|
743
|
+
const errors = context.getRowErrors(0);
|
|
744
|
+
// Returns: { name: { required: true }, age: { min: { min: 18, actual: 15 } } }
|
|
745
|
+
// Or null if no errors
|
|
746
|
+
|
|
747
|
+
// Get the FormGroup for a row (for advanced use cases)
|
|
748
|
+
const formGroup = context.getRowFormGroup(0);
|
|
749
|
+
}
|
|
750
|
+
```
|
|
751
|
+
|
|
752
|
+
**FormArrayContext Row Validation Methods:**
|
|
753
|
+
|
|
754
|
+
| Method | Return Type | Description |
|
|
755
|
+
| ---------------------- | --------------------------------- | -------------------------------------------- |
|
|
756
|
+
| `isRowValid(idx)` | `boolean` | True if all controls in row are valid |
|
|
757
|
+
| `isRowTouched(idx)` | `boolean` | True if any control in row is touched |
|
|
758
|
+
| `isRowDirty(idx)` | `boolean` | True if any control in row is dirty |
|
|
759
|
+
| `getRowErrors(idx)` | `Record<string, unknown> \| null` | Aggregated errors from all controls, or null |
|
|
760
|
+
| `getRowFormGroup(idx)` | `FormGroup \| undefined` | The FormGroup for the row |
|
|
761
|
+
|
|
488
762
|
## API Reference
|
|
489
763
|
|
|
490
764
|
### Exported Directives
|
|
491
765
|
|
|
492
|
-
| Directive | Selector
|
|
493
|
-
| ------------------ |
|
|
494
|
-
| `Grid` | `tbw-grid`
|
|
495
|
-
| `
|
|
496
|
-
| `
|
|
497
|
-
| `
|
|
498
|
-
| `
|
|
499
|
-
| `
|
|
500
|
-
| `
|
|
766
|
+
| Directive | Selector | Description |
|
|
767
|
+
| ------------------ | ---------------------------------------------------- | -------------------------------------- |
|
|
768
|
+
| `Grid` | `tbw-grid` | Main directive, auto-registers adapter |
|
|
769
|
+
| `GridFormControl` | `tbw-grid[formControlName]`, `tbw-grid[formControl]` | Reactive Forms integration |
|
|
770
|
+
| `TbwRenderer` | `*tbwRenderer` | Structural directive for cell views |
|
|
771
|
+
| `TbwEditor` | `*tbwEditor` | Structural directive for cell editors |
|
|
772
|
+
| `GridColumnView` | `tbw-grid-column-view` | Nested directive for cell views |
|
|
773
|
+
| `GridColumnEditor` | `tbw-grid-column-editor` | Nested directive for cell editors |
|
|
774
|
+
| `GridDetailView` | `tbw-grid-detail` | Master-detail panel template |
|
|
775
|
+
| `GridToolPanel` | `tbw-grid-tool-panel` | Custom sidebar panel |
|
|
501
776
|
|
|
502
777
|
### Type Registry
|
|
503
778
|
|
|
@@ -561,10 +836,15 @@ import type {
|
|
|
561
836
|
AngularCellEditor,
|
|
562
837
|
AngularColumnConfig,
|
|
563
838
|
AngularGridConfig,
|
|
839
|
+
// Reactive Forms
|
|
840
|
+
FormArrayContext,
|
|
564
841
|
} from '@toolbox-web/grid-angular';
|
|
565
842
|
|
|
566
843
|
// Type guard for component class detection
|
|
567
844
|
import { isComponentClass } from '@toolbox-web/grid-angular';
|
|
845
|
+
|
|
846
|
+
// Helper to access form context from grid element
|
|
847
|
+
import { getFormArrayContext } from '@toolbox-web/grid-angular';
|
|
568
848
|
```
|
|
569
849
|
|
|
570
850
|
### AngularGridAdapter
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
const t = /* @__PURE__ */ new Map(), o = /* @__PURE__ */ new Set();
|
|
2
|
+
function s(e, r) {
|
|
3
|
+
t.set(e, {
|
|
4
|
+
factory: r,
|
|
5
|
+
name: e
|
|
6
|
+
});
|
|
7
|
+
}
|
|
8
|
+
function u(e) {
|
|
9
|
+
return t.has(e);
|
|
10
|
+
}
|
|
11
|
+
function c(e) {
|
|
12
|
+
return t.get(e)?.factory;
|
|
13
|
+
}
|
|
14
|
+
function f() {
|
|
15
|
+
return Array.from(t.keys());
|
|
16
|
+
}
|
|
17
|
+
function d(e, r) {
|
|
18
|
+
const a = t.get(e);
|
|
19
|
+
if (!a) {
|
|
20
|
+
const n = typeof window < "u" && (window.location.hostname === "localhost" || window.location.hostname === "127.0.0.1");
|
|
21
|
+
!o.has(e) && n && (o.add(e), console.warn(
|
|
22
|
+
`[tbw-grid] Feature "${e}" input is set but the feature is not registered.
|
|
23
|
+
Add this import to enable it:
|
|
24
|
+
|
|
25
|
+
import '@toolbox-web/grid-angular/features/${i(e)}';
|
|
26
|
+
`
|
|
27
|
+
));
|
|
28
|
+
return;
|
|
29
|
+
}
|
|
30
|
+
return a.factory(r);
|
|
31
|
+
}
|
|
32
|
+
function i(e) {
|
|
33
|
+
return e.replace(/([a-z])([A-Z])/g, "$1-$2").toLowerCase();
|
|
34
|
+
}
|
|
35
|
+
function g() {
|
|
36
|
+
t.clear(), o.clear();
|
|
37
|
+
}
|
|
38
|
+
export {
|
|
39
|
+
g as a,
|
|
40
|
+
f as b,
|
|
41
|
+
d as c,
|
|
42
|
+
c as g,
|
|
43
|
+
u as i,
|
|
44
|
+
s as r
|
|
45
|
+
};
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Clipboard feature for @toolbox-web/grid-angular
|
|
3
|
+
*
|
|
4
|
+
* Import this module to enable the `clipboard` input on Grid directive.
|
|
5
|
+
* Requires selection feature to be enabled.
|
|
6
|
+
*
|
|
7
|
+
* @example
|
|
8
|
+
* ```typescript
|
|
9
|
+
* import '@toolbox-web/grid-angular/features/selection';
|
|
10
|
+
* import '@toolbox-web/grid-angular/features/clipboard';
|
|
11
|
+
*
|
|
12
|
+
* <tbw-grid [selection]="'range'" [clipboard]="true" />
|
|
13
|
+
* ```
|
|
14
|
+
*
|
|
15
|
+
* @packageDocumentation
|
|
16
|
+
*/
|
|
17
|
+
export {};
|
|
18
|
+
//# sourceMappingURL=clipboard.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"clipboard.d.ts","sourceRoot":"","sources":["../../../../libs/grid-angular/src/features/clipboard.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Column virtualization feature for @toolbox-web/grid-angular
|
|
3
|
+
*
|
|
4
|
+
* Import this module to enable the `columnVirtualization` input on Grid directive.
|
|
5
|
+
*
|
|
6
|
+
* @example
|
|
7
|
+
* ```typescript
|
|
8
|
+
* import '@toolbox-web/grid-angular/features/column-virtualization';
|
|
9
|
+
*
|
|
10
|
+
* <tbw-grid [columnVirtualization]="true" />
|
|
11
|
+
* ```
|
|
12
|
+
*
|
|
13
|
+
* @packageDocumentation
|
|
14
|
+
*/
|
|
15
|
+
export {};
|
|
16
|
+
//# sourceMappingURL=column-virtualization.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"column-virtualization.d.ts","sourceRoot":"","sources":["../../../../libs/grid-angular/src/features/column-virtualization.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Context menu feature for @toolbox-web/grid-angular
|
|
3
|
+
*
|
|
4
|
+
* Import this module to enable the `contextMenu` input on Grid directive.
|
|
5
|
+
*
|
|
6
|
+
* @example
|
|
7
|
+
* ```typescript
|
|
8
|
+
* import '@toolbox-web/grid-angular/features/context-menu';
|
|
9
|
+
*
|
|
10
|
+
* <tbw-grid [contextMenu]="true" />
|
|
11
|
+
* ```
|
|
12
|
+
*
|
|
13
|
+
* @packageDocumentation
|
|
14
|
+
*/
|
|
15
|
+
export {};
|
|
16
|
+
//# sourceMappingURL=context-menu.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context-menu.d.ts","sourceRoot":"","sources":["../../../../libs/grid-angular/src/features/context-menu.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Editing feature for @toolbox-web/grid-angular
|
|
3
|
+
*
|
|
4
|
+
* Import this module to enable the `editing` input on Grid directive.
|
|
5
|
+
*
|
|
6
|
+
* @example
|
|
7
|
+
* ```typescript
|
|
8
|
+
* import '@toolbox-web/grid-angular/features/editing';
|
|
9
|
+
*
|
|
10
|
+
* <tbw-grid [editing]="'dblclick'" />
|
|
11
|
+
* ```
|
|
12
|
+
*
|
|
13
|
+
* @packageDocumentation
|
|
14
|
+
*/
|
|
15
|
+
export {};
|
|
16
|
+
//# sourceMappingURL=editing.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"editing.d.ts","sourceRoot":"","sources":["../../../../libs/grid-angular/src/features/editing.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG"}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import { EditingPlugin as e } from "@toolbox-web/grid/plugins/editing";
|
|
2
|
+
import { r as t } from "../feature-registry-C-cKloXB.js";
|
|
3
|
+
t("editing", (r) => r === !0 ? new e({ editOn: "dblclick" }) : r === "click" || r === "dblclick" || r === "manual" ? new e({ editOn: r }) : new e(r ?? void 0));
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Export feature for @toolbox-web/grid-angular
|
|
3
|
+
*
|
|
4
|
+
* Import this module to enable the `exportFeature` input on Grid directive.
|
|
5
|
+
*
|
|
6
|
+
* @example
|
|
7
|
+
* ```typescript
|
|
8
|
+
* import '@toolbox-web/grid-angular/features/export';
|
|
9
|
+
*
|
|
10
|
+
* <tbw-grid [exportFeature]="true" />
|
|
11
|
+
* <tbw-grid [exportFeature]="{ filename: 'data.csv' }" />
|
|
12
|
+
* ```
|
|
13
|
+
*
|
|
14
|
+
* @packageDocumentation
|
|
15
|
+
*/
|
|
16
|
+
export {};
|
|
17
|
+
//# sourceMappingURL=export.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"export.d.ts","sourceRoot":"","sources":["../../../../libs/grid-angular/src/features/export.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Filtering feature for @toolbox-web/grid-angular
|
|
3
|
+
*
|
|
4
|
+
* Import this module to enable the `filtering` input on Grid directive.
|
|
5
|
+
*
|
|
6
|
+
* @example
|
|
7
|
+
* ```typescript
|
|
8
|
+
* import '@toolbox-web/grid-angular/features/filtering';
|
|
9
|
+
*
|
|
10
|
+
* <tbw-grid [filtering]="true" />
|
|
11
|
+
* <tbw-grid [filtering]="{ debounceMs: 200 }" />
|
|
12
|
+
* ```
|
|
13
|
+
*
|
|
14
|
+
* @packageDocumentation
|
|
15
|
+
*/
|
|
16
|
+
export {};
|
|
17
|
+
//# sourceMappingURL=filtering.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"filtering.d.ts","sourceRoot":"","sources":["../../../../libs/grid-angular/src/features/filtering.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Column grouping feature for @toolbox-web/grid-angular
|
|
3
|
+
*
|
|
4
|
+
* Import this module to enable the `groupingColumns` input on Grid directive.
|
|
5
|
+
*
|
|
6
|
+
* @example
|
|
7
|
+
* ```typescript
|
|
8
|
+
* import '@toolbox-web/grid-angular/features/grouping-columns';
|
|
9
|
+
*
|
|
10
|
+
* <tbw-grid [groupingColumns]="{ columnGroups: [...] }" />
|
|
11
|
+
* ```
|
|
12
|
+
*
|
|
13
|
+
* @packageDocumentation
|
|
14
|
+
*/
|
|
15
|
+
export {};
|
|
16
|
+
//# sourceMappingURL=grouping-columns.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"grouping-columns.d.ts","sourceRoot":"","sources":["../../../../libs/grid-angular/src/features/grouping-columns.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Row grouping feature for @toolbox-web/grid-angular
|
|
3
|
+
*
|
|
4
|
+
* Import this module to enable the `groupingRows` input on Grid directive.
|
|
5
|
+
*
|
|
6
|
+
* @example
|
|
7
|
+
* ```typescript
|
|
8
|
+
* import '@toolbox-web/grid-angular/features/grouping-rows';
|
|
9
|
+
*
|
|
10
|
+
* <tbw-grid [groupingRows]="{ groupBy: ['department'] }" />
|
|
11
|
+
* ```
|
|
12
|
+
*
|
|
13
|
+
* @packageDocumentation
|
|
14
|
+
*/
|
|
15
|
+
export {};
|
|
16
|
+
//# sourceMappingURL=grouping-rows.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"grouping-rows.d.ts","sourceRoot":"","sources":["../../../../libs/grid-angular/src/features/grouping-rows.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../libs/grid-angular/src/features/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,aAAa,CAAC;AACrB,OAAO,yBAAyB,CAAC;AACjC,OAAO,gBAAgB,CAAC;AACxB,OAAO,WAAW,CAAC;AACnB,OAAO,UAAU,CAAC;AAClB,OAAO,aAAa,CAAC;AACrB,OAAO,oBAAoB,CAAC;AAC5B,OAAO,iBAAiB,CAAC;AACzB,OAAO,iBAAiB,CAAC;AACzB,OAAO,kBAAkB,CAAC;AAC1B,OAAO,eAAe,CAAC;AACvB,OAAO,SAAS,CAAC;AACjB,OAAO,SAAS,CAAC;AACjB,OAAO,WAAW,CAAC;AACnB,OAAO,cAAc,CAAC;AACtB,OAAO,eAAe,CAAC;AACvB,OAAO,aAAa,CAAC;AACrB,OAAO,eAAe,CAAC;AACvB,OAAO,WAAW,CAAC;AACnB,OAAO,QAAQ,CAAC;AAChB,OAAO,aAAa,CAAC;AACrB,OAAO,cAAc,CAAC"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import "./clipboard.js";
|
|
2
|
+
import "./column-virtualization.js";
|
|
3
|
+
import "./context-menu.js";
|
|
4
|
+
import "./editing.js";
|
|
5
|
+
import "./export.js";
|
|
6
|
+
import "./filtering.js";
|
|
7
|
+
import "./grouping-columns.js";
|
|
8
|
+
import "./grouping-rows.js";
|
|
9
|
+
import "./master-detail.js";
|
|
10
|
+
import "./pinned-columns.js";
|
|
11
|
+
import "./pinned-rows.js";
|
|
12
|
+
import "./pivot.js";
|
|
13
|
+
import "./print.js";
|
|
14
|
+
import "./reorder.js";
|
|
15
|
+
import "./responsive.js";
|
|
16
|
+
import "./row-reorder.js";
|
|
17
|
+
import "./selection.js";
|
|
18
|
+
import "./server-side.js";
|
|
19
|
+
import "./sorting.js";
|
|
20
|
+
import "./tree.js";
|
|
21
|
+
import "./undo-redo.js";
|
|
22
|
+
import "./visibility.js";
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Master-detail feature for @toolbox-web/grid-angular
|
|
3
|
+
*
|
|
4
|
+
* Import this module to enable the `masterDetail` input on Grid directive.
|
|
5
|
+
*
|
|
6
|
+
* @example
|
|
7
|
+
* ```typescript
|
|
8
|
+
* import '@toolbox-web/grid-angular/features/master-detail';
|
|
9
|
+
*
|
|
10
|
+
* <tbw-grid [masterDetail]="{ detailRenderer: myRenderer }" />
|
|
11
|
+
* ```
|
|
12
|
+
*
|
|
13
|
+
* @packageDocumentation
|
|
14
|
+
*/
|
|
15
|
+
export {};
|
|
16
|
+
//# sourceMappingURL=master-detail.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"master-detail.d.ts","sourceRoot":"","sources":["../../../../libs/grid-angular/src/features/master-detail.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG"}
|