@ng-atomic/common 18.11.0 → 18.12.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/directives/molecules/column/column.molecule.d.ts +66 -0
- package/directives/molecules/column/index.d.ts +1 -0
- package/directives/resize-column/index.d.ts +1 -0
- package/directives/resize-column/resize-column.directive.d.ts +21 -0
- package/directives/resize-column/resize-handle.component.d.ts +5 -0
- package/esm2022/directives/molecules/column/column.molecule.mjs +112 -0
- package/esm2022/directives/molecules/column/index.mjs +2 -0
- package/esm2022/directives/molecules/column/ng-atomic-common-directives-molecules-column.mjs +5 -0
- package/esm2022/directives/resize-column/index.mjs +2 -0
- package/esm2022/directives/resize-column/ng-atomic-common-directives-resize-column.mjs +5 -0
- package/esm2022/directives/resize-column/resize-column.directive.mjs +62 -0
- package/esm2022/directives/resize-column/resize-handle.component.mjs +13 -0
- package/esm2022/models/index.mjs +1 -1
- package/esm2022/pipes/actions/actions.pipe.mjs +1 -1
- package/esm2022/pipes/columns/columns.pipe.mjs +3 -2
- package/esm2022/pipes/data-accessor/data-accessor.pipe.mjs +1 -1
- package/esm2022/pipes/domain/domain.pipe.mjs +10 -24
- package/esm2022/pipes/error/error.pipe.mjs +1 -2
- package/esm2022/pipes/expression/expression.pipe.mjs +18 -0
- package/esm2022/pipes/expression/index.mjs +2 -0
- package/esm2022/pipes/expression/ng-atomic-common-pipes-expression.mjs +5 -0
- package/esm2022/pipes/smart-field/smart-field.pipe.mjs +15 -4
- package/esm2022/pipes/style/index.mjs +2 -0
- package/esm2022/pipes/style/ng-atomic-common-pipes-style.mjs +5 -0
- package/esm2022/pipes/style/style.pipe.mjs +41 -0
- package/esm2022/services/form/columns/columns.service.mjs +28 -21
- package/esm2022/services/form/json-schema/json-schema.service.mjs +75 -57
- package/esm2022/services/form/pagination/pagination.service.mjs +4 -4
- package/esm2022/services/language/index.mjs +2 -0
- package/esm2022/services/language/language.service.mjs +39 -0
- package/esm2022/services/language/ng-atomic-common-services-language.mjs +5 -0
- package/esm2022/services/loading/loading.service.mjs +2 -2
- package/esm2022/services/query-resolver/query-resolver.service.mjs +4 -5
- package/esm2022/services/snack-bar/snack-bar.service.mjs +29 -11
- package/esm2022/services/spreadsheet/directives/grid-cell.directive.mjs +124 -0
- package/esm2022/services/spreadsheet/directives/index.mjs +2 -0
- package/esm2022/services/spreadsheet/features/clipboard.service.mjs +71 -0
- package/esm2022/services/spreadsheet/features/data.service.mjs +63 -0
- package/esm2022/services/spreadsheet/features/editor.service.mjs +65 -0
- package/esm2022/services/spreadsheet/features/grid.service.mjs +54 -0
- package/esm2022/services/spreadsheet/features/index.mjs +8 -0
- package/esm2022/services/spreadsheet/features/navigation.service.mjs +71 -0
- package/esm2022/services/spreadsheet/features/protection.service.mjs +25 -0
- package/esm2022/services/spreadsheet/features/selection.service.mjs +129 -0
- package/esm2022/services/spreadsheet/index.mjs +5 -0
- package/esm2022/services/spreadsheet/models/cell.model.mjs +2 -0
- package/esm2022/services/spreadsheet/models/index.mjs +2 -0
- package/esm2022/services/spreadsheet/ng-atomic-common-services-spreadsheet.mjs +5 -0
- package/esm2022/services/spreadsheet/spreadsheet.service.mjs +183 -0
- package/esm2022/services/ui/ui.helpers.mjs +15 -8
- package/esm2022/stores/query/query.store.mjs +2 -2
- package/esm2022/utils/expression/expression.transformer.mjs +38 -0
- package/esm2022/utils/expression/index.mjs +2 -0
- package/esm2022/utils/get/get.mjs +2 -2
- package/esm2022/utils/index.mjs +2 -2
- package/esm2022/utils/inject/inject.mjs +1 -1
- package/fesm2022/ng-atomic-common-directives-fallback-src.mjs.map +1 -1
- package/fesm2022/ng-atomic-common-directives-ios-safari-scroll-buggyfill.mjs.map +1 -1
- package/fesm2022/ng-atomic-common-directives-molecules-column.mjs +119 -0
- package/fesm2022/ng-atomic-common-directives-molecules-column.mjs.map +1 -0
- package/fesm2022/ng-atomic-common-directives-resize-column.mjs +79 -0
- package/fesm2022/ng-atomic-common-directives-resize-column.mjs.map +1 -0
- package/fesm2022/ng-atomic-common-interceptors-authorization.mjs.map +1 -1
- package/fesm2022/ng-atomic-common-interceptors-throttle.mjs.map +1 -1
- package/fesm2022/ng-atomic-common-interceptors-token.mjs.map +1 -1
- package/fesm2022/ng-atomic-common-interceptors.mjs.map +1 -1
- package/fesm2022/ng-atomic-common-pipes-actions.mjs.map +1 -1
- package/fesm2022/ng-atomic-common-pipes-auto-columns.mjs.map +1 -1
- package/fesm2022/ng-atomic-common-pipes-columns.mjs +2 -1
- package/fesm2022/ng-atomic-common-pipes-columns.mjs.map +1 -1
- package/fesm2022/ng-atomic-common-pipes-data-accessor.mjs.map +1 -1
- package/fesm2022/ng-atomic-common-pipes-domain.mjs +10 -24
- package/fesm2022/ng-atomic-common-pipes-domain.mjs.map +1 -1
- package/fesm2022/ng-atomic-common-pipes-error.mjs +0 -1
- package/fesm2022/ng-atomic-common-pipes-error.mjs.map +1 -1
- package/fesm2022/ng-atomic-common-pipes-expression.mjs +25 -0
- package/fesm2022/ng-atomic-common-pipes-expression.mjs.map +1 -0
- package/fesm2022/ng-atomic-common-pipes-grouped-by.mjs.map +1 -1
- package/fesm2022/ng-atomic-common-pipes-index-length.mjs.map +1 -1
- package/fesm2022/ng-atomic-common-pipes-index.mjs.map +1 -1
- package/fesm2022/ng-atomic-common-pipes-keys.mjs.map +1 -1
- package/fesm2022/ng-atomic-common-pipes-map.mjs.map +1 -1
- package/fesm2022/ng-atomic-common-pipes-page.mjs.map +1 -1
- package/fesm2022/ng-atomic-common-pipes-pagination.mjs.map +1 -1
- package/fesm2022/ng-atomic-common-pipes-query.mjs.map +1 -1
- package/fesm2022/ng-atomic-common-pipes-resolve-columns.mjs.map +1 -1
- package/fesm2022/ng-atomic-common-pipes-secret.mjs.map +1 -1
- package/fesm2022/ng-atomic-common-pipes-select-id.mjs.map +1 -1
- package/fesm2022/ng-atomic-common-pipes-signal.mjs.map +1 -1
- package/fesm2022/ng-atomic-common-pipes-smart-field.mjs +15 -4
- package/fesm2022/ng-atomic-common-pipes-smart-field.mjs.map +1 -1
- package/fesm2022/ng-atomic-common-pipes-sort-by.mjs.map +1 -1
- package/fesm2022/ng-atomic-common-pipes-sort.mjs.map +1 -1
- package/fesm2022/ng-atomic-common-pipes-style.mjs +48 -0
- package/fesm2022/ng-atomic-common-pipes-style.mjs.map +1 -0
- package/fesm2022/ng-atomic-common-pipes-yen.mjs.map +1 -1
- package/fesm2022/ng-atomic-common-services-app.mjs.map +1 -1
- package/fesm2022/ng-atomic-common-services-auth.mjs.map +1 -1
- package/fesm2022/ng-atomic-common-services-breakpoint.mjs.map +1 -1
- package/fesm2022/ng-atomic-common-services-chips-manager.mjs.map +1 -1
- package/fesm2022/ng-atomic-common-services-csv.mjs.map +1 -1
- package/fesm2022/ng-atomic-common-services-fab.mjs.map +1 -1
- package/fesm2022/ng-atomic-common-services-form-_index.mjs.map +1 -1
- package/fesm2022/ng-atomic-common-services-form-columns.mjs +27 -20
- package/fesm2022/ng-atomic-common-services-form-columns.mjs.map +1 -1
- package/fesm2022/ng-atomic-common-services-form-json-schema.mjs +74 -56
- package/fesm2022/ng-atomic-common-services-form-json-schema.mjs.map +1 -1
- package/fesm2022/ng-atomic-common-services-form-pagination.mjs +3 -3
- package/fesm2022/ng-atomic-common-services-form-pagination.mjs.map +1 -1
- package/fesm2022/ng-atomic-common-services-form-sort.mjs.map +1 -1
- package/fesm2022/ng-atomic-common-services-form.mjs.map +1 -1
- package/fesm2022/ng-atomic-common-services-initializer.mjs.map +1 -1
- package/fesm2022/ng-atomic-common-services-language.mjs +46 -0
- package/fesm2022/ng-atomic-common-services-language.mjs.map +1 -0
- package/fesm2022/ng-atomic-common-services-loading.mjs +1 -1
- package/fesm2022/ng-atomic-common-services-loading.mjs.map +1 -1
- package/fesm2022/ng-atomic-common-services-navigation-history.mjs.map +1 -1
- package/fesm2022/ng-atomic-common-services-query-resolver.mjs +3 -3
- package/fesm2022/ng-atomic-common-services-query-resolver.mjs.map +1 -1
- package/fesm2022/ng-atomic-common-services-root-property.mjs.map +1 -1
- package/fesm2022/ng-atomic-common-services-router.mjs.map +1 -1
- package/fesm2022/ng-atomic-common-services-secret.mjs.map +1 -1
- package/fesm2022/ng-atomic-common-services-sheets-actions.mjs.map +1 -1
- package/fesm2022/ng-atomic-common-services-sheets.mjs.map +1 -1
- package/fesm2022/ng-atomic-common-services-side-app.mjs.map +1 -1
- package/fesm2022/ng-atomic-common-services-side-nav-mode.mjs.map +1 -1
- package/fesm2022/ng-atomic-common-services-snack-bar.mjs +29 -11
- package/fesm2022/ng-atomic-common-services-snack-bar.mjs.map +1 -1
- package/fesm2022/ng-atomic-common-services-spreadsheet.mjs +758 -0
- package/fesm2022/ng-atomic-common-services-spreadsheet.mjs.map +1 -0
- package/fesm2022/ng-atomic-common-services-ui.mjs +14 -7
- package/fesm2022/ng-atomic-common-services-ui.mjs.map +1 -1
- package/fesm2022/ng-atomic-common-stores-entities.mjs.map +1 -1
- package/fesm2022/ng-atomic-common-stores-entity.mjs.map +1 -1
- package/fesm2022/ng-atomic-common-stores-pagination.mjs.map +1 -1
- package/fesm2022/ng-atomic-common-stores-query.mjs +1 -1
- package/fesm2022/ng-atomic-common-stores-query.mjs.map +1 -1
- package/fesm2022/ng-atomic-common-stores-selection.mjs.map +1 -1
- package/fesm2022/ng-atomic-common-stores-sort.mjs.map +1 -1
- package/fesm2022/ng-atomic-common-utils.mjs +34 -15
- package/fesm2022/ng-atomic-common-utils.mjs.map +1 -1
- package/fesm2022/ng-atomic-common.mjs.map +1 -1
- package/models/index.d.ts +2 -1
- package/package.json +67 -38
- package/pipes/actions/actions.pipe.d.ts +2 -1
- package/pipes/columns/columns.pipe.d.ts +1 -0
- package/pipes/data-accessor/data-accessor.pipe.d.ts +1 -1
- package/pipes/domain/domain.pipe.d.ts +3 -5
- package/pipes/expression/expression.pipe.d.ts +9 -0
- package/pipes/expression/index.d.ts +1 -0
- package/pipes/smart-field/smart-field.pipe.d.ts +2 -2
- package/pipes/style/index.d.ts +1 -0
- package/pipes/style/style.pipe.d.ts +18 -0
- package/services/form/_index/index.service.d.ts +4 -4
- package/services/form/columns/columns.service.d.ts +5 -2
- package/services/form/json-schema/json-schema.service.d.ts +9 -1
- package/services/form/pagination/pagination.service.d.ts +5 -5
- package/services/language/index.d.ts +1 -0
- package/services/language/language.service.d.ts +12 -0
- package/services/query-resolver/query-resolver.service.d.ts +2 -2
- package/services/snack-bar/snack-bar.service.d.ts +5 -3
- package/services/spreadsheet/directives/grid-cell.directive.d.ts +41 -0
- package/services/spreadsheet/directives/index.d.ts +1 -0
- package/services/spreadsheet/features/clipboard.service.d.ts +15 -0
- package/services/spreadsheet/features/data.service.d.ts +16 -0
- package/services/spreadsheet/features/editor.service.d.ts +22 -0
- package/services/spreadsheet/features/grid.service.d.ts +17 -0
- package/services/spreadsheet/features/index.d.ts +7 -0
- package/services/spreadsheet/features/navigation.service.d.ts +17 -0
- package/services/spreadsheet/features/protection.service.d.ts +24 -0
- package/services/spreadsheet/features/selection.service.d.ts +40 -0
- package/services/spreadsheet/index.d.ts +4 -0
- package/services/spreadsheet/models/cell.model.d.ts +17 -0
- package/services/spreadsheet/models/index.d.ts +1 -0
- package/services/spreadsheet/spreadsheet.service.d.ts +29 -0
- package/utils/expression/expression.transformer.d.ts +12 -0
- package/utils/expression/index.d.ts +1 -0
- package/utils/index.d.ts +1 -1
- package/utils/inject/inject.d.ts +2 -2
- package/esm2022/pipes/smart-exp/index.mjs +0 -3
- package/esm2022/pipes/smart-exp/ng-atomic-common-pipes-smart-exp.mjs +0 -5
- package/esm2022/pipes/smart-exp/smart-exp.module.mjs +0 -16
- package/esm2022/pipes/smart-exp/smart-exp.pipe.mjs +0 -27
- package/esm2022/utils/smart-exp-transformer/index.mjs +0 -2
- package/esm2022/utils/smart-exp-transformer/smart-exp-transformer.mjs +0 -18
- package/fesm2022/ng-atomic-common-pipes-smart-exp.mjs +0 -47
- package/fesm2022/ng-atomic-common-pipes-smart-exp.mjs.map +0 -1
- package/pipes/smart-exp/index.d.ts +0 -2
- package/pipes/smart-exp/smart-exp.module.d.ts +0 -7
- package/pipes/smart-exp/smart-exp.pipe.d.ts +0 -11
- package/utils/smart-exp-transformer/index.d.ts +0 -1
- package/utils/smart-exp-transformer/smart-exp-transformer.d.ts +0 -6
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import { inject, Injectable, signal } from '@angular/core';
|
|
2
|
+
import { GridService } from './grid.service';
|
|
3
|
+
import { SelectionService } from './selection.service';
|
|
4
|
+
import { ProtectionService } from './protection.service';
|
|
5
|
+
import * as i0 from "@angular/core";
|
|
6
|
+
export class EditorService {
|
|
7
|
+
constructor() {
|
|
8
|
+
this.grid = inject(GridService);
|
|
9
|
+
this.selection = inject(SelectionService);
|
|
10
|
+
this.protection = inject(ProtectionService);
|
|
11
|
+
this.editinngCell = signal(null);
|
|
12
|
+
this.inputMap = new Map();
|
|
13
|
+
}
|
|
14
|
+
isEditing(position) {
|
|
15
|
+
return this.editinngCell()?.row === position.row && this.editinngCell()?.col === position.col;
|
|
16
|
+
}
|
|
17
|
+
startEditing(position) {
|
|
18
|
+
const context = this.grid.getContext(position);
|
|
19
|
+
console.debug('context:', context);
|
|
20
|
+
if (!this.protection.isEditable(null, context)) {
|
|
21
|
+
return;
|
|
22
|
+
}
|
|
23
|
+
this.selection.clearSelection();
|
|
24
|
+
this.editinngCell.set(position);
|
|
25
|
+
this.focus(position);
|
|
26
|
+
}
|
|
27
|
+
stopEditing() {
|
|
28
|
+
this.editinngCell.set(null);
|
|
29
|
+
}
|
|
30
|
+
focus(position) {
|
|
31
|
+
setTimeout(() => {
|
|
32
|
+
const input = this.getInput(position);
|
|
33
|
+
if (input && input !== document.activeElement) {
|
|
34
|
+
input.focus();
|
|
35
|
+
input.select();
|
|
36
|
+
}
|
|
37
|
+
});
|
|
38
|
+
}
|
|
39
|
+
getEditingCell() {
|
|
40
|
+
const data = this.grid.data();
|
|
41
|
+
for (let i = 0; i < data.length; i++) {
|
|
42
|
+
for (let j = 0; j < data[i].length; j++) {
|
|
43
|
+
if (this.isEditing({ row: i, col: j })) {
|
|
44
|
+
return { row: i, col: j };
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
return null;
|
|
49
|
+
}
|
|
50
|
+
setInput(input, position) {
|
|
51
|
+
this.inputMap.set(`${this.buildKey(position)}`, input);
|
|
52
|
+
}
|
|
53
|
+
getInput(position) {
|
|
54
|
+
return this.inputMap.get(this.buildKey(position)) ?? null;
|
|
55
|
+
}
|
|
56
|
+
buildKey(position) {
|
|
57
|
+
return `(${position.row}, ${position.col})`;
|
|
58
|
+
}
|
|
59
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.2", ngImport: i0, type: EditorService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
60
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.1.2", ngImport: i0, type: EditorService }); }
|
|
61
|
+
}
|
|
62
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.2", ngImport: i0, type: EditorService, decorators: [{
|
|
63
|
+
type: Injectable
|
|
64
|
+
}] });
|
|
65
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWRpdG9yLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9AbmctYXRvbWljL2NvbW1vbi9zcmMvbGliL3NlcnZpY2VzL3NwcmVhZHNoZWV0L2ZlYXR1cmVzL2VkaXRvci5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzRCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0MsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDdkQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7O0FBSXpELE1BQU0sT0FBTyxhQUFhO0lBRDFCO1FBRVUsU0FBSSxHQUFHLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUMzQixjQUFTLEdBQUcsTUFBTSxDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFDckMsZUFBVSxHQUFHLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1FBQ3RDLGlCQUFZLEdBQUcsTUFBTSxDQUFzQyxJQUFJLENBQUMsQ0FBQztRQUN2RCxhQUFRLEdBQUcsSUFBSSxHQUFHLEVBQTRCLENBQUM7S0FzRG5FO0lBcERDLFNBQVMsQ0FBQyxRQUFrQjtRQUMxQixPQUFPLElBQUksQ0FBQyxZQUFZLEVBQUUsRUFBRSxHQUFHLEtBQUssUUFBUSxDQUFDLEdBQUcsSUFBSSxJQUFJLENBQUMsWUFBWSxFQUFFLEVBQUUsR0FBRyxLQUFLLFFBQVEsQ0FBQyxHQUFHLENBQUM7SUFDaEcsQ0FBQztJQUVELFlBQVksQ0FBQyxRQUFrQjtRQUM3QixNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUMvQyxPQUFPLENBQUMsS0FBSyxDQUFDLFVBQVUsRUFBRSxPQUFPLENBQUMsQ0FBQztRQUNuQyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxFQUFFLENBQUM7WUFDL0MsT0FBTztRQUNULENBQUM7UUFDRCxJQUFJLENBQUMsU0FBUyxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQ2hDLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ2hDLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDdkIsQ0FBQztJQUVELFdBQVc7UUFDVCxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUM5QixDQUFDO0lBRUQsS0FBSyxDQUFDLFFBQWtCO1FBQ3RCLFVBQVUsQ0FBQyxHQUFHLEVBQUU7WUFDZCxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQ3RDLElBQUksS0FBSyxJQUFJLEtBQUssS0FBSyxRQUFRLENBQUMsYUFBYSxFQUFFLENBQUM7Z0JBQzlDLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQztnQkFDZCxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDakIsQ0FBQztRQUNILENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELGNBQWM7UUFDWixNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQzlCLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7WUFDckMsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztnQkFDeEMsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLEVBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFDLENBQUMsRUFBRSxDQUFDO29CQUNyQyxPQUFPLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUM7Z0JBQzVCLENBQUM7WUFDSCxDQUFDO1FBQ0gsQ0FBQztRQUNELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVELFFBQVEsQ0FBQyxLQUF1QixFQUFFLFFBQWtCO1FBQ2xELElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsRUFBRSxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ3pELENBQUM7SUFFRCxRQUFRLENBQUMsUUFBa0I7UUFDekIsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDO0lBQzVELENBQUM7SUFFUyxRQUFRLENBQUMsUUFBa0I7UUFDbkMsT0FBTyxJQUFJLFFBQVEsQ0FBQyxHQUFHLEtBQUssUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0lBQzlDLENBQUM7OEdBMURVLGFBQWE7a0hBQWIsYUFBYTs7MkZBQWIsYUFBYTtrQkFEekIsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGluamVjdCwgSW5qZWN0YWJsZSwgc2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBHcmlkU2VydmljZSB9IGZyb20gJy4vZ3JpZC5zZXJ2aWNlJztcbmltcG9ydCB7IFNlbGVjdGlvblNlcnZpY2UgfSBmcm9tICcuL3NlbGVjdGlvbi5zZXJ2aWNlJztcbmltcG9ydCB7IFByb3RlY3Rpb25TZXJ2aWNlIH0gZnJvbSAnLi9wcm90ZWN0aW9uLnNlcnZpY2UnO1xuaW1wb3J0IHsgUG9zaXRpb24gfSBmcm9tICcuLi9tb2RlbHMvY2VsbC5tb2RlbCc7XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBFZGl0b3JTZXJ2aWNlIHtcbiAgcHJpdmF0ZSBncmlkID0gaW5qZWN0KEdyaWRTZXJ2aWNlKTtcbiAgcHJpdmF0ZSBzZWxlY3Rpb24gPSBpbmplY3QoU2VsZWN0aW9uU2VydmljZSk7XG4gIHByaXZhdGUgcHJvdGVjdGlvbiA9IGluamVjdChQcm90ZWN0aW9uU2VydmljZSk7XG4gIHJlYWRvbmx5IGVkaXRpbm5nQ2VsbCA9IHNpZ25hbDx7IHJvdzogbnVtYmVyLCBjb2w6IG51bWJlciB9IHwgbnVsbD4obnVsbCk7XG4gIHByb3RlY3RlZCByZWFkb25seSBpbnB1dE1hcCA9IG5ldyBNYXA8c3RyaW5nLCBIVE1MSW5wdXRFbGVtZW50PigpO1xuXG4gIGlzRWRpdGluZyhwb3NpdGlvbjogUG9zaXRpb24pOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5lZGl0aW5uZ0NlbGwoKT8ucm93ID09PSBwb3NpdGlvbi5yb3cgJiYgdGhpcy5lZGl0aW5uZ0NlbGwoKT8uY29sID09PSBwb3NpdGlvbi5jb2w7XG4gIH1cblxuICBzdGFydEVkaXRpbmcocG9zaXRpb246IFBvc2l0aW9uKTogdm9pZCB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ3JpZC5nZXRDb250ZXh0KHBvc2l0aW9uKTtcbiAgICBjb25zb2xlLmRlYnVnKCdjb250ZXh0OicsIGNvbnRleHQpO1xuICAgIGlmICghdGhpcy5wcm90ZWN0aW9uLmlzRWRpdGFibGUobnVsbCwgY29udGV4dCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5zZWxlY3Rpb24uY2xlYXJTZWxlY3Rpb24oKTtcbiAgICB0aGlzLmVkaXRpbm5nQ2VsbC5zZXQocG9zaXRpb24pO1xuICAgIHRoaXMuZm9jdXMocG9zaXRpb24pO1xuICB9XG5cbiAgc3RvcEVkaXRpbmcoKTogdm9pZCB7XG4gICAgdGhpcy5lZGl0aW5uZ0NlbGwuc2V0KG51bGwpO1xuICB9XG5cbiAgZm9jdXMocG9zaXRpb246IFBvc2l0aW9uKTogdm9pZCB7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBjb25zdCBpbnB1dCA9IHRoaXMuZ2V0SW5wdXQocG9zaXRpb24pO1xuICAgICAgaWYgKGlucHV0ICYmIGlucHV0ICE9PSBkb2N1bWVudC5hY3RpdmVFbGVtZW50KSB7XG4gICAgICAgIGlucHV0LmZvY3VzKCk7XG4gICAgICAgIGlucHV0LnNlbGVjdCgpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgZ2V0RWRpdGluZ0NlbGwoKTogUG9zaXRpb24gfCBudWxsIHtcbiAgICBjb25zdCBkYXRhID0gdGhpcy5ncmlkLmRhdGEoKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGRhdGEubGVuZ3RoOyBpKyspIHtcbiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgZGF0YVtpXS5sZW5ndGg7IGorKykge1xuICAgICAgICBpZiAodGhpcy5pc0VkaXRpbmcoe3JvdzogaSwgY29sOiBqfSkpIHtcbiAgICAgICAgICByZXR1cm4geyByb3c6IGksIGNvbDogaiB9O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgc2V0SW5wdXQoaW5wdXQ6IEhUTUxJbnB1dEVsZW1lbnQsIHBvc2l0aW9uOiBQb3NpdGlvbik6IHZvaWQge1xuICAgIHRoaXMuaW5wdXRNYXAuc2V0KGAke3RoaXMuYnVpbGRLZXkocG9zaXRpb24pfWAsIGlucHV0KTtcbiAgfVxuXG4gIGdldElucHV0KHBvc2l0aW9uOiBQb3NpdGlvbik6IEhUTUxJbnB1dEVsZW1lbnQgfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5pbnB1dE1hcC5nZXQodGhpcy5idWlsZEtleShwb3NpdGlvbikpID8/IG51bGw7XG4gIH1cblxuICBwcm90ZWN0ZWQgYnVpbGRLZXkocG9zaXRpb246IFBvc2l0aW9uKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYCgke3Bvc2l0aW9uLnJvd30sICR7cG9zaXRpb24uY29sfSlgO1xuICB9XG59Il19
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import { computed, Injectable, signal } from '@angular/core';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
export class GridService {
|
|
4
|
+
constructor() {
|
|
5
|
+
this.data = signal([[]]);
|
|
6
|
+
this.columns = computed(() => Array.from({ length: this.data()[0].length }, (_, i) => String.fromCharCode(65 + i)));
|
|
7
|
+
this.contextMap = new Map();
|
|
8
|
+
}
|
|
9
|
+
updateCell(row, col, value) {
|
|
10
|
+
this.data.update(data => {
|
|
11
|
+
data[row][col] = {
|
|
12
|
+
dataValue: value,
|
|
13
|
+
expressionValue: value,
|
|
14
|
+
};
|
|
15
|
+
return [...data];
|
|
16
|
+
});
|
|
17
|
+
}
|
|
18
|
+
getValue(position) {
|
|
19
|
+
return this.getCell(position)?.dataValue ?? null;
|
|
20
|
+
}
|
|
21
|
+
getExpressionValue(position) {
|
|
22
|
+
return this.getCell(position)?.expressionValue ?? null;
|
|
23
|
+
}
|
|
24
|
+
getCell(position) {
|
|
25
|
+
return this.data()[position.row]?.[position.col] ?? null;
|
|
26
|
+
}
|
|
27
|
+
updateAllCells(predicate, updates) {
|
|
28
|
+
this.data.update(data => {
|
|
29
|
+
for (let i = 0; i < data.length; i++) {
|
|
30
|
+
for (let j = 0; j < data[0].length; j++) {
|
|
31
|
+
if (predicate(data[i][j])) {
|
|
32
|
+
data[i][j] = { ...data[i][j], ...updates };
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
return [...data];
|
|
37
|
+
});
|
|
38
|
+
}
|
|
39
|
+
setContext(context) {
|
|
40
|
+
this.contextMap.set(this.buildKey(context.position), context);
|
|
41
|
+
}
|
|
42
|
+
getContext(position) {
|
|
43
|
+
return this.contextMap.get(this.buildKey(position)) ?? null;
|
|
44
|
+
}
|
|
45
|
+
buildKey(position) {
|
|
46
|
+
return `(${position.row}, ${position.col})`;
|
|
47
|
+
}
|
|
48
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.2", ngImport: i0, type: GridService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
49
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.1.2", ngImport: i0, type: GridService }); }
|
|
50
|
+
}
|
|
51
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.2", ngImport: i0, type: GridService, decorators: [{
|
|
52
|
+
type: Injectable
|
|
53
|
+
}] });
|
|
54
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JpZC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvQG5nLWF0b21pYy9jb21tb24vc3JjL2xpYi9zZXJ2aWNlcy9zcHJlYWRzaGVldC9mZWF0dXJlcy9ncmlkLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDOztBQUk3RCxNQUFNLE9BQU8sV0FBVztJQUR4QjtRQUVXLFNBQUksR0FBRyxNQUFNLENBQVcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQzlCLFlBQU8sR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDckcsZUFBVSxHQUFHLElBQUksR0FBRyxFQUF1QixDQUFDO0tBZ0RoRTtJQTlDQyxVQUFVLENBQUMsR0FBVyxFQUFFLEdBQVcsRUFBRSxLQUFVO1FBQzdDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFO1lBQ3RCLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRztnQkFDZixTQUFTLEVBQUUsS0FBSztnQkFDaEIsZUFBZSxFQUFFLEtBQUs7YUFDdkIsQ0FBQTtZQUNELE9BQU8sQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDO1FBQ25CLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELFFBQVEsQ0FBQyxRQUFrQjtRQUN6QixPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLEVBQUUsU0FBUyxJQUFJLElBQUksQ0FBQztJQUNuRCxDQUFDO0lBRUQsa0JBQWtCLENBQUMsUUFBa0I7UUFDbkMsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxFQUFFLGVBQWUsSUFBSSxJQUFJLENBQUM7SUFDekQsQ0FBQztJQUVTLE9BQU8sQ0FBQyxRQUFrQjtRQUNsQyxPQUFPLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLElBQUksSUFBSSxDQUFDO0lBQzNELENBQUM7SUFFRCxjQUFjLENBQUMsU0FBa0MsRUFBRSxPQUFzQjtRQUN2RSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUN0QixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO2dCQUNyQyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO29CQUN4QyxJQUFJLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO3dCQUMxQixJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLE9BQU8sRUFBRSxDQUFDO29CQUM3QyxDQUFDO2dCQUNILENBQUM7WUFDSCxDQUFDO1lBQ0QsT0FBTyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUM7UUFDbkIsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsVUFBVSxDQUFDLE9BQW9CO1FBQzdCLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQ2hFLENBQUM7SUFFRCxVQUFVLENBQUMsUUFBa0I7UUFDM0IsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDO0lBQzlELENBQUM7SUFFUyxRQUFRLENBQUMsUUFBa0I7UUFDbkMsT0FBTyxJQUFJLFFBQVEsQ0FBQyxHQUFHLEtBQUssUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0lBQzlDLENBQUM7OEdBbERVLFdBQVc7a0hBQVgsV0FBVzs7MkZBQVgsV0FBVztrQkFEdkIsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNvbXB1dGVkLCBJbmplY3RhYmxlLCBzaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENlbGwsIENlbGxDb250ZXh0LCBQb3NpdGlvbiB9IGZyb20gJy4uL21vZGVscy9jZWxsLm1vZGVsJztcblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIEdyaWRTZXJ2aWNlIHtcbiAgcmVhZG9ubHkgZGF0YSA9IHNpZ25hbDxDZWxsW11bXT4oW1tdXSk7XG4gIHJlYWRvbmx5IGNvbHVtbnMgPSBjb21wdXRlZCgoKSA9PiBBcnJheS5mcm9tKHsgbGVuZ3RoOiB0aGlzLmRhdGEoKVswXS5sZW5ndGggfSwgKF8sIGkpID0+IFN0cmluZy5mcm9tQ2hhckNvZGUoNjUgKyBpKSkpO1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgY29udGV4dE1hcCA9IG5ldyBNYXA8c3RyaW5nLCBDZWxsQ29udGV4dD4oKTtcblxuICB1cGRhdGVDZWxsKHJvdzogbnVtYmVyLCBjb2w6IG51bWJlciwgdmFsdWU6IGFueSk6IHZvaWQge1xuICAgIHRoaXMuZGF0YS51cGRhdGUoZGF0YSA9PiB7XG4gICAgICBkYXRhW3Jvd11bY29sXSA9IHtcbiAgICAgICAgZGF0YVZhbHVlOiB2YWx1ZSxcbiAgICAgICAgZXhwcmVzc2lvblZhbHVlOiB2YWx1ZSxcbiAgICAgIH1cbiAgICAgIHJldHVybiBbLi4uZGF0YV07XG4gICAgfSk7XG4gIH1cblxuICBnZXRWYWx1ZShwb3NpdGlvbjogUG9zaXRpb24pOiBhbnkgfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5nZXRDZWxsKHBvc2l0aW9uKT8uZGF0YVZhbHVlID8/IG51bGw7XG4gIH1cblxuICBnZXRFeHByZXNzaW9uVmFsdWUocG9zaXRpb246IFBvc2l0aW9uKTogYW55IHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0Q2VsbChwb3NpdGlvbik/LmV4cHJlc3Npb25WYWx1ZSA/PyBudWxsO1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldENlbGwocG9zaXRpb246IFBvc2l0aW9uKTogQ2VsbCB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLmRhdGEoKVtwb3NpdGlvbi5yb3ddPy5bcG9zaXRpb24uY29sXSA/PyBudWxsO1xuICB9XG5cbiAgdXBkYXRlQWxsQ2VsbHMocHJlZGljYXRlOiAoY2VsbDogQ2VsbCkgPT4gYm9vbGVhbiwgdXBkYXRlczogUGFydGlhbDxDZWxsPik6IHZvaWQge1xuICAgIHRoaXMuZGF0YS51cGRhdGUoZGF0YSA9PiB7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGRhdGEubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBkYXRhWzBdLmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgaWYgKHByZWRpY2F0ZShkYXRhW2ldW2pdKSkge1xuICAgICAgICAgICAgZGF0YVtpXVtqXSA9IHsgLi4uZGF0YVtpXVtqXSwgLi4udXBkYXRlcyB9O1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIFsuLi5kYXRhXTtcbiAgICB9KTsgXG4gIH1cblxuICBzZXRDb250ZXh0KGNvbnRleHQ6IENlbGxDb250ZXh0KTogdm9pZCB7XG4gICAgdGhpcy5jb250ZXh0TWFwLnNldCh0aGlzLmJ1aWxkS2V5KGNvbnRleHQucG9zaXRpb24pLCBjb250ZXh0KTtcbiAgfVxuXG4gIGdldENvbnRleHQocG9zaXRpb246IFBvc2l0aW9uKTogQ2VsbENvbnRleHQgfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5jb250ZXh0TWFwLmdldCh0aGlzLmJ1aWxkS2V5KHBvc2l0aW9uKSkgPz8gbnVsbDtcbiAgfVxuXG4gIHByb3RlY3RlZCBidWlsZEtleShwb3NpdGlvbjogUG9zaXRpb24pOiBzdHJpbmcge1xuICAgIHJldHVybiBgKCR7cG9zaXRpb24ucm93fSwgJHtwb3NpdGlvbi5jb2x9KWA7XG4gIH1cbn0iXX0=
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export * from './clipboard.service';
|
|
2
|
+
export * from './data.service';
|
|
3
|
+
export * from './editor.service';
|
|
4
|
+
export * from './grid.service';
|
|
5
|
+
export * from './navigation.service';
|
|
6
|
+
export * from './protection.service';
|
|
7
|
+
export * from './selection.service';
|
|
8
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9AbmctYXRvbWljL2NvbW1vbi9zcmMvbGliL3NlcnZpY2VzL3NwcmVhZHNoZWV0L2ZlYXR1cmVzL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMscUJBQXFCLENBQUM7QUFDcEMsY0FBYyxnQkFBZ0IsQ0FBQztBQUMvQixjQUFjLGtCQUFrQixDQUFDO0FBQ2pDLGNBQWMsZ0JBQWdCLENBQUM7QUFDL0IsY0FBYyxzQkFBc0IsQ0FBQztBQUNyQyxjQUFjLHNCQUFzQixDQUFDO0FBQ3JDLGNBQWMscUJBQXFCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL2NsaXBib2FyZC5zZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vZGF0YS5zZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vZWRpdG9yLnNlcnZpY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9ncmlkLnNlcnZpY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9uYXZpZ2F0aW9uLnNlcnZpY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9wcm90ZWN0aW9uLnNlcnZpY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9zZWxlY3Rpb24uc2VydmljZSc7XG4iXX0=
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import { Injectable } from '@angular/core';
|
|
2
|
+
import { GridService } from './grid.service';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
import * as i1 from "./grid.service";
|
|
5
|
+
export class NavigationService {
|
|
6
|
+
constructor(gridService) {
|
|
7
|
+
this.gridService = gridService;
|
|
8
|
+
}
|
|
9
|
+
moveToNextCell({ row, col }) {
|
|
10
|
+
const columns = this.gridService.columns();
|
|
11
|
+
if (col < columns.length - 1) {
|
|
12
|
+
return { row, col: col + 1 };
|
|
13
|
+
}
|
|
14
|
+
else if (row < this.gridService.data().length - 1) {
|
|
15
|
+
return { row: row + 1, col: 0 };
|
|
16
|
+
}
|
|
17
|
+
return { row, col };
|
|
18
|
+
}
|
|
19
|
+
moveToPreviousCell({ row, col }) {
|
|
20
|
+
const columns = this.gridService.columns();
|
|
21
|
+
if (col > 0) {
|
|
22
|
+
return { row, col: col - 1 };
|
|
23
|
+
}
|
|
24
|
+
else if (row > 0) {
|
|
25
|
+
return { row: row - 1, col: columns.length - 1 };
|
|
26
|
+
}
|
|
27
|
+
return { row, col };
|
|
28
|
+
}
|
|
29
|
+
moveToNextRow({ row, col }) {
|
|
30
|
+
if (row < this.gridService.data().length - 1) {
|
|
31
|
+
return { row: row + 1, col };
|
|
32
|
+
}
|
|
33
|
+
return { row, col };
|
|
34
|
+
}
|
|
35
|
+
moveToPreviousRow({ row, col }) {
|
|
36
|
+
if (row > 0) {
|
|
37
|
+
return { row: row - 1, col };
|
|
38
|
+
}
|
|
39
|
+
return { row, col };
|
|
40
|
+
}
|
|
41
|
+
moveRight({ row, col }) {
|
|
42
|
+
if (col < this.gridService.columns().length - 1) {
|
|
43
|
+
return { row, col: col + 1 };
|
|
44
|
+
}
|
|
45
|
+
return { row, col };
|
|
46
|
+
}
|
|
47
|
+
moveLeft({ row, col }) {
|
|
48
|
+
if (col > 0) {
|
|
49
|
+
return { row, col: col - 1 };
|
|
50
|
+
}
|
|
51
|
+
return { row, col };
|
|
52
|
+
}
|
|
53
|
+
moveUp({ row, col }) {
|
|
54
|
+
if (row > 0) {
|
|
55
|
+
return { row: row - 1, col };
|
|
56
|
+
}
|
|
57
|
+
return { row, col };
|
|
58
|
+
}
|
|
59
|
+
moveDown({ row, col }) {
|
|
60
|
+
if (row < this.gridService.data().length - 1) {
|
|
61
|
+
return { row: row + 1, col };
|
|
62
|
+
}
|
|
63
|
+
return { row, col };
|
|
64
|
+
}
|
|
65
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.2", ngImport: i0, type: NavigationService, deps: [{ token: i1.GridService }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
66
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.1.2", ngImport: i0, type: NavigationService }); }
|
|
67
|
+
}
|
|
68
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.2", ngImport: i0, type: NavigationService, decorators: [{
|
|
69
|
+
type: Injectable
|
|
70
|
+
}], ctorParameters: () => [{ type: i1.GridService }] });
|
|
71
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmF2aWdhdGlvbi5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvQG5nLWF0b21pYy9jb21tb24vc3JjL2xpYi9zZXJ2aWNlcy9zcHJlYWRzaGVldC9mZWF0dXJlcy9uYXZpZ2F0aW9uLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUUzQyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7OztBQUc3QyxNQUFNLE9BQU8saUJBQWlCO0lBQzVCLFlBQW9CLFdBQXdCO1FBQXhCLGdCQUFXLEdBQVgsV0FBVyxDQUFhO0lBQUcsQ0FBQztJQUVoRCxjQUFjLENBQUMsRUFBQyxHQUFHLEVBQUUsR0FBRyxFQUFXO1FBQ2pDLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDM0MsSUFBSSxHQUFHLEdBQUcsT0FBTyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUM3QixPQUFPLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEdBQUcsQ0FBQyxFQUFFLENBQUM7UUFDL0IsQ0FBQzthQUFNLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxFQUFFLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQ3BELE9BQU8sRUFBRSxHQUFHLEVBQUUsR0FBRyxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUM7UUFDbEMsQ0FBQztRQUNELE9BQU8sRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7SUFDdEIsQ0FBQztJQUVELGtCQUFrQixDQUFDLEVBQUMsR0FBRyxFQUFFLEdBQUcsRUFBVztRQUNyQyxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQzNDLElBQUksR0FBRyxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQ1osT0FBTyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxHQUFHLENBQUMsRUFBRSxDQUFDO1FBQy9CLENBQUM7YUFBTSxJQUFJLEdBQUcsR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUNuQixPQUFPLEVBQUUsR0FBRyxFQUFFLEdBQUcsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLE9BQU8sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7UUFDbkQsQ0FBQztRQUNELE9BQU8sRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7SUFDdEIsQ0FBQztJQUVELGFBQWEsQ0FBQyxFQUFDLEdBQUcsRUFBRSxHQUFHLEVBQVc7UUFDaEMsSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDN0MsT0FBTyxFQUFFLEdBQUcsRUFBRSxHQUFHLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDO1FBQy9CLENBQUM7UUFDRCxPQUFPLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0lBQ3RCLENBQUM7SUFFRCxpQkFBaUIsQ0FBQyxFQUFDLEdBQUcsRUFBRSxHQUFHLEVBQVc7UUFDcEMsSUFBSSxHQUFHLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDWixPQUFPLEVBQUUsR0FBRyxFQUFFLEdBQUcsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUM7UUFDL0IsQ0FBQztRQUNELE9BQU8sRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7SUFDdEIsQ0FBQztJQUVELFNBQVMsQ0FBQyxFQUFDLEdBQUcsRUFBRSxHQUFHLEVBQVc7UUFDNUIsSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDaEQsT0FBTyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxHQUFHLENBQUMsRUFBRSxDQUFDO1FBQy9CLENBQUM7UUFDRCxPQUFPLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0lBQ3RCLENBQUM7SUFFRCxRQUFRLENBQUMsRUFBQyxHQUFHLEVBQUUsR0FBRyxFQUFXO1FBQzNCLElBQUksR0FBRyxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQ1osT0FBTyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxHQUFHLENBQUMsRUFBRSxDQUFDO1FBQy9CLENBQUM7UUFDRCxPQUFPLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0lBQ3RCLENBQUM7SUFFRCxNQUFNLENBQUMsRUFBQyxHQUFHLEVBQUUsR0FBRyxFQUFXO1FBQ3pCLElBQUksR0FBRyxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQ1osT0FBTyxFQUFFLEdBQUcsRUFBRSxHQUFHLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDO1FBQy9CLENBQUM7UUFDRCxPQUFPLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0lBQ3RCLENBQUM7SUFFRCxRQUFRLENBQUMsRUFBQyxHQUFHLEVBQUUsR0FBRyxFQUFXO1FBQzNCLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxFQUFFLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQzdDLE9BQU8sRUFBRSxHQUFHLEVBQUUsR0FBRyxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQztRQUMvQixDQUFDO1FBQ0QsT0FBTyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztJQUN0QixDQUFDOzhHQS9EVSxpQkFBaUI7a0hBQWpCLGlCQUFpQjs7MkZBQWpCLGlCQUFpQjtrQkFEN0IsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFBvc2l0aW9uIH0gZnJvbSAnLi4vbW9kZWxzL2NlbGwubW9kZWwnO1xuaW1wb3J0IHsgR3JpZFNlcnZpY2UgfSBmcm9tICcuL2dyaWQuc2VydmljZSc7XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBOYXZpZ2F0aW9uU2VydmljZSB7XG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgZ3JpZFNlcnZpY2U6IEdyaWRTZXJ2aWNlKSB7fVxuXG4gIG1vdmVUb05leHRDZWxsKHtyb3csIGNvbH06IFBvc2l0aW9uKTogUG9zaXRpb24ge1xuICAgIGNvbnN0IGNvbHVtbnMgPSB0aGlzLmdyaWRTZXJ2aWNlLmNvbHVtbnMoKTtcbiAgICBpZiAoY29sIDwgY29sdW1ucy5sZW5ndGggLSAxKSB7XG4gICAgICByZXR1cm4geyByb3csIGNvbDogY29sICsgMSB9O1xuICAgIH0gZWxzZSBpZiAocm93IDwgdGhpcy5ncmlkU2VydmljZS5kYXRhKCkubGVuZ3RoIC0gMSkge1xuICAgICAgcmV0dXJuIHsgcm93OiByb3cgKyAxLCBjb2w6IDAgfTtcbiAgICB9XG4gICAgcmV0dXJuIHsgcm93LCBjb2wgfTtcbiAgfVxuXG4gIG1vdmVUb1ByZXZpb3VzQ2VsbCh7cm93LCBjb2x9OiBQb3NpdGlvbik6IFBvc2l0aW9uIHtcbiAgICBjb25zdCBjb2x1bW5zID0gdGhpcy5ncmlkU2VydmljZS5jb2x1bW5zKCk7XG4gICAgaWYgKGNvbCA+IDApIHtcbiAgICAgIHJldHVybiB7IHJvdywgY29sOiBjb2wgLSAxIH07XG4gICAgfSBlbHNlIGlmIChyb3cgPiAwKSB7XG4gICAgICByZXR1cm4geyByb3c6IHJvdyAtIDEsIGNvbDogY29sdW1ucy5sZW5ndGggLSAxIH07XG4gICAgfVxuICAgIHJldHVybiB7IHJvdywgY29sIH07XG4gIH1cblxuICBtb3ZlVG9OZXh0Um93KHtyb3csIGNvbH06IFBvc2l0aW9uKTogUG9zaXRpb24ge1xuICAgIGlmIChyb3cgPCB0aGlzLmdyaWRTZXJ2aWNlLmRhdGEoKS5sZW5ndGggLSAxKSB7XG4gICAgICByZXR1cm4geyByb3c6IHJvdyArIDEsIGNvbCB9O1xuICAgIH1cbiAgICByZXR1cm4geyByb3csIGNvbCB9O1xuICB9XG5cbiAgbW92ZVRvUHJldmlvdXNSb3coe3JvdywgY29sfTogUG9zaXRpb24pOiBQb3NpdGlvbiB7XG4gICAgaWYgKHJvdyA+IDApIHtcbiAgICAgIHJldHVybiB7IHJvdzogcm93IC0gMSwgY29sIH07XG4gICAgfVxuICAgIHJldHVybiB7IHJvdywgY29sIH07XG4gIH1cblxuICBtb3ZlUmlnaHQoe3JvdywgY29sfTogUG9zaXRpb24pOiBQb3NpdGlvbiB7XG4gICAgaWYgKGNvbCA8IHRoaXMuZ3JpZFNlcnZpY2UuY29sdW1ucygpLmxlbmd0aCAtIDEpIHtcbiAgICAgIHJldHVybiB7IHJvdywgY29sOiBjb2wgKyAxIH07XG4gICAgfVxuICAgIHJldHVybiB7IHJvdywgY29sIH07XG4gIH1cblxuICBtb3ZlTGVmdCh7cm93LCBjb2x9OiBQb3NpdGlvbik6IFBvc2l0aW9uIHtcbiAgICBpZiAoY29sID4gMCkge1xuICAgICAgcmV0dXJuIHsgcm93LCBjb2w6IGNvbCAtIDEgfTtcbiAgICB9XG4gICAgcmV0dXJuIHsgcm93LCBjb2wgfTtcbiAgfVxuXG4gIG1vdmVVcCh7cm93LCBjb2x9OiBQb3NpdGlvbik6IFBvc2l0aW9uIHtcbiAgICBpZiAocm93ID4gMCkge1xuICAgICAgcmV0dXJuIHsgcm93OiByb3cgLSAxLCBjb2wgfTtcbiAgICB9XG4gICAgcmV0dXJuIHsgcm93LCBjb2wgfTtcbiAgfVxuXG4gIG1vdmVEb3duKHtyb3csIGNvbH06IFBvc2l0aW9uKTogUG9zaXRpb24ge1xuICAgIGlmIChyb3cgPCB0aGlzLmdyaWRTZXJ2aWNlLmRhdGEoKS5sZW5ndGggLSAxKSB7XG4gICAgICByZXR1cm4geyByb3c6IHJvdyArIDEsIGNvbCB9O1xuICAgIH1cbiAgICByZXR1cm4geyByb3csIGNvbCB9O1xuICB9XG59Il19
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { inject, Injectable, InjectionToken } from "@angular/core";
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
export const COLUMN_PROTECTOR = new InjectionToken('COLUMN_PROTECTOR', {
|
|
4
|
+
providedIn: 'root',
|
|
5
|
+
factory: () => [],
|
|
6
|
+
});
|
|
7
|
+
export function provideCellProtector(useFactory) {
|
|
8
|
+
return { provide: COLUMN_PROTECTOR, useFactory, multi: true };
|
|
9
|
+
}
|
|
10
|
+
export class ProtectionService {
|
|
11
|
+
constructor() {
|
|
12
|
+
this.protectors = inject(COLUMN_PROTECTOR, { optional: true });
|
|
13
|
+
}
|
|
14
|
+
isEditable(value, context) {
|
|
15
|
+
if (!this.protectors)
|
|
16
|
+
return true;
|
|
17
|
+
return this.protectors.every((protector) => protector(value, context));
|
|
18
|
+
}
|
|
19
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.2", ngImport: i0, type: ProtectionService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
20
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.1.2", ngImport: i0, type: ProtectionService }); }
|
|
21
|
+
}
|
|
22
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.2", ngImport: i0, type: ProtectionService, decorators: [{
|
|
23
|
+
type: Injectable
|
|
24
|
+
}] });
|
|
25
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvdGVjdGlvbi5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvQG5nLWF0b21pYy9jb21tb24vc3JjL2xpYi9zZXJ2aWNlcy9zcHJlYWRzaGVldC9mZWF0dXJlcy9wcm90ZWN0aW9uLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsY0FBYyxFQUFFLE1BQU0sZUFBZSxDQUFDOztBQVluRSxNQUFNLENBQUMsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLGNBQWMsQ0FBa0Isa0JBQWtCLEVBQUU7SUFDdEYsVUFBVSxFQUFFLE1BQU07SUFDbEIsT0FBTyxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUU7Q0FDbEIsQ0FBQyxDQUFDO0FBQ0gsTUFBTSxVQUFVLG9CQUFvQixDQUFDLFVBQStCO0lBQ2xFLE9BQU8sRUFBRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsQ0FBQztBQUNoRSxDQUFDO0FBR0QsTUFBTSxPQUFPLGlCQUFpQjtJQUQ5QjtRQUVXLGVBQVUsR0FBRyxNQUFNLENBQUMsZ0JBQWdCLEVBQUUsRUFBQyxRQUFRLEVBQUUsSUFBSSxFQUFDLENBQUMsQ0FBQztLQU1sRTtJQUpDLFVBQVUsQ0FBQyxLQUFVLEVBQUUsT0FBeUI7UUFDOUMsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVO1lBQUUsT0FBTyxJQUFJLENBQUM7UUFDbEMsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDLFNBQVMsRUFBRSxFQUFFLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDO0lBQ3pFLENBQUM7OEdBTlUsaUJBQWlCO2tIQUFqQixpQkFBaUI7OzJGQUFqQixpQkFBaUI7a0JBRDdCLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBpbmplY3QsIEluamVjdGFibGUsIEluamVjdGlvblRva2VuIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcblxuaW50ZXJmYWNlIENlbGxDb250ZXh0PFQ+IHtcbiAgaXRlbTogVDtcbiAgbmFtZTogc3RyaW5nO1xuICBwb3NpdGlvbjoge1xuICAgIHJvdzogbnVtYmVyO1xuICAgIGNvbDogbnVtYmVyO1xuICB9XG59XG5cbmV4cG9ydCB0eXBlIENlbGxQcm90ZWN0b3IgPSAodmFsdWU6IGFueSwgY29udGV4dDogQ2VsbENvbnRleHQ8YW55PikgPT4gYm9vbGVhbjtcbmV4cG9ydCBjb25zdCBDT0xVTU5fUFJPVEVDVE9SID0gbmV3IEluamVjdGlvblRva2VuPENlbGxQcm90ZWN0b3JbXT4oJ0NPTFVNTl9QUk9URUNUT1InLCB7XG4gIHByb3ZpZGVkSW46ICdyb290JyxcbiAgZmFjdG9yeTogKCkgPT4gW10sXG59KTtcbmV4cG9ydCBmdW5jdGlvbiBwcm92aWRlQ2VsbFByb3RlY3Rvcih1c2VGYWN0b3J5OiAoKSA9PiBDZWxsUHJvdGVjdG9yKSB7XG4gIHJldHVybiB7IHByb3ZpZGU6IENPTFVNTl9QUk9URUNUT1IsIHVzZUZhY3RvcnksIG11bHRpOiB0cnVlIH07XG59XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBQcm90ZWN0aW9uU2VydmljZSB7XG4gIHJlYWRvbmx5IHByb3RlY3RvcnMgPSBpbmplY3QoQ09MVU1OX1BST1RFQ1RPUiwge29wdGlvbmFsOiB0cnVlfSk7XG5cbiAgaXNFZGl0YWJsZSh2YWx1ZTogYW55LCBjb250ZXh0OiBDZWxsQ29udGV4dDxhbnk+KTogYm9vbGVhbiB7XG4gICAgaWYgKCF0aGlzLnByb3RlY3RvcnMpIHJldHVybiB0cnVlO1xuICAgIHJldHVybiB0aGlzLnByb3RlY3RvcnMuZXZlcnkoKHByb3RlY3RvcikgPT4gcHJvdGVjdG9yKHZhbHVlLCBjb250ZXh0KSk7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
import { computed, effect, inject, Injectable, signal } from '@angular/core';
|
|
2
|
+
import { GridService } from './grid.service';
|
|
3
|
+
import { isEqual } from 'lodash-es';
|
|
4
|
+
import * as i0 from "@angular/core";
|
|
5
|
+
export class SelectionService {
|
|
6
|
+
constructor() {
|
|
7
|
+
this.selection = signal({ start: { row: 1, col: 0 }, end: null });
|
|
8
|
+
this.selectionStart = computed(() => this.selection().start, { equal: isEqual });
|
|
9
|
+
this.isMouseDown = signal(false);
|
|
10
|
+
this.grid = inject(GridService);
|
|
11
|
+
this.cellElMap = new Map();
|
|
12
|
+
effect(() => {
|
|
13
|
+
const position = this.selectionStart();
|
|
14
|
+
if (position)
|
|
15
|
+
this.focus(position);
|
|
16
|
+
});
|
|
17
|
+
}
|
|
18
|
+
isSelected(position) {
|
|
19
|
+
// selectionの範囲に含まれているかどうかを返す
|
|
20
|
+
const selection = this.selection();
|
|
21
|
+
if (!selection)
|
|
22
|
+
return false;
|
|
23
|
+
const { start, end } = selection;
|
|
24
|
+
const minRow = Math.min(start.row, end?.row ?? start.row);
|
|
25
|
+
const maxRow = Math.max(start.row, end?.row ?? start.row);
|
|
26
|
+
const minCol = Math.min(start.col, end?.col ?? start.col);
|
|
27
|
+
const maxCol = Math.max(start.col, end?.col ?? start.col);
|
|
28
|
+
const { row, col } = position;
|
|
29
|
+
return row >= minRow && row <= maxRow && col >= minCol && col <= maxCol;
|
|
30
|
+
}
|
|
31
|
+
isCursorPosition(position) {
|
|
32
|
+
return isEqual(this.selection().start, position);
|
|
33
|
+
}
|
|
34
|
+
handleMouseDown(position, event) {
|
|
35
|
+
this.isMouseDown.set(true);
|
|
36
|
+
if (!event?.shiftKey) {
|
|
37
|
+
this.startSelection(position);
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
handleMouseUp() {
|
|
41
|
+
this.isMouseDown.set(false);
|
|
42
|
+
}
|
|
43
|
+
handleMouseEnter(position) {
|
|
44
|
+
if (this.isMouseDown()) {
|
|
45
|
+
this.updateSelection(position);
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
handleClick(position, event) {
|
|
49
|
+
if (!this.isMouseDown()) {
|
|
50
|
+
if (event?.shiftKey) {
|
|
51
|
+
this.updateSelectionEnd(position);
|
|
52
|
+
}
|
|
53
|
+
else {
|
|
54
|
+
this.startSelection(position);
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
clearSelection() {
|
|
59
|
+
this.selection.update((selection) => ({ ...selection, start: selection.start, end: null }));
|
|
60
|
+
}
|
|
61
|
+
setStartPosition(position) {
|
|
62
|
+
this.selection.update((selection) => ({ ...selection, start: position, end: null }));
|
|
63
|
+
}
|
|
64
|
+
getSelection() {
|
|
65
|
+
return this.selection();
|
|
66
|
+
}
|
|
67
|
+
getSelectionEndOrStart() {
|
|
68
|
+
return this.selection()?.end || this.selection()?.start;
|
|
69
|
+
}
|
|
70
|
+
findSelectedCell() {
|
|
71
|
+
const data = this.grid.data();
|
|
72
|
+
for (let i = 0; i < data.length; i++) {
|
|
73
|
+
for (let j = 0; j < data[i].length; j++) {
|
|
74
|
+
if (this.isSelected({ row: i, col: j })) {
|
|
75
|
+
return { row: i, col: j };
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
return null;
|
|
80
|
+
}
|
|
81
|
+
updateSelectionEnd(position) {
|
|
82
|
+
this.selection.update((selection) => ({ ...selection, end: position }));
|
|
83
|
+
}
|
|
84
|
+
startSelection(position) {
|
|
85
|
+
this.selection.set({ start: position, end: null });
|
|
86
|
+
}
|
|
87
|
+
updateSelection(position) {
|
|
88
|
+
if (this.selection()) {
|
|
89
|
+
this.selection.update((selection) => ({ ...selection, end: position }));
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
clearSelectedRange(selection) {
|
|
93
|
+
const minRow = Math.min(selection.start.row, selection.end.row);
|
|
94
|
+
const maxRow = Math.max(selection.start.row, selection.end.row);
|
|
95
|
+
const minCol = Math.min(selection.start.col, selection.end.col);
|
|
96
|
+
const maxCol = Math.max(selection.start.col, selection.end.col);
|
|
97
|
+
for (let i = minRow; i <= maxRow; i++) {
|
|
98
|
+
for (let j = minCol; j <= maxCol; j++) {
|
|
99
|
+
this.grid.updateCell(i, j, {
|
|
100
|
+
dataValue: '',
|
|
101
|
+
expressionValue: ''
|
|
102
|
+
});
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
setCell(position, el) {
|
|
107
|
+
this.cellElMap.set(`${this.buildKey(position)}`, el);
|
|
108
|
+
}
|
|
109
|
+
getCell(position) {
|
|
110
|
+
return this.cellElMap.get(this.buildKey(position)) ?? null;
|
|
111
|
+
}
|
|
112
|
+
focus(position) {
|
|
113
|
+
setTimeout(() => {
|
|
114
|
+
const el = this.getCell(position);
|
|
115
|
+
if (el && el !== document.activeElement) {
|
|
116
|
+
el.focus();
|
|
117
|
+
}
|
|
118
|
+
});
|
|
119
|
+
}
|
|
120
|
+
buildKey(position) {
|
|
121
|
+
return `(${position.row}, ${position.col})`;
|
|
122
|
+
}
|
|
123
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.2", ngImport: i0, type: SelectionService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
124
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.1.2", ngImport: i0, type: SelectionService }); }
|
|
125
|
+
}
|
|
126
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.2", ngImport: i0, type: SelectionService, decorators: [{
|
|
127
|
+
type: Injectable
|
|
128
|
+
}], ctorParameters: () => [] });
|
|
129
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0aW9uLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9AbmctYXRvbWljL2NvbW1vbi9zcmMvbGliL3NlcnZpY2VzL3NwcmVhZHNoZWV0L2ZlYXR1cmVzL3NlbGVjdGlvbi5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTdFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3QyxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sV0FBVyxDQUFDOztBQUdwQyxNQUFNLE9BQU8sZ0JBQWdCO0lBTzNCO1FBTmlCLGNBQVMsR0FBRyxNQUFNLENBQVksRUFBRSxLQUFLLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUN2RSxtQkFBYyxHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUM7UUFDNUUsZ0JBQVcsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDNUIsU0FBSSxHQUFHLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUMzQixjQUFTLEdBQUcsSUFBSSxHQUFHLEVBQWdDLENBQUM7UUFHbkUsTUFBTSxDQUFDLEdBQUcsRUFBRTtZQUNWLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUN2QyxJQUFJLFFBQVE7Z0JBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUNyQyxDQUFDLENBQUMsQ0FB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QUFFLFFBQVEsRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUNyRCxDQUFDO0lBRU8sZUFBZSxDQUFDLFFBQWtCO1FBQ3hDLElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRSxFQUFFLENBQUM7WUFDckIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxTQUFTLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBQyxHQUFHLFNBQVMsRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3hFLENBQUM7SUFDSCxDQUFDO0lBRUQsa0JBQWtCLENBQUMsU0FBcUY7UUFDdEcsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxTQUFTLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ2hFLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsU0FBUyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNoRSxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFLFNBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDaEUsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxTQUFTLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBRWhFLEtBQUssSUFBSSxDQUFDLEdBQUcsTUFBTSxFQUFFLENBQUMsSUFBSSxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztZQUN0QyxLQUFLLElBQUksQ0FBQyxHQUFHLE1BQU0sRUFBRSxDQUFDLElBQUksTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7Z0JBQ3RDLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUU7b0JBQ3pCLFNBQVMsRUFBRSxFQUFFO29CQUNiLGVBQWUsRUFBRSxFQUFFO2lCQUNwQixDQUFDLENBQUM7WUFDTCxDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7SUFFRCxPQUFPLENBQUMsUUFBa0IsRUFBRSxFQUF3QjtRQUNsRCxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUN2RCxDQUFDO0lBRUQsT0FBTyxDQUFDLFFBQWtCO1FBQ3hCLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQztJQUM3RCxDQUFDO0lBRUQsS0FBSyxDQUFDLFFBQWtCO1FBQ3RCLFVBQVUsQ0FBQyxHQUFHLEVBQUU7WUFDZCxNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQ2xDLElBQUksRUFBRSxJQUFJLEVBQUUsS0FBSyxRQUFRLENBQUMsYUFBYSxFQUFFLENBQUM7Z0JBQ3hDLEVBQUUsQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUNiLENBQUM7UUFDSCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFUyxRQUFRLENBQUMsUUFBa0I7UUFDbkMsT0FBTyxJQUFJLFFBQVEsQ0FBQyxHQUFHLEtBQUssUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0lBQzlDLENBQUM7OEdBeElVLGdCQUFnQjtrSEFBaEIsZ0JBQWdCOzsyRkFBaEIsZ0JBQWdCO2tCQUQ1QixVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY29tcHV0ZWQsIGVmZmVjdCwgaW5qZWN0LCBJbmplY3RhYmxlLCBzaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFNlbGVjdGlvbiwgUG9zaXRpb24gfSBmcm9tICcuLi9tb2RlbHMvY2VsbC5tb2RlbCc7XG5pbXBvcnQgeyBHcmlkU2VydmljZSB9IGZyb20gJy4vZ3JpZC5zZXJ2aWNlJztcbmltcG9ydCB7IGlzRXF1YWwgfSBmcm9tICdsb2Rhc2gtZXMnO1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgU2VsZWN0aW9uU2VydmljZSB7XG4gIHByaXZhdGUgcmVhZG9ubHkgc2VsZWN0aW9uID0gc2lnbmFsPFNlbGVjdGlvbj4oeyBzdGFydDogeyByb3c6IDEsIGNvbDogMH0sIGVuZDogbnVsbCB9KTtcbiAgcHJpdmF0ZSByZWFkb25seSBzZWxlY3Rpb25TdGFydCA9IGNvbXB1dGVkKCgpID0+IHRoaXMuc2VsZWN0aW9uKCkuc3RhcnQsIHsgZXF1YWw6IGlzRXF1YWwgfSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgaXNNb3VzZURvd24gPSBzaWduYWwoZmFsc2UpO1xuICBwcml2YXRlIHJlYWRvbmx5IGdyaWQgPSBpbmplY3QoR3JpZFNlcnZpY2UpO1xuICBwcml2YXRlIHJlYWRvbmx5IGNlbGxFbE1hcCA9IG5ldyBNYXA8c3RyaW5nLCBIVE1MVGFibGVDZWxsRWxlbWVudD4oKTtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBlZmZlY3QoKCkgPT4ge1xuICAgICAgY29uc3QgcG9zaXRpb24gPSB0aGlzLnNlbGVjdGlvblN0YXJ0KCk7XG4gICAgICBpZiAocG9zaXRpb24pIHRoaXMuZm9jdXMocG9zaXRpb24pO1xuICAgIH0pO1xuICB9XG5cbiAgaXNTZWxlY3RlZChwb3NpdGlvbjogUG9zaXRpb24pOiBib29sZWFuIHtcbiAgICAvLyBzZWxlY3Rpb27jga7nr4Tlm7LjgavlkKvjgb7jgozjgabjgYTjgovjgYvjganjgYbjgYvjgpLov5TjgZlcbiAgICBjb25zdCBzZWxlY3Rpb24gPSB0aGlzLnNlbGVjdGlvbigpO1xuICAgIGlmICghc2VsZWN0aW9uKSByZXR1cm4gZmFsc2U7XG5cbiAgICBjb25zdCB7IHN0YXJ0LCBlbmQgfSA9IHNlbGVjdGlvbjtcbiAgICBjb25zdCBtaW5Sb3cgPSBNYXRoLm1pbihzdGFydC5yb3csIGVuZD8ucm93ID8/IHN0YXJ0LnJvdyk7XG4gICAgY29uc3QgbWF4Um93ID0gTWF0aC5tYXgoc3RhcnQucm93LCBlbmQ/LnJvdyA/PyBzdGFydC5yb3cpO1xuICAgIGNvbnN0IG1pbkNvbCA9IE1hdGgubWluKHN0YXJ0LmNvbCwgZW5kPy5jb2wgPz8gc3RhcnQuY29sKTtcbiAgICBjb25zdCBtYXhDb2wgPSBNYXRoLm1heChzdGFydC5jb2wsIGVuZD8uY29sID8/IHN0YXJ0LmNvbCk7XG4gICAgY29uc3QgeyByb3csIGNvbCB9ID0gcG9zaXRpb247XG4gICAgcmV0dXJuIHJvdyA+PSBtaW5Sb3cgJiYgcm93IDw9IG1heFJvdyAmJiBjb2wgPj0gbWluQ29sICYmIGNvbCA8PSBtYXhDb2w7XG4gIH1cblxuICBpc0N1cnNvclBvc2l0aW9uKHBvc2l0aW9uOiBQb3NpdGlvbik6IGJvb2xlYW4ge1xuICAgIHJldHVybiBpc0VxdWFsKHRoaXMuc2VsZWN0aW9uKCkuc3RhcnQsIHBvc2l0aW9uKTtcbiAgfVxuXG4gIGhhbmRsZU1vdXNlRG93bihwb3NpdGlvbjogUG9zaXRpb24sIGV2ZW50PzogTW91c2VFdmVudCk6IHZvaWQge1xuICAgIHRoaXMuaXNNb3VzZURvd24uc2V0KHRydWUpO1xuICAgIGlmICghZXZlbnQ/LnNoaWZ0S2V5KSB7XG4gICAgICB0aGlzLnN0YXJ0U2VsZWN0aW9uKHBvc2l0aW9uKTtcbiAgICB9XG4gIH1cblxuICBoYW5kbGVNb3VzZVVwKCk6IHZvaWQge1xuICAgIHRoaXMuaXNNb3VzZURvd24uc2V0KGZhbHNlKTtcbiAgfVxuXG4gIGhhbmRsZU1vdXNlRW50ZXIocG9zaXRpb246IFBvc2l0aW9uKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaXNNb3VzZURvd24oKSkge1xuICAgICAgdGhpcy51cGRhdGVTZWxlY3Rpb24ocG9zaXRpb24pO1xuICAgIH1cbiAgfVxuXG4gIGhhbmRsZUNsaWNrKHBvc2l0aW9uOiBQb3NpdGlvbiwgZXZlbnQ/OiBNb3VzZUV2ZW50KTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmlzTW91c2VEb3duKCkpIHtcbiAgICAgIGlmIChldmVudD8uc2hpZnRLZXkpIHtcbiAgICAgICAgdGhpcy51cGRhdGVTZWxlY3Rpb25FbmQocG9zaXRpb24pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5zdGFydFNlbGVjdGlvbihwb3NpdGlvbik7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgY2xlYXJTZWxlY3Rpb24oKTogdm9pZCB7XG4gICAgdGhpcy5zZWxlY3Rpb24udXBkYXRlKChzZWxlY3Rpb24pID0+ICh7Li4uc2VsZWN0aW9uLCBzdGFydDogc2VsZWN0aW9uLnN0YXJ0LCBlbmQ6IG51bGx9KSk7XG4gIH1cblxuICBzZXRTdGFydFBvc2l0aW9uKHBvc2l0aW9uOiBQb3NpdGlvbik6IHZvaWQge1xuICAgIHRoaXMuc2VsZWN0aW9uLnVwZGF0ZSgoc2VsZWN0aW9uKSA9PiAoey4uLnNlbGVjdGlvbiwgc3RhcnQ6IHBvc2l0aW9uLCBlbmQ6IG51bGx9KSk7XG4gIH1cblxuICBnZXRTZWxlY3Rpb24oKTogU2VsZWN0aW9uIHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuc2VsZWN0aW9uKCk7XG4gIH1cblxuICBnZXRTZWxlY3Rpb25FbmRPclN0YXJ0KCk6IFBvc2l0aW9uIHtcbiAgICByZXR1cm4gdGhpcy5zZWxlY3Rpb24oKT8uZW5kIHx8IHRoaXMuc2VsZWN0aW9uKCk/LnN0YXJ0O1xuICB9XG5cbiAgZmluZFNlbGVjdGVkQ2VsbCgpOiBQb3NpdGlvbiB8IG51bGwge1xuICAgIGNvbnN0IGRhdGEgPSB0aGlzLmdyaWQuZGF0YSgpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZGF0YS5sZW5ndGg7IGkrKykge1xuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBkYXRhW2ldLmxlbmd0aDsgaisrKSB7XG4gICAgICAgIGlmICh0aGlzLmlzU2VsZWN0ZWQoe3JvdzogaSwgY29sOiBqfSkpIHtcbiAgICAgICAgICByZXR1cm4geyByb3c6IGksIGNvbDogaiB9O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgdXBkYXRlU2VsZWN0aW9uRW5kKHBvc2l0aW9uOiBQb3NpdGlvbik6IHZvaWQge1xuICAgIHRoaXMuc2VsZWN0aW9uLnVwZGF0ZSgoc2VsZWN0aW9uKSA9PiAoey4uLnNlbGVjdGlvbiwgZW5kOiBwb3NpdGlvbn0pKTtcbiAgfVxuXG4gIHByaXZhdGUgc3RhcnRTZWxlY3Rpb24ocG9zaXRpb246IFBvc2l0aW9uKTogdm9pZCB7XG4gICAgdGhpcy5zZWxlY3Rpb24uc2V0KHsgc3RhcnQ6IHBvc2l0aW9uLCBlbmQ6IG51bGwgfSk7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZVNlbGVjdGlvbihwb3NpdGlvbjogUG9zaXRpb24pOiB2b2lkIHtcbiAgICBpZiAodGhpcy5zZWxlY3Rpb24oKSkge1xuICAgICAgdGhpcy5zZWxlY3Rpb24udXBkYXRlKChzZWxlY3Rpb24pID0+ICh7Li4uc2VsZWN0aW9uLCBlbmQ6IHBvc2l0aW9ufSkpO1xuICAgIH1cbiAgfVxuXG4gIGNsZWFyU2VsZWN0ZWRSYW5nZShzZWxlY3Rpb246IHsgc3RhcnQ6IHsgcm93OiBudW1iZXI7IGNvbDogbnVtYmVyIH07IGVuZDogeyByb3c6IG51bWJlcjsgY29sOiBudW1iZXIgfSB9KTogdm9pZCB7XG4gICAgY29uc3QgbWluUm93ID0gTWF0aC5taW4oc2VsZWN0aW9uLnN0YXJ0LnJvdywgc2VsZWN0aW9uLmVuZC5yb3cpO1xuICAgIGNvbnN0IG1heFJvdyA9IE1hdGgubWF4KHNlbGVjdGlvbi5zdGFydC5yb3csIHNlbGVjdGlvbi5lbmQucm93KTtcbiAgICBjb25zdCBtaW5Db2wgPSBNYXRoLm1pbihzZWxlY3Rpb24uc3RhcnQuY29sLCBzZWxlY3Rpb24uZW5kLmNvbCk7XG4gICAgY29uc3QgbWF4Q29sID0gTWF0aC5tYXgoc2VsZWN0aW9uLnN0YXJ0LmNvbCwgc2VsZWN0aW9uLmVuZC5jb2wpO1xuXG4gICAgZm9yIChsZXQgaSA9IG1pblJvdzsgaSA8PSBtYXhSb3c7IGkrKykge1xuICAgICAgZm9yIChsZXQgaiA9IG1pbkNvbDsgaiA8PSBtYXhDb2w7IGorKykge1xuICAgICAgICB0aGlzLmdyaWQudXBkYXRlQ2VsbChpLCBqLCB7XG4gICAgICAgICAgZGF0YVZhbHVlOiAnJyxcbiAgICAgICAgICBleHByZXNzaW9uVmFsdWU6ICcnXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHNldENlbGwocG9zaXRpb246IFBvc2l0aW9uLCBlbDogSFRNTFRhYmxlQ2VsbEVsZW1lbnQpOiB2b2lkIHtcbiAgICB0aGlzLmNlbGxFbE1hcC5zZXQoYCR7dGhpcy5idWlsZEtleShwb3NpdGlvbil9YCwgZWwpO1xuICB9XG5cbiAgZ2V0Q2VsbChwb3NpdGlvbjogUG9zaXRpb24pOiBIVE1MVGFibGVDZWxsRWxlbWVudCB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLmNlbGxFbE1hcC5nZXQodGhpcy5idWlsZEtleShwb3NpdGlvbikpID8/IG51bGw7XG4gIH1cblxuICBmb2N1cyhwb3NpdGlvbjogUG9zaXRpb24pOiB2b2lkIHtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGNvbnN0IGVsID0gdGhpcy5nZXRDZWxsKHBvc2l0aW9uKTtcbiAgICAgIGlmIChlbCAmJiBlbCAhPT0gZG9jdW1lbnQuYWN0aXZlRWxlbWVudCkge1xuICAgICAgICBlbC5mb2N1cygpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcHJvdGVjdGVkIGJ1aWxkS2V5KHBvc2l0aW9uOiBQb3NpdGlvbik6IHN0cmluZyB7XG4gICAgcmV0dXJuIGAoJHtwb3NpdGlvbi5yb3d9LCAke3Bvc2l0aW9uLmNvbH0pYDtcbiAgfVxufSJdfQ==
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export * from './directives';
|
|
2
|
+
export * from './features';
|
|
3
|
+
export * from './models';
|
|
4
|
+
export * from './spreadsheet.service';
|
|
5
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9AbmctYXRvbWljL2NvbW1vbi9zcmMvbGliL3NlcnZpY2VzL3NwcmVhZHNoZWV0L2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsY0FBYyxDQUFDO0FBQzdCLGNBQWMsWUFBWSxDQUFDO0FBQzNCLGNBQWMsVUFBVSxDQUFDO0FBQ3pCLGNBQWMsdUJBQXVCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL2RpcmVjdGl2ZXMnO1xuZXhwb3J0ICogZnJvbSAnLi9mZWF0dXJlcyc7XG5leHBvcnQgKiBmcm9tICcuL21vZGVscyc7XG5leHBvcnQgKiBmcm9tICcuL3NwcmVhZHNoZWV0LnNlcnZpY2UnO1xuIl19
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export {};
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2VsbC5tb2RlbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL0BuZy1hdG9taWMvY29tbW9uL3NyYy9saWIvc2VydmljZXMvc3ByZWFkc2hlZXQvbW9kZWxzL2NlbGwubW9kZWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBpbnRlcmZhY2UgQ2VsbCB7XG4gIGRhdGFWYWx1ZTogYW55O1xuICBleHByZXNzaW9uVmFsdWU6IGFueTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDZWxsQ29udGV4dDxJID0gYW55PiB7XG4gIGl0ZW06IEk7XG4gIG5hbWU6IHN0cmluZztcbiAgcG9zaXRpb246IFBvc2l0aW9uO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFNlbGVjdGlvbiB7XG4gIHN0YXJ0OiBQb3NpdGlvbjtcbiAgZW5kOiBQb3NpdGlvbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBQb3NpdGlvbiB7XG4gIHJvdzogbnVtYmVyO1xuICBjb2w6IG51bWJlcjtcbn1cblxuIl19
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export * from './cell.model';
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9AbmctYXRvbWljL2NvbW1vbi9zcmMvbGliL3NlcnZpY2VzL3NwcmVhZHNoZWV0L21vZGVscy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLGNBQWMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vY2VsbC5tb2RlbCc7XG4iXX0=
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Generated bundle index. Do not edit.
|
|
3
|
+
*/
|
|
4
|
+
export * from './index';
|
|
5
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmctYXRvbWljLWNvbW1vbi1zZXJ2aWNlcy1zcHJlYWRzaGVldC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL0BuZy1hdG9taWMvY29tbW9uL3NyYy9saWIvc2VydmljZXMvc3ByZWFkc2hlZXQvbmctYXRvbWljLWNvbW1vbi1zZXJ2aWNlcy1zcHJlYWRzaGVldC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUVILGNBQWMsU0FBUyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBHZW5lcmF0ZWQgYnVuZGxlIGluZGV4LiBEbyBub3QgZWRpdC5cbiAqL1xuXG5leHBvcnQgKiBmcm9tICcuL2luZGV4JztcbiJdfQ==
|