@simplysm/angular 14.0.49 → 14.0.52
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/dist/controls/select/sd-select.js +3 -3
- package/dist/data/sheet/sd-sheet.d.ts +9 -12
- package/dist/data/sheet/sd-sheet.d.ts.map +1 -1
- package/dist/data/sheet/sd-sheet.js +150 -168
- package/dist/data/sheet/types.d.ts +1 -0
- package/dist/data/sheet/types.d.ts.map +1 -1
- package/dist/data/sheet/useSheetCellStyling.d.ts +2 -2
- package/dist/data/sheet/useSheetCellStyling.d.ts.map +1 -1
- package/dist/data/sheet/useSheetCellStyling.js +20 -12
- package/dist/data/sheet/useSheetColumnFixing.d.ts +3 -8
- package/dist/data/sheet/useSheetColumnFixing.d.ts.map +1 -1
- package/dist/data/sheet/useSheetColumnFixing.js +19 -27
- package/dist/data/sheet/useSheetLayoutEngine.d.ts.map +1 -1
- package/dist/data/sheet/useSheetLayoutEngine.js +4 -1
- package/dist/layout/dock/sd-dock-container.d.ts.map +1 -1
- package/dist/layout/dock/sd-dock-container.js +4 -4
- package/package.json +7 -8
- package/src/controls/select/sd-select.ts +3 -3
- package/src/core/modal/sd-modal.provider.ts +1 -1
- package/src/core/modal/sd-modal.ts +1 -1
- package/src/core/routing/menu-utils.ts +1 -1
- package/src/core/shared-data/sd-shared-data.provider.ts +7 -7
- package/src/data/shared-data/sd-shared-data-select.ts +2 -2
- package/src/data/sheet/sd-sheet.ts +39 -60
- package/src/data/sheet/types.ts +1 -0
- package/src/data/sheet/useSheetCellStyling.ts +19 -11
- package/src/data/sheet/useSheetColumnFixing.ts +21 -28
- package/src/data/sheet/useSheetLayoutEngine.ts +4 -1
- package/src/layout/dock/sd-dock-container.ts +2 -1
- package/README.md +0 -467
- package/docs/bootstrap.md +0 -38
- package/docs/directives.md +0 -236
- package/docs/features.md +0 -154
- package/docs/pipes.md +0 -32
- package/docs/plugins.md +0 -37
- package/docs/provider-types.md +0 -283
- package/docs/providers.md +0 -379
- package/docs/recipes/crud-detail.md +0 -875
- package/docs/recipes/crud-list.md +0 -1037
- package/docs/recipes/data-select-button.md +0 -318
- package/docs/recipes/page-modal-container.md +0 -178
- package/docs/styling.md +0 -222
- package/docs/type-utilities.md +0 -250
- package/docs/ui-data.md +0 -333
- package/docs/ui-form.md +0 -502
- package/docs/ui-layout.md +0 -140
- package/docs/ui-navigation.md +0 -303
- package/docs/ui-overlay.md +0 -157
- package/docs/ui-visual.md +0 -127
- package/docs/utils.md +0 -244
package/docs/ui-data.md
DELETED
|
@@ -1,333 +0,0 @@
|
|
|
1
|
-
# UI - Data
|
|
2
|
-
|
|
3
|
-
## List
|
|
4
|
-
|
|
5
|
-
### `SdList`
|
|
6
|
-
|
|
7
|
-
리스트 컴포넌트.
|
|
8
|
-
|
|
9
|
-
```typescript
|
|
10
|
-
@Component({ selector: "sd-list" })
|
|
11
|
-
class SdList {
|
|
12
|
-
inset = input(false, { transform: booleanAttribute });
|
|
13
|
-
}
|
|
14
|
-
```
|
|
15
|
-
|
|
16
|
-
| Input | Type | Default | Description |
|
|
17
|
-
|-------|------|---------|-------------|
|
|
18
|
-
| `inset` | `boolean` | `false` | 삽입 스타일 (테두리 없음) |
|
|
19
|
-
|
|
20
|
-
### `SdListItem`
|
|
21
|
-
|
|
22
|
-
리스트 항목 컴포넌트. 접기/펼치기 자식 리스트를 지원한다.
|
|
23
|
-
|
|
24
|
-
```typescript
|
|
25
|
-
@Component({ selector: "sd-list-item" })
|
|
26
|
-
class SdListItem {
|
|
27
|
-
open = model(false);
|
|
28
|
-
selected = input(false, { transform: booleanAttribute });
|
|
29
|
-
readonly = input(false, { transform: booleanAttribute });
|
|
30
|
-
}
|
|
31
|
-
```
|
|
32
|
-
|
|
33
|
-
| Input | Type | Default | Description |
|
|
34
|
-
|-------|------|---------|-------------|
|
|
35
|
-
| `open` | `boolean` | `false` | 자식 리스트 펼침 (two-way) |
|
|
36
|
-
| `selected` | `boolean` | `false` | 선택 상태 |
|
|
37
|
-
| `readonly` | `boolean` | `false` | 읽기 전용 |
|
|
38
|
-
|
|
39
|
-
## Sheet
|
|
40
|
-
|
|
41
|
-
### `SdSheet`
|
|
42
|
-
|
|
43
|
-
스프레드시트 컴포넌트. 정렬, 컬럼 고정, 리사이즈, 페이지네이션, 설정 저장을 지원한다.
|
|
44
|
-
|
|
45
|
-
```typescript
|
|
46
|
-
@Component({ selector: "sd-sheet" })
|
|
47
|
-
class SdSheet<T> {
|
|
48
|
-
key = input<string>();
|
|
49
|
-
items = input<T[]>([]);
|
|
50
|
-
trackByFn = input<(item: T, index: number) => unknown>();
|
|
51
|
-
selectMode = input<"single" | "multi">();
|
|
52
|
-
getItemSelectableFn = input<(item: T) => boolean | string>();
|
|
53
|
-
getChildrenFn = input<(item: T, index: number) => T[] | undefined>();
|
|
54
|
-
useAutoSort = input(false, { transform: booleanAttribute });
|
|
55
|
-
visiblePageCount = input(10);
|
|
56
|
-
totalPageCount = input(0);
|
|
57
|
-
itemsPerPage = input(0);
|
|
58
|
-
inset = input(false, { transform: booleanAttribute });
|
|
59
|
-
hideConfigBar = input(false, { transform: booleanAttribute });
|
|
60
|
-
cumulativeSelection = input(false, { transform: booleanAttribute });
|
|
61
|
-
|
|
62
|
-
itemKeydown = output<SdSheetItemKeydownEventParam<T>>();
|
|
63
|
-
cellKeydown = output<SdSheetCellKeydownEventParam<T>>();
|
|
64
|
-
|
|
65
|
-
selectedItems = model<T[]>([]);
|
|
66
|
-
expandedItems = model<T[]>([]);
|
|
67
|
-
sorts = model<SortingDef[]>([]);
|
|
68
|
-
currentPage = model(0);
|
|
69
|
-
}
|
|
70
|
-
```
|
|
71
|
-
|
|
72
|
-
| Input | Type | Default | Description |
|
|
73
|
-
|-------|------|---------|-------------|
|
|
74
|
-
| `key` | `string \| undefined` | `undefined` | 설정 저장 키 |
|
|
75
|
-
| `items` | `T[]` | `[]` | 표시할 항목 |
|
|
76
|
-
| `trackByFn` | `((item, index) => unknown) \| undefined` | `undefined` | 트랙킹 함수 |
|
|
77
|
-
| `selectMode` | `"single" \| "multi" \| undefined` | `undefined` | 선택 모드 |
|
|
78
|
-
| `getItemSelectableFn` | `((item) => boolean \| string) \| undefined` | `undefined` | 선택 가능 여부 함수. string은 비활성 사유 |
|
|
79
|
-
| `getChildrenFn` | `((item, index) => T[] \| undefined) \| undefined` | `undefined` | 트리 구조 자식 반환 함수 |
|
|
80
|
-
| `useAutoSort` | `boolean` | `false` | 클라이언트 측 자동 정렬 |
|
|
81
|
-
| `visiblePageCount` | `number` | `10` | 한 번에 표시할 페이지 수 |
|
|
82
|
-
| `totalPageCount` | `number` | `0` | 총 페이지 수 |
|
|
83
|
-
| `itemsPerPage` | `number` | `0` | 페이지당 항목 수 |
|
|
84
|
-
| `inset` | `boolean` | `false` | 삽입 스타일 |
|
|
85
|
-
| `hideConfigBar` | `boolean` | `false` | 설정 바 숨김 |
|
|
86
|
-
| `cumulativeSelection` | `boolean` | `false` | `true`면 `items` 변경(페이지 이동/검색/필터 등) 시 `selectedItems`를 유지하여 다중 페이지 선택 누적을 실현. `false`(기본)면 `items` 변경 시 `selectedItems`를 `[]`로 초기화. 체크 표시 판정은 두 모드 모두 `trackByFn` + `obj.equal` 기반 key 비교이므로 **누적 모드 사용 시 `trackByFn` 지정 필수**(기본 `(item) => item`은 reference 반환이라 서버 페이지네이션 등에서 복원 실패). 누적 모드에서 명시적 초기화는 소비자가 직접 `selectedItems.set([])` 호출. 선택된 키 배열이 필요하면 `selectedItems().map((it, i) => trackByFn()(it, i))` 수동 호출 |
|
|
87
|
-
| `currentPage` | `number` | `0` | 현재 페이지 (two-way) |
|
|
88
|
-
| `sorts` | `SortingDef[]` | `[]` | 정렬 설정 (two-way). **`SortingDef.key`는 컬럼 `key`에 지정된 값 그대로이므로 `"vendor.name"` 같은 체인 경로일 수 있다.** 정렬 처리 시 `item[sort.key]` 단순 접근 금지 → `obj.getChainValue(item, sort.key)` 사용 |
|
|
89
|
-
| `selectedItems` | `T[]` | `[]` | 선택된 항목 (two-way) |
|
|
90
|
-
| `expandedItems` | `T[]` | `[]` | 확장된 항목 (two-way) |
|
|
91
|
-
|
|
92
|
-
#### `cumulativeSelection` 사용 패턴
|
|
93
|
-
|
|
94
|
-
시트의 용도에 따라 올바른 값이 다르다:
|
|
95
|
-
|
|
96
|
-
- **선택 모달**(사용자가 여러 페이지 돌며 체크 후 확인 버튼으로 전체 반환) → `true`. 다중 페이지 선택이 유지되어야 한다
|
|
97
|
-
- **현재 뷰 일괄 작업**(선택 삭제·복구 등 현재 페이지 내 처리) → `false` (기본값). `items` 변경 시 선택이 자동 초기화되어 오작동을 방지한다
|
|
98
|
-
|
|
99
|
-
정적 `true`/`false`보다 **동적 computed 바인딩**으로 상황에 맞게 쓰는 것을 권장한다:
|
|
100
|
-
|
|
101
|
-
```html
|
|
102
|
-
<sd-sheet
|
|
103
|
-
[cumulativeSelection]="viewType() === 'modal' && selectMode() === 'multi'"
|
|
104
|
-
[trackByFn]="trackById"
|
|
105
|
-
...
|
|
106
|
-
>
|
|
107
|
-
```
|
|
108
|
-
|
|
109
|
-
- `viewType()` = `'modal'` + `selectMode()` = `'multi'`일 때만 누적
|
|
110
|
-
- 그 외(page 뷰 또는 single 선택)는 기본 모드로 동작
|
|
111
|
-
|
|
112
|
-
#### 주의사항
|
|
113
|
-
|
|
114
|
-
- **초기 마운트 시 `selectedItems` 보존**: `cumulativeSelection=false`라도 **최초 `items` 구독 시점**의 `selectedItems`는 초기화되지 않는다. 이후 `items`가 교체될 때부터 초기화 규칙이 적용된다. 따라서 소비자가 컴포넌트 마운트 직후 초기 선택을 주입하는 시나리오는 안전하다.
|
|
115
|
-
- **`trackByFn`은 index에 의존하지 않아야 한다**: 누적 모드에서 `selectedItems`는 현재 `displayItems`에 없는 다른 페이지 항목을 포함할 수 있다. 내부 key 비교는 이 항목에 대해 index를 `0`으로 fallback하여 `trackByFn(item, 0)`을 호출한다. `trackByFn`을 `(item, index) => \`${item.category}_${index}\`` 같이 **index에 의존하는 형태로 쓰면 동일 item에 대해 다른 key가 계산되어 `isSelected` 판정이 틀어진다**. 항상 item 속성만으로 key를 만든다: `(item) => item.id` 형태를 사용.
|
|
116
|
-
|
|
117
|
-
### `SdSheetColumn`
|
|
118
|
-
|
|
119
|
-
시트 컬럼 정의 디렉티브. 컬럼의 헤더, 너비, 고정, 정렬 등을 설정한다. 셀 내용은 `SdSheetColumnCellTemplate`으로 정의한다.
|
|
120
|
-
|
|
121
|
-
```typescript
|
|
122
|
-
@Directive({ selector: "sd-sheet-column" })
|
|
123
|
-
class SdSheetColumn<T = unknown> {
|
|
124
|
-
key = input.required<string>();
|
|
125
|
-
header = input<string | string[]>("");
|
|
126
|
-
headerStyle = input<string>();
|
|
127
|
-
tooltip = input<string>();
|
|
128
|
-
width = input<string>();
|
|
129
|
-
fixed = input(false, { transform: booleanAttribute });
|
|
130
|
-
hidden = input(false, { transform: booleanAttribute });
|
|
131
|
-
collapse = input(false, { transform: booleanAttribute });
|
|
132
|
-
disableSorting = input(false, { transform: booleanAttribute });
|
|
133
|
-
disableResizing = input(false, { transform: booleanAttribute });
|
|
134
|
-
ordering = input(0);
|
|
135
|
-
|
|
136
|
-
cellTplRef = contentChild.required(SdSheetColumnCellTemplate, { read: TemplateRef });
|
|
137
|
-
headerTplRef = contentChild<TemplateRef<void>>("headerTpl");
|
|
138
|
-
summaryTplRef = contentChild<TemplateRef<void>>("summaryTpl");
|
|
139
|
-
}
|
|
140
|
-
```
|
|
141
|
-
|
|
142
|
-
| Input | Type | Default | Description |
|
|
143
|
-
|-------|------|---------|-------------|
|
|
144
|
-
| `key` | `string` | required | 컬럼 식별 키 |
|
|
145
|
-
| `header` | `string \| string[]` | `""` | 헤더 텍스트 (배열이면 멀티 행 헤더) |
|
|
146
|
-
| `headerStyle` | `string \| undefined` | - | 헤더 셀 인라인 스타일 |
|
|
147
|
-
| `tooltip` | `string \| undefined` | - | 헤더 툴팁 텍스트 |
|
|
148
|
-
| `width` | `string \| undefined` | - | 컬럼 너비 (예: `"100px"`) |
|
|
149
|
-
| `fixed` | `boolean` | `false` | 고정 컬럼 |
|
|
150
|
-
| `hidden` | `boolean` | `false` | 숨김 |
|
|
151
|
-
| `collapse` | `boolean` | `false` | 접힘 (너비 축소) |
|
|
152
|
-
| `disableSorting` | `boolean` | `false` | 정렬 비활성화 |
|
|
153
|
-
| `disableResizing` | `boolean` | `false` | 리사이즈 비활성화 |
|
|
154
|
-
| `ordering` | `number` | `0` | 순서 (낮을수록 앞) |
|
|
155
|
-
|
|
156
|
-
Content children:
|
|
157
|
-
- `SdSheetColumnCellTemplate` (required): 셀 렌더링 템플릿
|
|
158
|
-
- `#headerTpl`: 커스텀 헤더 템플릿
|
|
159
|
-
- `#summaryTpl`: 요약 행 템플릿
|
|
160
|
-
|
|
161
|
-
### `SdSheetColumnCellTemplate`
|
|
162
|
-
|
|
163
|
-
시트 컬럼 셀 내용을 정의하는 디렉티브. `ng-template[cell]` 셀렉터를 사용하며, `SdSheetCellContext` 타입 가드를 제공한다.
|
|
164
|
-
|
|
165
|
-
```typescript
|
|
166
|
-
@Directive({ selector: "ng-template[cell]" })
|
|
167
|
-
class SdSheetColumnCellTemplate<T> {
|
|
168
|
-
cell = input.required<T[]>();
|
|
169
|
-
|
|
170
|
-
static ngTemplateContextGuard<TContextItem>(
|
|
171
|
-
_dir: SdSheetColumnCellTemplate<TContextItem>,
|
|
172
|
-
_ctx: unknown,
|
|
173
|
-
): _ctx is SdSheetCellContext<TContextItem>;
|
|
174
|
-
}
|
|
175
|
-
```
|
|
176
|
-
|
|
177
|
-
사용법:
|
|
178
|
-
```html
|
|
179
|
-
<sd-sheet-column key="name" header="이름">
|
|
180
|
-
<ng-template [cell]="items()" let-item>
|
|
181
|
-
{{ item.name }}
|
|
182
|
-
</ng-template>
|
|
183
|
-
</sd-sheet-column>
|
|
184
|
-
```
|
|
185
|
-
|
|
186
|
-
**셀 내용 작성 지침**:
|
|
187
|
-
|
|
188
|
-
- **일반 텍스트/값 표시**: 바깥에 `<div class="p-xs-sm">`로 감싸 기본 패딩을 적용한다. 정렬이 필요하면 `tx-right`, `tx-center` 등을 함께 사용한다.
|
|
189
|
-
- **컨트롤(textfield/select/checkbox 등) 삽입**: 반드시 `[inset]="true"`와 `[size]="'sm'"`을 지정한다. `inset`은 컨트롤의 테두리·배경을 제거해 셀에 자연스럽게 녹아들게 하고, `sm` 사이즈는 시트 행 높이에 맞춘다. 이 경우 별도 `p-xs-sm` 래퍼는 사용하지 않는다.
|
|
190
|
-
|
|
191
|
-
예시:
|
|
192
|
-
```html
|
|
193
|
-
<!-- 일반 값 표시 -->
|
|
194
|
-
<sd-sheet-column [fixed]="true" [header]="'#'" [key]="'id'">
|
|
195
|
-
<ng-template [cell]="items()" let-item>
|
|
196
|
-
<div class="p-xs-sm tx-right">{{ item.id }}</div>
|
|
197
|
-
</ng-template>
|
|
198
|
-
</sd-sheet-column>
|
|
199
|
-
|
|
200
|
-
<!-- 컨트롤 삽입 -->
|
|
201
|
-
<sd-sheet-column [header]="'코드'" [key]="'code'">
|
|
202
|
-
<ng-template [cell]="items()" let-item let-edit="edit">
|
|
203
|
-
<sd-textfield
|
|
204
|
-
[type]="'text'"
|
|
205
|
-
[inset]="true"
|
|
206
|
-
[size]="'sm'"
|
|
207
|
-
[required]="true"
|
|
208
|
-
[disabled]="!canEdit()"
|
|
209
|
-
[readonly]="!edit"
|
|
210
|
-
[(value)]="item.code"
|
|
211
|
-
(valueChange)="mark(items)"
|
|
212
|
-
/>
|
|
213
|
-
</ng-template>
|
|
214
|
-
</sd-sheet-column>
|
|
215
|
-
```
|
|
216
|
-
|
|
217
|
-
### `SdSheetCellContext`
|
|
218
|
-
|
|
219
|
-
시트 셀 템플릿 컨텍스트.
|
|
220
|
-
|
|
221
|
-
```typescript
|
|
222
|
-
interface SdSheetCellContext<T = unknown> {
|
|
223
|
-
$implicit: T;
|
|
224
|
-
item: T;
|
|
225
|
-
index: number;
|
|
226
|
-
depth: number;
|
|
227
|
-
edit: boolean;
|
|
228
|
-
}
|
|
229
|
-
```
|
|
230
|
-
|
|
231
|
-
| Field | Type | Description |
|
|
232
|
-
|-------|------|-------------|
|
|
233
|
-
| `$implicit` | `T` | 현재 항목 (let-item으로 접근) |
|
|
234
|
-
| `item` | `T` | 현재 항목 (명시적 접근) |
|
|
235
|
-
| `index` | `number` | 행 인덱스 |
|
|
236
|
-
| `depth` | `number` | 트리 깊이 |
|
|
237
|
-
| `edit` | `boolean` | 편집 모드 여부 (인라인 편집 지원 시 셀에서 참조) |
|
|
238
|
-
|
|
239
|
-
### `SdSheetConfigModal`
|
|
240
|
-
|
|
241
|
-
시트 설정 모달. 컬럼 표시/숨김, 고정, 너비 등을 설정한다.
|
|
242
|
-
|
|
243
|
-
```typescript
|
|
244
|
-
@Component({ selector: "sd-sheet-config-modal" })
|
|
245
|
-
class SdSheetConfigModal implements SdModalContentDef<SdSheetConfig> {
|
|
246
|
-
controls = input.required<readonly SdSheetColumn[]>();
|
|
247
|
-
config = input.required<SdSheetConfig | undefined>();
|
|
248
|
-
close = output<SdSheetConfig>();
|
|
249
|
-
initialized = signal(true);
|
|
250
|
-
}
|
|
251
|
-
```
|
|
252
|
-
|
|
253
|
-
### `SdSheetColumnDef`
|
|
254
|
-
|
|
255
|
-
```typescript
|
|
256
|
-
interface SdSheetColumnDef {
|
|
257
|
-
key: string;
|
|
258
|
-
header: string | string[];
|
|
259
|
-
headerStyle: string | undefined;
|
|
260
|
-
tooltip: string | undefined;
|
|
261
|
-
width: string | undefined;
|
|
262
|
-
fixed: boolean;
|
|
263
|
-
hidden: boolean;
|
|
264
|
-
collapse: boolean;
|
|
265
|
-
disableSorting: boolean;
|
|
266
|
-
disableResizing: boolean;
|
|
267
|
-
ordering: number;
|
|
268
|
-
}
|
|
269
|
-
```
|
|
270
|
-
|
|
271
|
-
| Field | Type | Description |
|
|
272
|
-
|-------|------|-------------|
|
|
273
|
-
| `key` | `string` | 컬럼 식별 키 |
|
|
274
|
-
| `header` | `string \| string[]` | 헤더 텍스트 |
|
|
275
|
-
| `headerStyle` | `string \| undefined` | 헤더 셀 인라인 스타일 |
|
|
276
|
-
| `tooltip` | `string \| undefined` | 헤더 툴팁 텍스트 |
|
|
277
|
-
| `width` | `string \| undefined` | 컬럼 너비 |
|
|
278
|
-
| `fixed` | `boolean` | 고정 컬럼 여부 |
|
|
279
|
-
| `hidden` | `boolean` | 숨김 여부 |
|
|
280
|
-
| `collapse` | `boolean` | 접힘 여부 |
|
|
281
|
-
| `disableSorting` | `boolean` | 정렬 비활성화 여부 |
|
|
282
|
-
| `disableResizing` | `boolean` | 리사이즈 비활성화 여부 |
|
|
283
|
-
| `ordering` | `number` | 순서 |
|
|
284
|
-
|
|
285
|
-
### `SdSheetConfig`
|
|
286
|
-
|
|
287
|
-
```typescript
|
|
288
|
-
interface SdSheetConfig {
|
|
289
|
-
columnRecord: Record<string, {
|
|
290
|
-
width?: string;
|
|
291
|
-
hidden?: boolean;
|
|
292
|
-
fixed?: boolean;
|
|
293
|
-
ordering?: number;
|
|
294
|
-
}>;
|
|
295
|
-
}
|
|
296
|
-
```
|
|
297
|
-
|
|
298
|
-
### `SdSheetHeaderDef`
|
|
299
|
-
|
|
300
|
-
```typescript
|
|
301
|
-
interface SdSheetHeaderDef {
|
|
302
|
-
text: string;
|
|
303
|
-
colspan: number;
|
|
304
|
-
rowspan: number;
|
|
305
|
-
isLastRow: boolean;
|
|
306
|
-
colDef: SdSheetColumnDef | undefined;
|
|
307
|
-
}
|
|
308
|
-
```
|
|
309
|
-
|
|
310
|
-
### `SdSheetItemKeydownEventParam`
|
|
311
|
-
|
|
312
|
-
```typescript
|
|
313
|
-
interface SdSheetItemKeydownEventParam<T> {
|
|
314
|
-
item: T;
|
|
315
|
-
event: KeyboardEvent;
|
|
316
|
-
}
|
|
317
|
-
```
|
|
318
|
-
|
|
319
|
-
### `SdSheetCellKeydownEventParam`
|
|
320
|
-
|
|
321
|
-
```typescript
|
|
322
|
-
interface SdSheetCellKeydownEventParam<T> {
|
|
323
|
-
item: T;
|
|
324
|
-
key: string;
|
|
325
|
-
event: KeyboardEvent;
|
|
326
|
-
}
|
|
327
|
-
```
|
|
328
|
-
|
|
329
|
-
| Field | Type | Description |
|
|
330
|
-
|-------|------|-------------|
|
|
331
|
-
| `item` | `T` | 해당 행 항목 |
|
|
332
|
-
| `key` | `string` | 컬럼 키 |
|
|
333
|
-
| `event` | `KeyboardEvent` | 키보드 이벤트 |
|