@operato/data-grist 10.8.1 → 10.10.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +44 -0
- package/dist/src/configure/column-builder.js +17 -2
- package/dist/src/configure/column-builder.js.map +1 -1
- package/dist/src/configure/config-builder.js +1 -1
- package/dist/src/configure/config-builder.js.map +1 -1
- package/dist/src/data-card/data-card.d.ts +6 -0
- package/dist/src/data-card/data-card.js +12 -3
- package/dist/src/data-card/data-card.js.map +1 -1
- package/dist/src/data-grid/data-grid-body-style.js +12 -1
- package/dist/src/data-grid/data-grid-body-style.js.map +1 -1
- package/dist/src/data-grid/data-grid-body.d.ts +31 -0
- package/dist/src/data-grid/data-grid-body.js +141 -39
- package/dist/src/data-grid/data-grid-body.js.map +1 -1
- package/dist/src/data-grid/data-grid-field.d.ts +21 -0
- package/dist/src/data-grid/data-grid-field.js +326 -19
- package/dist/src/data-grid/data-grid-field.js.map +1 -1
- package/dist/src/data-grid/data-grid-footer.js +1 -1
- package/dist/src/data-grid/data-grid-footer.js.map +1 -1
- package/dist/src/data-grid/data-grid-header.d.ts +12 -1
- package/dist/src/data-grid/data-grid-header.js +97 -36
- package/dist/src/data-grid/data-grid-header.js.map +1 -1
- package/dist/src/data-grid/data-grid.d.ts +15 -1
- package/dist/src/data-grid/data-grid.js +83 -40
- package/dist/src/data-grid/data-grid.js.map +1 -1
- package/dist/src/data-grist.d.ts +32 -0
- package/dist/src/data-grist.js +86 -10
- package/dist/src/data-grist.js.map +1 -1
- package/dist/src/data-list/data-list.d.ts +6 -0
- package/dist/src/data-list/data-list.js +12 -3
- package/dist/src/data-list/data-list.js.map +1 -1
- package/dist/src/editors/ox-grist-editor-json5.d.ts +1 -0
- package/dist/src/editors/ox-grist-editor-json5.js +2 -0
- package/dist/src/editors/ox-grist-editor-json5.js.map +1 -1
- package/dist/src/editors/ox-grist-editor.d.ts +27 -0
- package/dist/src/editors/ox-grist-editor.js +61 -1
- package/dist/src/editors/ox-grist-editor.js.map +1 -1
- package/dist/src/editors/registry.d.ts +10 -0
- package/dist/src/editors/registry.js +16 -0
- package/dist/src/editors/registry.js.map +1 -1
- package/dist/src/filters/filter-input.js +15 -0
- package/dist/src/filters/filter-input.js.map +1 -1
- package/dist/src/filters/filter-range-date.js +9 -0
- package/dist/src/filters/filter-range-date.js.map +1 -1
- package/dist/src/filters/filter-range-number.js +9 -0
- package/dist/src/filters/filter-range-number.js.map +1 -1
- package/dist/src/gutters/gutter-row-selector.js +16 -0
- package/dist/src/gutters/gutter-row-selector.js.map +1 -1
- package/dist/src/index.d.ts +1 -0
- package/dist/src/index.js +1 -0
- package/dist/src/index.js.map +1 -1
- package/dist/src/renderers/ox-grist-renderer-boolean.js +8 -0
- package/dist/src/renderers/ox-grist-renderer-boolean.js.map +1 -1
- package/dist/src/types.d.ts +11 -1
- package/dist/src/types.js.map +1 -1
- package/dist/src/utils/column-text.d.ts +18 -0
- package/dist/src/utils/column-text.js +37 -0
- package/dist/src/utils/column-text.js.map +1 -0
- package/dist/src/utils/index.d.ts +1 -0
- package/dist/src/utils/index.js +1 -0
- package/dist/src/utils/index.js.map +1 -1
- package/dist/test/accessible-name.test.d.ts +2 -0
- package/dist/test/accessible-name.test.js +324 -0
- package/dist/test/accessible-name.test.js.map +1 -0
- package/dist/test/row-hover-visible.test.js +28 -16
- package/dist/test/row-hover-visible.test.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +7 -6
- package/test/accessible-name.test.ts +408 -0
- package/test/row-hover-visible.test.ts +32 -16
- package/translations/en.json +20 -10
- package/translations/ja.json +19 -9
- package/translations/ko.json +19 -10
- package/translations/ms.json +19 -9
- package/translations/zh.json +19 -9
|
@@ -6,9 +6,11 @@ import { customElement, property, query, state } from 'lit/decorators.js';
|
|
|
6
6
|
import { ifDefined } from 'lit/directives/if-defined.js';
|
|
7
7
|
import debounce from 'lodash-es/debounce.js';
|
|
8
8
|
import isEmpty from 'lodash-es/isEmpty.js';
|
|
9
|
+
import { i18next } from '@operato/i18n';
|
|
9
10
|
import { sleep, parseToNumberOrNull, closestElement } from '@operato/utils';
|
|
10
11
|
import { ZERO_CONFIG, ZERO_DATA } from '../configure/zero-config.js';
|
|
11
12
|
import { RecordViewHandler } from '../record-view/record-view-handler.js';
|
|
13
|
+
import { columnText } from '../utils/column-text.js';
|
|
12
14
|
// import { supportsPassive } from '../utils/index.js'
|
|
13
15
|
import { dataGridBodyStyle } from './data-grid-body-style.js';
|
|
14
16
|
import { dataGridBodyClickHandler } from './event-handlers/data-grid-body-click-handler.js';
|
|
@@ -86,6 +88,13 @@ let DataGridBody = class DataGridBody extends LitElement {
|
|
|
86
88
|
this.columns = [];
|
|
87
89
|
this.data = ZERO_DATA;
|
|
88
90
|
this.focused = ZERO_FOCUS;
|
|
91
|
+
/**
|
|
92
|
+
* 이 판의 첫 줄이 표 전체에서 몇 번째인가(1부터).
|
|
93
|
+
*
|
|
94
|
+
* 머리줄 수와 페이지 자리를 합한 값이라 ox-grid 가 계산해서 내려 준다 — 여기서 다시 세면
|
|
95
|
+
* 머리가 한 줄인지 두 줄인지(묶음 머리)를 몸이 알아야 한다.
|
|
96
|
+
*/
|
|
97
|
+
this.ariaRowIndexBase = 2;
|
|
89
98
|
this.editTarget = null;
|
|
90
99
|
this.from = -1;
|
|
91
100
|
this.to = -1;
|
|
@@ -123,6 +132,14 @@ let DataGridBody = class DataGridBody extends LitElement {
|
|
|
123
132
|
var { records } = data;
|
|
124
133
|
var { appendable, classifier, accumulator } = this.config.rows;
|
|
125
134
|
const { start, end } = this._selectBlock || {};
|
|
135
|
+
/*
|
|
136
|
+
* 줄을 고를 수 있는 표에서만 aria-selected 를 낸다.
|
|
137
|
+
*
|
|
138
|
+
* 이 속성은 「고를 수 있는데 지금은 안 골랐다」는 뜻이라, 고를 수 없는 표의 모든 줄에 false 를
|
|
139
|
+
* 달면 있지도 않은 기능을 있다고 말하게 된다. 고르는 장치가 있는지는 표가 스스로 안다 —
|
|
140
|
+
* 줄 선택 거터가 있느냐다.
|
|
141
|
+
*/
|
|
142
|
+
const selectable = columns.some(column => column.gutterName === 'row-selector');
|
|
126
143
|
/*
|
|
127
144
|
* 레코드를 추가할 수 있는 경우에는 항상 추가 레코드를 보여준다.
|
|
128
145
|
* 만약, 이전 방식처럼, 커서를 옮겨야만 새로운 레코드가 보이게 하고 싶다면, 조건부를 다음의 코드로 대체한다.
|
|
@@ -134,6 +151,16 @@ let DataGridBody = class DataGridBody extends LitElement {
|
|
|
134
151
|
if (accumulator) {
|
|
135
152
|
var accumRecord = this.buildAccumulatorRecord();
|
|
136
153
|
}
|
|
154
|
+
/*
|
|
155
|
+
* ── 줄이 몇 번째인가 ──────────────────────────────────────────────────
|
|
156
|
+
*
|
|
157
|
+
* aria-rowindex 는 **표 전체에서의 자리**다 — 지금 페이지 안의 자리가 아니다. 2페이지 첫 줄은
|
|
158
|
+
* 21번째 줄이지 이 페이지의 1번째 줄이 아니다. 그렇게 읽어 주지 않으면 페이지를 넘길 때마다
|
|
159
|
+
* 「1번째 줄」로 돌아가서 어디까지 봤는지 알 수 없다.
|
|
160
|
+
*
|
|
161
|
+
* 머리줄도 센다(1부터). 묶음 머리가 있으면 머리가 두 줄이라 본문은 3번부터 시작한다.
|
|
162
|
+
*/
|
|
163
|
+
const rowIndexBase = this.ariaRowIndexBase;
|
|
137
164
|
return html `
|
|
138
165
|
${records.map((record, idxRow) => {
|
|
139
166
|
var attrFocusedRow = idxRow === focusedRow;
|
|
@@ -142,8 +169,17 @@ let DataGridBody = class DataGridBody extends LitElement {
|
|
|
142
169
|
var dirtyFields = record['__dirtyfields__'] || {};
|
|
143
170
|
var { emphasized } = classifier.call(null, record, idxRow) || {};
|
|
144
171
|
return html `
|
|
172
|
+
<div
|
|
173
|
+
grid-row
|
|
174
|
+
role="row"
|
|
175
|
+
aria-rowindex=${rowIndexBase + idxRow}
|
|
176
|
+
aria-selected=${ifDefined(selectable ? !!attrSelected : undefined)}
|
|
177
|
+
>
|
|
145
178
|
${columns.map((column, idxColumn) => html `
|
|
146
179
|
<ox-grid-field
|
|
180
|
+
id=${'cell-' + idxRow + '-' + idxColumn}
|
|
181
|
+
role="gridcell"
|
|
182
|
+
aria-colindex=${idxColumn + 1}
|
|
147
183
|
.data=${data}
|
|
148
184
|
.type=${column.type}
|
|
149
185
|
.rowIndex=${idxRow}
|
|
@@ -165,7 +201,12 @@ let DataGridBody = class DataGridBody extends LitElement {
|
|
|
165
201
|
fixed=${ifDefined(this.fixedLefts[idxColumn])}
|
|
166
202
|
></ox-grid-field>
|
|
167
203
|
`)}
|
|
204
|
+
<!--
|
|
205
|
+
남는 폭을 메우는 칸 — 읽을 것이 없다. 줄 안에는 두되(색이 함께 바뀌어야 한다) 표의
|
|
206
|
+
칸으로는 세지 않는다.
|
|
207
|
+
-->
|
|
168
208
|
<ox-grid-field
|
|
209
|
+
role="presentation"
|
|
169
210
|
.data=${data}
|
|
170
211
|
.rowIndex=${idxRow}
|
|
171
212
|
.columnIndex=${-1}
|
|
@@ -175,37 +216,62 @@ let DataGridBody = class DataGridBody extends LitElement {
|
|
|
175
216
|
?focused-row=${attrFocusedRow}
|
|
176
217
|
?selected-row=${attrSelected}
|
|
177
218
|
></ox-grid-field>
|
|
219
|
+
</div>
|
|
178
220
|
`;
|
|
179
221
|
})}
|
|
180
222
|
${accumulator
|
|
181
223
|
? html `
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
224
|
+
<div grid-row role="row" aria-rowindex=${rowIndexBase + records.length}>
|
|
225
|
+
${columns.map((column, idxColumn) => html `
|
|
226
|
+
<ox-grid-accum-field
|
|
227
|
+
role="gridcell"
|
|
228
|
+
aria-colindex=${idxColumn + 1}
|
|
229
|
+
.data=${data}
|
|
230
|
+
.columnIndex=${idxColumn}
|
|
231
|
+
.rowIndex=${records.length}
|
|
232
|
+
.column=${column}
|
|
233
|
+
.record=${accumRecord}
|
|
234
|
+
.value=${accumRecord[column.name]}
|
|
235
|
+
fixed=${ifDefined(this.fixedLefts[idxColumn])}
|
|
236
|
+
></ox-grid-accum-field>
|
|
237
|
+
`)}
|
|
238
|
+
<ox-grid-accum-field
|
|
239
|
+
role="presentation"
|
|
240
|
+
.data=${data}
|
|
241
|
+
.columnIndex=${-1}
|
|
242
|
+
.rowIndex=${records.length}
|
|
243
|
+
.record=${accumRecord}
|
|
244
|
+
></ox-grid-accum-field>
|
|
245
|
+
</div>
|
|
199
246
|
`
|
|
200
247
|
: nothing}
|
|
201
248
|
${start && end && start !== end ? html ` <div select-block></div> ` : html ``}
|
|
202
|
-
|
|
249
|
+
<!--
|
|
250
|
+
이 grid 의 키 입력은 이 입력칸이 받는다 — 칸을 눌러 편집을 열기 전까지 포커스가 여기에 있고,
|
|
251
|
+
한글 IME 의 조합 중간 글자도 여기에 쌓인다. 곧 **포커스가 실제로 놓이는 자리**다.
|
|
252
|
+
|
|
253
|
+
전에는 이름이 없었다. 눈에 보이지 않으니(opacity: 0) 문제가 아니라고 볼 수 있는데, 그렇지 않다.
|
|
254
|
+
보이지 않는 것과 없는 것은 다르다 — 포커스를 받고 글자를 받는 입력칸이므로 스크린 리더는 이것을
|
|
255
|
+
읽는다. 이름이 없으면 「편집 텍스트」 하나로만 읽히고, grid 안에서 화살표로 아무리 옮겨 다녀도
|
|
256
|
+
읽히는 것이 바뀌지 않는다. 어느 칸에 서 있는지 알 방법이 없다.
|
|
257
|
+
|
|
258
|
+
aria-hidden 으로 감추는 것은 답이 아니다. 포커스를 받는 것을 보조기술에서 지우면 포커스가
|
|
259
|
+
허공으로 사라진 것처럼 된다. 감추는 대신 **지금 서 있는 칸의 이름**을 말한다.
|
|
260
|
+
-->
|
|
261
|
+
<input
|
|
262
|
+
id="ime-buffer"
|
|
263
|
+
type="text"
|
|
264
|
+
aria-label=${this._imeBufferLabel(columns[focusedColumn])}
|
|
265
|
+
aria-activedescendant=${ifDefined(focusedRow >= 0 && focusedColumn >= 0 ? `cell-${focusedRow}-${focusedColumn}` : undefined)}
|
|
266
|
+
/>
|
|
203
267
|
<slot></slot>
|
|
204
268
|
`;
|
|
205
269
|
}
|
|
206
270
|
firstUpdated() {
|
|
207
271
|
// TODO issue #13
|
|
208
272
|
// this.addEventListener('scroll', this.handleOnScroll.bind(this))
|
|
273
|
+
/* 칸의 팝업 표식을 누르면 그 칸의 편집을 연다(onStartEdit). */
|
|
274
|
+
this.addEventListener('start-edit', this.onStartEdit.bind(this));
|
|
209
275
|
/* focus() 를 받을 수 있도록 함. */
|
|
210
276
|
this.setAttribute('tabindex', '-1');
|
|
211
277
|
/* 한글 IME composition을 위한 숨겨진 input 버퍼 설정 */
|
|
@@ -360,7 +426,7 @@ let DataGridBody = class DataGridBody extends LitElement {
|
|
|
360
426
|
* 표를 벗어나면 지운다 — 남겨 두면 마지막 줄이 골라진 것처럼 보인다.
|
|
361
427
|
*
|
|
362
428
|
* **요소에 붙인다.** renderRoot 는 ShadowRoot 이고 pointerleave 는 요소에 가는 사건이라 거기서는
|
|
363
|
-
* 안 먹었다. [
|
|
429
|
+
* 안 먹었다. [확인함] 표를 벗어난 뒤에도 표식 8개가 남아 있었다. 2026-09-02
|
|
364
430
|
*/
|
|
365
431
|
this.addEventListener('pointerleave', () => this.setHoveredRow(-1));
|
|
366
432
|
this.renderRoot.addEventListener('click', dataGridBodyClickHandler.bind(this));
|
|
@@ -405,37 +471,58 @@ let DataGridBody = class DataGridBody extends LitElement {
|
|
|
405
471
|
this.markRow(rowIndex, true);
|
|
406
472
|
this._hoveredRow = rowIndex;
|
|
407
473
|
}
|
|
408
|
-
|
|
474
|
+
/**
|
|
475
|
+
* 줄 하나 — 그 줄의 칸을 담고 있는 요소.
|
|
476
|
+
*
|
|
477
|
+
* ── 자식을 세지 않는다 (2026-09-06) ────────────────────────────────────
|
|
478
|
+
* 전에는 `renderRoot.children` 을 `줄번호 * (칸수 + 1)` 로 셌다. 「+1」은 남는 폭을 메우는
|
|
479
|
+
* 빈 칸이고, 그 앞의 주석은 그 셈이 왜 필요한지를 설명하고 있었다 — 셈이 맞아야만 도는 코드였다.
|
|
480
|
+
*
|
|
481
|
+
* 지금은 줄이 **실제 요소**다(role=row). 셀 필요가 없다.
|
|
482
|
+
*/
|
|
483
|
+
rowElementAt(rowIndex) {
|
|
409
484
|
var _a;
|
|
410
485
|
if (rowIndex < 0) {
|
|
486
|
+
return null;
|
|
487
|
+
}
|
|
488
|
+
return (_a = this.renderRoot) === null || _a === void 0 ? void 0 : _a.querySelectorAll('div[grid-row]').item(rowIndex);
|
|
489
|
+
}
|
|
490
|
+
markRow(rowIndex, on) {
|
|
491
|
+
const row = this.rowElementAt(rowIndex);
|
|
492
|
+
if (!row) {
|
|
411
493
|
return;
|
|
412
494
|
}
|
|
413
|
-
const columns = this.columns.filter(column => !column.hidden).length;
|
|
414
495
|
/*
|
|
415
|
-
*
|
|
416
|
-
* (`columnIndex` 가 -1 인 `ox-grid-field` — 위 render 참조).
|
|
496
|
+
* 줄 안의 칸을 모두 바꾼다 — 남는 폭을 메우는 빈 칸까지.
|
|
417
497
|
*
|
|
418
|
-
* 전에는
|
|
419
|
-
* 잘려 보인다.
|
|
420
|
-
*
|
|
421
|
-
* `getFieldByIndex` 로는 그 칸에 닿을 수 없다 — 열 번호를 `% columns` 로 감기 때문에 칸 수를
|
|
422
|
-
* 넘기면 0번으로 돌아온다. 그래서 자식을 직접 센다.
|
|
498
|
+
* 전에는 그 빈 칸이 빠져서, 표가 화면보다 좁으면 줄 오른쪽이 잘려 보였다.
|
|
423
499
|
*/
|
|
424
|
-
|
|
425
|
-
const first = rowIndex * cells;
|
|
426
|
-
for (let index = 0; index < cells; index++) {
|
|
427
|
-
(_a = this.renderRoot.children.item(first + index)) === null || _a === void 0 ? void 0 : _a.toggleAttribute('hovered-row', on);
|
|
428
|
-
}
|
|
500
|
+
Array.from(row.children).forEach(cell => cell.toggleAttribute('hovered-row', on));
|
|
429
501
|
}
|
|
430
502
|
getFieldByIndex(rowIndex, columnIndex, residue = true) {
|
|
431
|
-
|
|
503
|
+
const row = this.rowElementAt(rowIndex);
|
|
504
|
+
if (!row) {
|
|
432
505
|
return;
|
|
433
506
|
}
|
|
434
507
|
var columns = this.columns.filter(column => !column.hidden).length;
|
|
435
508
|
if (!residue && columnIndex >= columns) {
|
|
436
509
|
return;
|
|
437
510
|
}
|
|
438
|
-
|
|
511
|
+
/* 열 번호는 감는다 — 끝에서 오른쪽으로 가면 첫 열로 돌아온다(residue). */
|
|
512
|
+
return row.children.item((columnIndex + columns) % columns);
|
|
513
|
+
}
|
|
514
|
+
/**
|
|
515
|
+
* 칸의 **팝업 표식**을 눌렀다 — 그 칸의 편집을 연다.
|
|
516
|
+
*
|
|
517
|
+
* 더블클릭과 같은 자리로 들어간다. 표식은 한 번 누르는 22px 표적이고, 33px 줄에서 더블클릭을
|
|
518
|
+
* 겨누는 것보다 쉽다. 더블클릭도 그대로 둔다 — 이미 아는 사람의 길을 막지 않는다.
|
|
519
|
+
*/
|
|
520
|
+
onStartEdit(e) {
|
|
521
|
+
const { row, column } = e.detail || {};
|
|
522
|
+
if (isNaN(row) || isNaN(column)) {
|
|
523
|
+
return;
|
|
524
|
+
}
|
|
525
|
+
this.startEditTarget(row, column);
|
|
439
526
|
}
|
|
440
527
|
startEditTarget(row, column, valueWith = null) {
|
|
441
528
|
var { editable } = this.columns.filter(column => !column.hidden)[column].record;
|
|
@@ -744,7 +831,7 @@ let DataGridBody = class DataGridBody extends LitElement {
|
|
|
744
831
|
this.focusedField.isWorking = false;
|
|
745
832
|
}
|
|
746
833
|
}
|
|
747
|
-
/* 엑셀식 타일링: 타겟 선택 영역이 소스 크기의 정수배이면 그 차원으로
|
|
834
|
+
/* 엑셀식 타일링: 타겟 선택 영역이 소스 크기의 정수배이면 그 차원으로 반복하고, 아니면 한 번만 붙여 넣는다 (차원마다 따로 판단) */
|
|
748
835
|
const trs = Array.from(table.querySelectorAll('tr')).filter((r) => r instanceof HTMLTableRowElement);
|
|
749
836
|
if (!trs.length) {
|
|
750
837
|
return;
|
|
@@ -864,7 +951,7 @@ let DataGridBody = class DataGridBody extends LitElement {
|
|
|
864
951
|
}
|
|
865
952
|
else if (type === 'text/plain') {
|
|
866
953
|
/* TSV 포맷 파싱: 줄바꿈으로 행 분리, 탭으로 열 분리 (엑셀 등 외부 소스 붙여넣기 지원) */
|
|
867
|
-
/* CRLF 정규화 + 마지막 빈 줄 제거 (엑셀 TSV는 개행으로
|
|
954
|
+
/* CRLF 정규화 + 마지막 빈 줄 제거 (엑셀 TSV 는 개행으로 끝난다. 빈 행이 소스 크기 판단을 깨뜨린다) */
|
|
868
955
|
const tsvRows = content
|
|
869
956
|
.replace(/\r\n/g, '\n')
|
|
870
957
|
.replace(/\n$/, '')
|
|
@@ -873,7 +960,7 @@ let DataGridBody = class DataGridBody extends LitElement {
|
|
|
873
960
|
if (!tsvRows.length) {
|
|
874
961
|
return;
|
|
875
962
|
}
|
|
876
|
-
/* 엑셀식 타일링: 타겟 선택 영역이 소스 크기의 정수배이면 그 차원으로
|
|
963
|
+
/* 엑셀식 타일링: 타겟 선택 영역이 소스 크기의 정수배이면 그 차원으로 반복하고, 아니면 한 번만 붙여 넣는다 (차원마다 따로 판단) */
|
|
877
964
|
const srcRows = tsvRows.length;
|
|
878
965
|
const srcCols = Math.max(...tsvRows.map(r => r.length));
|
|
879
966
|
const repeatR = srcRows > 0 && tgtRows % srcRows === 0 ? tgtRows / srcRows : 1;
|
|
@@ -962,6 +1049,18 @@ let DataGridBody = class DataGridBody extends LitElement {
|
|
|
962
1049
|
return record;
|
|
963
1050
|
}, {});
|
|
964
1051
|
}
|
|
1052
|
+
/**
|
|
1053
|
+
* IME buffer 가 지금 어느 칸을 대신하고 있는지 — 스크린 리더가 읽을 이름.
|
|
1054
|
+
*
|
|
1055
|
+
* 이름의 출처는 column 정의 하나다(columnText). 포커스가 아직 아무 칸에도 없거나 이름을 구할 수
|
|
1056
|
+
* 없으면 「칸 입력」으로 물러난다 — 이름을 지어내지 않고, 그렇다고 이름을 비우지도 않는다.
|
|
1057
|
+
*/
|
|
1058
|
+
_imeBufferLabel(column) {
|
|
1059
|
+
const name = columnText(column);
|
|
1060
|
+
return name
|
|
1061
|
+
? i18next.t('text.grid-cell-input', { name, defaultValue: name })
|
|
1062
|
+
: i18next.t('text.grid-cell-input-plain', { defaultValue: 'cell input' });
|
|
1063
|
+
}
|
|
965
1064
|
/** IME buffer를 포커스된 셀 위에 위치시킨다 */
|
|
966
1065
|
_positionIMEBuffer() {
|
|
967
1066
|
var _a;
|
|
@@ -1114,7 +1213,7 @@ DataGridBody.styles = [
|
|
|
1114
1213
|
}
|
|
1115
1214
|
|
|
1116
1215
|
@media (pointer: coarse) {
|
|
1117
|
-
/* 터치
|
|
1216
|
+
/* 터치 기기에서는 길게 누르면 텍스트를 선택할 수 있게 둔다 */
|
|
1118
1217
|
:host {
|
|
1119
1218
|
user-select: auto;
|
|
1120
1219
|
}
|
|
@@ -1158,6 +1257,9 @@ __decorate([
|
|
|
1158
1257
|
__decorate([
|
|
1159
1258
|
property({ type: Object })
|
|
1160
1259
|
], DataGridBody.prototype, "focused", void 0);
|
|
1260
|
+
__decorate([
|
|
1261
|
+
property({ type: Number })
|
|
1262
|
+
], DataGridBody.prototype, "ariaRowIndexBase", void 0);
|
|
1161
1263
|
__decorate([
|
|
1162
1264
|
property({ type: Object })
|
|
1163
1265
|
], DataGridBody.prototype, "editTarget", void 0);
|