open-grid 1.2.0 → 1.2.1
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/CHANGELOG.md +12 -0
- package/README.md +1 -1
- package/dist/OpenGrid-0r_543Kj.cjs +7192 -0
- package/dist/OpenGrid-HmhGVC2V.js +7203 -0
- package/dist/open-grid-react.cjs +27 -1
- package/dist/open-grid-react.js +22 -82
- package/dist/open-grid-vue.cjs +31 -1
- package/dist/open-grid-vue.js +29 -79
- package/dist/open-grid.cjs +272 -6
- package/dist/open-grid.js +177 -266
- package/dist/types/core/CellEditManager.d.ts +73 -0
- package/dist/types/core/CellEventHandler.d.ts +99 -2
- package/dist/types/core/ChartManager.d.ts +51 -3
- package/dist/types/core/ContextMenu.d.ts +43 -2
- package/dist/types/core/CrossGridController.d.ts +86 -15
- package/dist/types/core/CrossGridRegistry.d.ts +36 -2
- package/dist/types/core/DetailManager.d.ts +106 -15
- package/dist/types/core/ExportManager.d.ts +66 -1
- package/dist/types/core/ExtensionPointRegistry.d.ts +160 -14
- package/dist/types/core/FilterPanel.d.ts +17 -2
- package/dist/types/core/FilterSelect.d.ts +37 -13
- package/dist/types/core/FindBarManager.d.ts +26 -0
- package/dist/types/core/FlatRowModel.d.ts +54 -11
- package/dist/types/core/FooterManager.d.ts +53 -1
- package/dist/types/core/FormulaController.d.ts +139 -10
- package/dist/types/core/GridComposer.d.ts +54 -6
- package/dist/types/core/GridShuttle.d.ts +44 -4
- package/dist/types/core/GroupTreeManager.d.ts +86 -2
- package/dist/types/core/IconRegistry.d.ts +56 -9
- package/dist/types/core/KeyboardManager.d.ts +88 -4
- package/dist/types/core/MaskingEngine.d.ts +10 -9
- package/dist/types/core/MutationService.d.ts +113 -10
- package/dist/types/core/OrgChart.d.ts +56 -1
- package/dist/types/core/OverrideKernel.d.ts +59 -15
- package/dist/types/core/Pagination.d.ts +38 -4
- package/dist/types/core/RangeSelectionManager.d.ts +121 -7
- package/dist/types/core/RenderController.d.ts +56 -0
- package/dist/types/core/RowManager.d.ts +55 -0
- package/dist/types/core/SkinRegistry.d.ts +51 -15
- package/dist/types/core/SortFilterManager.d.ts +80 -1
- package/dist/types/core/TriggerManager.d.ts +46 -0
- package/dist/types/core/WorksheetManager.d.ts +61 -2
- package/dist/types/core/XmlConverter.d.ts +56 -23
- package/dist/types/core/chart/types.d.ts +107 -10
- package/dist/types/core/editors/CellEditor.d.ts +29 -2
- package/dist/types/core/formula/types.d.ts +71 -8
- package/dist/types/core/range/RangeQuery.d.ts +24 -2
- package/dist/types/core/renderers/CellRenderer.d.ts +100 -8
- package/dist/xlsx.min-BQ1o3sB6.cjs +11793 -0
- package/dist/{xlsx.min-Wavxcamn.js → xlsx.min-Bbz2ZypC.js} +453 -566
- package/package.json +2 -1
- package/dist/OpenGrid-B0Spm0rU.js +0 -10404
- package/dist/OpenGrid-CuXj0isp.cjs +0 -97
- package/dist/xlsx.min-Bx-LxWOf.cjs +0 -138
|
@@ -1,14 +1,17 @@
|
|
|
1
1
|
import { FilterItem } from './types.js';
|
|
2
2
|
/** i18n: 필터 셀렉트 라벨 해석기(주입 없으면 전역 t). / i18n: filter-select label resolver (global t when not injected). */
|
|
3
3
|
export type FilterSelectT = (key: string, params?: Record<string, string | number>) => string;
|
|
4
|
+
/** 필터 셀렉트 옵션(값/표시 텍스트). / Filter-select option (value/display text). */
|
|
4
5
|
export interface FilterSelectOption {
|
|
6
|
+
/** 필터·선택에 사용할 값. / Value used for filtering/selection. */
|
|
5
7
|
value: string;
|
|
8
|
+
/** 화면에 표시할 텍스트. / Text shown on screen. */
|
|
6
9
|
text: string;
|
|
7
10
|
}
|
|
8
11
|
/**
|
|
9
|
-
* 캐스케이딩 필터 셀렉트 컬럼 정의.
|
|
12
|
+
* 캐스케이딩 필터 셀렉트 컬럼 정의. / Cascading filter-select column definition.
|
|
10
13
|
*
|
|
11
|
-
* ### 데이터 공급 방식 (택 1)
|
|
14
|
+
* ### 데이터 공급 방식 (택 1) / Data supply (pick one)
|
|
12
15
|
*
|
|
13
16
|
* **A. JSON 배열 바인딩** (권장)
|
|
14
17
|
* ```ts
|
|
@@ -30,30 +33,31 @@ export interface FilterSelectOption {
|
|
|
30
33
|
* ```
|
|
31
34
|
*/
|
|
32
35
|
export interface FilterSelectColumn {
|
|
33
|
-
/** 캐스케이딩 식별자 / 기본 필터
|
|
36
|
+
/** 캐스케이딩 식별자 / 기본 필터 키. / Cascading identifier / default filter key. */
|
|
34
37
|
field: string;
|
|
35
|
-
/** 화면 표시
|
|
38
|
+
/** 화면 표시 라벨. / Display label. */
|
|
36
39
|
label: string;
|
|
37
|
-
/** 바인딩할 JSON
|
|
40
|
+
/** 바인딩할 JSON 배열. / JSON array to bind. */
|
|
38
41
|
data?: any[];
|
|
39
|
-
/** data[]에서 option value로 사용할
|
|
42
|
+
/** data[] 에서 option value 로 사용할 키. / Key in data[] used as the option value. */
|
|
40
43
|
valueKey?: string;
|
|
41
|
-
/** data[]에서 화면 표시 text로 사용할 키
|
|
44
|
+
/** data[] 에서 화면 표시 text 로 사용할 키(미지정 시 valueKey 사용). / Key in data[] used as display text (falls back to valueKey). */
|
|
42
45
|
textKey?: string;
|
|
43
46
|
/**
|
|
44
|
-
* 그리드 행 데이터에서 실제 필터링할 키.
|
|
45
|
-
*
|
|
47
|
+
* 그리드 행 데이터에서 실제 필터링할 키. 미지정 시 `field` 값 그대로 사용.
|
|
48
|
+
* / Key actually filtered against grid row data; falls back to `field`.
|
|
46
49
|
*
|
|
47
50
|
* @example
|
|
48
|
-
* // 그리드 row.category === selectedValue 로 필터링
|
|
51
|
+
* // 그리드 row.category === selectedValue 로 필터링 / filter where row.category === selectedValue
|
|
49
52
|
* filterKey: 'category'
|
|
50
53
|
*/
|
|
51
54
|
filterKey?: string;
|
|
55
|
+
/** 정적 옵션 배열(data 대신 사용). / Static option array (used instead of data). */
|
|
52
56
|
options?: FilterSelectOption[];
|
|
53
|
-
/** 부모 컬럼의 field
|
|
57
|
+
/** 부모 컬럼의 field 명. / Parent column's field name. */
|
|
54
58
|
dependsOn?: string;
|
|
55
59
|
/**
|
|
56
|
-
* 자식 data[]에서 부모 선택값과 비교할 키.
|
|
60
|
+
* 자식 data[] 에서 부모 선택값과 비교할 키. / Key in the child data[] compared against the parent's selected value.
|
|
57
61
|
*
|
|
58
62
|
* @example
|
|
59
63
|
* // brandList.filter(b => b.catCode === parentSelectedValue)
|
|
@@ -61,13 +65,23 @@ export interface FilterSelectColumn {
|
|
|
61
65
|
*/
|
|
62
66
|
dependsOnKey?: string;
|
|
63
67
|
}
|
|
68
|
+
/** 필터 셀렉트 패널 구성. / Filter-select panel configuration. */
|
|
64
69
|
export interface FilterSelectConfig {
|
|
70
|
+
/** 캐스케이딩 컬럼 정의 배열. / Cascading column definitions. */
|
|
65
71
|
columns: FilterSelectColumn[];
|
|
66
|
-
/** fieldset 제목
|
|
72
|
+
/** fieldset 제목(기본: 로케일 'filter.legend'). / fieldset legend (default: locale 'filter.legend'). */
|
|
67
73
|
legend?: string;
|
|
68
74
|
}
|
|
69
75
|
type FilterFn = (field: string, items: FilterItem[]) => void;
|
|
70
76
|
type ResetFn = (field?: string) => void;
|
|
77
|
+
/**
|
|
78
|
+
* 캐스케이딩 필터 셀렉트 패널. / Cascading filter-select panel.
|
|
79
|
+
*
|
|
80
|
+
* 그리드 헤더 앞에 fieldset 형태의 셀렉트 필터를 삽입하고, 부모→자식 종속(캐스케이딩)
|
|
81
|
+
* 옵션 재계산과 그리드 필터 콜백을 배선한다.
|
|
82
|
+
* / Inserts a fieldset of select filters ahead of the grid header and wires parent→child cascading
|
|
83
|
+
* option recalculation to the grid filter callbacks.
|
|
84
|
+
*/
|
|
71
85
|
export declare class FilterSelectPanel {
|
|
72
86
|
private _el;
|
|
73
87
|
private _selects;
|
|
@@ -77,6 +91,14 @@ export declare class FilterSelectPanel {
|
|
|
77
91
|
private _onFilter;
|
|
78
92
|
private _onReset;
|
|
79
93
|
private _t;
|
|
94
|
+
/**
|
|
95
|
+
* @param container - 패널을 삽입할 컨테이너(그리드 헤더 앞에 prepend) / Container to insert the panel into (prepended before the grid header)
|
|
96
|
+
* @param config - 패널 구성 / Panel configuration
|
|
97
|
+
* @param onFilter - 필터 적용 콜백(field, items) / Filter-apply callback (field, items)
|
|
98
|
+
* @param onReset - 필터 해제 콜백(field?) / Filter-reset callback (field?)
|
|
99
|
+
* @param gridId - aria-controls 로 연결할 그리드 id(선택) / Grid id to link via aria-controls (optional)
|
|
100
|
+
* @param t - 로케일 해석기(미주입 시 전역 t) / Locale resolver (global t when not injected)
|
|
101
|
+
*/
|
|
80
102
|
constructor(container: HTMLElement, config: FilterSelectConfig, onFilter: FilterFn, onReset: ResetFn, gridId?: string, t?: FilterSelectT);
|
|
81
103
|
/**
|
|
82
104
|
* 컬럼의 옵션 목록을 계산한다.
|
|
@@ -92,7 +114,9 @@ export declare class FilterSelectPanel {
|
|
|
92
114
|
*/
|
|
93
115
|
private _cascade;
|
|
94
116
|
private _reset;
|
|
117
|
+
/** 모든 필터 선택을 초기화한다. / Reset all filter selections. */
|
|
95
118
|
reset(): void;
|
|
119
|
+
/** 패널을 DOM 에서 제거한다. / Remove the panel from the DOM. */
|
|
96
120
|
destroy(): void;
|
|
97
121
|
}
|
|
98
122
|
export {};
|
|
@@ -2,16 +2,33 @@ import { ColumnLayout } from './ColumnLayout.js';
|
|
|
2
2
|
import { DataLayer } from './DataLayer.js';
|
|
3
3
|
import { Pagination } from './Pagination.js';
|
|
4
4
|
import { VirtualScroll } from './VirtualScroll.js';
|
|
5
|
+
/**
|
|
6
|
+
* FindBarManager 의존성 주입 인터페이스. / Dependency-injection interface for FindBarManager.
|
|
7
|
+
*/
|
|
5
8
|
export interface FindBarDeps<T extends Record<string, any>> {
|
|
9
|
+
/** 현재 컬럼 레이아웃(검색 대상 필드 조회용). / Current column layout (for resolving searchable fields). */
|
|
6
10
|
getColLayout: () => ColumnLayout<T>;
|
|
11
|
+
/** 그리드 데이터 레이어(찾기/필터 적용 대상). / Grid data layer to apply the find filter against. */
|
|
7
12
|
getData: () => DataLayer<T>;
|
|
13
|
+
/** 현재 활성 컬럼 필터(찾기와 함께 재적용). / Currently active column filters (reapplied alongside the find filter). */
|
|
8
14
|
getFilters: () => Record<string, any[]>;
|
|
15
|
+
/** 가상 스크롤 인스턴스(행수 갱신용). 없으면 `null`. / Virtual-scroll instance (for updating row count); `null` if absent. */
|
|
9
16
|
getVs: () => VirtualScroll | null;
|
|
17
|
+
/** 페이지네이션 인스턴스(행수 갱신용). 없으면 `null`. / Pagination instance (for updating row count); `null` if absent. */
|
|
10
18
|
getPagination: () => Pagination | null;
|
|
19
|
+
/** 필터 적용 후 그리드 재렌더를 트리거. / Triggers a grid re-render after the filter is applied. */
|
|
11
20
|
doRender: () => void;
|
|
12
21
|
/** i18n: 메시지 해석(라벨/placeholder/aria/카운트 배지). / i18n: resolve labels/placeholder/aria/count badge. */
|
|
13
22
|
t: (key: string, params?: Record<string, string | number>) => string;
|
|
14
23
|
}
|
|
24
|
+
/**
|
|
25
|
+
* 그리드 상단 찾기(find) 바 관리자. / Manages the grid's top find bar.
|
|
26
|
+
*
|
|
27
|
+
* 입력값을 표시 중인 모든 컬럼에 대한 부분 일치 필터로 변환해 {@link DataLayer}에
|
|
28
|
+
* 적용하고, 가상 스크롤/페이지네이션의 행 수를 함께 갱신한다.
|
|
29
|
+
* / Turns the input value into a substring-match filter across all visible columns,
|
|
30
|
+
* applies it via {@link DataLayer}, and keeps virtual-scroll/pagination row counts in sync.
|
|
31
|
+
*/
|
|
15
32
|
export declare class FindBarManager<T extends Record<string, any> = any> {
|
|
16
33
|
private _bar;
|
|
17
34
|
private _input;
|
|
@@ -21,11 +38,20 @@ export declare class FindBarManager<T extends Record<string, any> = any> {
|
|
|
21
38
|
private _filter;
|
|
22
39
|
private _d;
|
|
23
40
|
constructor(deps: FindBarDeps<T>);
|
|
41
|
+
/** 현재 찾기 입력값. / Current find-bar input value. */
|
|
24
42
|
get findFilter(): string;
|
|
43
|
+
/**
|
|
44
|
+
* 찾기 바 DOM 을 생성하고 컨테이너 최상단에 삽입한다. / Build the find-bar DOM and insert it at the top of the container.
|
|
45
|
+
*
|
|
46
|
+
* @param container - 그리드 컨테이너 엘리먼트 / Grid container element
|
|
47
|
+
*/
|
|
25
48
|
init(container: HTMLElement): void;
|
|
26
49
|
/** i18n: 상주 크롬 라벨을 활성 로케일로 다시 그린다(setLocale 경로). / i18n: repaint resident chrome labels in the active locale (setLocale path). */
|
|
27
50
|
refreshLabels(): void;
|
|
51
|
+
/** 찾기 바를 표시하고 입력에 포커스한다. / Show the find bar and focus the input. */
|
|
28
52
|
open(): void;
|
|
53
|
+
/** 찾기 바를 숨기고 필터를 해제한다. / Hide the find bar and clear the filter. */
|
|
29
54
|
close(): void;
|
|
55
|
+
/** @internal 현재 찾기 필터를 데이터 레이어에 적용하고 재렌더한다. / Applies the current find filter to the data layer and re-renders. */
|
|
30
56
|
private _apply;
|
|
31
57
|
}
|
|
@@ -1,25 +1,39 @@
|
|
|
1
1
|
import { DataLayer } from './DataLayer.js';
|
|
2
|
-
/**
|
|
2
|
+
/**
|
|
3
|
+
* flat 한 행이 무엇을 가리키는지 판별하는 참조 정보(C0.3).
|
|
4
|
+
* / Reference info identifying what a flat row points to (C0.3).
|
|
5
|
+
*/
|
|
3
6
|
export interface FlatRowRef {
|
|
7
|
+
/** 행 종류(데이터/그룹/트리/디테일 헤드·필러). / Row kind (data/group/tree/detail head·filler). */
|
|
4
8
|
kind: 'data' | 'group' | 'tree' | 'detailHead' | 'detailFiller';
|
|
5
|
-
/** kind==='data'|'tree' 일 때 stable id(DataLayer 가 부여한 rowId 필드값). */
|
|
9
|
+
/** kind==='data'|'tree' 일 때 stable id(DataLayer 가 부여한 rowId 필드값). / Stable id when kind is 'data'|'tree' (the rowId field value assigned by DataLayer). */
|
|
6
10
|
rowId?: string;
|
|
7
|
-
/** kind==='data' 일 때 DataLayer 원본(_data) 인덱스. */
|
|
11
|
+
/** kind==='data' 일 때 DataLayer 원본(_data) 인덱스. / DataLayer source (_data) index when kind is 'data'. */
|
|
8
12
|
dataIndex?: number;
|
|
9
|
-
/** 정렬/필터 반영된 논리 순서. plain 모드(backing 미교체)에서만 flatIndex 와 1:1 대응. */
|
|
13
|
+
/** 정렬/필터 반영된 논리 순서. plain 모드(backing 미교체)에서만 flatIndex 와 1:1 대응. / Logical order after sort/filter; equals flatIndex 1:1 only in plain mode (backing not replaced). */
|
|
10
14
|
displayIndex?: number;
|
|
11
15
|
}
|
|
12
16
|
/** flat 배열을 구성하는 원소(실데이터 행 T, GroupRow, 또는 TreeNode) — 내부 전용. */
|
|
13
17
|
type FlatItem = any;
|
|
14
|
-
/** group/tree 등이 baseline backing 을 통째로 교체할 때 쓰는 provider. null = plain 으로 복귀. */
|
|
18
|
+
/** group/tree 등이 baseline backing 을 통째로 교체할 때 쓰는 provider. null = plain 으로 복귀. / Provider used by group/tree to replace the baseline backing wholesale; null = revert to plain. */
|
|
15
19
|
export type FlatBackingProvider = (() => FlatItem[]) | null;
|
|
16
|
-
/**
|
|
20
|
+
/** 합성 후단에서 flat 배열을 변형하는 훅 — F2 detail splice 용. / Hook that transforms the flat array at the tail of composition — for F2 detail splice. */
|
|
17
21
|
export type FlatSpliceFn = (flat: FlatItem[]) => FlatItem[];
|
|
22
|
+
/** FlatRowModel 의존성 주입. / FlatRowModel dependency injection. */
|
|
18
23
|
export interface FlatRowModelDeps {
|
|
24
|
+
/** 현재 DataLayer 를 반환하는 getter. / Getter returning the current DataLayer. */
|
|
19
25
|
getDataLayer: () => DataLayer<any>;
|
|
20
|
-
/** DataLayer 가 각 행에 부여하는 안정 rowId 필드명(OpenGrid 의 ROW_ID_FIELD, 기본 '_ogRowId'). */
|
|
26
|
+
/** DataLayer 가 각 행에 부여하는 안정 rowId 필드명(OpenGrid 의 ROW_ID_FIELD, 기본 '_ogRowId'). / Stable rowId field name assigned by DataLayer (OpenGrid's ROW_ID_FIELD, default '_ogRowId'). */
|
|
21
27
|
rowIdField: string;
|
|
22
28
|
}
|
|
29
|
+
/**
|
|
30
|
+
* flat/visual index ↔ data 리졸버(baseline 공통 인프라). / flat/visual index ↔ data resolver (baseline shared infra).
|
|
31
|
+
*
|
|
32
|
+
* plain rows 를 기본 backing 으로 두고, group/tree 는 setBacking 으로 backing 을 교체하며,
|
|
33
|
+
* F2 는 registerSplice 로 합성 후단에 detail 의사행을 끼워 넣는다(합성 체인은 단방향).
|
|
34
|
+
* / Uses plain rows as the default backing; group/tree replace the backing via setBacking, and F2 inserts
|
|
35
|
+
* detail pseudo-rows at the tail of composition via registerSplice (the composition chain is one-directional).
|
|
36
|
+
*/
|
|
23
37
|
export declare class FlatRowModel {
|
|
24
38
|
private _d;
|
|
25
39
|
/** group/tree 가 등록한 backing override. null 이면 plain(DataLayer.getData()). */
|
|
@@ -30,24 +44,53 @@ export declare class FlatRowModel {
|
|
|
30
44
|
private _revIndexSrc;
|
|
31
45
|
constructor(deps: FlatRowModelDeps);
|
|
32
46
|
/**
|
|
33
|
-
* group/tree 등 baseline backing 을 통째로 교체하는 등록점.
|
|
34
|
-
* provider=null
|
|
47
|
+
* group/tree 등 baseline backing 을 통째로 교체하는 등록점. provider=null 이면 plain(DataLayer 표시 순서)으로 복귀.
|
|
48
|
+
* / Registration point that replaces the baseline backing wholesale (group/tree); provider=null reverts to plain (DataLayer display order).
|
|
49
|
+
*
|
|
50
|
+
* @param provider - backing 공급 함수 또는 null / Backing provider function or null
|
|
35
51
|
*/
|
|
36
52
|
setBacking(provider: FlatBackingProvider): void;
|
|
37
53
|
/**
|
|
38
|
-
*
|
|
39
|
-
* head/filler pseudo-
|
|
54
|
+
* F2 DetailManager 가 합성 후단에 detail head/filler pseudo-row 를 끼워 넣을 변환기를 등록한다. 등록 순서대로 순차 적용.
|
|
55
|
+
* / Register a transformer that F2 DetailManager uses to insert detail head/filler pseudo-rows at the tail of composition; applied in registration order.
|
|
56
|
+
*
|
|
57
|
+
* @param fn - flat 배열 변환 함수 / Flat-array transform function
|
|
40
58
|
*/
|
|
41
59
|
registerSplice(fn: FlatSpliceFn): void;
|
|
60
|
+
/** 합성 완료된 flat 행 수. / Count of composed flat rows. */
|
|
42
61
|
count(): number;
|
|
43
62
|
/**
|
|
44
63
|
* 합성 완료된 flat 배열 원본을 노출한다(F2 렌더 배선 소비 — GridRenderer.renderBody 가 이 배열을
|
|
45
64
|
* `groupFlatRows` 자리에 그대로 넘겨받아 detail head/filler 를 렌더한다). 호출측은 결과를
|
|
46
65
|
* 변경하지 않는다(내부 backing/splice 산출물을 그대로 반환).
|
|
66
|
+
* / Expose the composed flat array (consumed by F2 render wiring — GridRenderer.renderBody takes it in the
|
|
67
|
+
* `groupFlatRows` slot to render detail head/filler). Callers must not mutate the result (it returns the
|
|
68
|
+
* internal backing/splice output as-is).
|
|
69
|
+
*
|
|
70
|
+
* @returns 합성된 flat 배열(변경 금지) / The composed flat array (do not mutate)
|
|
47
71
|
*/
|
|
48
72
|
getFlatArray(): FlatItem[];
|
|
73
|
+
/**
|
|
74
|
+
* flat index 가 가리키는 행의 참조 정보를 해소한다(C0.3 쓰기 안전).
|
|
75
|
+
* / Resolve the reference info for the row at a flat index (C0.3 write-safety).
|
|
76
|
+
*
|
|
77
|
+
* @param flatIndex - 합성된 flat 배열의 인덱스 / Index into the composed flat array
|
|
78
|
+
* @returns 행 참조 정보 / Row reference info
|
|
79
|
+
*/
|
|
49
80
|
resolveFlatRow(flatIndex: number): FlatRowRef;
|
|
81
|
+
/**
|
|
82
|
+
* rowId → 현재 flat index. 없으면 -1. / rowId → current flat index; -1 if absent.
|
|
83
|
+
*
|
|
84
|
+
* @param rowId - 조회할 stable rowId / Stable rowId to look up
|
|
85
|
+
* @returns flat index 또는 -1 / Flat index or -1
|
|
86
|
+
*/
|
|
50
87
|
flatIndexOfRowId(rowId: string): number;
|
|
88
|
+
/**
|
|
89
|
+
* flat index → rowId(data/tree 행일 때만). 그 외 null. / flat index → rowId (only for data/tree rows); null otherwise.
|
|
90
|
+
*
|
|
91
|
+
* @param flatIndex - 합성된 flat 배열의 인덱스 / Index into the composed flat array
|
|
92
|
+
* @returns rowId 또는 null / rowId or null
|
|
93
|
+
*/
|
|
51
94
|
rowIdOfFlat(flatIndex: number): string | null;
|
|
52
95
|
private _flat;
|
|
53
96
|
private _invalidate;
|
|
@@ -1,17 +1,69 @@
|
|
|
1
1
|
import { ColumnLayout } from './ColumnLayout.js';
|
|
2
|
+
/**
|
|
3
|
+
* FooterManager 의존성 주입 인터페이스. / Dependency-injection interface for FooterManager.
|
|
4
|
+
*/
|
|
2
5
|
export interface FooterDeps<T extends Record<string, any>> {
|
|
6
|
+
/** 요약 대상 전체 행 데이터. / Full row data to summarize. */
|
|
3
7
|
getData: () => T[];
|
|
8
|
+
/** 현재 컬럼 레이아웃(가시 리프 컬럼 조회용). / Current column layout (for resolving visible leaf columns). */
|
|
4
9
|
getColLayout: () => ColumnLayout<T>;
|
|
10
|
+
/** 컬럼별 현재 폭(px) 배열. / Current per-column widths (px). */
|
|
5
11
|
getColWidths: () => number[];
|
|
12
|
+
/** 그리드 옵션 스냅샷(`footer`/`footerHeight`/`footerPosition` 등 포함). / Snapshot of grid options (includes `footer`, `footerHeight`, `footerPosition`, etc.). */
|
|
6
13
|
getOptions: () => any;
|
|
14
|
+
/** 푸터 바를 삽입할 그리드 컨테이너 엘리먼트. / Grid container element into which the footer bar is inserted. */
|
|
7
15
|
getContainer: () => HTMLElement;
|
|
8
|
-
/** Phase 2: OverrideKernel.getStrategy 주입(슬롯 summaryOp 도달용). */
|
|
16
|
+
/** Phase 2: OverrideKernel.getStrategy 주입(슬롯 summaryOp 도달용). / Phase 2: injected via OverrideKernel.getStrategy (reaches the `summaryOp` slot). */
|
|
9
17
|
getStrategy?: <F extends Function>(slot: string, fallback: F) => F;
|
|
10
18
|
}
|
|
19
|
+
/**
|
|
20
|
+
* 그리드 하단 요약 푸터(합계/평균/개수 등) 관리자. / Manages the grid's summary footer bar (sum/avg/count/…).
|
|
21
|
+
*
|
|
22
|
+
* `options.footer` 정의를 읽어 각 컬럼 집계값을 계산하고, 컬럼 폭에 맞춘 셀로
|
|
23
|
+
* 렌더한다. `summaryOp` override 슬롯으로 MEDIAN/STDEV 등 커스텀 집계를 가로챌 수 있다.
|
|
24
|
+
* / Reads the `options.footer` definitions to compute per-column aggregates and renders
|
|
25
|
+
* them as cells aligned to column widths. The `summaryOp` override slot lets custom
|
|
26
|
+
* aggregates (MEDIAN/STDEV/…) intercept the default SUM/AVG/COUNT/MAX/MIN switch.
|
|
27
|
+
*/
|
|
11
28
|
export declare class FooterManager<T extends Record<string, any> = any> {
|
|
12
29
|
private _d;
|
|
13
30
|
constructor(deps: FooterDeps<T>);
|
|
31
|
+
/**
|
|
32
|
+
* 숫자를 포맷 문자열에 따라 표시용 문자열로 변환한다. / Format a number into a display string according to a format string.
|
|
33
|
+
*
|
|
34
|
+
* `fmt` 미지정 시 반올림 후 `ko-KR` 로케일 구분기호로 표기한다. 지정 시 숫자 토큰
|
|
35
|
+
* 앞뒤의 접두/접미(통화 기호 등)를 분리하고, `#`/`,` 포함 여부로 천단위 구분기호
|
|
36
|
+
* 사용을, 소수부 자릿수로 반올림 정밀도를 결정한다.
|
|
37
|
+
* / Without `fmt`, rounds and formats using `ko-KR` locale separators. With `fmt`,
|
|
38
|
+
* splits off any prefix/suffix around the numeric token (e.g. a currency symbol),
|
|
39
|
+
* uses `#`/`,` presence to decide thousands-separator use, and the decimal-token
|
|
40
|
+
* length to decide rounding precision.
|
|
41
|
+
*
|
|
42
|
+
* @param value - 포맷할 값 / Value to format
|
|
43
|
+
* @param fmt - 숫자 포맷 문자열(예: `'#,##0.00'`, 통화 접두/접미 포함 가능) / Number format string (e.g. `'#,##0.00'`, may include a currency prefix/suffix)
|
|
44
|
+
* @returns 포맷된 표시 문자열 / The formatted display string
|
|
45
|
+
*/
|
|
14
46
|
fmtNum(value: number, fmt?: string): string;
|
|
47
|
+
/**
|
|
48
|
+
* `options.footer` 정의별 집계값을 계산한다. / Compute the aggregate value for each `options.footer` definition.
|
|
49
|
+
*
|
|
50
|
+
* 수식 에러 셀(`#REF` 등)은 집계에서 제외한다(0 취급 아님 — 값 오염 차단, C11).
|
|
51
|
+
* `summaryOp` override 슬롯이 숫자를 반환하면 그 값을 쓰고(예: MEDIAN/STDEV),
|
|
52
|
+
* `null` 을 반환하면 기본 SUM/AVG/COUNT/MAX/MIN 분기로 폴백한다.
|
|
53
|
+
* / Formula-error cells (`#REF`, …) are excluded from aggregation (not treated as 0 —
|
|
54
|
+
* prevents value contamination, C11). If the `summaryOp` override slot returns a
|
|
55
|
+
* number (e.g. for MEDIAN/STDEV), that value is used; returning `null` falls back to
|
|
56
|
+
* the default SUM/AVG/COUNT/MAX/MIN branch.
|
|
57
|
+
*
|
|
58
|
+
* @returns 정의 순서대로 `{ _field, _value, _formatted }` 배열 / Array of `{ _field, _value, _formatted }`, in definition order
|
|
59
|
+
*/
|
|
15
60
|
computeValues(): any[];
|
|
61
|
+
/**
|
|
62
|
+
* 요약 푸터 바를 (재)렌더한다. / (Re)render the summary footer bar.
|
|
63
|
+
*
|
|
64
|
+
* 기존 `.og-footer-bar` 를 제거 후 새로 그리며, `options.footerPosition` 에 따라
|
|
65
|
+
* 컨테이너 상단 또는 하단에 삽입한다. / Removes any existing `.og-footer-bar` and
|
|
66
|
+
* redraws it, inserting at the top or bottom of the container per `options.footerPosition`.
|
|
67
|
+
*/
|
|
16
68
|
render(): void;
|
|
17
69
|
}
|
|
@@ -8,74 +8,203 @@ import { FormulaErrorCode, FormulaGridAccessor } from './formula/types.js';
|
|
|
8
8
|
* R7(§3.1 C9, §6-R7): F3 수식 표면(accessor 조립·recalc flush·에러 표현 + 공개 수식 API)을
|
|
9
9
|
* `OpenGrid` God object 에서 **동작 불변**으로 옮긴 것. `OpenGrid` 는 얇은 위임 공개 메서드만
|
|
10
10
|
* 남긴다(공개 API 불변 — R0 `public_api_surface.txt` 동결).
|
|
11
|
+
* / R7 (§3.1 C9, §6-R7): F3's formula surface (accessor assembly, recalc flush, error surfacing,
|
|
12
|
+
* plus the public formula API) moved out of the `OpenGrid` God object with **behavior unchanged**.
|
|
13
|
+
* `OpenGrid` retains only thin delegating public methods (public API frozen — R0
|
|
14
|
+
* `public_api_surface.txt`).
|
|
11
15
|
*
|
|
12
16
|
* 스트랭글러 원칙(A2): `RecalcCoordinator`(`formula/` 헤드리스 코어)는 여전히 `OpenGrid` 가
|
|
13
17
|
* 소유·재생성(setData 시 rowId 재발급 대응)하며, 이 컨트롤러에는 `*Deps` 클로저 역전 패턴으로
|
|
14
18
|
* **주입**만 된다 — `getRecalc()` 는 재할당(resetFormulaState)을 견디는 지연 getter 다.
|
|
15
19
|
* `RecalcCoordinator`/`FormulaGraph`/`FormulaEvaluator` 자체는 한 줄도 수정하지 않는다(불변 보존).
|
|
20
|
+
* / Strangler-fig principle (A2): `RecalcCoordinator` (the `formula/` headless core) is still
|
|
21
|
+
* owned and re-created by `OpenGrid` (to handle rowId reassignment on setData), and is only
|
|
22
|
+
* **injected** into this controller via the `*Deps` closure-inversion pattern — `getRecalc()` is a
|
|
23
|
+
* lazy getter that survives reassignment (resetFormulaState). `RecalcCoordinator`/`FormulaGraph`/
|
|
24
|
+
* `FormulaEvaluator` themselves are never modified (preserved as-is).
|
|
16
25
|
*
|
|
17
26
|
* ⚠️ 네이밍: root `src/core/FormulaEngine.ts` 와 `src/core/formula/` 패키지는 별개다. 이 컨트롤러는
|
|
18
27
|
* `formula/` 패키지(RecalcCoordinator)에만 배선하며 root `FormulaEngine.ts` 와는 무관하다(병합 금지).
|
|
28
|
+
* / ⚠️ Naming: root `src/core/FormulaEngine.ts` and the `src/core/formula/` package are distinct.
|
|
29
|
+
* This controller only wires to the `formula/` package (RecalcCoordinator) and is unrelated to
|
|
30
|
+
* root `FormulaEngine.ts` (never merge them).
|
|
31
|
+
*/
|
|
32
|
+
/**
|
|
33
|
+
* FormulaController 가 OpenGrid 서브시스템을 읽고 쓰기 위해 주입받는 클로저 묶음.
|
|
34
|
+
* / Closures injected into FormulaController so it can read and write OpenGrid subsystem state
|
|
35
|
+
* without owning it directly.
|
|
19
36
|
*/
|
|
20
37
|
export interface FormulaControllerDeps<T extends Record<string, any> = any> {
|
|
21
38
|
getData: () => DataLayer<T>;
|
|
22
39
|
getColLayout: () => ColumnLayout<T>;
|
|
23
40
|
getFlatModel: () => FlatRowModel;
|
|
24
|
-
/** OpenGrid 가 소유하는 RecalcCoordinator. setData 시 재생성되므로 지연 getter 로 읽는다.
|
|
41
|
+
/** OpenGrid 가 소유하는 RecalcCoordinator. setData 시 재생성되므로 지연 getter 로 읽는다.
|
|
42
|
+
* / The RecalcCoordinator owned by OpenGrid. Read via a lazy getter since it is re-created on setData. */
|
|
25
43
|
getRecalc: () => RecalcCoordinator;
|
|
26
|
-
/** writeCell 이 적립한 dirty seed 집합(OpenGrid 소유). flushRecalc 가 소비·clear 한다.
|
|
44
|
+
/** writeCell 이 적립한 dirty seed 집합(OpenGrid 소유). flushRecalc 가 소비·clear 한다.
|
|
45
|
+
* / The dirty-seed set accumulated by writeCell (owned by OpenGrid). Consumed and cleared by flushRecalc. */
|
|
27
46
|
getDirtySeeds: () => Set<string>;
|
|
28
47
|
getOptions: () => Required<GridOptions<T>>;
|
|
29
|
-
/** EventEmitter fan(this.emit) — 'formulaRecalc'/'formulaError'/'formulaChange'.
|
|
48
|
+
/** EventEmitter fan(this.emit) — 'formulaRecalc'/'formulaError'/'formulaChange'.
|
|
49
|
+
* / EventEmitter fan-out (this.emit) for 'formulaRecalc'/'formulaError'/'formulaChange'. */
|
|
30
50
|
emit: (event: string, payload?: any) => void;
|
|
31
|
-
/** aria-live announce(C8.1 공용 인프라). */
|
|
51
|
+
/** aria-live announce(C8.1 공용 인프라). / aria-live announce (C8.1 shared infrastructure). */
|
|
32
52
|
announce: (msg: string) => void;
|
|
33
53
|
/** i18n: 수식 오류 announce/셀 라벨 해석(formulaError.* 통합 키). / i18n: resolve formula error announce/labels. */
|
|
34
54
|
t: (key: string, params?: Record<string, string | number>) => string;
|
|
35
|
-
/** 현재 가시 범위 렌더(this._doRender(...this._visRange())). afterRecalc 가 !skipRender 시 유발.
|
|
55
|
+
/** 현재 가시 범위 렌더(this._doRender(...this._visRange())). afterRecalc 가 !skipRender 시 유발.
|
|
56
|
+
* / Renders the currently visible range (this._doRender(...this._visRange())). Triggered by
|
|
57
|
+
* afterRecalc when !skipRender. */
|
|
36
58
|
doRenderWindow: () => void;
|
|
37
59
|
}
|
|
60
|
+
/**
|
|
61
|
+
* F3 셀 수식 컨트롤러. / F3 cell formula controller.
|
|
62
|
+
*
|
|
63
|
+
* `RecalcCoordinator`(헤드리스 의존성 그래프+평가기)를 그리드 서브시스템(FlatRowModel/ColumnLayout/
|
|
64
|
+
* DataLayer)에 배선하고, 재계산 결과를 `formulaRecalc`/`formulaError`/`formulaChange` 이벤트로
|
|
65
|
+
* 표면화하며, `setCellFormula` 등 공개 수식 API 를 제공한다. / Wires `RecalcCoordinator` (the
|
|
66
|
+
* headless dependency graph + evaluator) into the grid subsystems (FlatRowModel/ColumnLayout/
|
|
67
|
+
* DataLayer), surfaces recalculation results as `formulaRecalc`/`formulaError`/`formulaChange`
|
|
68
|
+
* events, and exposes the public formula API (`setCellFormula`, etc.).
|
|
69
|
+
*/
|
|
38
70
|
export declare class FormulaController<T extends Record<string, any> = any> {
|
|
39
71
|
private _deps;
|
|
40
72
|
constructor(deps: FormulaControllerDeps<T>);
|
|
41
|
-
/** writeCell 이 적립한 dirty seed 를 1회 onValuesChanged 로 소비하고 formulaRecalc 를 emit.
|
|
73
|
+
/** writeCell 이 적립한 dirty seed 를 1회 onValuesChanged 로 소비하고 formulaRecalc 를 emit.
|
|
74
|
+
* / Consumes the dirty seeds accumulated by writeCell in a single onValuesChanged call and
|
|
75
|
+
* emits formulaRecalc. */
|
|
42
76
|
flushRecalc(): void;
|
|
43
77
|
/**
|
|
44
78
|
* RecalcCoordinator 호출 결과를 표면화: formulaError 는 onFormulaError 콜백에서 이미 개별
|
|
45
79
|
* emit 되므로 여기선 배치당 1회 formulaRecalc 만 emit(C2.2 개명, `recalc`→`formulaRecalc`).
|
|
46
80
|
* Spike-A §8 교훈: 폐포가 큰 재계산은 large 플래그로 표시(가이드 문서화/모니터링용).
|
|
81
|
+
* / Surfaces a RecalcCoordinator call result: `formulaError` is already emitted individually
|
|
82
|
+
* from the onFormulaError callback, so this only emits one `formulaRecalc` per batch (C2.2
|
|
83
|
+
* rename, `recalc` → `formulaRecalc`). Spike-A §8 lesson: recalculations with a large
|
|
84
|
+
* dependency closure are flagged via `large` (for docs/monitoring).
|
|
85
|
+
*
|
|
86
|
+
* @param summary - RecalcCoordinator 가 반환한 재계산 결과 요약 / Recalculation result summary returned by RecalcCoordinator
|
|
87
|
+
* @param opts - `skipRender` 지정 시 재렌더를 생략(호출측이 배치 처리 중) / When `skipRender` is set, skips the re-render (caller is batching)
|
|
47
88
|
*/
|
|
48
89
|
afterRecalc(summary: RecalcSummary, opts?: {
|
|
49
90
|
skipRender?: boolean;
|
|
50
91
|
}): void;
|
|
92
|
+
/** 수식 평가 오류를 표면화: `formulaError` emit + aria-live 공지. / Surface a formula evaluation
|
|
93
|
+
* error: emits `formulaError` and announces it via aria-live.
|
|
94
|
+
*
|
|
95
|
+
* @param rowId - 오류가 발생한 셀의 행 stable id / Stable id of the row where the error occurred
|
|
96
|
+
* @param field - 오류가 발생한 컬럼 field / Column field where the error occurred
|
|
97
|
+
* @param error - 수식 오류 코드(`#REF`/`#CYCLE` 등) / Formula error code (`#REF`, `#CYCLE`, etc.)
|
|
98
|
+
*/
|
|
51
99
|
handleFormulaError(rowId: string, field: string, error: FormulaErrorCode): void;
|
|
52
100
|
private _formulaErrorMessageKo;
|
|
53
|
-
/** F3 accessor(C0/C0.5/C1) — FlatRowModel + ColumnLayout.visibleLeaves + DataLayer(rowId 기반)만 본다.
|
|
101
|
+
/** F3 accessor(C0/C0.5/C1) — FlatRowModel + ColumnLayout.visibleLeaves + DataLayer(rowId 기반)만 본다.
|
|
102
|
+
* / F3 accessor (C0/C0.5/C1) — reads only through FlatRowModel, ColumnLayout.visibleLeaves, and
|
|
103
|
+
* DataLayer (rowId-based).
|
|
104
|
+
*
|
|
105
|
+
* @returns RecalcCoordinator 가 그리드를 읽는 데 쓰는 accessor / Accessor RecalcCoordinator uses to read the grid
|
|
106
|
+
*/
|
|
54
107
|
buildAccessor(): FormulaGridAccessor;
|
|
108
|
+
/**
|
|
109
|
+
* 셀에 수식을 설정한다(flat rowIndex 기준). / Set a formula on a cell (keyed by flat rowIndex).
|
|
110
|
+
*
|
|
111
|
+
* @param rowIndex - 대상 행의 flat index / Flat index of the target row
|
|
112
|
+
* @param field - 대상 컬럼 field / Target column field
|
|
113
|
+
* @param formula - 설정할 수식 원문(예: `=A1+B1`) / Formula source to set (e.g. `=A1+B1`)
|
|
114
|
+
* @example
|
|
115
|
+
* grid.setCellFormula(0, 'total', '=price*qty');
|
|
116
|
+
*/
|
|
55
117
|
setCellFormula(rowIndex: number, field: string, formula: string): void;
|
|
118
|
+
/** stable rowId 기준으로 셀 수식을 설정한다(F1 fill 등 rowId 를 이미 아는 호출자용).
|
|
119
|
+
* / Set a cell formula keyed by stable rowId (for callers — e.g. F1 fill — that already know the rowId).
|
|
120
|
+
*
|
|
121
|
+
* @param rowId - 대상 행의 stable id / Stable id of the target row
|
|
122
|
+
* @param field - 대상 컬럼 field / Target column field
|
|
123
|
+
* @param formula - 설정할 수식 원문 / Formula source to set
|
|
124
|
+
* @param rowIndexHint - 이미 알고 있는 flat index(이벤트 payload 용, 생략 시 재조회) / Known flat index for the event payload (re-resolved if omitted)
|
|
125
|
+
*/
|
|
56
126
|
setCellFormulaByRowId(rowId: string, field: string, formula: string, rowIndexHint?: number): void;
|
|
127
|
+
/** 셀에 설정된 수식 원문을 조회한다(없으면 `null`). / Get the formula source set on a cell (or `null` if none).
|
|
128
|
+
*
|
|
129
|
+
* @param rowIndex - 대상 행의 flat index / Flat index of the target row
|
|
130
|
+
* @param field - 대상 컬럼 field / Target column field
|
|
131
|
+
* @returns 수식 원문, 없으면 `null` / Formula source, or `null`
|
|
132
|
+
*/
|
|
57
133
|
getCellFormula(rowIndex: number, field: string): string | null;
|
|
134
|
+
/** 셀에 수식이 설정돼 있는지 여부. / Whether a cell has a formula set on it.
|
|
135
|
+
*
|
|
136
|
+
* @param rowIndex - 대상 행의 flat index / Flat index of the target row
|
|
137
|
+
* @param field - 대상 컬럼 field / Target column field
|
|
138
|
+
* @returns 수식이 있으면 true / True if the cell has a formula
|
|
139
|
+
*/
|
|
58
140
|
hasCellFormula(rowIndex: number, field: string): boolean;
|
|
141
|
+
/** 셀의 수식을 제거한다(값 셀로 되돌리며, 남은 의존 셀은 재계산). / Remove a cell's formula
|
|
142
|
+
* (reverting it to a plain value cell; remaining dependents are recalculated).
|
|
143
|
+
*
|
|
144
|
+
* @param rowIndex - 대상 행의 flat index / Flat index of the target row
|
|
145
|
+
* @param field - 대상 컬럼 field / Target column field
|
|
146
|
+
*/
|
|
59
147
|
clearCellFormula(rowIndex: number, field: string): void;
|
|
148
|
+
/** 셀의 마지막 수식 평가 오류를 조회한다(정상이면 `null`). / Get a cell's last formula evaluation error (`null` if healthy).
|
|
149
|
+
*
|
|
150
|
+
* @param rowIndex - 대상 행의 flat index / Flat index of the target row
|
|
151
|
+
* @param field - 대상 컬럼 field / Target column field
|
|
152
|
+
* @returns 오류 코드, 없으면 `null` / Error code, or `null`
|
|
153
|
+
*/
|
|
60
154
|
getCellError(rowIndex: number, field: string): FormulaErrorCode | null;
|
|
155
|
+
/** 이 셀을 참조하는(값이 바뀌면 재계산되는) 셀 목록. / Cells that reference this cell (recalculated when it changes).
|
|
156
|
+
*
|
|
157
|
+
* @param rowIndex - 대상 행의 flat index / Flat index of the target row
|
|
158
|
+
* @param field - 대상 컬럼 field / Target column field
|
|
159
|
+
* @returns 의존 셀들의 rowIndex/field 목록 / List of dependent cells' rowIndex/field
|
|
160
|
+
*/
|
|
61
161
|
getDependents(rowIndex: number, field: string): Array<{
|
|
62
162
|
rowIndex: number;
|
|
63
163
|
field: string;
|
|
64
164
|
}>;
|
|
165
|
+
/** 이 셀의 수식이 참조하는 선행 셀 목록. / Cells that this cell's formula references (its precedents).
|
|
166
|
+
*
|
|
167
|
+
* @param rowIndex - 대상 행의 flat index / Flat index of the target row
|
|
168
|
+
* @param field - 대상 컬럼 field / Target column field
|
|
169
|
+
* @returns 선행 셀들의 rowIndex/field 목록 / List of precedent cells' rowIndex/field
|
|
170
|
+
*/
|
|
65
171
|
getPrecedents(rowIndex: number, field: string): Array<{
|
|
66
172
|
rowIndex: number;
|
|
67
173
|
field: string;
|
|
68
174
|
}>;
|
|
175
|
+
/** 그리드의 모든 수식을 강제 재계산한다. / Force-recalculate every formula in the grid. */
|
|
69
176
|
recalculate(): void;
|
|
177
|
+
/** 단일 셀(과 그 의존 셀들)만 강제 재계산한다. / Force-recalculate a single cell (and its dependents).
|
|
178
|
+
*
|
|
179
|
+
* @param rowIndex - 대상 행의 flat index / Flat index of the target row
|
|
180
|
+
* @param field - 대상 컬럼 field / Target column field
|
|
181
|
+
*/
|
|
70
182
|
recalculateCell(rowIndex: number, field: string): void;
|
|
71
|
-
/** C3(F1 fill 전용): srcRowId/srcField 수식의 상대축만 dRow/dCol 오프셋한 새 수식 원문.
|
|
183
|
+
/** C3(F1 fill 전용): srcRowId/srcField 수식의 상대축만 dRow/dCol 오프셋한 새 수식 원문.
|
|
184
|
+
* / C3 (F1 fill only): a new formula source with only the relative-axis references of the
|
|
185
|
+
* srcRowId/srcField formula offset by dRow/dCol.
|
|
186
|
+
*
|
|
187
|
+
* @param srcRowId - 원본 수식이 있는 행의 stable id / Stable id of the row holding the source formula
|
|
188
|
+
* @param srcField - 원본 수식이 있는 컬럼 field / Column field holding the source formula
|
|
189
|
+
* @param dRow - 행 오프셋 / Row offset
|
|
190
|
+
* @param dCol - 열 오프셋 / Column offset
|
|
191
|
+
* @returns 오프셋 적용된 수식 원문 / The offset formula source
|
|
192
|
+
*/
|
|
72
193
|
offsetFormula(srcRowId: string, srcField: string, dRow: number, dCol: number): string;
|
|
73
|
-
/** F3 렌더 배선(§4.4/C7, §7.4/§7.5/§7.6) — 셀 수식 메타(없으면 null).
|
|
194
|
+
/** F3 렌더 배선(§4.4/C7, §7.4/§7.5/§7.6) — 셀 수식 메타(없으면 null).
|
|
195
|
+
* / F3 render wiring (§4.4/C7, §7.4/§7.5/§7.6) — a cell's formula metadata (or null if none).
|
|
196
|
+
*
|
|
197
|
+
* @param rowIndex - 대상 행의 flat index / Flat index of the target row
|
|
198
|
+
* @param field - 대상 컬럼 field / Target column field
|
|
199
|
+
* @returns 수식 원문/오류/근사 여부, 없으면 `null` / Formula source, error, and approximation flag; or `null`
|
|
200
|
+
*/
|
|
74
201
|
getFormulaMeta(rowIndex: number, field: string): {
|
|
75
202
|
src: string;
|
|
76
203
|
error: FormulaErrorCode | null;
|
|
77
204
|
approx: boolean;
|
|
78
205
|
} | null;
|
|
79
|
-
/** F3-R13/MCCONNELL-03(P0): 정렬/필터 후 범위-보유(hasRangeRef) 수식 전부 dirty(§3.5).
|
|
206
|
+
/** F3-R13/MCCONNELL-03(P0): 정렬/필터 후 범위-보유(hasRangeRef) 수식 전부 dirty(§3.5).
|
|
207
|
+
* / F3-R13/MCCONNELL-03 (P0): after sort/filter, marks every range-referencing (hasRangeRef)
|
|
208
|
+
* formula dirty (§3.5). */
|
|
80
209
|
recalcRangeBearingFormulas(): void;
|
|
81
210
|
}
|