@ng-atomic/common 18.10.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.
Files changed (193) hide show
  1. package/directives/molecules/column/column.molecule.d.ts +66 -0
  2. package/directives/molecules/column/index.d.ts +1 -0
  3. package/directives/resize-column/index.d.ts +1 -0
  4. package/directives/resize-column/resize-column.directive.d.ts +21 -0
  5. package/directives/resize-column/resize-handle.component.d.ts +5 -0
  6. package/esm2022/directives/molecules/column/column.molecule.mjs +112 -0
  7. package/esm2022/directives/molecules/column/index.mjs +2 -0
  8. package/esm2022/directives/molecules/column/ng-atomic-common-directives-molecules-column.mjs +5 -0
  9. package/esm2022/directives/resize-column/index.mjs +2 -0
  10. package/esm2022/directives/resize-column/ng-atomic-common-directives-resize-column.mjs +5 -0
  11. package/esm2022/directives/resize-column/resize-column.directive.mjs +62 -0
  12. package/esm2022/directives/resize-column/resize-handle.component.mjs +13 -0
  13. package/esm2022/models/index.mjs +1 -1
  14. package/esm2022/pipes/actions/actions.pipe.mjs +1 -1
  15. package/esm2022/pipes/columns/columns.pipe.mjs +3 -2
  16. package/esm2022/pipes/data-accessor/data-accessor.pipe.mjs +16 -3
  17. package/esm2022/pipes/domain/domain.pipe.mjs +22 -26
  18. package/esm2022/pipes/error/error.pipe.mjs +1 -2
  19. package/esm2022/pipes/expression/expression.pipe.mjs +18 -0
  20. package/esm2022/pipes/expression/index.mjs +2 -0
  21. package/esm2022/pipes/expression/ng-atomic-common-pipes-expression.mjs +5 -0
  22. package/esm2022/pipes/smart-field/smart-field.pipe.mjs +15 -4
  23. package/esm2022/pipes/style/index.mjs +2 -0
  24. package/esm2022/pipes/style/ng-atomic-common-pipes-style.mjs +5 -0
  25. package/esm2022/pipes/style/style.pipe.mjs +41 -0
  26. package/esm2022/services/form/columns/columns.service.mjs +28 -21
  27. package/esm2022/services/form/json-schema/json-schema.service.mjs +77 -58
  28. package/esm2022/services/form/pagination/pagination.service.mjs +4 -4
  29. package/esm2022/services/language/index.mjs +2 -0
  30. package/esm2022/services/language/language.service.mjs +39 -0
  31. package/esm2022/services/language/ng-atomic-common-services-language.mjs +5 -0
  32. package/esm2022/services/loading/loading.service.mjs +2 -2
  33. package/esm2022/services/query-resolver/query-resolver.service.mjs +4 -5
  34. package/esm2022/services/snack-bar/snack-bar.service.mjs +29 -11
  35. package/esm2022/services/spreadsheet/directives/grid-cell.directive.mjs +124 -0
  36. package/esm2022/services/spreadsheet/directives/index.mjs +2 -0
  37. package/esm2022/services/spreadsheet/features/clipboard.service.mjs +71 -0
  38. package/esm2022/services/spreadsheet/features/data.service.mjs +63 -0
  39. package/esm2022/services/spreadsheet/features/editor.service.mjs +65 -0
  40. package/esm2022/services/spreadsheet/features/grid.service.mjs +54 -0
  41. package/esm2022/services/spreadsheet/features/index.mjs +8 -0
  42. package/esm2022/services/spreadsheet/features/navigation.service.mjs +71 -0
  43. package/esm2022/services/spreadsheet/features/protection.service.mjs +25 -0
  44. package/esm2022/services/spreadsheet/features/selection.service.mjs +129 -0
  45. package/esm2022/services/spreadsheet/index.mjs +5 -0
  46. package/esm2022/services/spreadsheet/models/cell.model.mjs +2 -0
  47. package/esm2022/services/spreadsheet/models/index.mjs +2 -0
  48. package/esm2022/services/spreadsheet/ng-atomic-common-services-spreadsheet.mjs +5 -0
  49. package/esm2022/services/spreadsheet/spreadsheet.service.mjs +183 -0
  50. package/esm2022/services/ui/ui.helpers.mjs +15 -8
  51. package/esm2022/stores/query/query.store.mjs +2 -2
  52. package/esm2022/utils/expression/expression.transformer.mjs +38 -0
  53. package/esm2022/utils/expression/index.mjs +2 -0
  54. package/esm2022/utils/get/get.mjs +2 -2
  55. package/esm2022/utils/index.mjs +2 -2
  56. package/esm2022/utils/inject/inject.mjs +1 -1
  57. package/fesm2022/ng-atomic-common-directives-fallback-src.mjs.map +1 -1
  58. package/fesm2022/ng-atomic-common-directives-ios-safari-scroll-buggyfill.mjs.map +1 -1
  59. package/fesm2022/ng-atomic-common-directives-molecules-column.mjs +119 -0
  60. package/fesm2022/ng-atomic-common-directives-molecules-column.mjs.map +1 -0
  61. package/fesm2022/ng-atomic-common-directives-resize-column.mjs +79 -0
  62. package/fesm2022/ng-atomic-common-directives-resize-column.mjs.map +1 -0
  63. package/fesm2022/ng-atomic-common-interceptors-authorization.mjs.map +1 -1
  64. package/fesm2022/ng-atomic-common-interceptors-throttle.mjs.map +1 -1
  65. package/fesm2022/ng-atomic-common-interceptors-token.mjs.map +1 -1
  66. package/fesm2022/ng-atomic-common-interceptors.mjs.map +1 -1
  67. package/fesm2022/ng-atomic-common-pipes-actions.mjs.map +1 -1
  68. package/fesm2022/ng-atomic-common-pipes-auto-columns.mjs.map +1 -1
  69. package/fesm2022/ng-atomic-common-pipes-columns.mjs +2 -1
  70. package/fesm2022/ng-atomic-common-pipes-columns.mjs.map +1 -1
  71. package/fesm2022/ng-atomic-common-pipes-data-accessor.mjs +15 -2
  72. package/fesm2022/ng-atomic-common-pipes-data-accessor.mjs.map +1 -1
  73. package/fesm2022/ng-atomic-common-pipes-domain.mjs +22 -26
  74. package/fesm2022/ng-atomic-common-pipes-domain.mjs.map +1 -1
  75. package/fesm2022/ng-atomic-common-pipes-error.mjs +0 -1
  76. package/fesm2022/ng-atomic-common-pipes-error.mjs.map +1 -1
  77. package/fesm2022/ng-atomic-common-pipes-expression.mjs +25 -0
  78. package/fesm2022/ng-atomic-common-pipes-expression.mjs.map +1 -0
  79. package/fesm2022/ng-atomic-common-pipes-grouped-by.mjs.map +1 -1
  80. package/fesm2022/ng-atomic-common-pipes-index-length.mjs.map +1 -1
  81. package/fesm2022/ng-atomic-common-pipes-index.mjs.map +1 -1
  82. package/fesm2022/ng-atomic-common-pipes-keys.mjs.map +1 -1
  83. package/fesm2022/ng-atomic-common-pipes-map.mjs.map +1 -1
  84. package/fesm2022/ng-atomic-common-pipes-page.mjs.map +1 -1
  85. package/fesm2022/ng-atomic-common-pipes-pagination.mjs.map +1 -1
  86. package/fesm2022/ng-atomic-common-pipes-query.mjs.map +1 -1
  87. package/fesm2022/ng-atomic-common-pipes-resolve-columns.mjs.map +1 -1
  88. package/fesm2022/ng-atomic-common-pipes-secret.mjs.map +1 -1
  89. package/fesm2022/ng-atomic-common-pipes-select-id.mjs.map +1 -1
  90. package/fesm2022/ng-atomic-common-pipes-signal.mjs.map +1 -1
  91. package/fesm2022/ng-atomic-common-pipes-smart-field.mjs +15 -4
  92. package/fesm2022/ng-atomic-common-pipes-smart-field.mjs.map +1 -1
  93. package/fesm2022/ng-atomic-common-pipes-sort-by.mjs.map +1 -1
  94. package/fesm2022/ng-atomic-common-pipes-sort.mjs.map +1 -1
  95. package/fesm2022/ng-atomic-common-pipes-style.mjs +48 -0
  96. package/fesm2022/ng-atomic-common-pipes-style.mjs.map +1 -0
  97. package/fesm2022/ng-atomic-common-pipes-yen.mjs.map +1 -1
  98. package/fesm2022/ng-atomic-common-services-app.mjs.map +1 -1
  99. package/fesm2022/ng-atomic-common-services-auth.mjs.map +1 -1
  100. package/fesm2022/ng-atomic-common-services-breakpoint.mjs.map +1 -1
  101. package/fesm2022/ng-atomic-common-services-chips-manager.mjs.map +1 -1
  102. package/fesm2022/ng-atomic-common-services-csv.mjs.map +1 -1
  103. package/fesm2022/ng-atomic-common-services-fab.mjs.map +1 -1
  104. package/fesm2022/ng-atomic-common-services-form-_index.mjs.map +1 -1
  105. package/fesm2022/ng-atomic-common-services-form-columns.mjs +27 -20
  106. package/fesm2022/ng-atomic-common-services-form-columns.mjs.map +1 -1
  107. package/fesm2022/ng-atomic-common-services-form-json-schema.mjs +76 -57
  108. package/fesm2022/ng-atomic-common-services-form-json-schema.mjs.map +1 -1
  109. package/fesm2022/ng-atomic-common-services-form-pagination.mjs +3 -3
  110. package/fesm2022/ng-atomic-common-services-form-pagination.mjs.map +1 -1
  111. package/fesm2022/ng-atomic-common-services-form-sort.mjs.map +1 -1
  112. package/fesm2022/ng-atomic-common-services-form.mjs.map +1 -1
  113. package/fesm2022/ng-atomic-common-services-initializer.mjs.map +1 -1
  114. package/fesm2022/ng-atomic-common-services-language.mjs +46 -0
  115. package/fesm2022/ng-atomic-common-services-language.mjs.map +1 -0
  116. package/fesm2022/ng-atomic-common-services-loading.mjs +1 -1
  117. package/fesm2022/ng-atomic-common-services-loading.mjs.map +1 -1
  118. package/fesm2022/ng-atomic-common-services-navigation-history.mjs.map +1 -1
  119. package/fesm2022/ng-atomic-common-services-query-resolver.mjs +3 -3
  120. package/fesm2022/ng-atomic-common-services-query-resolver.mjs.map +1 -1
  121. package/fesm2022/ng-atomic-common-services-root-property.mjs.map +1 -1
  122. package/fesm2022/ng-atomic-common-services-router.mjs.map +1 -1
  123. package/fesm2022/ng-atomic-common-services-secret.mjs.map +1 -1
  124. package/fesm2022/ng-atomic-common-services-sheets-actions.mjs.map +1 -1
  125. package/fesm2022/ng-atomic-common-services-sheets.mjs.map +1 -1
  126. package/fesm2022/ng-atomic-common-services-side-app.mjs.map +1 -1
  127. package/fesm2022/ng-atomic-common-services-side-nav-mode.mjs.map +1 -1
  128. package/fesm2022/ng-atomic-common-services-snack-bar.mjs +29 -11
  129. package/fesm2022/ng-atomic-common-services-snack-bar.mjs.map +1 -1
  130. package/fesm2022/ng-atomic-common-services-spreadsheet.mjs +758 -0
  131. package/fesm2022/ng-atomic-common-services-spreadsheet.mjs.map +1 -0
  132. package/fesm2022/ng-atomic-common-services-ui.mjs +14 -7
  133. package/fesm2022/ng-atomic-common-services-ui.mjs.map +1 -1
  134. package/fesm2022/ng-atomic-common-stores-entities.mjs.map +1 -1
  135. package/fesm2022/ng-atomic-common-stores-entity.mjs.map +1 -1
  136. package/fesm2022/ng-atomic-common-stores-pagination.mjs.map +1 -1
  137. package/fesm2022/ng-atomic-common-stores-query.mjs +1 -1
  138. package/fesm2022/ng-atomic-common-stores-query.mjs.map +1 -1
  139. package/fesm2022/ng-atomic-common-stores-selection.mjs.map +1 -1
  140. package/fesm2022/ng-atomic-common-stores-sort.mjs.map +1 -1
  141. package/fesm2022/ng-atomic-common-utils.mjs +34 -15
  142. package/fesm2022/ng-atomic-common-utils.mjs.map +1 -1
  143. package/fesm2022/ng-atomic-common.mjs.map +1 -1
  144. package/models/index.d.ts +2 -1
  145. package/package.json +73 -44
  146. package/pipes/actions/actions.pipe.d.ts +2 -1
  147. package/pipes/columns/columns.pipe.d.ts +1 -0
  148. package/pipes/data-accessor/data-accessor.pipe.d.ts +4 -2
  149. package/pipes/domain/domain.pipe.d.ts +7 -6
  150. package/pipes/expression/expression.pipe.d.ts +9 -0
  151. package/pipes/expression/index.d.ts +1 -0
  152. package/pipes/smart-field/smart-field.pipe.d.ts +2 -2
  153. package/pipes/style/index.d.ts +1 -0
  154. package/pipes/style/style.pipe.d.ts +18 -0
  155. package/services/form/_index/index.service.d.ts +4 -4
  156. package/services/form/columns/columns.service.d.ts +5 -2
  157. package/services/form/json-schema/json-schema.service.d.ts +9 -1
  158. package/services/form/pagination/pagination.service.d.ts +5 -5
  159. package/services/language/index.d.ts +1 -0
  160. package/services/language/language.service.d.ts +12 -0
  161. package/services/query-resolver/query-resolver.service.d.ts +2 -2
  162. package/services/snack-bar/snack-bar.service.d.ts +5 -3
  163. package/services/spreadsheet/directives/grid-cell.directive.d.ts +41 -0
  164. package/services/spreadsheet/directives/index.d.ts +1 -0
  165. package/services/spreadsheet/features/clipboard.service.d.ts +15 -0
  166. package/services/spreadsheet/features/data.service.d.ts +16 -0
  167. package/services/spreadsheet/features/editor.service.d.ts +22 -0
  168. package/services/spreadsheet/features/grid.service.d.ts +17 -0
  169. package/services/spreadsheet/features/index.d.ts +7 -0
  170. package/services/spreadsheet/features/navigation.service.d.ts +17 -0
  171. package/services/spreadsheet/features/protection.service.d.ts +24 -0
  172. package/services/spreadsheet/features/selection.service.d.ts +40 -0
  173. package/services/spreadsheet/index.d.ts +4 -0
  174. package/services/spreadsheet/models/cell.model.d.ts +17 -0
  175. package/services/spreadsheet/models/index.d.ts +1 -0
  176. package/services/spreadsheet/spreadsheet.service.d.ts +29 -0
  177. package/utils/expression/expression.transformer.d.ts +12 -0
  178. package/utils/expression/index.d.ts +1 -0
  179. package/utils/index.d.ts +1 -1
  180. package/utils/inject/inject.d.ts +2 -2
  181. package/esm2022/pipes/smart-exp/index.mjs +0 -3
  182. package/esm2022/pipes/smart-exp/ng-atomic-common-pipes-smart-exp.mjs +0 -5
  183. package/esm2022/pipes/smart-exp/smart-exp.module.mjs +0 -16
  184. package/esm2022/pipes/smart-exp/smart-exp.pipe.mjs +0 -27
  185. package/esm2022/utils/smart-exp-transformer/index.mjs +0 -2
  186. package/esm2022/utils/smart-exp-transformer/smart-exp-transformer.mjs +0 -18
  187. package/fesm2022/ng-atomic-common-pipes-smart-exp.mjs +0 -47
  188. package/fesm2022/ng-atomic-common-pipes-smart-exp.mjs.map +0 -1
  189. package/pipes/smart-exp/index.d.ts +0 -2
  190. package/pipes/smart-exp/smart-exp.module.d.ts +0 -7
  191. package/pipes/smart-exp/smart-exp.pipe.d.ts +0 -11
  192. package/utils/smart-exp-transformer/index.d.ts +0 -1
  193. 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==