@ngxsmk/cdk 1.3.1 → 2.0.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 +1 -1
- package/cva-base/cva-base.d.ts +34 -0
- package/cva-base/cva-base.d.ts.map +1 -0
- package/cva-base/index.d.ts +2 -0
- package/cva-base/index.d.ts.map +1 -0
- package/cva-base/ngxsmk-cdk-cva-base.d.ts.map +1 -0
- package/esm2022/cva-base/cva-base.mjs +45 -0
- package/esm2022/cva-base/index.mjs +2 -0
- package/esm2022/cva-base/ngxsmk-cdk-cva-base.mjs +5 -0
- package/esm2022/input-group/index.mjs +3 -0
- package/esm2022/input-group/input-group-engine.mjs +219 -0
- package/esm2022/input-group/models/index.mjs +2 -0
- package/esm2022/input-group/models/input-group.model.mjs +2 -0
- package/esm2022/input-group/ngxsmk-cdk-input-group.mjs +5 -0
- package/esm2022/listbox-keyboard/index.mjs +2 -0
- package/esm2022/listbox-keyboard/listbox-keyboard.mjs +145 -0
- package/esm2022/listbox-keyboard/ngxsmk-cdk-listbox-keyboard.mjs +5 -0
- package/esm2022/public-api.mjs +10 -1
- package/esm2022/scheduler/index.mjs +5 -0
- package/esm2022/scheduler/models/date-range.mjs +2 -0
- package/esm2022/scheduler/models/event.model.mjs +2 -0
- package/esm2022/scheduler/models/index.mjs +6 -0
- package/esm2022/scheduler/models/resource.model.mjs +5 -0
- package/esm2022/scheduler/models/selection.model.mjs +7 -0
- package/esm2022/scheduler/models/view.model.mjs +7 -0
- package/esm2022/scheduler/ngxsmk-cdk-scheduler.mjs +5 -0
- package/esm2022/scheduler/plugin/drag-plugin.mjs +82 -0
- package/esm2022/scheduler/plugin/index.mjs +8 -0
- package/esm2022/scheduler/plugin/keyboard-plugin.mjs +150 -0
- package/esm2022/scheduler/plugin/plugin-host.mjs +48 -0
- package/esm2022/scheduler/plugin/plugin.types.mjs +2 -0
- package/esm2022/scheduler/plugin/resize-plugin.mjs +74 -0
- package/esm2022/scheduler/plugin/selection-plugin.mjs +84 -0
- package/esm2022/scheduler/plugin/tooltip-plugin.mjs +103 -0
- package/esm2022/scheduler/scheduler-engine.mjs +316 -0
- package/esm2022/scheduler/utils/date-utils.mjs +131 -0
- package/esm2022/scheduler/utils/index.mjs +3 -0
- package/esm2022/scheduler/utils/snap.mjs +24 -0
- package/esm2022/spreadsheet/index.mjs +5 -0
- package/esm2022/spreadsheet/models/cell.model.mjs +2 -0
- package/esm2022/spreadsheet/models/column.model.mjs +2 -0
- package/esm2022/spreadsheet/models/filter.model.mjs +2 -0
- package/esm2022/spreadsheet/models/formula.model.mjs +2 -0
- package/esm2022/spreadsheet/models/index.mjs +8 -0
- package/esm2022/spreadsheet/models/row.model.mjs +2 -0
- package/esm2022/spreadsheet/models/selection.model.mjs +2 -0
- package/esm2022/spreadsheet/models/sort.model.mjs +2 -0
- package/esm2022/spreadsheet/ngxsmk-cdk-spreadsheet.mjs +5 -0
- package/esm2022/spreadsheet/plugin/clipboard-plugin.mjs +171 -0
- package/esm2022/spreadsheet/plugin/filter-plugin.mjs +87 -0
- package/esm2022/spreadsheet/plugin/formula-plugin.mjs +456 -0
- package/esm2022/spreadsheet/plugin/index.mjs +10 -0
- package/esm2022/spreadsheet/plugin/plugin-host.mjs +188 -0
- package/esm2022/spreadsheet/plugin/plugin.types.mjs +2 -0
- package/esm2022/spreadsheet/plugin/selection-plugin.mjs +114 -0
- package/esm2022/spreadsheet/plugin/sort-plugin.mjs +63 -0
- package/esm2022/spreadsheet/plugin/undo-plugin.mjs +138 -0
- package/esm2022/spreadsheet/plugin/validation-plugin.mjs +71 -0
- package/esm2022/spreadsheet/spreadsheet-engine.mjs +547 -0
- package/esm2022/spreadsheet/utils/cell-utils.mjs +129 -0
- package/esm2022/spreadsheet/utils/index.mjs +2 -0
- package/esm2022/testing/a11y.mjs +6 -3
- package/fesm2022/ngxsmk-cdk-cva-base.mjs +52 -0
- package/fesm2022/ngxsmk-cdk-cva-base.mjs.map +1 -0
- package/fesm2022/ngxsmk-cdk-input-group.mjs +226 -0
- package/fesm2022/ngxsmk-cdk-input-group.mjs.map +1 -0
- package/fesm2022/ngxsmk-cdk-listbox-keyboard.mjs +152 -0
- package/fesm2022/ngxsmk-cdk-listbox-keyboard.mjs.map +1 -0
- package/fesm2022/ngxsmk-cdk-scheduler.mjs +1035 -0
- package/fesm2022/ngxsmk-cdk-scheduler.mjs.map +1 -0
- package/fesm2022/ngxsmk-cdk-spreadsheet.mjs +1969 -0
- package/fesm2022/ngxsmk-cdk-spreadsheet.mjs.map +1 -0
- package/fesm2022/ngxsmk-cdk-testing.mjs +5 -2
- package/fesm2022/ngxsmk-cdk-testing.mjs.map +1 -1
- package/fesm2022/ngxsmk-cdk.mjs +5 -0
- package/fesm2022/ngxsmk-cdk.mjs.map +1 -1
- package/input-group/index.d.ts +3 -0
- package/input-group/index.d.ts.map +1 -0
- package/input-group/input-group-engine.d.ts +88 -0
- package/input-group/input-group-engine.d.ts.map +1 -0
- package/input-group/models/index.d.ts +2 -0
- package/input-group/models/index.d.ts.map +1 -0
- package/input-group/models/input-group.model.d.ts +114 -0
- package/input-group/models/input-group.model.d.ts.map +1 -0
- package/input-group/ngxsmk-cdk-input-group.d.ts.map +1 -0
- package/listbox-keyboard/index.d.ts +2 -0
- package/listbox-keyboard/index.d.ts.map +1 -0
- package/listbox-keyboard/listbox-keyboard.d.ts +60 -0
- package/listbox-keyboard/listbox-keyboard.d.ts.map +1 -0
- package/listbox-keyboard/ngxsmk-cdk-listbox-keyboard.d.ts.map +1 -0
- package/package.json +40 -1
- package/public-api.d.ts +8 -0
- package/public-api.d.ts.map +1 -1
- package/scheduler/index.d.ts +5 -0
- package/scheduler/index.d.ts.map +1 -0
- package/scheduler/models/date-range.d.ts +6 -0
- package/scheduler/models/date-range.d.ts.map +1 -0
- package/scheduler/models/event.model.d.ts +50 -0
- package/scheduler/models/event.model.d.ts.map +1 -0
- package/scheduler/models/index.d.ts +6 -0
- package/scheduler/models/index.d.ts.map +1 -0
- package/scheduler/models/resource.model.d.ts +16 -0
- package/scheduler/models/resource.model.d.ts.map +1 -0
- package/scheduler/models/selection.model.d.ts +12 -0
- package/scheduler/models/selection.model.d.ts.map +1 -0
- package/scheduler/models/view.model.d.ts +21 -0
- package/scheduler/models/view.model.d.ts.map +1 -0
- package/scheduler/ngxsmk-cdk-scheduler.d.ts.map +1 -0
- package/scheduler/plugin/drag-plugin.d.ts +28 -0
- package/scheduler/plugin/drag-plugin.d.ts.map +1 -0
- package/scheduler/plugin/index.d.ts +8 -0
- package/scheduler/plugin/index.d.ts.map +1 -0
- package/scheduler/plugin/keyboard-plugin.d.ts +24 -0
- package/scheduler/plugin/keyboard-plugin.d.ts.map +1 -0
- package/scheduler/plugin/plugin-host.d.ts +16 -0
- package/scheduler/plugin/plugin-host.d.ts.map +1 -0
- package/scheduler/plugin/plugin.types.d.ts +9 -0
- package/scheduler/plugin/plugin.types.d.ts.map +1 -0
- package/scheduler/plugin/resize-plugin.d.ts +26 -0
- package/scheduler/plugin/resize-plugin.d.ts.map +1 -0
- package/scheduler/plugin/selection-plugin.d.ts +40 -0
- package/scheduler/plugin/selection-plugin.d.ts.map +1 -0
- package/scheduler/plugin/tooltip-plugin.d.ts +41 -0
- package/scheduler/plugin/tooltip-plugin.d.ts.map +1 -0
- package/scheduler/scheduler-engine.d.ts +95 -0
- package/scheduler/scheduler-engine.d.ts.map +1 -0
- package/scheduler/utils/date-utils.d.ts +26 -0
- package/scheduler/utils/date-utils.d.ts.map +1 -0
- package/scheduler/utils/index.d.ts +3 -0
- package/scheduler/utils/index.d.ts.map +1 -0
- package/scheduler/utils/snap.d.ts +7 -0
- package/scheduler/utils/snap.d.ts.map +1 -0
- package/spreadsheet/index.d.ts +5 -0
- package/spreadsheet/index.d.ts.map +1 -0
- package/spreadsheet/models/cell.model.d.ts +44 -0
- package/spreadsheet/models/cell.model.d.ts.map +1 -0
- package/spreadsheet/models/column.model.d.ts +77 -0
- package/spreadsheet/models/column.model.d.ts.map +1 -0
- package/spreadsheet/models/filter.model.d.ts +15 -0
- package/spreadsheet/models/filter.model.d.ts.map +1 -0
- package/spreadsheet/models/formula.model.d.ts +65 -0
- package/spreadsheet/models/formula.model.d.ts.map +1 -0
- package/spreadsheet/models/index.d.ts +8 -0
- package/spreadsheet/models/index.d.ts.map +1 -0
- package/spreadsheet/models/row.model.d.ts +33 -0
- package/spreadsheet/models/row.model.d.ts.map +1 -0
- package/spreadsheet/models/selection.model.d.ts +18 -0
- package/spreadsheet/models/selection.model.d.ts.map +1 -0
- package/spreadsheet/models/sort.model.d.ts +14 -0
- package/spreadsheet/models/sort.model.d.ts.map +1 -0
- package/spreadsheet/ngxsmk-cdk-spreadsheet.d.ts.map +1 -0
- package/spreadsheet/plugin/clipboard-plugin.d.ts +24 -0
- package/spreadsheet/plugin/clipboard-plugin.d.ts.map +1 -0
- package/spreadsheet/plugin/filter-plugin.d.ts +21 -0
- package/spreadsheet/plugin/filter-plugin.d.ts.map +1 -0
- package/spreadsheet/plugin/formula-plugin.d.ts +39 -0
- package/spreadsheet/plugin/formula-plugin.d.ts.map +1 -0
- package/spreadsheet/plugin/index.d.ts +10 -0
- package/spreadsheet/plugin/index.d.ts.map +1 -0
- package/spreadsheet/plugin/plugin-host.d.ts +66 -0
- package/spreadsheet/plugin/plugin-host.d.ts.map +1 -0
- package/spreadsheet/plugin/plugin.types.d.ts +58 -0
- package/spreadsheet/plugin/plugin.types.d.ts.map +1 -0
- package/spreadsheet/plugin/selection-plugin.d.ts +28 -0
- package/spreadsheet/plugin/selection-plugin.d.ts.map +1 -0
- package/spreadsheet/plugin/sort-plugin.d.ts +18 -0
- package/spreadsheet/plugin/sort-plugin.d.ts.map +1 -0
- package/spreadsheet/plugin/undo-plugin.d.ts +40 -0
- package/spreadsheet/plugin/undo-plugin.d.ts.map +1 -0
- package/spreadsheet/plugin/validation-plugin.d.ts +29 -0
- package/spreadsheet/plugin/validation-plugin.d.ts.map +1 -0
- package/spreadsheet/spreadsheet-engine.d.ts +194 -0
- package/spreadsheet/spreadsheet-engine.d.ts.map +1 -0
- package/spreadsheet/utils/cell-utils.d.ts +26 -0
- package/spreadsheet/utils/cell-utils.d.ts.map +1 -0
- package/spreadsheet/utils/index.d.ts +2 -0
- package/spreadsheet/utils/index.d.ts.map +1 -0
- package/testing/a11y.d.ts +5 -1
- package/testing/a11y.d.ts.map +1 -1
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { SpreadsheetPlugin } from './plugin.types';
|
|
2
|
+
import type { SpreadsheetEngine } from '../spreadsheet-engine';
|
|
3
|
+
import type { FilterCriterion } from '../models';
|
|
4
|
+
/**
|
|
5
|
+
* FilterPlugin applies column-level filters to the row set.
|
|
6
|
+
* Stores original rows and restores on clear.
|
|
7
|
+
*/
|
|
8
|
+
export declare class FilterPlugin implements SpreadsheetPlugin {
|
|
9
|
+
readonly name = "filter";
|
|
10
|
+
readonly priority = 20;
|
|
11
|
+
private _engine;
|
|
12
|
+
private _originalRows;
|
|
13
|
+
onInit(engine: SpreadsheetEngine): void;
|
|
14
|
+
/** Apply filter criteria. */
|
|
15
|
+
applyFilter(criteria: readonly FilterCriterion[], mode: 'and' | 'or'): void;
|
|
16
|
+
/** Clear all filters and restore original rows. */
|
|
17
|
+
clearFilter(): void;
|
|
18
|
+
onBeforeFilter(): boolean;
|
|
19
|
+
onAfterFilter(): void;
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=filter-plugin.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"filter-plugin.d.ts","sourceRoot":"","sources":["../../../../../packages/cdk/spreadsheet/plugin/filter-plugin.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AACxD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC/D,OAAO,KAAK,EAAE,eAAe,EAAU,MAAM,WAAW,CAAC;AAEzD;;;GAGG;AACH,qBAAa,YAAa,YAAW,iBAAiB;IACpD,QAAQ,CAAC,IAAI,YAAY;IACzB,QAAQ,CAAC,QAAQ,MAAM;IAEvB,OAAO,CAAC,OAAO,CAAkC;IACjD,OAAO,CAAC,aAAa,CAAyB;IAE9C,MAAM,CAAC,MAAM,EAAE,iBAAiB,GAAG,IAAI;IAKvC,6BAA6B;IAC7B,WAAW,CAAC,QAAQ,EAAE,SAAS,eAAe,EAAE,EAAE,IAAI,EAAE,KAAK,GAAG,IAAI,GAAG,IAAI;IAgB3E,mDAAmD;IACnD,WAAW,IAAI,IAAI;IAKnB,cAAc,IAAI,OAAO;IAIzB,aAAa,IAAI,IAAI;CAMtB"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import type { SpreadsheetPlugin } from './plugin.types';
|
|
2
|
+
import type { SpreadsheetEngine } from '../spreadsheet-engine';
|
|
3
|
+
import type { FormulaResult, FormulaFunction } from '../models';
|
|
4
|
+
/**
|
|
5
|
+
* FormulaPlugin evaluates formulas in cells.
|
|
6
|
+
* Maintains a dependency graph for recalculation ordering.
|
|
7
|
+
*/
|
|
8
|
+
export declare class FormulaPlugin implements SpreadsheetPlugin {
|
|
9
|
+
readonly name = "formula";
|
|
10
|
+
readonly priority = 50;
|
|
11
|
+
private _engine;
|
|
12
|
+
private _functions;
|
|
13
|
+
constructor();
|
|
14
|
+
onInit(engine: SpreadsheetEngine): void;
|
|
15
|
+
onDestroy(): void;
|
|
16
|
+
/** Register a custom function. */
|
|
17
|
+
registerFunction(fn: FormulaFunction): void;
|
|
18
|
+
/** Evaluate a formula string. */
|
|
19
|
+
evaluate(formula: string, getCellValue: (ref: string) => unknown): FormulaResult;
|
|
20
|
+
/** Build a dependency graph: which cells depend on which. */
|
|
21
|
+
buildDependencyGraph(): Map<string, string[]>;
|
|
22
|
+
/** Topologically sort cells by their dependencies (recalc order). */
|
|
23
|
+
getRecalcOrder(): string[];
|
|
24
|
+
private _parse;
|
|
25
|
+
private _parseExpression;
|
|
26
|
+
private _parseComparison;
|
|
27
|
+
private _parseConcat;
|
|
28
|
+
private _parseAddSub;
|
|
29
|
+
private _parseMulDiv;
|
|
30
|
+
private _parseUnary;
|
|
31
|
+
private _parsePrimary;
|
|
32
|
+
private _parseCellRef;
|
|
33
|
+
private _skipSpaces;
|
|
34
|
+
private _evalNode;
|
|
35
|
+
private _evalBinaryOp;
|
|
36
|
+
private _extractRefs;
|
|
37
|
+
private _registerBuiltinFunctions;
|
|
38
|
+
}
|
|
39
|
+
//# sourceMappingURL=formula-plugin.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"formula-plugin.d.ts","sourceRoot":"","sources":["../../../../../packages/cdk/spreadsheet/plugin/formula-plugin.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AACxD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC/D,OAAO,KAAK,EAUV,aAAa,EACb,eAAe,EAChB,MAAM,WAAW,CAAC;AAEnB;;;GAGG;AACH,qBAAa,aAAc,YAAW,iBAAiB;IACrD,QAAQ,CAAC,IAAI,aAAa;IAC1B,QAAQ,CAAC,QAAQ,MAAM;IAEvB,OAAO,CAAC,OAAO,CAAkC;IACjD,OAAO,CAAC,UAAU,CAAsC;;IAMxD,MAAM,CAAC,MAAM,EAAE,iBAAiB,GAAG,IAAI;IAIvC,SAAS,IAAI,IAAI;IAIjB,kCAAkC;IAClC,gBAAgB,CAAC,EAAE,EAAE,eAAe,GAAG,IAAI;IAI3C,iCAAiC;IACjC,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,GAAG,aAAa;IAWhF,6DAA6D;IAC7D,oBAAoB,IAAI,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC;IAoB7C,qEAAqE;IACrE,cAAc,IAAI,MAAM,EAAE;IA2B1B,OAAO,CAAC,MAAM;IASd,OAAO,CAAC,gBAAgB;IAIxB,OAAO,CAAC,gBAAgB;IAoCxB,OAAO,CAAC,YAAY;IAcpB,OAAO,CAAC,YAAY;IAepB,OAAO,CAAC,YAAY;IAepB,OAAO,CAAC,WAAW;IAWnB,OAAO,CAAC,aAAa;IAgGrB,OAAO,CAAC,aAAa;IAQrB,OAAO,CAAC,WAAW;IAMnB,OAAO,CAAC,SAAS;IA+CjB,OAAO,CAAC,aAAa;IAgCrB,OAAO,CAAC,YAAY;IAYpB,OAAO,CAAC,yBAAyB;CA2FlC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export * from './plugin.types';
|
|
2
|
+
export * from './plugin-host';
|
|
3
|
+
export * from './sort-plugin';
|
|
4
|
+
export * from './filter-plugin';
|
|
5
|
+
export * from './selection-plugin';
|
|
6
|
+
export * from './formula-plugin';
|
|
7
|
+
export * from './clipboard-plugin';
|
|
8
|
+
export * from './undo-plugin';
|
|
9
|
+
export * from './validation-plugin';
|
|
10
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../packages/cdk/spreadsheet/plugin/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAC;AAC/B,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC;AAC9B,cAAc,iBAAiB,CAAC;AAChC,cAAc,oBAAoB,CAAC;AACnC,cAAc,kBAAkB,CAAC;AACjC,cAAc,oBAAoB,CAAC;AACnC,cAAc,eAAe,CAAC;AAC9B,cAAc,qBAAqB,CAAC"}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import type { SpreadsheetPlugin } from './plugin.types';
|
|
2
|
+
import type { SpreadsheetEngine } from '../spreadsheet-engine';
|
|
3
|
+
/**
|
|
4
|
+
* PluginHost manages the lifecycle of all registered plugins.
|
|
5
|
+
* Plugins are executed in priority order (lower = first).
|
|
6
|
+
*/
|
|
7
|
+
export declare class PluginHost {
|
|
8
|
+
private _plugins;
|
|
9
|
+
private _engine;
|
|
10
|
+
/** Register one or more plugins. */
|
|
11
|
+
register(...plugins: SpreadsheetPlugin[]): void;
|
|
12
|
+
/** Unregister plugins by name. */
|
|
13
|
+
unregister(...names: string[]): void;
|
|
14
|
+
/** Initialize all plugins with the engine. Called once during engine construction. */
|
|
15
|
+
init(engine: SpreadsheetEngine): void;
|
|
16
|
+
/** Destroy all plugins. */
|
|
17
|
+
destroy(): void;
|
|
18
|
+
/** Run onBeforeRender on all plugins. Returns false if any plugin cancels. */
|
|
19
|
+
beforeRender(): boolean;
|
|
20
|
+
/** Run onAfterRender on all plugins. */
|
|
21
|
+
afterRender(): void;
|
|
22
|
+
/** Run onBeforeEdit on all plugins. Returns false if any cancels. */
|
|
23
|
+
beforeEdit(rowIndex: number, colId: string): boolean;
|
|
24
|
+
/** Run onAfterEdit on all plugins. */
|
|
25
|
+
afterEdit(rowIndex: number, colId: string, oldValue: unknown, newValue: unknown): void;
|
|
26
|
+
/** Run onBeforeSort on all plugins. Returns false if any cancels. */
|
|
27
|
+
beforeSort(colId: string, direction: 'asc' | 'desc' | null): boolean;
|
|
28
|
+
/** Run onAfterSort on all plugins. */
|
|
29
|
+
afterSort(): void;
|
|
30
|
+
/** Run onBeforeFilter on all plugins. Returns false if any cancels. */
|
|
31
|
+
beforeFilter(): boolean;
|
|
32
|
+
/** Run onAfterFilter on all plugins. */
|
|
33
|
+
afterFilter(): void;
|
|
34
|
+
/** Run onBeforeInsertRows on all plugins. Returns false if any cancels. */
|
|
35
|
+
beforeInsertRows(count: number, atIndex: number): boolean;
|
|
36
|
+
/** Run onAfterInsertRows on all plugins. */
|
|
37
|
+
afterInsertRows(indices: number[]): void;
|
|
38
|
+
/** Run onBeforeDeleteRows on all plugins. Returns false if any cancels. */
|
|
39
|
+
beforeDeleteRows(indices: number[]): boolean;
|
|
40
|
+
/** Run onAfterDeleteRows on all plugins. */
|
|
41
|
+
afterDeleteRows(indices: number[]): void;
|
|
42
|
+
/** Run onBeforeInsertColumns on all plugins. Returns false if any cancels. */
|
|
43
|
+
beforeInsertColumns(count: number, atIndex: number): boolean;
|
|
44
|
+
/** Run onAfterInsertColumns on all plugins. */
|
|
45
|
+
afterInsertColumns(indices: number[]): void;
|
|
46
|
+
/** Run onBeforeDeleteColumns on all plugins. Returns false if any cancels. */
|
|
47
|
+
beforeDeleteColumns(indices: number[]): boolean;
|
|
48
|
+
/** Run onAfterDeleteColumns on all plugins. */
|
|
49
|
+
afterDeleteColumns(indices: number[]): void;
|
|
50
|
+
/** Run onBeforePaste on all plugins. Returns false if any cancels. */
|
|
51
|
+
beforePaste(data: string, startCell: {
|
|
52
|
+
row: number;
|
|
53
|
+
col: number;
|
|
54
|
+
}): boolean;
|
|
55
|
+
/** Run onAfterPaste on all plugins. */
|
|
56
|
+
afterPaste(): void;
|
|
57
|
+
/** Run onBeforeCopy on all plugins. Returns false if any cancels. */
|
|
58
|
+
beforeCopy(): boolean;
|
|
59
|
+
/** Run onAfterCopy on all plugins. */
|
|
60
|
+
afterCopy(): void;
|
|
61
|
+
/** Fire a custom event to all plugins. */
|
|
62
|
+
fireEvent(eventType: string, payload: unknown): void;
|
|
63
|
+
/** Get all registered plugins. */
|
|
64
|
+
get plugins(): readonly SpreadsheetPlugin[];
|
|
65
|
+
}
|
|
66
|
+
//# sourceMappingURL=plugin-host.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plugin-host.d.ts","sourceRoot":"","sources":["../../../../../packages/cdk/spreadsheet/plugin/plugin-host.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AACxD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAE/D;;;GAGG;AACH,qBAAa,UAAU;IACrB,OAAO,CAAC,QAAQ,CAA2B;IAC3C,OAAO,CAAC,OAAO,CAAkC;IAEjD,oCAAoC;IACpC,QAAQ,CAAC,GAAG,OAAO,EAAE,iBAAiB,EAAE,GAAG,IAAI;IAK/C,kCAAkC;IAClC,UAAU,CAAC,GAAG,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI;IAOpC,sFAAsF;IACtF,IAAI,CAAC,MAAM,EAAE,iBAAiB,GAAG,IAAI;IAOrC,2BAA2B;IAC3B,OAAO,IAAI,IAAI;IAQf,8EAA8E;IAC9E,YAAY,IAAI,OAAO;IAOvB,wCAAwC;IACxC,WAAW,IAAI,IAAI;IAMnB,qEAAqE;IACrE,UAAU,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO;IAOpD,sCAAsC;IACtC,SAAS,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,GAAG,IAAI;IAMtF,qEAAqE;IACrE,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,KAAK,GAAG,MAAM,GAAG,IAAI,GAAG,OAAO;IAOpE,sCAAsC;IACtC,SAAS,IAAI,IAAI;IAMjB,uEAAuE;IACvE,YAAY,IAAI,OAAO;IAOvB,wCAAwC;IACxC,WAAW,IAAI,IAAI;IAMnB,2EAA2E;IAC3E,gBAAgB,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO;IAOzD,4CAA4C;IAC5C,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI;IAMxC,2EAA2E;IAC3E,gBAAgB,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,OAAO;IAO5C,4CAA4C;IAC5C,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI;IAMxC,8EAA8E;IAC9E,mBAAmB,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO;IAO5D,+CAA+C;IAC/C,kBAAkB,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI;IAM3C,8EAA8E;IAC9E,mBAAmB,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,OAAO;IAO/C,+CAA+C;IAC/C,kBAAkB,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI;IAM3C,sEAAsE;IACtE,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO;IAO3E,uCAAuC;IACvC,UAAU,IAAI,IAAI;IAMlB,qEAAqE;IACrE,UAAU,IAAI,OAAO;IAOrB,sCAAsC;IACtC,SAAS,IAAI,IAAI;IAMjB,0CAA0C;IAC1C,SAAS,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,IAAI;IAMpD,kCAAkC;IAClC,IAAI,OAAO,IAAI,SAAS,iBAAiB,EAAE,CAE1C;CACF"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import type { SpreadsheetEngine } from '../spreadsheet-engine';
|
|
2
|
+
/** Plugin lifecycle interface. Every spreadsheet plugin must implement this. */
|
|
3
|
+
export interface SpreadsheetPlugin {
|
|
4
|
+
/** Unique plugin name for identification. */
|
|
5
|
+
readonly name: string;
|
|
6
|
+
/** Execution priority – lower runs first. Default 0. */
|
|
7
|
+
readonly priority?: number;
|
|
8
|
+
/** Called when the engine initializes. */
|
|
9
|
+
onInit?(engine: SpreadsheetEngine): void;
|
|
10
|
+
/** Called when the engine is destroyed. */
|
|
11
|
+
onDestroy?(): void;
|
|
12
|
+
/** Called before each render cycle. Return false to cancel. */
|
|
13
|
+
onBeforeRender?(): boolean;
|
|
14
|
+
/** Called after each render cycle. */
|
|
15
|
+
onAfterRender?(): void;
|
|
16
|
+
/** Called before a cell edit begins. Return false to cancel. */
|
|
17
|
+
onBeforeEdit?(rowIndex: number, colId: string): boolean;
|
|
18
|
+
/** Called after a cell edit completes. */
|
|
19
|
+
onAfterEdit?(rowIndex: number, colId: string, oldValue: unknown, newValue: unknown): void;
|
|
20
|
+
/** Called before a sort operation. Return false to cancel. */
|
|
21
|
+
onBeforeSort?(colId: string, direction: 'asc' | 'desc' | null): boolean;
|
|
22
|
+
/** Called after a sort operation. */
|
|
23
|
+
onAfterSort?(): void;
|
|
24
|
+
/** Called before a filter operation. Return false to cancel. */
|
|
25
|
+
onBeforeFilter?(): boolean;
|
|
26
|
+
/** Called after a filter operation. */
|
|
27
|
+
onAfterFilter?(): void;
|
|
28
|
+
/** Called before rows are inserted. Return false to cancel. */
|
|
29
|
+
onBeforeInsertRows?(count: number, atIndex: number): boolean;
|
|
30
|
+
/** Called after rows are inserted. */
|
|
31
|
+
onAfterInsertRows?(indices: number[]): void;
|
|
32
|
+
/** Called before rows are deleted. Return false to cancel. */
|
|
33
|
+
onBeforeDeleteRows?(indices: number[]): boolean;
|
|
34
|
+
/** Called after rows are deleted. */
|
|
35
|
+
onAfterDeleteRows?(indices: number[]): void;
|
|
36
|
+
/** Called before columns are inserted. Return false to cancel. */
|
|
37
|
+
onBeforeInsertColumns?(count: number, atIndex: number): boolean;
|
|
38
|
+
/** Called after columns are inserted. */
|
|
39
|
+
onAfterInsertColumns?(indices: number[]): void;
|
|
40
|
+
/** Called before columns are deleted. Return false to cancel. */
|
|
41
|
+
onBeforeDeleteColumns?(indices: number[]): boolean;
|
|
42
|
+
/** Called after columns are deleted. */
|
|
43
|
+
onAfterDeleteColumns?(indices: number[]): void;
|
|
44
|
+
/** Called before clipboard paste. Return false to cancel. */
|
|
45
|
+
onBeforePaste?(data: string, startCell: {
|
|
46
|
+
row: number;
|
|
47
|
+
col: number;
|
|
48
|
+
}): boolean;
|
|
49
|
+
/** Called after clipboard paste. */
|
|
50
|
+
onAfterPaste?(): void;
|
|
51
|
+
/** Called before clipboard copy. Return false to cancel. */
|
|
52
|
+
onBeforeCopy?(): boolean;
|
|
53
|
+
/** Called after clipboard copy. */
|
|
54
|
+
onAfterCopy?(): void;
|
|
55
|
+
/** Custom event handler for arbitrary spreadsheet events. */
|
|
56
|
+
onEvent?(eventType: string, payload: unknown): void;
|
|
57
|
+
}
|
|
58
|
+
//# sourceMappingURL=plugin.types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plugin.types.d.ts","sourceRoot":"","sources":["../../../../../packages/cdk/spreadsheet/plugin/plugin.types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAE/D,gFAAgF;AAChF,MAAM,WAAW,iBAAiB;IAChC,6CAA6C;IAC7C,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,wDAAwD;IACxD,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,0CAA0C;IAC1C,MAAM,CAAC,CAAC,MAAM,EAAE,iBAAiB,GAAG,IAAI,CAAC;IACzC,2CAA2C;IAC3C,SAAS,CAAC,IAAI,IAAI,CAAC;IACnB,+DAA+D;IAC/D,cAAc,CAAC,IAAI,OAAO,CAAC;IAC3B,sCAAsC;IACtC,aAAa,CAAC,IAAI,IAAI,CAAC;IACvB,gEAAgE;IAChE,YAAY,CAAC,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC;IACxD,0CAA0C;IAC1C,WAAW,CAAC,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,GAAG,IAAI,CAAC;IAC1F,8DAA8D;IAC9D,YAAY,CAAC,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,KAAK,GAAG,MAAM,GAAG,IAAI,GAAG,OAAO,CAAC;IACxE,qCAAqC;IACrC,WAAW,CAAC,IAAI,IAAI,CAAC;IACrB,gEAAgE;IAChE,cAAc,CAAC,IAAI,OAAO,CAAC;IAC3B,uCAAuC;IACvC,aAAa,CAAC,IAAI,IAAI,CAAC;IACvB,+DAA+D;IAC/D,kBAAkB,CAAC,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC;IAC7D,sCAAsC;IACtC,iBAAiB,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;IAC5C,8DAA8D;IAC9D,kBAAkB,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC;IAChD,qCAAqC;IACrC,iBAAiB,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;IAC5C,kEAAkE;IAClE,qBAAqB,CAAC,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC;IAChE,yCAAyC;IACzC,oBAAoB,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;IAC/C,iEAAiE;IACjE,qBAAqB,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC;IACnD,wCAAwC;IACxC,oBAAoB,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;IAC/C,6DAA6D;IAC7D,aAAa,CAAC,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC;IAC/E,oCAAoC;IACpC,YAAY,CAAC,IAAI,IAAI,CAAC;IACtB,4DAA4D;IAC5D,YAAY,CAAC,IAAI,OAAO,CAAC;IACzB,mCAAmC;IACnC,WAAW,CAAC,IAAI,IAAI,CAAC;IACrB,6DAA6D;IAC7D,OAAO,CAAC,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,IAAI,CAAC;CACrD"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import type { SpreadsheetPlugin } from './plugin.types';
|
|
2
|
+
import type { SpreadsheetEngine } from '../spreadsheet-engine';
|
|
3
|
+
import type { CellAddress } from '../models';
|
|
4
|
+
/**
|
|
5
|
+
* SelectionPlugin manages cell/row/column/range selection state.
|
|
6
|
+
* Handles keyboard navigation and selection extension.
|
|
7
|
+
*/
|
|
8
|
+
export declare class SelectionPlugin implements SpreadsheetPlugin {
|
|
9
|
+
readonly name = "selection";
|
|
10
|
+
readonly priority = 5;
|
|
11
|
+
private _engine;
|
|
12
|
+
onInit(engine: SpreadsheetEngine): void;
|
|
13
|
+
/** Select a single cell. */
|
|
14
|
+
selectCell(row: number, col: number): void;
|
|
15
|
+
/** Select a rectangular range. */
|
|
16
|
+
selectRange(start: CellAddress, end: CellAddress): void;
|
|
17
|
+
/** Select an entire row. */
|
|
18
|
+
selectRow(rowIndex: number): void;
|
|
19
|
+
/** Select an entire column. */
|
|
20
|
+
selectColumn(colIndex: number): void;
|
|
21
|
+
/** Extend the range selection to include the given cell. */
|
|
22
|
+
extendSelection(row: number, col: number): void;
|
|
23
|
+
/** Clear all selection. */
|
|
24
|
+
clearSelection(): void;
|
|
25
|
+
/** Check if a cell is within the current selection. */
|
|
26
|
+
isSelected(row: number, col: number): boolean;
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=selection-plugin.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"selection-plugin.d.ts","sourceRoot":"","sources":["../../../../../packages/cdk/spreadsheet/plugin/selection-plugin.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AACxD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC/D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAE7C;;;GAGG;AACH,qBAAa,eAAgB,YAAW,iBAAiB;IACvD,QAAQ,CAAC,IAAI,eAAe;IAC5B,QAAQ,CAAC,QAAQ,KAAK;IAEtB,OAAO,CAAC,OAAO,CAAkC;IAEjD,MAAM,CAAC,MAAM,EAAE,iBAAiB,GAAG,IAAI;IAIvC,4BAA4B;IAC5B,UAAU,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI;IAU1C,kCAAkC;IAClC,WAAW,CAAC,KAAK,EAAE,WAAW,EAAE,GAAG,EAAE,WAAW,GAAG,IAAI;IASvD,4BAA4B;IAC5B,SAAS,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAejC,+BAA+B;IAC/B,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAepC,4DAA4D;IAC5D,eAAe,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI;IAU/C,2BAA2B;IAC3B,cAAc,IAAI,IAAI;IAYtB,uDAAuD;IACvD,UAAU,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO;CAiB9C"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { SpreadsheetPlugin } from './plugin.types';
|
|
2
|
+
import type { SpreadsheetEngine } from '../spreadsheet-engine';
|
|
3
|
+
import type { SortCriterion } from '../models';
|
|
4
|
+
/**
|
|
5
|
+
* SortPlugin manages multi-column sorting.
|
|
6
|
+
* Sorts the engine's rows by the active sort criteria.
|
|
7
|
+
*/
|
|
8
|
+
export declare class SortPlugin implements SpreadsheetPlugin {
|
|
9
|
+
readonly name = "sort";
|
|
10
|
+
readonly priority = 10;
|
|
11
|
+
private _engine;
|
|
12
|
+
onInit(engine: SpreadsheetEngine): void;
|
|
13
|
+
/** Apply all active sort criteria to the engine's row list. */
|
|
14
|
+
applySort(criteria: readonly SortCriterion[]): void;
|
|
15
|
+
onBeforeSort(_colId: string, _direction: 'asc' | 'desc' | null): boolean;
|
|
16
|
+
onAfterSort(): void;
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=sort-plugin.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sort-plugin.d.ts","sourceRoot":"","sources":["../../../../../packages/cdk/spreadsheet/plugin/sort-plugin.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AACxD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC/D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAE/C;;;GAGG;AACH,qBAAa,UAAW,YAAW,iBAAiB;IAClD,QAAQ,CAAC,IAAI,UAAU;IACvB,QAAQ,CAAC,QAAQ,MAAM;IAEvB,OAAO,CAAC,OAAO,CAAkC;IAEjD,MAAM,CAAC,MAAM,EAAE,iBAAiB,GAAG,IAAI;IAIvC,+DAA+D;IAC/D,SAAS,CAAC,QAAQ,EAAE,SAAS,aAAa,EAAE,GAAG,IAAI;IA6BnD,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,KAAK,GAAG,MAAM,GAAG,IAAI,GAAG,OAAO;IAIxE,WAAW,IAAI,IAAI;CAMpB"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import type { SpreadsheetPlugin } from './plugin.types';
|
|
2
|
+
import type { SpreadsheetEngine } from '../spreadsheet-engine';
|
|
3
|
+
import type { CellValue } from '../models';
|
|
4
|
+
/**
|
|
5
|
+
* UndoPlugin provides undo/redo by maintaining a history stack.
|
|
6
|
+
* Captures snapshots before mutations.
|
|
7
|
+
*/
|
|
8
|
+
export declare class UndoPlugin implements SpreadsheetPlugin {
|
|
9
|
+
readonly name = "undo";
|
|
10
|
+
readonly priority = 100;
|
|
11
|
+
private _engine;
|
|
12
|
+
private _undoStack;
|
|
13
|
+
private _redoStack;
|
|
14
|
+
private _maxHistory;
|
|
15
|
+
onInit(engine: SpreadsheetEngine): void;
|
|
16
|
+
onDestroy(): void;
|
|
17
|
+
/** Record an edit mutation for undo. */
|
|
18
|
+
recordEdit(rowIndex: number, colId: string, oldValue: CellValue, newValue: CellValue): void;
|
|
19
|
+
/** Record a bulk edit (multiple cells). */
|
|
20
|
+
recordBulkEdit(edits: {
|
|
21
|
+
rowIndex: number;
|
|
22
|
+
colId: string;
|
|
23
|
+
oldValue: CellValue;
|
|
24
|
+
newValue: CellValue;
|
|
25
|
+
}[]): void;
|
|
26
|
+
/** Undo the last mutation. */
|
|
27
|
+
undo(): boolean;
|
|
28
|
+
/** Redo the last undone mutation. */
|
|
29
|
+
redo(): boolean;
|
|
30
|
+
/** Whether undo is available. */
|
|
31
|
+
get canUndo(): boolean;
|
|
32
|
+
/** Whether redo is available. */
|
|
33
|
+
get canRedo(): boolean;
|
|
34
|
+
/** Clear all history. */
|
|
35
|
+
clearHistory(): void;
|
|
36
|
+
private _push;
|
|
37
|
+
private _applyUndo;
|
|
38
|
+
private _applyRedo;
|
|
39
|
+
}
|
|
40
|
+
//# sourceMappingURL=undo-plugin.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"undo-plugin.d.ts","sourceRoot":"","sources":["../../../../../packages/cdk/spreadsheet/plugin/undo-plugin.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AACxD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC/D,OAAO,KAAK,EAAE,SAAS,EAAU,MAAM,WAAW,CAAC;AAcnD;;;GAGG;AACH,qBAAa,UAAW,YAAW,iBAAiB;IAClD,QAAQ,CAAC,IAAI,UAAU;IACvB,QAAQ,CAAC,QAAQ,OAAO;IAExB,OAAO,CAAC,OAAO,CAAkC;IACjD,OAAO,CAAC,UAAU,CAAmB;IACrC,OAAO,CAAC,UAAU,CAAmB;IACrC,OAAO,CAAC,WAAW,CAAO;IAE1B,MAAM,CAAC,MAAM,EAAE,iBAAiB,GAAG,IAAI;IAIvC,SAAS,IAAI,IAAI;IAKjB,wCAAwC;IACxC,UAAU,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,GAAG,IAAI;IAQ3F,2CAA2C;IAC3C,cAAc,CACZ,KAAK,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,SAAS,CAAC;QAAC,QAAQ,EAAE,SAAS,CAAA;KAAE,EAAE,GACrF,IAAI;IAKP,8BAA8B;IAC9B,IAAI,IAAI,OAAO;IAQf,qCAAqC;IACrC,IAAI,IAAI,OAAO;IAQf,iCAAiC;IACjC,IAAI,OAAO,IAAI,OAAO,CAErB;IAED,iCAAiC;IACjC,IAAI,OAAO,IAAI,OAAO,CAErB;IAED,yBAAyB;IACzB,YAAY,IAAI,IAAI;IAKpB,OAAO,CAAC,KAAK;IAQb,OAAO,CAAC,UAAU;IA+BlB,OAAO,CAAC,UAAU;CA8BnB"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import type { SpreadsheetPlugin } from './plugin.types';
|
|
2
|
+
import type { SpreadsheetEngine } from '../spreadsheet-engine';
|
|
3
|
+
import type { CellValue } from '../models';
|
|
4
|
+
/** Validation rule applied to cells. */
|
|
5
|
+
export interface ValidationRule {
|
|
6
|
+
readonly colId: string;
|
|
7
|
+
readonly validator: (value: CellValue) => string | null;
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* ValidationPlugin validates cell values against registered rules.
|
|
11
|
+
*/
|
|
12
|
+
export declare class ValidationPlugin implements SpreadsheetPlugin {
|
|
13
|
+
readonly name = "validation";
|
|
14
|
+
readonly priority = 40;
|
|
15
|
+
private _engine;
|
|
16
|
+
private _rules;
|
|
17
|
+
onInit(engine: SpreadsheetEngine): void;
|
|
18
|
+
/** Register a validation rule for a column. */
|
|
19
|
+
addRule(rule: ValidationRule): void;
|
|
20
|
+
/** Remove a validation rule. */
|
|
21
|
+
removeRule(colId: string): void;
|
|
22
|
+
/** Validate a single cell value. Returns null if valid, error string if not. */
|
|
23
|
+
validate(colId: string, value: CellValue): string | null;
|
|
24
|
+
/** Validate all cells and return errors indexed by "row:colId". */
|
|
25
|
+
validateAll(): Map<string, string[]>;
|
|
26
|
+
onBeforeEdit(_rowIndex: number, _colId: string): boolean;
|
|
27
|
+
onAfterEdit(rowIndex: number, colId: string, _oldValue: unknown, newValue: unknown): void;
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=validation-plugin.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validation-plugin.d.ts","sourceRoot":"","sources":["../../../../../packages/cdk/spreadsheet/plugin/validation-plugin.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AACxD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC/D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAE3C,wCAAwC;AACxC,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,SAAS,EAAE,CAAC,KAAK,EAAE,SAAS,KAAK,MAAM,GAAG,IAAI,CAAC;CACzD;AAED;;GAEG;AACH,qBAAa,gBAAiB,YAAW,iBAAiB;IACxD,QAAQ,CAAC,IAAI,gBAAgB;IAC7B,QAAQ,CAAC,QAAQ,MAAM;IAEvB,OAAO,CAAC,OAAO,CAAkC;IACjD,OAAO,CAAC,MAAM,CAA0D;IAExE,MAAM,CAAC,MAAM,EAAE,iBAAiB,GAAG,IAAI;IAIvC,+CAA+C;IAC/C,OAAO,CAAC,IAAI,EAAE,cAAc,GAAG,IAAI;IAInC,gCAAgC;IAChC,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAI/B,gFAAgF;IAChF,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,GAAG,MAAM,GAAG,IAAI;IAKxD,mEAAmE;IACnE,WAAW,IAAI,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC;IAqBpC,YAAY,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO;IAIxD,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,GAAG,IAAI;CAqB1F"}
|
|
@@ -0,0 +1,194 @@
|
|
|
1
|
+
import { type WritableSignal, type Signal } from '@angular/core';
|
|
2
|
+
import type { CellValue, CellAddress, CellMeta, ColumnDef, ColumnState, RowDef, SelectionState, SortState, FilterState, FilterCriterion } from './models';
|
|
3
|
+
import type { SpreadsheetPlugin } from './plugin/plugin.types';
|
|
4
|
+
import { PluginHost } from './plugin/plugin-host';
|
|
5
|
+
/** Density presets controlling row height and cell padding. */
|
|
6
|
+
export type SpreadsheetDensity = 'compact' | 'comfortable' | 'dense';
|
|
7
|
+
export interface SpreadsheetConfig {
|
|
8
|
+
/** Column definitions. */
|
|
9
|
+
columns?: ColumnDef[];
|
|
10
|
+
/** Initial row data. */
|
|
11
|
+
rows?: RowDef[];
|
|
12
|
+
/** Enable multi-column sorting. */
|
|
13
|
+
multiSort?: boolean;
|
|
14
|
+
/** Selection mode. */
|
|
15
|
+
selectionMode?: 'cell' | 'range' | 'row' | 'column' | 'none';
|
|
16
|
+
/** Density preset. */
|
|
17
|
+
density?: SpreadsheetDensity;
|
|
18
|
+
/** Enable inline editing. */
|
|
19
|
+
editable?: boolean;
|
|
20
|
+
/** Enable formula evaluation. */
|
|
21
|
+
formulas?: boolean;
|
|
22
|
+
/** Number of rows to render in the viewport buffer. */
|
|
23
|
+
bufferRows?: number;
|
|
24
|
+
/** Row height in px (used for virtual scroll calculations). */
|
|
25
|
+
rowHeight?: number;
|
|
26
|
+
/** Header height in px. */
|
|
27
|
+
headerHeight?: number;
|
|
28
|
+
/** Plugins to register. */
|
|
29
|
+
plugins?: SpreadsheetPlugin[];
|
|
30
|
+
/** Enable tree / hierarchical data. */
|
|
31
|
+
treeData?: boolean;
|
|
32
|
+
/** RTL layout. */
|
|
33
|
+
rtl?: boolean;
|
|
34
|
+
/** Frozen row count. */
|
|
35
|
+
frozenRows?: number;
|
|
36
|
+
/** Frozen column count. */
|
|
37
|
+
frozenColumns?: number;
|
|
38
|
+
}
|
|
39
|
+
/** Lifecycle hooks for before/after operations. */
|
|
40
|
+
export interface SpreadsheetLifecycleHooks {
|
|
41
|
+
beforeEdit: Signal<(rowIndex: number, colId: string) => boolean>;
|
|
42
|
+
afterEdit: Signal<(rowIndex: number, colId: string, oldValue: CellValue, newValue: CellValue) => void>;
|
|
43
|
+
beforeSort: Signal<(colId: string, direction: 'asc' | 'desc' | null) => boolean>;
|
|
44
|
+
afterSort: Signal<() => void>;
|
|
45
|
+
beforeFilter: Signal<() => boolean>;
|
|
46
|
+
afterFilter: Signal<() => void>;
|
|
47
|
+
beforeInsertRows: Signal<(count: number, atIndex: number) => boolean>;
|
|
48
|
+
afterInsertRows: Signal<(indices: number[]) => void>;
|
|
49
|
+
beforeDeleteRows: Signal<(indices: number[]) => boolean>;
|
|
50
|
+
afterDeleteRows: Signal<(indices: number[]) => void>;
|
|
51
|
+
beforeInsertColumns: Signal<(count: number, atIndex: number) => boolean>;
|
|
52
|
+
afterInsertColumns: Signal<(indices: number[]) => void>;
|
|
53
|
+
beforeDeleteColumns: Signal<(indices: number[]) => boolean>;
|
|
54
|
+
afterDeleteColumns: Signal<(indices: number[]) => void>;
|
|
55
|
+
beforeCopy: Signal<() => boolean>;
|
|
56
|
+
afterCopy: Signal<() => void>;
|
|
57
|
+
beforePaste: Signal<(data: string, startCell: CellAddress) => boolean>;
|
|
58
|
+
afterPaste: Signal<() => void>;
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* SpreadsheetEngine — headless, signal-based state machine for spreadsheet data.
|
|
62
|
+
* Zero DOM, zero Angular dependencies beyond signals.
|
|
63
|
+
*
|
|
64
|
+
* Supports: columns, rows, sorting, filtering, selection, editing,
|
|
65
|
+
* undo/redo, clipboard, formulas, tree data, virtual scrolling state.
|
|
66
|
+
*/
|
|
67
|
+
export declare class SpreadsheetEngine {
|
|
68
|
+
readonly columnDefs: WritableSignal<ColumnDef[]>;
|
|
69
|
+
readonly rowData: WritableSignal<RowDef[]>;
|
|
70
|
+
readonly columnStates: WritableSignal<Map<string, ColumnState>>;
|
|
71
|
+
readonly selection: WritableSignal<SelectionState>;
|
|
72
|
+
readonly sortState: WritableSignal<SortState>;
|
|
73
|
+
readonly filterState: WritableSignal<FilterState>;
|
|
74
|
+
readonly plugins: WritableSignal<SpreadsheetPlugin[]>;
|
|
75
|
+
readonly editingCell: WritableSignal<CellAddress | null>;
|
|
76
|
+
readonly editingValue: WritableSignal<CellValue>;
|
|
77
|
+
readonly density: WritableSignal<SpreadsheetDensity>;
|
|
78
|
+
readonly editable: WritableSignal<boolean>;
|
|
79
|
+
readonly rtl: WritableSignal<boolean>;
|
|
80
|
+
readonly frozenRows: WritableSignal<number>;
|
|
81
|
+
readonly frozenColumns: WritableSignal<number>;
|
|
82
|
+
readonly scrollTop: WritableSignal<number>;
|
|
83
|
+
readonly scrollLeft: WritableSignal<number>;
|
|
84
|
+
readonly viewportHeight: WritableSignal<number>;
|
|
85
|
+
readonly viewportWidth: WritableSignal<number>;
|
|
86
|
+
readonly pluginHost: PluginHost;
|
|
87
|
+
/** Visible rows after filtering. */
|
|
88
|
+
readonly visibleRows: Signal<RowDef[]>;
|
|
89
|
+
/** Sorted + filtered rows. */
|
|
90
|
+
readonly displayRows: Signal<RowDef[]>;
|
|
91
|
+
/** Visible row range for virtual scrolling (startIndex, endIndex). */
|
|
92
|
+
readonly virtualRowRange: Signal<{
|
|
93
|
+
start: number;
|
|
94
|
+
end: number;
|
|
95
|
+
offsetY: number;
|
|
96
|
+
totalHeight: number;
|
|
97
|
+
}>;
|
|
98
|
+
/** Visible column range for horizontal virtual scrolling. */
|
|
99
|
+
readonly virtualColRange: Signal<{
|
|
100
|
+
start: number;
|
|
101
|
+
end: number;
|
|
102
|
+
offsetX: number;
|
|
103
|
+
totalWidth: number;
|
|
104
|
+
}>;
|
|
105
|
+
/** Row height for current density. */
|
|
106
|
+
readonly rowHeight: Signal<number>;
|
|
107
|
+
/** Header height for current density. */
|
|
108
|
+
readonly headerHeight: Signal<number>;
|
|
109
|
+
/** Cell padding for current density. */
|
|
110
|
+
readonly cellPadding: Signal<string>;
|
|
111
|
+
/** Total number of rows. */
|
|
112
|
+
readonly totalRows: Signal<number>;
|
|
113
|
+
/** Total number of columns. */
|
|
114
|
+
readonly totalColumns: Signal<number>;
|
|
115
|
+
/** Total scrollable height. */
|
|
116
|
+
readonly totalHeight: Signal<number>;
|
|
117
|
+
/** Total scrollable width. */
|
|
118
|
+
readonly totalWidth: Signal<number>;
|
|
119
|
+
/** Visible (non-hidden) columns. */
|
|
120
|
+
readonly visibleColumns: Signal<ColumnDef[]>;
|
|
121
|
+
/** Pinned left columns. */
|
|
122
|
+
readonly pinnedLeftColumns: Signal<ColumnDef[]>;
|
|
123
|
+
/** Pinned right columns. */
|
|
124
|
+
readonly pinnedRightColumns: Signal<ColumnDef[]>;
|
|
125
|
+
/** Unpinned (scrollable) columns. */
|
|
126
|
+
readonly unpinnedColumns: Signal<ColumnDef[]>;
|
|
127
|
+
/** Column width map for computed widths. */
|
|
128
|
+
readonly columnWidths: Signal<Map<string, number>>;
|
|
129
|
+
readonly lifecycle: SpreadsheetLifecycleHooks;
|
|
130
|
+
private _config;
|
|
131
|
+
constructor(config?: SpreadsheetConfig);
|
|
132
|
+
/** Get column state by ID. */
|
|
133
|
+
getColumnState(colId: string): ColumnState | undefined;
|
|
134
|
+
/** Set column width. */
|
|
135
|
+
setColumnWidth(colId: string, width: number): void;
|
|
136
|
+
/** Toggle column visibility. */
|
|
137
|
+
toggleColumnVisibility(colId: string): void;
|
|
138
|
+
/** Set column sort direction. */
|
|
139
|
+
setColumnSort(colId: string, direction: 'asc' | 'desc' | null): void;
|
|
140
|
+
/** Reorder columns. */
|
|
141
|
+
moveColumn(fromIndex: number, toIndex: number): void;
|
|
142
|
+
/** Insert rows at the given index. */
|
|
143
|
+
insertRows(count: number, atIndex?: number): number[];
|
|
144
|
+
/** Delete rows by index. */
|
|
145
|
+
deleteRows(indices: number[]): RowDef[];
|
|
146
|
+
/** Get a cell value. */
|
|
147
|
+
getCellValue(rowIndex: number, colId: string): CellValue;
|
|
148
|
+
/** Set a cell value. */
|
|
149
|
+
setCellValue(rowIndex: number, colId: string, value: CellValue): void;
|
|
150
|
+
/** Get cell metadata. */
|
|
151
|
+
getCellMeta(rowIndex: number, colId: string): CellMeta | undefined;
|
|
152
|
+
/** Get a column definition by ID. */
|
|
153
|
+
getColumnDef(colId: string): ColumnDef | undefined;
|
|
154
|
+
/** Get the 0-based column index by ID. */
|
|
155
|
+
getColIndex(colId: string): number;
|
|
156
|
+
/** Begin editing a cell. */
|
|
157
|
+
startEdit(rowIndex: number, colId: string): boolean;
|
|
158
|
+
/** Commit the current edit. */
|
|
159
|
+
commitEdit(): void;
|
|
160
|
+
/** Cancel the current edit. */
|
|
161
|
+
cancelEdit(): void;
|
|
162
|
+
/** Sort by a column (toggles direction). */
|
|
163
|
+
sortBy(colId: string): void;
|
|
164
|
+
/** Clear all sorting. */
|
|
165
|
+
clearSort(): void;
|
|
166
|
+
/** Apply a filter. */
|
|
167
|
+
applyFilter(colId: string, operator: FilterCriterion['operator'], value: unknown, valueTo?: unknown): void;
|
|
168
|
+
/** Clear filter for a column. */
|
|
169
|
+
clearColumnFilter(colId: string): void;
|
|
170
|
+
/** Clear all filters. */
|
|
171
|
+
clearFilters(): void;
|
|
172
|
+
/** Move the active cell by delta. */
|
|
173
|
+
navigate(deltaRow: number, deltaCol: number): void;
|
|
174
|
+
/** Scroll to make a cell visible. */
|
|
175
|
+
scrollToCell(rowIndex: number, _colIndex: number): void;
|
|
176
|
+
/** Select a cell. */
|
|
177
|
+
selectCell(row: number, col: number): void;
|
|
178
|
+
/** Select a range. */
|
|
179
|
+
selectRange(start: CellAddress, end: CellAddress): void;
|
|
180
|
+
/** Select a row. */
|
|
181
|
+
selectRow(rowIndex: number): void;
|
|
182
|
+
/** Select a column. */
|
|
183
|
+
selectColumn(colIndex: number): void;
|
|
184
|
+
/** Select all cells. */
|
|
185
|
+
selectAll(): void;
|
|
186
|
+
/** Check if a cell is selected. */
|
|
187
|
+
isCellSelected(row: number, col: number): boolean;
|
|
188
|
+
/** Check if a cell is the active cell. */
|
|
189
|
+
isCellActive(row: number, col: number): boolean;
|
|
190
|
+
/** Force recalculation by re-setting data. */
|
|
191
|
+
refresh(): void;
|
|
192
|
+
destroy(): void;
|
|
193
|
+
}
|
|
194
|
+
//# sourceMappingURL=spreadsheet-engine.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"spreadsheet-engine.d.ts","sourceRoot":"","sources":["../../../../packages/cdk/spreadsheet/spreadsheet-engine.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import type { CellValue, CellAddress, CellRange, RowDef, ColumnDef } from '../models';
|
|
2
|
+
/** Convert a column index to an Excel-style column letter (0=A, 25=Z, 26=AA). */
|
|
3
|
+
export declare function colIndexToLetter(index: number): string;
|
|
4
|
+
/** Convert an Excel-style column letter to a 0-based index. */
|
|
5
|
+
export declare function colLetterToIndex(letter: string): number;
|
|
6
|
+
/** Build a cell reference string like "A1", "B5". */
|
|
7
|
+
export declare function cellRef(row: number, col: number): string;
|
|
8
|
+
/** Parse a cell reference string like "A1" into a CellAddress. */
|
|
9
|
+
export declare function parseCellRef(ref: string): CellAddress | null;
|
|
10
|
+
/** Normalize a range so start <= end in both dimensions. */
|
|
11
|
+
export declare function normalizeRange(range: CellRange): CellRange;
|
|
12
|
+
/** Check if a cell address is within a range. */
|
|
13
|
+
export declare function isCellInRange(address: CellAddress, range: CellRange): boolean;
|
|
14
|
+
/** Get all cell addresses in a range. */
|
|
15
|
+
export declare function cellsInRange(range: CellRange): CellAddress[];
|
|
16
|
+
/** Format a cell value for display. */
|
|
17
|
+
export declare function formatCellValue(value: CellValue, format?: string): string;
|
|
18
|
+
/** Create a new RowDef with empty cells for each column. */
|
|
19
|
+
export declare function createEmptyRow(id: string, columns: ColumnDef[]): RowDef;
|
|
20
|
+
/** Generate a unique row ID. */
|
|
21
|
+
export declare function generateRowId(): string;
|
|
22
|
+
/** Deep clone a row's cell data (for immutable updates). */
|
|
23
|
+
export declare function cloneRow(row: RowDef): RowDef;
|
|
24
|
+
/** Calculate the total width of pinned columns. */
|
|
25
|
+
export declare function pinnedWidth(columns: ColumnDef[], states: Map<string, number>, side: 'left' | 'right'): number;
|
|
26
|
+
//# sourceMappingURL=cell-utils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cell-utils.d.ts","sourceRoot":"","sources":["../../../../../packages/cdk/spreadsheet/utils/cell-utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAQ,SAAS,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAE5F,iFAAiF;AACjF,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAQtD;AAED,+DAA+D;AAC/D,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAMvD;AAED,qDAAqD;AACrD,wBAAgB,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAExD;AAED,kEAAkE;AAClE,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,WAAW,GAAG,IAAI,CAI5D;AAED,4DAA4D;AAC5D,wBAAgB,cAAc,CAAC,KAAK,EAAE,SAAS,GAAG,SAAS,CAW1D;AAED,iDAAiD;AACjD,wBAAgB,aAAa,CAAC,OAAO,EAAE,WAAW,EAAE,KAAK,EAAE,SAAS,GAAG,OAAO,CAQ7E;AAED,yCAAyC;AACzC,wBAAgB,YAAY,CAAC,KAAK,EAAE,SAAS,GAAG,WAAW,EAAE,CAS5D;AAED,uCAAuC;AACvC,wBAAgB,eAAe,CAAC,KAAK,EAAE,SAAS,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAazE;AA0BD,4DAA4D;AAC5D,wBAAgB,cAAc,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,GAAG,MAAM,CASvE;AAED,gCAAgC;AAChC,wBAAgB,aAAa,IAAI,MAAM,CAEtC;AAED,4DAA4D;AAC5D,wBAAgB,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAU5C;AAED,mDAAmD;AACnD,wBAAgB,WAAW,CACzB,OAAO,EAAE,SAAS,EAAE,EACpB,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,EAC3B,IAAI,EAAE,MAAM,GAAG,OAAO,GACrB,MAAM,CAIR"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../packages/cdk/spreadsheet/utils/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAC"}
|
package/testing/a11y.d.ts
CHANGED
|
@@ -1,6 +1,10 @@
|
|
|
1
|
+
import * as axe from 'axe-core';
|
|
1
2
|
/**
|
|
2
3
|
* Runs axe-core analysis on the provided HTML element and throws an error if any accessibility
|
|
3
4
|
* violations are detected.
|
|
5
|
+
*
|
|
6
|
+
* Pass axe `options` to tune the run — e.g. in jsdom-based tests disable the
|
|
7
|
+
* `color-contrast` rule, which requires a real rendering engine.
|
|
4
8
|
*/
|
|
5
|
-
export declare function expectNoA11yViolations(element: HTMLElement): Promise<void>;
|
|
9
|
+
export declare function expectNoA11yViolations(element: HTMLElement, options?: axe.RunOptions): Promise<void>;
|
|
6
10
|
//# sourceMappingURL=a11y.d.ts.map
|
package/testing/a11y.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"a11y.d.ts","sourceRoot":"","sources":["../../../../packages/cdk/testing/a11y.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"a11y.d.ts","sourceRoot":"","sources":["../../../../packages/cdk/testing/a11y.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,GAAG,MAAM,UAAU,CAAC;AAEhC;;;;;;GAMG;AACH,wBAAsB,sBAAsB,CAC1C,OAAO,EAAE,WAAW,EACpB,OAAO,GAAE,GAAG,CAAC,UAAe,GAC3B,OAAO,CAAC,IAAI,CAAC,CAaf"}
|