@operato/data-grist 1.5.28 → 1.5.30
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 +20 -0
- package/dist/src/configure/column-builder.js +1 -1
- package/dist/src/configure/column-builder.js.map +1 -1
- package/dist/src/data-card/data-card.d.ts +1 -1
- package/dist/src/data-card/record-card.d.ts +1 -1
- package/dist/src/data-grid/data-grid-body.d.ts +1 -1
- package/dist/src/data-grid/data-grid-body.js +15 -2
- package/dist/src/data-grid/data-grid-body.js.map +1 -1
- package/dist/src/data-grid/data-grid-footer.d.ts +1 -1
- package/dist/src/data-grid/data-grid-header.d.ts +4 -4
- package/dist/src/data-grid/data-grid.d.ts +1 -1
- package/dist/src/data-grid/event-handlers/data-grid-body-keydown-handler.js +3 -0
- package/dist/src/data-grid/event-handlers/data-grid-body-keydown-handler.js.map +1 -1
- package/dist/src/data-grist.d.ts +1 -1
- package/dist/src/data-list/data-list.d.ts +1 -1
- package/dist/src/data-list/record-partial.d.ts +1 -1
- package/dist/src/data-report/data-report-body.d.ts +1 -1
- package/dist/src/data-report/data-report-component.d.ts +1 -1
- package/dist/src/data-report.d.ts +1 -1
- package/dist/src/editors/ox-grist-editor-checkbox.d.ts +1 -1
- package/dist/src/editors/ox-grist-editor-color.d.ts +1 -1
- package/dist/src/editors/ox-grist-editor-date.d.ts +1 -1
- package/dist/src/editors/ox-grist-editor-datetime.d.ts +1 -1
- package/dist/src/editors/ox-grist-editor-email.d.ts +1 -1
- package/dist/src/editors/ox-grist-editor-file.d.ts +1 -1
- package/dist/src/editors/ox-grist-editor-image.d.ts +1 -1
- package/dist/src/editors/ox-grist-editor-month.d.ts +1 -1
- package/dist/src/editors/ox-grist-editor-multiple-select.d.ts +1 -1
- package/dist/src/editors/ox-grist-editor-number.d.ts +1 -1
- package/dist/src/editors/ox-grist-editor-password.d.ts +1 -1
- package/dist/src/editors/ox-grist-editor-select.d.ts +1 -1
- package/dist/src/editors/ox-grist-editor-tel.d.ts +1 -1
- package/dist/src/editors/ox-grist-editor-text.d.ts +1 -1
- package/dist/src/editors/ox-grist-editor-textarea.d.ts +1 -1
- package/dist/src/editors/ox-grist-editor-time.d.ts +1 -1
- package/dist/src/editors/ox-grist-editor-week.d.ts +1 -1
- package/dist/src/editors/ox-grist-editor.d.ts +2 -2
- package/dist/src/empty-note.d.ts +1 -1
- package/dist/src/record-view/event-handlers/record-view-body-click-handler.js +6 -1
- package/dist/src/record-view/event-handlers/record-view-body-click-handler.js.map +1 -1
- package/dist/src/record-view/record-creator.d.ts +1 -1
- package/dist/src/record-view/record-view-body.d.ts +2 -2
- package/dist/src/record-view/record-view-body.js +3 -0
- package/dist/src/record-view/record-view-body.js.map +1 -1
- package/dist/src/record-view/record-view.d.ts +1 -1
- package/dist/src/renderers/ox-grist-renderer-boolean.js +5 -1
- package/dist/src/renderers/ox-grist-renderer-boolean.js.map +1 -1
- package/dist/src/renderers/ox-grist-renderer-progress.d.ts +1 -1
- package/dist/src/renderers/ox-grist-renderer.d.ts +2 -2
- package/dist/src/types.d.ts +1 -1
- package/dist/src/types.js.map +1 -1
- package/dist/stories/default-grid.stories.d.ts +25 -0
- package/dist/stories/default-grid.stories.js +223 -0
- package/dist/stories/default-grid.stories.js.map +1 -0
- package/dist/stories/dynamic-editable.stories.d.ts +25 -0
- package/dist/stories/dynamic-editable.stories.js +223 -0
- package/dist/stories/dynamic-editable.stories.js.map +1 -0
- package/dist/stories/dynamic-enabled-property.stories.d.ts +25 -0
- package/dist/stories/dynamic-enabled-property.stories.js +223 -0
- package/dist/stories/dynamic-enabled-property.stories.js.map +1 -0
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +2 -2
- package/src/configure/column-builder.ts +1 -2
- package/src/data-grid/data-grid-body.ts +15 -2
- package/src/data-grid/event-handlers/data-grid-body-keydown-handler.ts +3 -0
- package/src/record-view/event-handlers/record-view-body-click-handler.ts +6 -1
- package/src/record-view/record-view-body.ts +4 -0
- package/src/renderers/ox-grist-renderer-boolean.ts +6 -1
- package/src/types.ts +1 -1
- package/stories/dynamic-editable.stories.ts +254 -0
- package/dist/src/renderers/ox-grist-renderer-text copy.d.ts +0 -2
- package/dist/src/renderers/ox-grist-renderer-text copy.js +0 -21
- package/dist/src/renderers/ox-grist-renderer-text copy.js.map +0 -1
package/CHANGELOG.md
CHANGED
|
@@ -3,6 +3,26 @@
|
|
|
3
3
|
All notable changes to this project will be documented in this file.
|
|
4
4
|
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
|
5
5
|
|
|
6
|
+
### [1.5.30](https://github.com/hatiolab/operato/compare/v1.5.29...v1.5.30) (2023-11-13)
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
### :bug: Bug Fix
|
|
10
|
+
|
|
11
|
+
* keydown 한글 입력 후 이벤트 2번 들어오는 증상 수정 ([b65e58c](https://github.com/hatiolab/operato/commit/b65e58cf5f03a0aa1f34b8868bbe59cca4c6584d))
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
### [1.5.29](https://github.com/hatiolab/operato/compare/v1.5.28...v1.5.29) (2023-11-10)
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
### :bug: Bug Fix
|
|
19
|
+
|
|
20
|
+
* dynamic-editable data-grist storybook ([4192ed2](https://github.com/hatiolab/operato/commit/4192ed2c2cc832fcfc1b23bc1438730331be9b96))
|
|
21
|
+
* editable, boolean이랑 함수로 변환 ([b3c0c0b](https://github.com/hatiolab/operato/commit/b3c0c0bb652029e1eb06f8109d11eea90480f4e3))
|
|
22
|
+
* grid "editable" part modify ([c124bc6](https://github.com/hatiolab/operato/commit/c124bc6aecd311cf8c84240fb366fc6d6d37f51e))
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
|
|
6
26
|
### [1.5.28](https://github.com/hatiolab/operato/compare/v1.5.27...v1.5.28) (2023-11-08)
|
|
7
27
|
|
|
8
28
|
**Note:** Version bump only for package @operato/data-grist
|
|
@@ -42,7 +42,7 @@ export const buildColumn = (column) => {
|
|
|
42
42
|
*/
|
|
43
43
|
var { renderer: recordRenderer, editor, editable, classifier } = record || {};
|
|
44
44
|
recordRenderer = getRenderer(recordRenderer || column.type);
|
|
45
|
-
if (editable && typeof editor !== 'function') {
|
|
45
|
+
if (editable !== false && typeof editor !== 'function') {
|
|
46
46
|
editor = getEditor(column.type);
|
|
47
47
|
}
|
|
48
48
|
if (typeof classifier !== 'function') {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"column-builder.js","sourceRoot":"","sources":["../../../src/configure/column-builder.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,MAAM,UAAU,CAAA;AAC/B,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAA;AACtC,OAAO,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAA;AACjD,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAA;AAClD,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAA;AAG1C,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,MAAW,EAAgB,EAAE;IACvD,IAAI,QAAQ,GAAiB,EAAE,GAAG,MAAM,EAAE,CAAA;IAE1C,IAAI,MAAM,CAAC,IAAI,IAAI,QAAQ,EAAE;QAC3B,QAAQ,GAAG,oBAAoB,CAAC,MAAM,CAAC,CAAA;KACxC;IAED,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,QAAQ,CAAA;IAEhE,YAAY;IAEZ,IAAI,OAAO,MAAM,IAAI,QAAQ,EAAE;QAC7B,QAAQ,CAAC,MAAM,GAAG;YAChB,QAAQ,EAAE,GAAG,EAAE,CAAC,MAAM;SACvB,CAAA;KACF;IAED,WAAW;IACX,IAAI,KAAK,EAAE;QACT,IAAI,IAAI,GAAG,OAAO,KAAK,CAAA;QACvB,QAAQ,IAAI,EAAE;YACZ,KAAK,SAAS;gBACZ,IAAI,KAAK,GAAG,OAAO,MAAM,IAAI,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAA;gBACrD,QAAQ,CAAC,KAAK,GAAG;oBACf,QAAQ,EAAE,GAAG,EAAE,CAAC,KAAK;iBACtB,CAAA;gBACD,MAAK;YACP,KAAK,QAAQ;gBACX,QAAQ,CAAC,KAAK,GAAG;oBACf,QAAQ,EAAE,GAAG,EAAE,CAAC,KAAK;iBACtB,CAAA;gBACD,MAAK;YACP;gBACE,QAAQ,CAAC,KAAK,GAAG,KAAK,CAAA;SACzB;KACF;SAAM;QACL,QAAQ,CAAC,KAAK,GAAG,KAAK,CAAA;KACvB;IAED;;OAEG;IACH,IAAI,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,EAAE,QAAQ,EAAE,UAAU,EAAE,GAAG,MAAM,IAAI,EAAE,CAAA;IAE7E,cAAc,GAAG,WAAW,CAAC,cAAc,IAAI,MAAM,CAAC,IAAI,CAAC,CAAA;
|
|
1
|
+
{"version":3,"file":"column-builder.js","sourceRoot":"","sources":["../../../src/configure/column-builder.ts"],"names":[],"mappings":"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","sourcesContent":["import { FilterConfigObject, FilterOperator } from '..'\nimport { NOOP } from '../const'\nimport { getEditor } from '../editors'\nimport { generateGutterColumn } from '../gutters'\nimport { getGristEventHandler } from '../handlers'\nimport { getRenderer } from '../renderers'\nimport { ColumnConfig } from '../types'\n\nexport const buildColumn = (column: any): ColumnConfig => {\n var compiled: ColumnConfig = { ...column }\n\n if (column.type == 'gutter') {\n compiled = generateGutterColumn(column)\n }\n\n var { name, header, record, handlers, label, filter } = compiled\n\n /* header */\n\n if (typeof header == 'string') {\n compiled.header = {\n renderer: () => header\n }\n }\n\n /* label */\n if (label) {\n let type = typeof label\n switch (type) {\n case 'boolean':\n let title = typeof header == 'string' ? header : name\n compiled.label = {\n renderer: () => title\n }\n break\n case 'string':\n compiled.label = {\n renderer: () => label\n }\n break\n default:\n compiled.label = label\n }\n } else {\n compiled.label = false\n }\n\n /*\n * record\n */\n var { renderer: recordRenderer, editor, editable, classifier } = record || {}\n\n recordRenderer = getRenderer(recordRenderer || column.type)\n if (editable !== false && typeof editor !== 'function') {\n editor = getEditor(column.type)\n }\n\n if (typeof classifier !== 'function') {\n classifier = NOOP\n }\n\n compiled.record = {\n ...record,\n classifier,\n renderer: recordRenderer,\n editor\n }\n\n /* filter */\n if (filter) {\n let type = typeof filter\n switch (type) {\n case 'boolean':\n compiled.filter = {\n type: column.type,\n operator: 'eq'\n }\n break\n case 'string':\n compiled.filter = {\n type: column.type,\n operator: filter as FilterOperator\n }\n break\n default:\n compiled.filter = {\n //@ts-ignore\n type: column.type,\n operator: 'eq',\n ...(filter as FilterConfigObject)\n }\n }\n }\n\n /* handler */\n var { click, dblclick, focus } = handlers || {}\n\n compiled.handlers = {\n click: click && getGristEventHandler(click),\n dblclick: dblclick && getGristEventHandler(dblclick),\n focus: focus && getGristEventHandler(focus)\n }\n\n return compiled\n}\n"]}
|
|
@@ -13,7 +13,7 @@ export declare class DataCard extends DataManipulator {
|
|
|
13
13
|
private _page;
|
|
14
14
|
firstUpdated(changes: PropertyValues<this>): void;
|
|
15
15
|
updated(changes: PropertyValues<this>): void;
|
|
16
|
-
render(): import("lit
|
|
16
|
+
render(): import("lit").TemplateResult<1>;
|
|
17
17
|
gotoTop(e: Event): void;
|
|
18
18
|
get pullToRefreshTarget(): this;
|
|
19
19
|
}
|
|
@@ -17,6 +17,6 @@ export declare class RecordCard extends LitElement {
|
|
|
17
17
|
private dblclickHandler;
|
|
18
18
|
firstUpdated(): void;
|
|
19
19
|
updated(changes: PropertyValues<this>): void;
|
|
20
|
-
render(): import("lit
|
|
20
|
+
render(): import("lit").TemplateResult<1>;
|
|
21
21
|
popupRecordView(): void;
|
|
22
22
|
}
|
|
@@ -30,7 +30,7 @@ export declare class DataGridBody extends LitElement {
|
|
|
30
30
|
private _recordViewRow?;
|
|
31
31
|
resetEdit(): void;
|
|
32
32
|
handleOnScroll(e: WheelEvent): void;
|
|
33
|
-
render(): import("lit
|
|
33
|
+
render(): import("lit").TemplateResult<1>;
|
|
34
34
|
firstUpdated(): void;
|
|
35
35
|
getFieldByIndex(rowIndex: number, columnIndex: number, residue?: boolean): DataGridField | undefined;
|
|
36
36
|
_onWheelEvent(e: WheelEvent): void;
|
|
@@ -241,6 +241,11 @@ let DataGridBody = class DataGridBody extends LitElement {
|
|
|
241
241
|
}
|
|
242
242
|
startEditTarget(row, column) {
|
|
243
243
|
var { editable } = this.columns.filter(column => !column.hidden)[column].record;
|
|
244
|
+
if (typeof editable === 'function') {
|
|
245
|
+
const curRow = this.data.records[row] || {};
|
|
246
|
+
const curCol = this.columns[column + 1];
|
|
247
|
+
editable = editable.call(this, curRow[curCol.name], curCol, curRow, row, this);
|
|
248
|
+
}
|
|
244
249
|
if (!editable) {
|
|
245
250
|
return;
|
|
246
251
|
}
|
|
@@ -423,6 +428,10 @@ let DataGridBody = class DataGridBody extends LitElement {
|
|
|
423
428
|
const targetColumn = columns[column + columnIndex];
|
|
424
429
|
const type = item.getAttribute('type') || 'string';
|
|
425
430
|
var value = item.textContent;
|
|
431
|
+
let { editable } = targetColumn.record;
|
|
432
|
+
if (typeof editable === 'function') {
|
|
433
|
+
editable = editable.call(this, value, targetColumn, targetRecord, row, this);
|
|
434
|
+
}
|
|
426
435
|
switch (type) {
|
|
427
436
|
case 'object':
|
|
428
437
|
try {
|
|
@@ -439,7 +448,7 @@ let DataGridBody = class DataGridBody extends LitElement {
|
|
|
439
448
|
default:
|
|
440
449
|
value = value;
|
|
441
450
|
}
|
|
442
|
-
if (targetColumn && !targetColumn.gutterName &&
|
|
451
|
+
if (targetColumn && !targetColumn.gutterName && editable) {
|
|
443
452
|
this.dispatchEvent(new CustomEvent('field-change', {
|
|
444
453
|
bubbles: true,
|
|
445
454
|
composed: true,
|
|
@@ -459,7 +468,11 @@ let DataGridBody = class DataGridBody extends LitElement {
|
|
|
459
468
|
else if (!selection && type === 'text/plain') {
|
|
460
469
|
const targetRecord = records[row] || { __dirty__: '+' };
|
|
461
470
|
const targetColumn = columns[column];
|
|
462
|
-
|
|
471
|
+
let { editable } = targetColumn.record;
|
|
472
|
+
if (typeof editable === 'function') {
|
|
473
|
+
editable = editable.call(this, content, targetColumn, targetRecord, row, this);
|
|
474
|
+
}
|
|
475
|
+
if (targetColumn && !targetColumn.gutterName && editable) {
|
|
463
476
|
this.dispatchEvent(new CustomEvent('field-change', {
|
|
464
477
|
bubbles: true,
|
|
465
478
|
composed: true,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"data-grid-body.js","sourceRoot":"","sources":["../../../src/data-grid/data-grid-body.ts"],"names":[],"mappings":"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","sourcesContent":["import './data-grid-field'\nimport './data-grid-accum-field'\n\nimport { css, html, LitElement, nothing, PropertyValues } from 'lit'\nimport { customElement, property, query, state } from 'lit/decorators.js'\nimport debounce from 'lodash-es/debounce'\n\nimport { TooltipStyles } from '@operato/styles'\nimport { sleep } from '@operato/utils'\n\nimport { ZERO_CONFIG, ZERO_DATA } from '../configure/zero-config'\nimport { RecordViewHandler } from '../record-view/record-view-handler'\nimport { ColumnConfig, GristConfig, GristData, GristRecord } from '../types'\nimport { supportsPassive } from '../utils'\nimport { dataGridBodyStyle } from './data-grid-body-style'\nimport { DataGridField } from './data-grid-field'\nimport { dataGridBodyClickHandler } from './event-handlers/data-grid-body-click-handler'\nimport { dataGridBodyDblclickHandler } from './event-handlers/data-grid-body-dblclick-handler'\nimport { dataGridBodyFocusChangeHandler } from './event-handlers/data-grid-body-focus-change-handler'\nimport { dataGridBodyKeydownHandler } from './event-handlers/data-grid-body-keydown-handler'\nimport { accumulate } from '../accumulator/accumulator'\n\nconst THRESHOLD = 300\nconst DATA_PADDING = 3\nconst ROW_HEIGHT = 40\nconst GAP_SIZE = 1\n\nfunction calcScrollPos(parent: DataGridBody, child: Element) {\n /* getBoundingClientRect는 safari에서 스크롤 상태에서 다른 브라우저와는 다른 값을 리턴함 - 사파리는 약간 이상 작동함. */\n var { top: ct, left: cl, right: cr, bottom: cb } = child.getBoundingClientRect()\n var { top: pt, left: pl, right: pr, bottom: pb } = parent.getBoundingClientRect()\n var { scrollLeft, scrollTop } = parent\n var scrollbarWidth = parent.clientWidth - parent.offsetWidth\n var scrollbarHeight = parent.clientHeight - parent.offsetHeight\n\n return {\n left: cl < pl ? scrollLeft - (pl - cl) : cr > pr ? scrollLeft - (pr - cr) - scrollbarWidth : undefined,\n top: ct < pt ? scrollTop - (pt - ct) : cb > pb ? scrollTop - (pb - cb) - scrollbarHeight : undefined\n }\n}\n\nconst ZERO_FOCUS = {\n row: 0,\n column: 0\n}\n\n@customElement('ox-grid-body')\nexport class DataGridBody extends LitElement {\n debounce = debounce((scrollTop: number, clientHeight: number) => {\n const maxVisibleRows = Math.ceil(clientHeight / (ROW_HEIGHT + GAP_SIZE))\n const from = Math.max(0, Math.floor(scrollTop / (ROW_HEIGHT + GAP_SIZE)) - maxVisibleRows * DATA_PADDING)\n const to = Math.min(this.data.records?.length || 0, from + maxVisibleRows * (DATA_PADDING * 2 + 1))\n\n this.from = from\n this.to = to\n }, THRESHOLD)\n\n static styles = [\n TooltipStyles,\n dataGridBodyStyle,\n css`\n [select-block] {\n position: absolute;\n left: var(--select-box-left);\n top: var(--select-box-top);\n width: var(--select-box-width);\n height: var(--select-box-height);\n border: var(--grid-record-focused-cell-border);\n background-image: var(--focused-background-image);\n pointer-events: none;\n }\n `\n ]\n\n @property({ type: Object }) config: GristConfig = ZERO_CONFIG\n @property({ type: Array }) columns: ColumnConfig[] = []\n @property({ type: Object }) data: GristData = ZERO_DATA\n @property({ type: Object }) focused: { row: number; column: number } = ZERO_FOCUS\n @property({ type: Object }) editTarget: { row: number; column: number } | null = null\n @property({ type: Number }) from = -1\n @property({ type: Number }) to = -1\n\n @state() _selectBlock?: {\n start: DataGridField\n end?: DataGridField\n }\n\n @query('[select-block]') selectBlock?: HTMLDivElement\n @query('ox-grid-field[focused]') focusedField?: DataGridField\n\n private _focusedListener?: (e: KeyboardEvent) => void\n private _recordView?: any\n private _recordViewRow?: number\n\n resetEdit() {\n this.editTarget = null\n }\n\n handleOnScroll(e: WheelEvent) {\n const { scrollTop, clientHeight } = e.target as HTMLElement\n this.debounce(scrollTop, clientHeight)\n }\n\n // issue #13\n // renderOptimisticRow() {\n // return\n // }\n\n render() {\n // block이 선택되어 있으면, focused row/column은 표현하지 않는다.\n var { row: focusedRow, column: focusedColumn } = (!this._selectBlock && this.focused) || {}\n var { row: editingRow, column: editingColumn } = this.editTarget || {}\n\n var columns = this.columns.filter(column => !column.hidden)\n var data = this.data\n var { records } = data\n var { appendable, classifier, accumulator } = this.config.rows\n const { start, end } = this._selectBlock || {}\n\n /*\n * 레코드를 추가할 수 있는 경우에는 항상 추가 레코드를 보여준다.\n * 만약, 이전 방식처럼, 커서를 옮겨야만 새로운 레코드가 보이게 하고 싶다면, 조건부를 다음의 코드로 대체한다.\n * -- if (focusedRow == records.length)\n */\n if (appendable) {\n records = [...records, { __dirty__: '+' }]\n }\n\n if (accumulator) {\n var accumRecord = this.buildAccumulatorRecord()\n }\n\n return html`\n ${records.map((record, idxRow) => {\n var attrFocusedRow = idxRow === focusedRow\n var attrSelected = record['__selected__']\n var attrOdd = idxRow % 2\n var dirtyFields = record['__dirtyfields__'] || {}\n var { emphasized } = classifier.call(null, record, idxRow) || {}\n\n return html`\n ${columns.map(\n (column, idxColumn) => html`\n <ox-grid-field\n .data=${data}\n .rowIndex=${idxRow}\n .columnIndex=${idxColumn}\n .column=${column}\n .record=${record}\n .emphasized=${emphasized}\n ?gutter=${column.type == 'gutter'}\n ?odd=${attrOdd}\n ?focused-row=${attrFocusedRow}\n ?selected-row=${attrSelected}\n ?focused=${idxRow === focusedRow && idxColumn === focusedColumn}\n ?editing=${idxRow === editingRow && idxColumn === editingColumn}\n .value=${record[column.name]}\n ?dirty=${!!dirtyFields[column.name]}\n ></ox-grid-field>\n `\n )}\n <ox-grid-field\n .data=${data}\n .rowIndex=${idxRow}\n .columnIndex=${-1}\n .record=${record}\n .emphasized=${emphasized}\n ?odd=${attrOdd}\n ?focused-row=${attrFocusedRow}\n ?selected-row=${attrSelected}\n ></ox-grid-field>\n `\n })}\n ${accumulator\n ? html`\n ${columns.map(\n (column, idxColumn) => html`\n <ox-grid-accum-field\n .data=${data}\n .columnIndex=${idxColumn}\n .rowIndex=${records.length}\n .column=${column}\n .record=${accumRecord!}\n .value=${accumRecord[column.name]}\n ></ox-grid-accum-field>\n `\n )}\n <ox-grid-accum-field\n .data=${data}\n .columnIndex=${-1}\n .rowIndex=${records.length}\n .record=${accumRecord!}\n ></ox-grid-accum-field>\n `\n : nothing}\n ${start && end && start !== end ? html` <div select-block></div> ` : html``}\n <slot></slot>\n `\n }\n\n firstUpdated() {\n // TODO issue #13\n // this.addEventListener('scroll', this.handleOnScroll.bind(this))\n\n /* focus() 를 받을 수 있도록 함. */\n this.setAttribute('tabindex', '-1')\n\n /*\n * focusout 으로 property를 변경시키는 경우, focusout에 의해 update가 발생하는 경우에는,\n * 그리드 내부의 컴포넌트가 갱신되는 현상을 초래하게 된다.\n * 따라서, focusout 핸들러에서 update를 유발하는 코드는 강력하게 금지시킨다.\n */\n this.addEventListener('focusout', e => {\n if (this._focusedListener) {\n this.removeEventListener('keydown', this._focusedListener)\n delete this._focusedListener\n }\n })\n\n this.addEventListener('focusin', e => {\n if (!this._focusedListener) {\n this._focusedListener = dataGridBodyKeydownHandler.bind(this)\n this.addEventListener('keydown', this._focusedListener)\n }\n })\n\n this.addEventListener('set-select-block', async e => {\n e.stopPropagation()\n\n const { startRow = -1, startColumn = -1, endRow = -1, endColumn = -1 } = ((e as CustomEvent).detail as any) || {}\n\n const start = this.getFieldByIndex(startRow, startColumn) as DataGridField\n const end = this.getFieldByIndex(endRow, endColumn) as DataGridField\n\n this.setSelectBlock(start, end)\n })\n\n this.renderRoot.addEventListener('mousedown', (event: Event) => {\n const e = event as MouseEvent\n this.setSelectBlock()\n\n if (e.buttons !== 1) {\n return\n }\n\n var target = (e.target as Element).closest('ox-grid-field') as DataGridField\n var { rowIndex, columnIndex } = target || {}\n\n this.dispatchEvent(\n new CustomEvent('focus-change', {\n bubbles: true,\n composed: true,\n detail: {\n row: rowIndex,\n column: columnIndex\n }\n })\n )\n\n if (!isNaN(rowIndex) && !isNaN(columnIndex)) {\n this.startEditTarget(rowIndex, columnIndex)\n }\n })\n\n this.renderRoot.addEventListener('mousemove', (event: Event) => {\n const e = event as MouseEvent\n if (e.buttons !== 1) {\n return\n }\n\n const field = e.target as DataGridField\n if (!this._selectBlock) {\n this.setSelectBlock(this.focusedField || field, this.focusedField || field)\n\n return\n }\n\n var { start, end } = this._selectBlock || {}\n\n if (start && end !== field) {\n end = field\n\n this.setSelectBlock(start, end)\n }\n })\n\n this.renderRoot.addEventListener('mouseup', (event: Event) => {})\n\n this.renderRoot.addEventListener('click', dataGridBodyClickHandler.bind(this))\n\n this.renderRoot.addEventListener('dblclick', dataGridBodyDblclickHandler.bind(this))\n this.renderRoot.addEventListener('dblclick', dataGridBodyDblclickHandler.bind(this))\n\n this.addEventListener('focus-change', dataGridBodyFocusChangeHandler.bind(this))\n\n this.addEventListener('wheel', this._onWheelEvent.bind(this), supportsPassive ? { passive: true } : false)\n\n const primaryColor = getComputedStyle(this).getPropertyValue('--primary-color')\n this.style.setProperty(\n '--focused-background-image',\n `url(\"data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='10' height='10'><rect fill='${primaryColor}' x='0' y='0' width='100%' height='100%' style='opacity:.3'/></svg>\")`\n )\n\n this.addEventListener('show-record-view', (e: Event) =>\n this.popupRecordView((e as CustomEvent).detail as { row: number; record: GristRecord })\n )\n }\n\n getFieldByIndex(rowIndex: number, columnIndex: number, residue: boolean = true) {\n if (rowIndex < 0) {\n return\n }\n\n var columns = this.columns.filter(column => !column.hidden).length\n if (!residue && columnIndex >= columns) {\n return\n }\n\n return this.renderRoot.children.item(\n rowIndex * (columns + 1) /* 1 means last dummy column */ + ((columnIndex + columns) % columns)\n ) as DataGridField\n }\n\n _onWheelEvent(e: WheelEvent) {\n if (this.scrollHeight <= this.clientHeight) {\n var delta = Math.max(-1, Math.min(1, e.deltaY || 0))\n this.scrollLeft = Math.max(0, this.scrollLeft - delta * 40)\n supportsPassive || e.preventDefault()\n }\n }\n\n startEditTarget(row: number, column: number) {\n var { editable } = this.columns.filter(column => !column.hidden)[column].record\n\n if (!editable) {\n return\n }\n\n if (this.editTarget && this.editTarget.row == row && this.editTarget.column == column) {\n return\n }\n\n this.editTarget = {\n row,\n column\n }\n }\n\n shouldUpdate(changes: any) {\n if (!changes.has('editTarget')) {\n /*\n * 큰 변화에 대해서는 실제 update가 발생되기 전에 editTarget을 초기화한다.\n */\n this.editTarget = null\n }\n\n return super.shouldUpdate(changes)\n }\n\n updated(changes: PropertyValues<this>) {\n if (changes.has('focused')) {\n let element = this.renderRoot?.querySelector('[focused]')\n if (!element) {\n return\n }\n\n let { top, left } = calcScrollPos(this, element)\n // TODO this.scroll()을 사용하면, 효과가 좋으나 left 계산에 문제가 있는 것 같음.\n // this.scroll({\n // top,\n // left,\n // behavior: 'smooth'\n // })\n if (top !== undefined) {\n this.scrollTop = top\n }\n if (left !== undefined) {\n this.scrollLeft = left\n }\n }\n\n if (this._recordView) {\n this._recordView.record = this.data.records[this._recordViewRow!]\n }\n }\n\n focus() {\n super.focus()\n\n if (this.focused === ZERO_FOCUS) {\n let { records } = this.data\n let row = records.findIndex(record => record['__selected__'])\n\n this.focused = { row: row == -1 ? 0 : row, column: 0 }\n }\n }\n\n popupRecordView({ record, row }: { row: number; record: GristRecord }) {\n var titleField = this.config.list.fields[0] || 'name'\n var title = record[titleField]\n\n /* field가 오브젝트형인 경우에는 렌더러를 타이틀로 사용한다. */\n if (typeof title == 'object') {\n var column = this.config.columns.find(column => column.name == titleField)\n title = column?.record.renderer(title, column, record, row, this /* cautious */)\n }\n\n this._recordViewRow = row\n this._recordView = RecordViewHandler(\n this.config.columns,\n record,\n row,\n this,\n {\n title\n },\n () => {\n delete this._recordView\n delete this._recordViewRow\n }\n )\n }\n\n getSelectedBlockValues(): Array<Array<any>> | any | undefined {\n var { start, end } = this._selectBlock || {}\n\n if (!(start && end)) {\n start = this.focusedField\n\n end = start\n }\n\n if (start && end) {\n const startRowIndex = start.rowIndex < end.rowIndex ? start.rowIndex : end.rowIndex\n const endRowIndex = start.rowIndex < end.rowIndex ? end.rowIndex : start.rowIndex\n const startColumnIndex = start.columnIndex < end.columnIndex ? start.columnIndex : end.columnIndex\n const endColumnIndex = start.columnIndex < end.columnIndex ? end.columnIndex : start.columnIndex\n\n const columnArray = new Array(endColumnIndex - startColumnIndex + 1).fill(startColumnIndex)\n const columns = this.columns.filter(column => !column.hidden)\n\n return (\n '<table>' +\n new Array(endRowIndex - startRowIndex + 1)\n .fill(startRowIndex)\n .map((start, index) => {\n const rowIndex = start + index\n const record = this.data.records[rowIndex]\n\n const tds = columnArray\n .map((start, index) => {\n const columnIndex = start + index\n const column = columns[columnIndex]\n const value = record?.[column.name]\n const type = typeof value\n const text =\n value === undefined || value === null ? '' : type == 'object' ? JSON.stringify(value) : value\n\n return `<td type=${type}>${text}</td>`\n })\n .join('')\n return `<tr>${tds}</tr>`\n })\n .join('') +\n '</table>'\n )\n }\n }\n\n async copy() {\n const copied = this.getSelectedBlockValues()\n\n await navigator.clipboard.write([\n new ClipboardItem({\n 'text/html': new Blob([copied], { type: 'text/html' }),\n 'text/plain': new Blob([copied], { type: 'text/plain' })\n })\n ])\n\n const selectBlock = this.selectBlock || this.focusedField\n if (selectBlock) {\n const backgroundColor = selectBlock.style.backgroundColor\n const opacity = selectBlock.style.opacity\n\n selectBlock.setAttribute('data-tooltip', 'copied to clipboard!')\n selectBlock.style.backgroundColor = 'red'\n selectBlock.style.opacity = '0.5'\n await sleep(500)\n selectBlock.removeAttribute('data-tooltip')\n selectBlock.style.backgroundColor = backgroundColor\n selectBlock.style.opacity = opacity\n }\n }\n\n async paste() {\n try {\n const selection = window.getSelection()\n\n const clipboardItems = await navigator.clipboard.read()\n if (!clipboardItems) {\n return\n }\n\n var type: string | undefined\n var content: string | undefined\n\n for (const clipboardItem of clipboardItems) {\n try {\n var blob = await clipboardItem.getType('text/html')\n content = blob && (await blob.text())\n type = 'text/html'\n } catch (e) {\n try {\n blob = await clipboardItem.getType('text/plain')\n content = blob && (await blob.text())\n type = 'text/plain'\n } catch (e) {}\n }\n\n break\n }\n\n if (!content) {\n return\n }\n\n const { row, column } = this.focused\n const { records } = this.data\n const columns = this.columns.filter(column => !column.hidden)\n\n if (type === 'text/html') {\n const div = document.createElement('div')\n div.innerHTML = content!.trim()\n const table = div.querySelector('table') as HTMLTableElement\n if (!table) {\n return\n }\n\n if (selection) {\n this.resetEdit()\n selection.removeAllRanges()\n await this.updateComplete\n }\n const rows = table.querySelectorAll('tr')\n\n rows.forEach((record, rowIndex) => {\n if (!(record instanceof HTMLTableRowElement)) {\n return\n }\n\n var targetRecord = records[row + rowIndex] || { __dirty__: '+' }\n if (row + rowIndex >= records.length) {\n records.push(targetRecord)\n }\n\n const cells = record.querySelectorAll('td')\n cells.forEach((item, columnIndex) => {\n const targetColumn = columns[column + columnIndex]\n const type = item.getAttribute('type') || 'string'\n var value = item.textContent as any\n\n switch (type) {\n case 'object':\n try {\n value = JSON.parse(value || 'null')\n } catch (err) {}\n break\n case 'boolean':\n value = !!value && !!String(value).match(/true/i)\n break\n case 'number':\n value = Number(value)\n break\n default:\n value = value\n }\n\n if (targetColumn && !targetColumn.gutterName && targetColumn.record.editable) {\n this.dispatchEvent(\n new CustomEvent('field-change', {\n bubbles: true,\n composed: true,\n detail: {\n before: targetRecord[targetColumn.name],\n after: value,\n column: targetColumn,\n record: targetRecord,\n row: row + rowIndex\n }\n })\n )\n }\n })\n })\n\n return\n } else if (!selection && type === 'text/plain') {\n const targetRecord = records[row] || { __dirty__: '+' }\n const targetColumn = columns[column]\n\n if (targetColumn && !targetColumn.gutterName && targetColumn.record.editable) {\n this.dispatchEvent(\n new CustomEvent('field-change', {\n bubbles: true,\n composed: true,\n detail: {\n before: targetRecord[targetColumn.name],\n after: content,\n column: targetColumn,\n record: targetRecord,\n row: row\n }\n })\n )\n }\n }\n } catch (e) {}\n }\n\n setSelectBlock(start?: DataGridField, end?: DataGridField) {\n if (start?.columnIndex == -1) {\n start = this.getFieldByIndex(start.rowIndex, this.columns.filter(column => !column.hidden).length - 1)\n }\n\n if (end?.columnIndex == -1) {\n end = this.getFieldByIndex(end.rowIndex, this.columns.filter(column => !column.hidden).length - 1)\n }\n\n this._selectBlock = start && { start, end }\n\n if (start && end) {\n window.getSelection()?.removeAllRanges()\n\n if (start !== end) {\n const left = start.columnIndex < end.columnIndex ? start : end\n const right = left === start ? end : start\n const top = start.rowIndex < end.rowIndex ? start : end\n const bottom = top === start ? end : start\n\n const { offsetLeft } = left\n const { offsetTop } = top\n const width = right.offsetLeft - offsetLeft + right.offsetWidth\n const height = bottom.offsetTop - offsetTop + bottom.offsetHeight\n\n this.style.setProperty('--select-box-left', offsetLeft - 1 + 'px')\n this.style.setProperty('--select-box-top', offsetTop - 1 + 'px')\n this.style.setProperty('--select-box-width', width + 'px')\n this.style.setProperty('--select-box-height', height + 'px')\n }\n }\n }\n\n buildAccumulatorRecord(): GristRecord {\n var columns = this.columns.filter(column => !column.hidden)\n\n return columns.reduce((record, column) => {\n if (column.accumulator) {\n record[column.name] = accumulate(this.data, column, column.accumulator)\n }\n return record\n }, {} as GristRecord)\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"data-grid-body.js","sourceRoot":"","sources":["../../../src/data-grid/data-grid-body.ts"],"names":[],"mappings":";AAAA,OAAO,mBAAmB,CAAA;AAC1B,OAAO,yBAAyB,CAAA;AAEhC,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,UAAU,EAAE,OAAO,EAAkB,MAAM,KAAK,CAAA;AACpE,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAA;AACzE,OAAO,QAAQ,MAAM,oBAAoB,CAAA;AAEzC,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAA;AAC/C,OAAO,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAA;AAEtC,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAA;AACjE,OAAO,EAAE,iBAAiB,EAAE,MAAM,oCAAoC,CAAA;AAEtE,OAAO,EAAE,eAAe,EAAE,MAAM,UAAU,CAAA;AAC1C,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAA;AAE1D,OAAO,EAAE,wBAAwB,EAAE,MAAM,+CAA+C,CAAA;AACxF,OAAO,EAAE,2BAA2B,EAAE,MAAM,kDAAkD,CAAA;AAC9F,OAAO,EAAE,8BAA8B,EAAE,MAAM,sDAAsD,CAAA;AACrG,OAAO,EAAE,0BAA0B,EAAE,MAAM,iDAAiD,CAAA;AAC5F,OAAO,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAA;AAEvD,MAAM,SAAS,GAAG,GAAG,CAAA;AACrB,MAAM,YAAY,GAAG,CAAC,CAAA;AACtB,MAAM,UAAU,GAAG,EAAE,CAAA;AACrB,MAAM,QAAQ,GAAG,CAAC,CAAA;AAElB,SAAS,aAAa,CAAC,MAAoB,EAAE,KAAc;IACzD,oFAAoF;IACpF,IAAI,EAAE,GAAG,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,GAAG,KAAK,CAAC,qBAAqB,EAAE,CAAA;IAChF,IAAI,EAAE,GAAG,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,GAAG,MAAM,CAAC,qBAAqB,EAAE,CAAA;IACjF,IAAI,EAAE,UAAU,EAAE,SAAS,EAAE,GAAG,MAAM,CAAA;IACtC,IAAI,cAAc,GAAG,MAAM,CAAC,WAAW,GAAG,MAAM,CAAC,WAAW,CAAA;IAC5D,IAAI,eAAe,GAAG,MAAM,CAAC,YAAY,GAAG,MAAM,CAAC,YAAY,CAAA;IAE/D,OAAO;QACL,IAAI,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,UAAU,GAAG,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,UAAU,GAAG,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,cAAc,CAAC,CAAC,CAAC,SAAS;QACtG,GAAG,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,SAAS,GAAG,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,SAAS,GAAG,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,eAAe,CAAC,CAAC,CAAC,SAAS;KACrG,CAAA;AACH,CAAC;AAED,MAAM,UAAU,GAAG;IACjB,GAAG,EAAE,CAAC;IACN,MAAM,EAAE,CAAC;CACV,CAAA;AAGM,IAAM,YAAY,GAAlB,MAAM,YAAa,SAAQ,UAAU;IAArC;;QACL,aAAQ,GAAG,QAAQ,CAAC,CAAC,SAAiB,EAAE,YAAoB,EAAE,EAAE;;YAC9D,MAAM,cAAc,GAAG,IAAI,CAAC,IAAI,CAAC,YAAY,GAAG,CAAC,UAAU,GAAG,QAAQ,CAAC,CAAC,CAAA;YACxE,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,SAAS,GAAG,CAAC,UAAU,GAAG,QAAQ,CAAC,CAAC,GAAG,cAAc,GAAG,YAAY,CAAC,CAAA;YACzG,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,CAAA,MAAA,IAAI,CAAC,IAAI,CAAC,OAAO,0CAAE,MAAM,KAAI,CAAC,EAAE,IAAI,GAAG,cAAc,GAAG,CAAC,YAAY,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAA;YAEnG,IAAI,CAAC,IAAI,GAAG,IAAI,CAAA;YAChB,IAAI,CAAC,EAAE,GAAG,EAAE,CAAA;QACd,CAAC,EAAE,SAAS,CAAC,CAAA;QAmBe,WAAM,GAAgB,WAAW,CAAA;QAClC,YAAO,GAAmB,EAAE,CAAA;QAC3B,SAAI,GAAc,SAAS,CAAA;QAC3B,YAAO,GAAoC,UAAU,CAAA;QACrD,eAAU,GAA2C,IAAI,CAAA;QACzD,SAAI,GAAG,CAAC,CAAC,CAAA;QACT,OAAE,GAAG,CAAC,CAAC,CAAA;IAmlBrC,CAAC;IArkBC,SAAS;QACP,IAAI,CAAC,UAAU,GAAG,IAAI,CAAA;IACxB,CAAC;IAED,cAAc,CAAC,CAAa;QAC1B,MAAM,EAAE,SAAS,EAAE,YAAY,EAAE,GAAG,CAAC,CAAC,MAAqB,CAAA;QAC3D,IAAI,CAAC,QAAQ,CAAC,SAAS,EAAE,YAAY,CAAC,CAAA;IACxC,CAAC;IAED,YAAY;IACZ,0BAA0B;IAC1B,WAAW;IACX,IAAI;IAEJ,MAAM;QACJ,iDAAiD;QACjD,IAAI,EAAE,GAAG,EAAE,UAAU,EAAE,MAAM,EAAE,aAAa,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAA;QAC3F,IAAI,EAAE,GAAG,EAAE,UAAU,EAAE,MAAM,EAAE,aAAa,EAAE,GAAG,IAAI,CAAC,UAAU,IAAI,EAAE,CAAA;QAEtE,IAAI,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA;QAC3D,IAAI,IAAI,GAAG,IAAI,CAAC,IAAI,CAAA;QACpB,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI,CAAA;QACtB,IAAI,EAAE,UAAU,EAAE,UAAU,EAAE,WAAW,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAA;QAC9D,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,YAAY,IAAI,EAAE,CAAA;QAE9C;;;;WAIG;QACH,IAAI,UAAU,EAAE;YACd,OAAO,GAAG,CAAC,GAAG,OAAO,EAAE,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC,CAAA;SAC3C;QAED,IAAI,WAAW,EAAE;YACf,IAAI,WAAW,GAAG,IAAI,CAAC,sBAAsB,EAAE,CAAA;SAChD;QAED,OAAO,IAAI,CAAA;QACP,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE;YAC/B,IAAI,cAAc,GAAG,MAAM,KAAK,UAAU,CAAA;YAC1C,IAAI,YAAY,GAAG,MAAM,CAAC,cAAc,CAAC,CAAA;YACzC,IAAI,OAAO,GAAG,MAAM,GAAG,CAAC,CAAA;YACxB,IAAI,WAAW,GAAG,MAAM,CAAC,iBAAiB,CAAC,IAAI,EAAE,CAAA;YACjD,IAAI,EAAE,UAAU,EAAE,GAAG,UAAU,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,IAAI,EAAE,CAAA;YAEhE,OAAO,IAAI,CAAA;YACP,OAAO,CAAC,GAAG,CACX,CAAC,MAAM,EAAE,SAAS,EAAE,EAAE,CAAC,IAAI,CAAA;;wBAEf,IAAI;4BACA,MAAM;+BACH,SAAS;0BACd,MAAM;0BACN,MAAM;8BACF,UAAU;0BACd,MAAM,CAAC,IAAI,IAAI,QAAQ;uBAC1B,OAAO;+BACC,cAAc;gCACb,YAAY;2BACjB,MAAM,KAAK,UAAU,IAAI,SAAS,KAAK,aAAa;2BACpD,MAAM,KAAK,UAAU,IAAI,SAAS,KAAK,aAAa;yBACtD,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC;yBACnB,CAAC,CAAC,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC;;aAEtC,CACF;;oBAES,IAAI;wBACA,MAAM;2BACH,CAAC,CAAC;sBACP,MAAM;0BACF,UAAU;mBACjB,OAAO;2BACC,cAAc;4BACb,YAAY;;SAE/B,CAAA;QACH,CAAC,CAAC;QACA,WAAW;YACX,CAAC,CAAC,IAAI,CAAA;cACA,OAAO,CAAC,GAAG,CACX,CAAC,MAAM,EAAE,SAAS,EAAE,EAAE,CAAC,IAAI,CAAA;;0BAEf,IAAI;iCACG,SAAS;8BACZ,OAAO,CAAC,MAAM;4BAChB,MAAM;4BACN,WAAY;2BACb,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC;;eAEpC,CACF;;sBAES,IAAI;6BACG,CAAC,CAAC;0BACL,OAAO,CAAC,MAAM;wBAChB,WAAY;;WAEzB;YACH,CAAC,CAAC,OAAO;QACT,KAAK,IAAI,GAAG,IAAI,KAAK,KAAK,GAAG,CAAC,CAAC,CAAC,IAAI,CAAA,4BAA4B,CAAC,CAAC,CAAC,IAAI,CAAA,EAAE;;KAE5E,CAAA;IACH,CAAC;IAED,YAAY;QACV,iBAAiB;QACjB,kEAAkE;QAElE,2BAA2B;QAC3B,IAAI,CAAC,YAAY,CAAC,UAAU,EAAE,IAAI,CAAC,CAAA;QAEnC;;;;WAIG;QACH,IAAI,CAAC,gBAAgB,CAAC,UAAU,EAAE,CAAC,CAAC,EAAE;YACpC,IAAI,IAAI,CAAC,gBAAgB,EAAE;gBACzB,IAAI,CAAC,mBAAmB,CAAC,SAAS,EAAE,IAAI,CAAC,gBAAgB,CAAC,CAAA;gBAC1D,OAAO,IAAI,CAAC,gBAAgB,CAAA;aAC7B;QACH,CAAC,CAAC,CAAA;QAEF,IAAI,CAAC,gBAAgB,CAAC,SAAS,EAAE,CAAC,CAAC,EAAE;YACnC,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE;gBAC1B,IAAI,CAAC,gBAAgB,GAAG,0BAA0B,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;gBAC7D,IAAI,CAAC,gBAAgB,CAAC,SAAS,EAAE,IAAI,CAAC,gBAAgB,CAAC,CAAA;aACxD;QACH,CAAC,CAAC,CAAA;QAEF,IAAI,CAAC,gBAAgB,CAAC,kBAAkB,EAAE,KAAK,EAAC,CAAC,EAAC,EAAE;YAClD,CAAC,CAAC,eAAe,EAAE,CAAA;YAEnB,MAAM,EAAE,QAAQ,GAAG,CAAC,CAAC,EAAE,WAAW,GAAG,CAAC,CAAC,EAAE,MAAM,GAAG,CAAC,CAAC,EAAE,SAAS,GAAG,CAAC,CAAC,EAAE,GAAK,CAAiB,CAAC,MAAc,IAAI,EAAE,CAAA;YAEjH,MAAM,KAAK,GAAG,IAAI,CAAC,eAAe,CAAC,QAAQ,EAAE,WAAW,CAAkB,CAAA;YAC1E,MAAM,GAAG,GAAG,IAAI,CAAC,eAAe,CAAC,MAAM,EAAE,SAAS,CAAkB,CAAA;YAEpE,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,GAAG,CAAC,CAAA;QACjC,CAAC,CAAC,CAAA;QAEF,IAAI,CAAC,UAAU,CAAC,gBAAgB,CAAC,WAAW,EAAE,CAAC,KAAY,EAAE,EAAE;YAC7D,MAAM,CAAC,GAAG,KAAmB,CAAA;YAC7B,IAAI,CAAC,cAAc,EAAE,CAAA;YAErB,IAAI,CAAC,CAAC,OAAO,KAAK,CAAC,EAAE;gBACnB,OAAM;aACP;YAED,IAAI,MAAM,GAAI,CAAC,CAAC,MAAkB,CAAC,OAAO,CAAC,eAAe,CAAkB,CAAA;YAC5E,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,GAAG,MAAM,IAAI,EAAE,CAAA;YAE5C,IAAI,CAAC,aAAa,CAChB,IAAI,WAAW,CAAC,cAAc,EAAE;gBAC9B,OAAO,EAAE,IAAI;gBACb,QAAQ,EAAE,IAAI;gBACd,MAAM,EAAE;oBACN,GAAG,EAAE,QAAQ;oBACb,MAAM,EAAE,WAAW;iBACpB;aACF,CAAC,CACH,CAAA;YAED,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,EAAE;gBAC3C,IAAI,CAAC,eAAe,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAA;aAC5C;QACH,CAAC,CAAC,CAAA;QAEF,IAAI,CAAC,UAAU,CAAC,gBAAgB,CAAC,WAAW,EAAE,CAAC,KAAY,EAAE,EAAE;YAC7D,MAAM,CAAC,GAAG,KAAmB,CAAA;YAC7B,IAAI,CAAC,CAAC,OAAO,KAAK,CAAC,EAAE;gBACnB,OAAM;aACP;YAED,MAAM,KAAK,GAAG,CAAC,CAAC,MAAuB,CAAA;YACvC,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;gBACtB,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,YAAY,IAAI,KAAK,EAAE,IAAI,CAAC,YAAY,IAAI,KAAK,CAAC,CAAA;gBAE3E,OAAM;aACP;YAED,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,YAAY,IAAI,EAAE,CAAA;YAE5C,IAAI,KAAK,IAAI,GAAG,KAAK,KAAK,EAAE;gBAC1B,GAAG,GAAG,KAAK,CAAA;gBAEX,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,GAAG,CAAC,CAAA;aAChC;QACH,CAAC,CAAC,CAAA;QAEF,IAAI,CAAC,UAAU,CAAC,gBAAgB,CAAC,SAAS,EAAE,CAAC,KAAY,EAAE,EAAE,GAAE,CAAC,CAAC,CAAA;QAEjE,IAAI,CAAC,UAAU,CAAC,gBAAgB,CAAC,OAAO,EAAE,wBAAwB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAA;QAE9E,IAAI,CAAC,UAAU,CAAC,gBAAgB,CAAC,UAAU,EAAE,2BAA2B,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAA;QACpF,IAAI,CAAC,UAAU,CAAC,gBAAgB,CAAC,UAAU,EAAE,2BAA2B,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAA;QAEpF,IAAI,CAAC,gBAAgB,CAAC,cAAc,EAAE,8BAA8B,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAA;QAEhF,IAAI,CAAC,gBAAgB,CAAC,OAAO,EAAE,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,eAAe,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAA;QAE1G,MAAM,YAAY,GAAG,gBAAgB,CAAC,IAAI,CAAC,CAAC,gBAAgB,CAAC,iBAAiB,CAAC,CAAA;QAC/E,IAAI,CAAC,KAAK,CAAC,WAAW,CACpB,4BAA4B,EAC5B,2GAA2G,YAAY,uEAAuE,CAC/L,CAAA;QAED,IAAI,CAAC,gBAAgB,CAAC,kBAAkB,EAAE,CAAC,CAAQ,EAAE,EAAE,CACrD,IAAI,CAAC,eAAe,CAAE,CAAiB,CAAC,MAA8C,CAAC,CACxF,CAAA;IACH,CAAC;IAED,eAAe,CAAC,QAAgB,EAAE,WAAmB,EAAE,UAAmB,IAAI;QAC5E,IAAI,QAAQ,GAAG,CAAC,EAAE;YAChB,OAAM;SACP;QAED,IAAI,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,MAAM,CAAA;QAClE,IAAI,CAAC,OAAO,IAAI,WAAW,IAAI,OAAO,EAAE;YACtC,OAAM;SACP;QAED,OAAO,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,CAClC,QAAQ,GAAG,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC,+BAA+B,GAAG,CAAC,CAAC,WAAW,GAAG,OAAO,CAAC,GAAG,OAAO,CAAC,CAC9E,CAAA;IACpB,CAAC;IAED,aAAa,CAAC,CAAa;QACzB,IAAI,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,YAAY,EAAE;YAC1C,IAAI,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC,CAAA;YACpD,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,UAAU,GAAG,KAAK,GAAG,EAAE,CAAC,CAAA;YAC3D,eAAe,IAAI,CAAC,CAAC,cAAc,EAAE,CAAA;SACtC;IACH,CAAC;IAED,eAAe,CAAC,GAAW,EAAE,MAAc;QACzC,IAAI,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,MAAM,CAAA;QAC/E,IAAI,OAAO,QAAQ,KAAK,UAAU,EAAE;YAClC,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,CAAA;YAC3C,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAA;YACvC,QAAQ,GAAG,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,CAAC,CAAA;SAC/E;QAED,IAAI,CAAC,QAAQ,EAAE;YACb,OAAM;SACP;QAED,IAAI,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,IAAI,GAAG,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,IAAI,MAAM,EAAE;YACrF,OAAM;SACP;QAED,IAAI,CAAC,UAAU,GAAG;YAChB,GAAG;YACH,MAAM;SACP,CAAA;IACH,CAAC;IAED,YAAY,CAAC,OAAY;QACvB,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE;YAC9B;;eAEG;YACH,IAAI,CAAC,UAAU,GAAG,IAAI,CAAA;SACvB;QAED,OAAO,KAAK,CAAC,YAAY,CAAC,OAAO,CAAC,CAAA;IACpC,CAAC;IAED,OAAO,CAAC,OAA6B;;QACnC,IAAI,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE;YAC1B,IAAI,OAAO,GAAG,MAAA,IAAI,CAAC,UAAU,0CAAE,aAAa,CAAC,WAAW,CAAC,CAAA;YACzD,IAAI,CAAC,OAAO,EAAE;gBACZ,OAAM;aACP;YAED,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,aAAa,CAAC,IAAI,EAAE,OAAO,CAAC,CAAA;YAChD,0DAA0D;YAC1D,gBAAgB;YAChB,SAAS;YACT,UAAU;YACV,uBAAuB;YACvB,KAAK;YACL,IAAI,GAAG,KAAK,SAAS,EAAE;gBACrB,IAAI,CAAC,SAAS,GAAG,GAAG,CAAA;aACrB;YACD,IAAI,IAAI,KAAK,SAAS,EAAE;gBACtB,IAAI,CAAC,UAAU,GAAG,IAAI,CAAA;aACvB;SACF;QAED,IAAI,IAAI,CAAC,WAAW,EAAE;YACpB,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,cAAe,CAAC,CAAA;SAClE;IACH,CAAC;IAED,KAAK;QACH,KAAK,CAAC,KAAK,EAAE,CAAA;QAEb,IAAI,IAAI,CAAC,OAAO,KAAK,UAAU,EAAE;YAC/B,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC,IAAI,CAAA;YAC3B,IAAI,GAAG,GAAG,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,CAAA;YAE7D,IAAI,CAAC,OAAO,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,MAAM,EAAE,CAAC,EAAE,CAAA;SACvD;IACH,CAAC;IAED,eAAe,CAAC,EAAE,MAAM,EAAE,GAAG,EAAwC;QACnE,IAAI,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,MAAM,CAAA;QACrD,IAAI,KAAK,GAAG,MAAM,CAAC,UAAU,CAAC,CAAA;QAE9B,wCAAwC;QACxC,IAAI,OAAO,KAAK,IAAI,QAAQ,EAAE;YAC5B,IAAI,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,IAAI,UAAU,CAAC,CAAA;YAC1E,KAAK,GAAG,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,MAAM,CAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,CAAC,cAAc,CAAC,CAAA;SACjF;QAED,IAAI,CAAC,cAAc,GAAG,GAAG,CAAA;QACzB,IAAI,CAAC,WAAW,GAAG,iBAAiB,CAClC,IAAI,CAAC,MAAM,CAAC,OAAO,EACnB,MAAM,EACN,GAAG,EACH,IAAI,EACJ;YACE,KAAK;SACN,EACD,GAAG,EAAE;YACH,OAAO,IAAI,CAAC,WAAW,CAAA;YACvB,OAAO,IAAI,CAAC,cAAc,CAAA;QAC5B,CAAC,CACF,CAAA;IACH,CAAC;IAED,sBAAsB;QACpB,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,YAAY,IAAI,EAAE,CAAA;QAE5C,IAAI,CAAC,CAAC,KAAK,IAAI,GAAG,CAAC,EAAE;YACnB,KAAK,GAAG,IAAI,CAAC,YAAY,CAAA;YAEzB,GAAG,GAAG,KAAK,CAAA;SACZ;QAED,IAAI,KAAK,IAAI,GAAG,EAAE;YAChB,MAAM,aAAa,GAAG,KAAK,CAAC,QAAQ,GAAG,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAA;YACnF,MAAM,WAAW,GAAG,KAAK,CAAC,QAAQ,GAAG,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAA;YACjF,MAAM,gBAAgB,GAAG,KAAK,CAAC,WAAW,GAAG,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,GAAG,CAAC,WAAW,CAAA;YAClG,MAAM,cAAc,GAAG,KAAK,CAAC,WAAW,GAAG,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,KAAK,CAAC,WAAW,CAAA;YAEhG,MAAM,WAAW,GAAG,IAAI,KAAK,CAAC,cAAc,GAAG,gBAAgB,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAA;YAC3F,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA;YAE7D,OAAO,CACL,SAAS;gBACT,IAAI,KAAK,CAAC,WAAW,GAAG,aAAa,GAAG,CAAC,CAAC;qBACvC,IAAI,CAAC,aAAa,CAAC;qBACnB,GAAG,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;oBACpB,MAAM,QAAQ,GAAG,KAAK,GAAG,KAAK,CAAA;oBAC9B,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAA;oBAE1C,MAAM,GAAG,GAAG,WAAW;yBACpB,GAAG,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;wBACpB,MAAM,WAAW,GAAG,KAAK,GAAG,KAAK,CAAA;wBACjC,MAAM,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,CAAA;wBACnC,MAAM,KAAK,GAAG,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAG,MAAM,CAAC,IAAI,CAAC,CAAA;wBACnC,MAAM,IAAI,GAAG,OAAO,KAAK,CAAA;wBACzB,MAAM,IAAI,GACR,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,IAAI,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAA;wBAE/F,OAAO,YAAY,IAAI,IAAI,IAAI,OAAO,CAAA;oBACxC,CAAC,CAAC;yBACD,IAAI,CAAC,EAAE,CAAC,CAAA;oBACX,OAAO,OAAO,GAAG,OAAO,CAAA;gBAC1B,CAAC,CAAC;qBACD,IAAI,CAAC,EAAE,CAAC;gBACX,UAAU,CACX,CAAA;SACF;IACH,CAAC;IAED,KAAK,CAAC,IAAI;QACR,MAAM,MAAM,GAAG,IAAI,CAAC,sBAAsB,EAAE,CAAA;QAE5C,MAAM,SAAS,CAAC,SAAS,CAAC,KAAK,CAAC;YAC9B,IAAI,aAAa,CAAC;gBAChB,WAAW,EAAE,IAAI,IAAI,CAAC,CAAC,MAAM,CAAC,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC;gBACtD,YAAY,EAAE,IAAI,IAAI,CAAC,CAAC,MAAM,CAAC,EAAE,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC;aACzD,CAAC;SACH,CAAC,CAAA;QAEF,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,YAAY,CAAA;QACzD,IAAI,WAAW,EAAE;YACf,MAAM,eAAe,GAAG,WAAW,CAAC,KAAK,CAAC,eAAe,CAAA;YACzD,MAAM,OAAO,GAAG,WAAW,CAAC,KAAK,CAAC,OAAO,CAAA;YAEzC,WAAW,CAAC,YAAY,CAAC,cAAc,EAAE,sBAAsB,CAAC,CAAA;YAChE,WAAW,CAAC,KAAK,CAAC,eAAe,GAAG,KAAK,CAAA;YACzC,WAAW,CAAC,KAAK,CAAC,OAAO,GAAG,KAAK,CAAA;YACjC,MAAM,KAAK,CAAC,GAAG,CAAC,CAAA;YAChB,WAAW,CAAC,eAAe,CAAC,cAAc,CAAC,CAAA;YAC3C,WAAW,CAAC,KAAK,CAAC,eAAe,GAAG,eAAe,CAAA;YACnD,WAAW,CAAC,KAAK,CAAC,OAAO,GAAG,OAAO,CAAA;SACpC;IACH,CAAC;IAED,KAAK,CAAC,KAAK;QACT,IAAI;YACF,MAAM,SAAS,GAAG,MAAM,CAAC,YAAY,EAAE,CAAA;YAEvC,MAAM,cAAc,GAAG,MAAM,SAAS,CAAC,SAAS,CAAC,IAAI,EAAE,CAAA;YACvD,IAAI,CAAC,cAAc,EAAE;gBACnB,OAAM;aACP;YAED,IAAI,IAAwB,CAAA;YAC5B,IAAI,OAA2B,CAAA;YAE/B,KAAK,MAAM,aAAa,IAAI,cAAc,EAAE;gBAC1C,IAAI;oBACF,IAAI,IAAI,GAAG,MAAM,aAAa,CAAC,OAAO,CAAC,WAAW,CAAC,CAAA;oBACnD,OAAO,GAAG,IAAI,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC,CAAA;oBACrC,IAAI,GAAG,WAAW,CAAA;iBACnB;gBAAC,OAAO,CAAC,EAAE;oBACV,IAAI;wBACF,IAAI,GAAG,MAAM,aAAa,CAAC,OAAO,CAAC,YAAY,CAAC,CAAA;wBAChD,OAAO,GAAG,IAAI,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC,CAAA;wBACrC,IAAI,GAAG,YAAY,CAAA;qBACpB;oBAAC,OAAO,CAAC,EAAE,GAAE;iBACf;gBAED,MAAK;aACN;YAED,IAAI,CAAC,OAAO,EAAE;gBACZ,OAAM;aACP;YAED,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC,OAAO,CAAA;YACpC,MAAM,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC,IAAI,CAAA;YAC7B,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA;YAE7D,IAAI,IAAI,KAAK,WAAW,EAAE;gBACxB,MAAM,GAAG,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAA;gBACzC,GAAG,CAAC,SAAS,GAAG,OAAQ,CAAC,IAAI,EAAE,CAAA;gBAC/B,MAAM,KAAK,GAAG,GAAG,CAAC,aAAa,CAAC,OAAO,CAAqB,CAAA;gBAC5D,IAAI,CAAC,KAAK,EAAE;oBACV,OAAM;iBACP;gBAED,IAAI,SAAS,EAAE;oBACb,IAAI,CAAC,SAAS,EAAE,CAAA;oBAChB,SAAS,CAAC,eAAe,EAAE,CAAA;oBAC3B,MAAM,IAAI,CAAC,cAAc,CAAA;iBAC1B;gBACD,MAAM,IAAI,GAAG,KAAK,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAA;gBAEzC,IAAI,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,QAAQ,EAAE,EAAE;oBAChC,IAAI,CAAC,CAAC,MAAM,YAAY,mBAAmB,CAAC,EAAE;wBAC5C,OAAM;qBACP;oBAED,IAAI,YAAY,GAAG,OAAO,CAAC,GAAG,GAAG,QAAQ,CAAC,IAAI,EAAE,SAAS,EAAE,GAAG,EAAE,CAAA;oBAChE,IAAI,GAAG,GAAG,QAAQ,IAAI,OAAO,CAAC,MAAM,EAAE;wBACpC,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,CAAA;qBAC3B;oBAED,MAAM,KAAK,GAAG,MAAM,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAA;oBAC3C,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,WAAW,EAAE,EAAE;wBAClC,MAAM,YAAY,GAAG,OAAO,CAAC,MAAM,GAAG,WAAW,CAAC,CAAA;wBAClD,MAAM,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,IAAI,QAAQ,CAAA;wBAClD,IAAI,KAAK,GAAG,IAAI,CAAC,WAAkB,CAAA;wBACnC,IAAI,EAAE,QAAQ,EAAE,GAAG,YAAY,CAAC,MAAM,CAAA;wBACtC,IAAI,OAAO,QAAQ,KAAK,UAAU,EAAE;4BAClC,QAAQ,GAAG,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,YAAY,EAAE,YAAY,EAAE,GAAG,EAAE,IAAI,CAAC,CAAA;yBAC7E;wBAED,QAAQ,IAAI,EAAE;4BACZ,KAAK,QAAQ;gCACX,IAAI;oCACF,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,IAAI,MAAM,CAAC,CAAA;iCACpC;gCAAC,OAAO,GAAG,EAAE,GAAE;gCAChB,MAAK;4BACP,KAAK,SAAS;gCACZ,KAAK,GAAG,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAA;gCACjD,MAAK;4BACP,KAAK,QAAQ;gCACX,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,CAAA;gCACrB,MAAK;4BACP;gCACE,KAAK,GAAG,KAAK,CAAA;yBAChB;wBAED,IAAI,YAAY,IAAI,CAAC,YAAY,CAAC,UAAU,IAAI,QAAQ,EAAE;4BACxD,IAAI,CAAC,aAAa,CAChB,IAAI,WAAW,CAAC,cAAc,EAAE;gCAC9B,OAAO,EAAE,IAAI;gCACb,QAAQ,EAAE,IAAI;gCACd,MAAM,EAAE;oCACN,MAAM,EAAE,YAAY,CAAC,YAAY,CAAC,IAAI,CAAC;oCACvC,KAAK,EAAE,KAAK;oCACZ,MAAM,EAAE,YAAY;oCACpB,MAAM,EAAE,YAAY;oCACpB,GAAG,EAAE,GAAG,GAAG,QAAQ;iCACpB;6BACF,CAAC,CACH,CAAA;yBACF;oBACH,CAAC,CAAC,CAAA;gBACJ,CAAC,CAAC,CAAA;gBAEF,OAAM;aACP;iBAAM,IAAI,CAAC,SAAS,IAAI,IAAI,KAAK,YAAY,EAAE;gBAC9C,MAAM,YAAY,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,SAAS,EAAE,GAAG,EAAE,CAAA;gBACvD,MAAM,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC,CAAA;gBACpC,IAAI,EAAE,QAAQ,EAAE,GAAG,YAAY,CAAC,MAAM,CAAA;gBACtC,IAAI,OAAO,QAAQ,KAAK,UAAU,EAAE;oBAClC,QAAQ,GAAG,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,GAAG,EAAE,IAAI,CAAC,CAAA;iBAC/E;gBAED,IAAI,YAAY,IAAI,CAAC,YAAY,CAAC,UAAU,IAAI,QAAQ,EAAE;oBACxD,IAAI,CAAC,aAAa,CAChB,IAAI,WAAW,CAAC,cAAc,EAAE;wBAC9B,OAAO,EAAE,IAAI;wBACb,QAAQ,EAAE,IAAI;wBACd,MAAM,EAAE;4BACN,MAAM,EAAE,YAAY,CAAC,YAAY,CAAC,IAAI,CAAC;4BACvC,KAAK,EAAE,OAAO;4BACd,MAAM,EAAE,YAAY;4BACpB,MAAM,EAAE,YAAY;4BACpB,GAAG,EAAE,GAAG;yBACT;qBACF,CAAC,CACH,CAAA;iBACF;aACF;SACF;QAAC,OAAO,CAAC,EAAE,GAAE;IAChB,CAAC;IAED,cAAc,CAAC,KAAqB,EAAE,GAAmB;;QACvD,IAAI,CAAA,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,WAAW,KAAI,CAAC,CAAC,EAAE;YAC5B,KAAK,GAAG,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAA;SACvG;QAED,IAAI,CAAA,GAAG,aAAH,GAAG,uBAAH,GAAG,CAAE,WAAW,KAAI,CAAC,CAAC,EAAE;YAC1B,GAAG,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAA;SACnG;QAED,IAAI,CAAC,YAAY,GAAG,KAAK,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,CAAA;QAE3C,IAAI,KAAK,IAAI,GAAG,EAAE;YAChB,MAAA,MAAM,CAAC,YAAY,EAAE,0CAAE,eAAe,EAAE,CAAA;YAExC,IAAI,KAAK,KAAK,GAAG,EAAE;gBACjB,MAAM,IAAI,GAAG,KAAK,CAAC,WAAW,GAAG,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAA;gBAC9D,MAAM,KAAK,GAAG,IAAI,KAAK,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAA;gBAC1C,MAAM,GAAG,GAAG,KAAK,CAAC,QAAQ,GAAG,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAA;gBACvD,MAAM,MAAM,GAAG,GAAG,KAAK,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAA;gBAE1C,MAAM,EAAE,UAAU,EAAE,GAAG,IAAI,CAAA;gBAC3B,MAAM,EAAE,SAAS,EAAE,GAAG,GAAG,CAAA;gBACzB,MAAM,KAAK,GAAG,KAAK,CAAC,UAAU,GAAG,UAAU,GAAG,KAAK,CAAC,WAAW,CAAA;gBAC/D,MAAM,MAAM,GAAG,MAAM,CAAC,SAAS,GAAG,SAAS,GAAG,MAAM,CAAC,YAAY,CAAA;gBAEjE,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,mBAAmB,EAAE,UAAU,GAAG,CAAC,GAAG,IAAI,CAAC,CAAA;gBAClE,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,kBAAkB,EAAE,SAAS,GAAG,CAAC,GAAG,IAAI,CAAC,CAAA;gBAChE,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,oBAAoB,EAAE,KAAK,GAAG,IAAI,CAAC,CAAA;gBAC1D,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,qBAAqB,EAAE,MAAM,GAAG,IAAI,CAAC,CAAA;aAC7D;SACF;IACH,CAAC;IAED,sBAAsB;QACpB,IAAI,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA;QAE3D,OAAO,OAAO,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE;YACvC,IAAI,MAAM,CAAC,WAAW,EAAE;gBACtB,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,UAAU,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,WAAW,CAAC,CAAA;aACxE;YACD,OAAO,MAAM,CAAA;QACf,CAAC,EAAE,EAAiB,CAAC,CAAA;IACvB,CAAC;;AAzmBM,mBAAM,GAAG;IACd,aAAa;IACb,iBAAiB;IACjB,GAAG,CAAA;;;;;;;;;;;KAWF;CACF,AAfY,CAeZ;AAE2B;IAA3B,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;4CAAkC;AAClC;IAA1B,QAAQ,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;6CAA6B;AAC3B;IAA3B,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;0CAA4B;AAC3B;IAA3B,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;6CAAsD;AACrD;IAA3B,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;gDAA0D;AACzD;IAA3B,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;0CAAU;AACT;IAA3B,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;wCAAQ;AAE1B;IAAR,KAAK,EAAE;kDAGP;AAEwB;IAAxB,KAAK,CAAC,gBAAgB,CAAC;iDAA6B;AACpB;IAAhC,KAAK,CAAC,wBAAwB,CAAC;kDAA6B;AAzClD,YAAY;IADxB,aAAa,CAAC,cAAc,CAAC;GACjB,YAAY,CAonBxB","sourcesContent":["import './data-grid-field'\nimport './data-grid-accum-field'\n\nimport { css, html, LitElement, nothing, PropertyValues } from 'lit'\nimport { customElement, property, query, state } from 'lit/decorators.js'\nimport debounce from 'lodash-es/debounce'\n\nimport { TooltipStyles } from '@operato/styles'\nimport { sleep } from '@operato/utils'\n\nimport { ZERO_CONFIG, ZERO_DATA } from '../configure/zero-config'\nimport { RecordViewHandler } from '../record-view/record-view-handler'\nimport { ColumnConfig, GristConfig, GristData, GristRecord } from '../types'\nimport { supportsPassive } from '../utils'\nimport { dataGridBodyStyle } from './data-grid-body-style'\nimport { DataGridField } from './data-grid-field'\nimport { dataGridBodyClickHandler } from './event-handlers/data-grid-body-click-handler'\nimport { dataGridBodyDblclickHandler } from './event-handlers/data-grid-body-dblclick-handler'\nimport { dataGridBodyFocusChangeHandler } from './event-handlers/data-grid-body-focus-change-handler'\nimport { dataGridBodyKeydownHandler } from './event-handlers/data-grid-body-keydown-handler'\nimport { accumulate } from '../accumulator/accumulator'\n\nconst THRESHOLD = 300\nconst DATA_PADDING = 3\nconst ROW_HEIGHT = 40\nconst GAP_SIZE = 1\n\nfunction calcScrollPos(parent: DataGridBody, child: Element) {\n /* getBoundingClientRect는 safari에서 스크롤 상태에서 다른 브라우저와는 다른 값을 리턴함 - 사파리는 약간 이상 작동함. */\n var { top: ct, left: cl, right: cr, bottom: cb } = child.getBoundingClientRect()\n var { top: pt, left: pl, right: pr, bottom: pb } = parent.getBoundingClientRect()\n var { scrollLeft, scrollTop } = parent\n var scrollbarWidth = parent.clientWidth - parent.offsetWidth\n var scrollbarHeight = parent.clientHeight - parent.offsetHeight\n\n return {\n left: cl < pl ? scrollLeft - (pl - cl) : cr > pr ? scrollLeft - (pr - cr) - scrollbarWidth : undefined,\n top: ct < pt ? scrollTop - (pt - ct) : cb > pb ? scrollTop - (pb - cb) - scrollbarHeight : undefined\n }\n}\n\nconst ZERO_FOCUS = {\n row: 0,\n column: 0\n}\n\n@customElement('ox-grid-body')\nexport class DataGridBody extends LitElement {\n debounce = debounce((scrollTop: number, clientHeight: number) => {\n const maxVisibleRows = Math.ceil(clientHeight / (ROW_HEIGHT + GAP_SIZE))\n const from = Math.max(0, Math.floor(scrollTop / (ROW_HEIGHT + GAP_SIZE)) - maxVisibleRows * DATA_PADDING)\n const to = Math.min(this.data.records?.length || 0, from + maxVisibleRows * (DATA_PADDING * 2 + 1))\n\n this.from = from\n this.to = to\n }, THRESHOLD)\n\n static styles = [\n TooltipStyles,\n dataGridBodyStyle,\n css`\n [select-block] {\n position: absolute;\n left: var(--select-box-left);\n top: var(--select-box-top);\n width: var(--select-box-width);\n height: var(--select-box-height);\n border: var(--grid-record-focused-cell-border);\n background-image: var(--focused-background-image);\n pointer-events: none;\n }\n `\n ]\n\n @property({ type: Object }) config: GristConfig = ZERO_CONFIG\n @property({ type: Array }) columns: ColumnConfig[] = []\n @property({ type: Object }) data: GristData = ZERO_DATA\n @property({ type: Object }) focused: { row: number; column: number } = ZERO_FOCUS\n @property({ type: Object }) editTarget: { row: number; column: number } | null = null\n @property({ type: Number }) from = -1\n @property({ type: Number }) to = -1\n\n @state() _selectBlock?: {\n start: DataGridField\n end?: DataGridField\n }\n\n @query('[select-block]') selectBlock?: HTMLDivElement\n @query('ox-grid-field[focused]') focusedField?: DataGridField\n\n private _focusedListener?: (e: KeyboardEvent) => void\n private _recordView?: any\n private _recordViewRow?: number\n\n resetEdit() {\n this.editTarget = null\n }\n\n handleOnScroll(e: WheelEvent) {\n const { scrollTop, clientHeight } = e.target as HTMLElement\n this.debounce(scrollTop, clientHeight)\n }\n\n // issue #13\n // renderOptimisticRow() {\n // return\n // }\n\n render() {\n // block이 선택되어 있으면, focused row/column은 표현하지 않는다.\n var { row: focusedRow, column: focusedColumn } = (!this._selectBlock && this.focused) || {}\n var { row: editingRow, column: editingColumn } = this.editTarget || {}\n\n var columns = this.columns.filter(column => !column.hidden)\n var data = this.data\n var { records } = data\n var { appendable, classifier, accumulator } = this.config.rows\n const { start, end } = this._selectBlock || {}\n\n /*\n * 레코드를 추가할 수 있는 경우에는 항상 추가 레코드를 보여준다.\n * 만약, 이전 방식처럼, 커서를 옮겨야만 새로운 레코드가 보이게 하고 싶다면, 조건부를 다음의 코드로 대체한다.\n * -- if (focusedRow == records.length)\n */\n if (appendable) {\n records = [...records, { __dirty__: '+' }]\n }\n\n if (accumulator) {\n var accumRecord = this.buildAccumulatorRecord()\n }\n\n return html`\n ${records.map((record, idxRow) => {\n var attrFocusedRow = idxRow === focusedRow\n var attrSelected = record['__selected__']\n var attrOdd = idxRow % 2\n var dirtyFields = record['__dirtyfields__'] || {}\n var { emphasized } = classifier.call(null, record, idxRow) || {}\n\n return html`\n ${columns.map(\n (column, idxColumn) => html`\n <ox-grid-field\n .data=${data}\n .rowIndex=${idxRow}\n .columnIndex=${idxColumn}\n .column=${column}\n .record=${record}\n .emphasized=${emphasized}\n ?gutter=${column.type == 'gutter'}\n ?odd=${attrOdd}\n ?focused-row=${attrFocusedRow}\n ?selected-row=${attrSelected}\n ?focused=${idxRow === focusedRow && idxColumn === focusedColumn}\n ?editing=${idxRow === editingRow && idxColumn === editingColumn}\n .value=${record[column.name]}\n ?dirty=${!!dirtyFields[column.name]}\n ></ox-grid-field>\n `\n )}\n <ox-grid-field\n .data=${data}\n .rowIndex=${idxRow}\n .columnIndex=${-1}\n .record=${record}\n .emphasized=${emphasized}\n ?odd=${attrOdd}\n ?focused-row=${attrFocusedRow}\n ?selected-row=${attrSelected}\n ></ox-grid-field>\n `\n })}\n ${accumulator\n ? html`\n ${columns.map(\n (column, idxColumn) => html`\n <ox-grid-accum-field\n .data=${data}\n .columnIndex=${idxColumn}\n .rowIndex=${records.length}\n .column=${column}\n .record=${accumRecord!}\n .value=${accumRecord[column.name]}\n ></ox-grid-accum-field>\n `\n )}\n <ox-grid-accum-field\n .data=${data}\n .columnIndex=${-1}\n .rowIndex=${records.length}\n .record=${accumRecord!}\n ></ox-grid-accum-field>\n `\n : nothing}\n ${start && end && start !== end ? html` <div select-block></div> ` : html``}\n <slot></slot>\n `\n }\n\n firstUpdated() {\n // TODO issue #13\n // this.addEventListener('scroll', this.handleOnScroll.bind(this))\n\n /* focus() 를 받을 수 있도록 함. */\n this.setAttribute('tabindex', '-1')\n\n /*\n * focusout 으로 property를 변경시키는 경우, focusout에 의해 update가 발생하는 경우에는,\n * 그리드 내부의 컴포넌트가 갱신되는 현상을 초래하게 된다.\n * 따라서, focusout 핸들러에서 update를 유발하는 코드는 강력하게 금지시킨다.\n */\n this.addEventListener('focusout', e => {\n if (this._focusedListener) {\n this.removeEventListener('keydown', this._focusedListener)\n delete this._focusedListener\n }\n })\n\n this.addEventListener('focusin', e => {\n if (!this._focusedListener) {\n this._focusedListener = dataGridBodyKeydownHandler.bind(this)\n this.addEventListener('keydown', this._focusedListener)\n }\n })\n\n this.addEventListener('set-select-block', async e => {\n e.stopPropagation()\n\n const { startRow = -1, startColumn = -1, endRow = -1, endColumn = -1 } = ((e as CustomEvent).detail as any) || {}\n\n const start = this.getFieldByIndex(startRow, startColumn) as DataGridField\n const end = this.getFieldByIndex(endRow, endColumn) as DataGridField\n\n this.setSelectBlock(start, end)\n })\n\n this.renderRoot.addEventListener('mousedown', (event: Event) => {\n const e = event as MouseEvent\n this.setSelectBlock()\n\n if (e.buttons !== 1) {\n return\n }\n\n var target = (e.target as Element).closest('ox-grid-field') as DataGridField\n var { rowIndex, columnIndex } = target || {}\n\n this.dispatchEvent(\n new CustomEvent('focus-change', {\n bubbles: true,\n composed: true,\n detail: {\n row: rowIndex,\n column: columnIndex\n }\n })\n )\n\n if (!isNaN(rowIndex) && !isNaN(columnIndex)) {\n this.startEditTarget(rowIndex, columnIndex)\n }\n })\n\n this.renderRoot.addEventListener('mousemove', (event: Event) => {\n const e = event as MouseEvent\n if (e.buttons !== 1) {\n return\n }\n\n const field = e.target as DataGridField\n if (!this._selectBlock) {\n this.setSelectBlock(this.focusedField || field, this.focusedField || field)\n\n return\n }\n\n var { start, end } = this._selectBlock || {}\n\n if (start && end !== field) {\n end = field\n\n this.setSelectBlock(start, end)\n }\n })\n\n this.renderRoot.addEventListener('mouseup', (event: Event) => {})\n\n this.renderRoot.addEventListener('click', dataGridBodyClickHandler.bind(this))\n\n this.renderRoot.addEventListener('dblclick', dataGridBodyDblclickHandler.bind(this))\n this.renderRoot.addEventListener('dblclick', dataGridBodyDblclickHandler.bind(this))\n\n this.addEventListener('focus-change', dataGridBodyFocusChangeHandler.bind(this))\n\n this.addEventListener('wheel', this._onWheelEvent.bind(this), supportsPassive ? { passive: true } : false)\n\n const primaryColor = getComputedStyle(this).getPropertyValue('--primary-color')\n this.style.setProperty(\n '--focused-background-image',\n `url(\"data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='10' height='10'><rect fill='${primaryColor}' x='0' y='0' width='100%' height='100%' style='opacity:.3'/></svg>\")`\n )\n\n this.addEventListener('show-record-view', (e: Event) =>\n this.popupRecordView((e as CustomEvent).detail as { row: number; record: GristRecord })\n )\n }\n\n getFieldByIndex(rowIndex: number, columnIndex: number, residue: boolean = true) {\n if (rowIndex < 0) {\n return\n }\n\n var columns = this.columns.filter(column => !column.hidden).length\n if (!residue && columnIndex >= columns) {\n return\n }\n\n return this.renderRoot.children.item(\n rowIndex * (columns + 1) /* 1 means last dummy column */ + ((columnIndex + columns) % columns)\n ) as DataGridField\n }\n\n _onWheelEvent(e: WheelEvent) {\n if (this.scrollHeight <= this.clientHeight) {\n var delta = Math.max(-1, Math.min(1, e.deltaY || 0))\n this.scrollLeft = Math.max(0, this.scrollLeft - delta * 40)\n supportsPassive || e.preventDefault()\n }\n }\n\n startEditTarget(row: number, column: number) {\n var { editable } = this.columns.filter(column => !column.hidden)[column].record\n if (typeof editable === 'function') {\n const curRow = this.data.records[row] || {}\n const curCol = this.columns[column + 1]\n editable = editable.call(this, curRow[curCol.name], curCol, curRow, row, this)\n }\n\n if (!editable) {\n return\n }\n\n if (this.editTarget && this.editTarget.row == row && this.editTarget.column == column) {\n return\n }\n\n this.editTarget = {\n row,\n column\n }\n }\n\n shouldUpdate(changes: any) {\n if (!changes.has('editTarget')) {\n /*\n * 큰 변화에 대해서는 실제 update가 발생되기 전에 editTarget을 초기화한다.\n */\n this.editTarget = null\n }\n\n return super.shouldUpdate(changes)\n }\n\n updated(changes: PropertyValues<this>) {\n if (changes.has('focused')) {\n let element = this.renderRoot?.querySelector('[focused]')\n if (!element) {\n return\n }\n\n let { top, left } = calcScrollPos(this, element)\n // TODO this.scroll()을 사용하면, 효과가 좋으나 left 계산에 문제가 있는 것 같음.\n // this.scroll({\n // top,\n // left,\n // behavior: 'smooth'\n // })\n if (top !== undefined) {\n this.scrollTop = top\n }\n if (left !== undefined) {\n this.scrollLeft = left\n }\n }\n\n if (this._recordView) {\n this._recordView.record = this.data.records[this._recordViewRow!]\n }\n }\n\n focus() {\n super.focus()\n\n if (this.focused === ZERO_FOCUS) {\n let { records } = this.data\n let row = records.findIndex(record => record['__selected__'])\n\n this.focused = { row: row == -1 ? 0 : row, column: 0 }\n }\n }\n\n popupRecordView({ record, row }: { row: number; record: GristRecord }) {\n var titleField = this.config.list.fields[0] || 'name'\n var title = record[titleField]\n\n /* field가 오브젝트형인 경우에는 렌더러를 타이틀로 사용한다. */\n if (typeof title == 'object') {\n var column = this.config.columns.find(column => column.name == titleField)\n title = column?.record.renderer(title, column, record, row, this /* cautious */)\n }\n\n this._recordViewRow = row\n this._recordView = RecordViewHandler(\n this.config.columns,\n record,\n row,\n this,\n {\n title\n },\n () => {\n delete this._recordView\n delete this._recordViewRow\n }\n )\n }\n\n getSelectedBlockValues(): Array<Array<any>> | any | undefined {\n var { start, end } = this._selectBlock || {}\n\n if (!(start && end)) {\n start = this.focusedField\n\n end = start\n }\n\n if (start && end) {\n const startRowIndex = start.rowIndex < end.rowIndex ? start.rowIndex : end.rowIndex\n const endRowIndex = start.rowIndex < end.rowIndex ? end.rowIndex : start.rowIndex\n const startColumnIndex = start.columnIndex < end.columnIndex ? start.columnIndex : end.columnIndex\n const endColumnIndex = start.columnIndex < end.columnIndex ? end.columnIndex : start.columnIndex\n\n const columnArray = new Array(endColumnIndex - startColumnIndex + 1).fill(startColumnIndex)\n const columns = this.columns.filter(column => !column.hidden)\n\n return (\n '<table>' +\n new Array(endRowIndex - startRowIndex + 1)\n .fill(startRowIndex)\n .map((start, index) => {\n const rowIndex = start + index\n const record = this.data.records[rowIndex]\n\n const tds = columnArray\n .map((start, index) => {\n const columnIndex = start + index\n const column = columns[columnIndex]\n const value = record?.[column.name]\n const type = typeof value\n const text =\n value === undefined || value === null ? '' : type == 'object' ? JSON.stringify(value) : value\n\n return `<td type=${type}>${text}</td>`\n })\n .join('')\n return `<tr>${tds}</tr>`\n })\n .join('') +\n '</table>'\n )\n }\n }\n\n async copy() {\n const copied = this.getSelectedBlockValues()\n\n await navigator.clipboard.write([\n new ClipboardItem({\n 'text/html': new Blob([copied], { type: 'text/html' }),\n 'text/plain': new Blob([copied], { type: 'text/plain' })\n })\n ])\n\n const selectBlock = this.selectBlock || this.focusedField\n if (selectBlock) {\n const backgroundColor = selectBlock.style.backgroundColor\n const opacity = selectBlock.style.opacity\n\n selectBlock.setAttribute('data-tooltip', 'copied to clipboard!')\n selectBlock.style.backgroundColor = 'red'\n selectBlock.style.opacity = '0.5'\n await sleep(500)\n selectBlock.removeAttribute('data-tooltip')\n selectBlock.style.backgroundColor = backgroundColor\n selectBlock.style.opacity = opacity\n }\n }\n\n async paste() {\n try {\n const selection = window.getSelection()\n\n const clipboardItems = await navigator.clipboard.read()\n if (!clipboardItems) {\n return\n }\n\n var type: string | undefined\n var content: string | undefined\n\n for (const clipboardItem of clipboardItems) {\n try {\n var blob = await clipboardItem.getType('text/html')\n content = blob && (await blob.text())\n type = 'text/html'\n } catch (e) {\n try {\n blob = await clipboardItem.getType('text/plain')\n content = blob && (await blob.text())\n type = 'text/plain'\n } catch (e) {}\n }\n\n break\n }\n\n if (!content) {\n return\n }\n\n const { row, column } = this.focused\n const { records } = this.data\n const columns = this.columns.filter(column => !column.hidden)\n\n if (type === 'text/html') {\n const div = document.createElement('div')\n div.innerHTML = content!.trim()\n const table = div.querySelector('table') as HTMLTableElement\n if (!table) {\n return\n }\n\n if (selection) {\n this.resetEdit()\n selection.removeAllRanges()\n await this.updateComplete\n }\n const rows = table.querySelectorAll('tr')\n\n rows.forEach((record, rowIndex) => {\n if (!(record instanceof HTMLTableRowElement)) {\n return\n }\n\n var targetRecord = records[row + rowIndex] || { __dirty__: '+' }\n if (row + rowIndex >= records.length) {\n records.push(targetRecord)\n }\n\n const cells = record.querySelectorAll('td')\n cells.forEach((item, columnIndex) => {\n const targetColumn = columns[column + columnIndex]\n const type = item.getAttribute('type') || 'string'\n var value = item.textContent as any\n let { editable } = targetColumn.record\n if (typeof editable === 'function') {\n editable = editable.call(this, value, targetColumn, targetRecord, row, this)\n }\n\n switch (type) {\n case 'object':\n try {\n value = JSON.parse(value || 'null')\n } catch (err) {}\n break\n case 'boolean':\n value = !!value && !!String(value).match(/true/i)\n break\n case 'number':\n value = Number(value)\n break\n default:\n value = value\n }\n\n if (targetColumn && !targetColumn.gutterName && editable) {\n this.dispatchEvent(\n new CustomEvent('field-change', {\n bubbles: true,\n composed: true,\n detail: {\n before: targetRecord[targetColumn.name],\n after: value,\n column: targetColumn,\n record: targetRecord,\n row: row + rowIndex\n }\n })\n )\n }\n })\n })\n\n return\n } else if (!selection && type === 'text/plain') {\n const targetRecord = records[row] || { __dirty__: '+' }\n const targetColumn = columns[column]\n let { editable } = targetColumn.record\n if (typeof editable === 'function') {\n editable = editable.call(this, content, targetColumn, targetRecord, row, this)\n }\n\n if (targetColumn && !targetColumn.gutterName && editable) {\n this.dispatchEvent(\n new CustomEvent('field-change', {\n bubbles: true,\n composed: true,\n detail: {\n before: targetRecord[targetColumn.name],\n after: content,\n column: targetColumn,\n record: targetRecord,\n row: row\n }\n })\n )\n }\n }\n } catch (e) {}\n }\n\n setSelectBlock(start?: DataGridField, end?: DataGridField) {\n if (start?.columnIndex == -1) {\n start = this.getFieldByIndex(start.rowIndex, this.columns.filter(column => !column.hidden).length - 1)\n }\n\n if (end?.columnIndex == -1) {\n end = this.getFieldByIndex(end.rowIndex, this.columns.filter(column => !column.hidden).length - 1)\n }\n\n this._selectBlock = start && { start, end }\n\n if (start && end) {\n window.getSelection()?.removeAllRanges()\n\n if (start !== end) {\n const left = start.columnIndex < end.columnIndex ? start : end\n const right = left === start ? end : start\n const top = start.rowIndex < end.rowIndex ? start : end\n const bottom = top === start ? end : start\n\n const { offsetLeft } = left\n const { offsetTop } = top\n const width = right.offsetLeft - offsetLeft + right.offsetWidth\n const height = bottom.offsetTop - offsetTop + bottom.offsetHeight\n\n this.style.setProperty('--select-box-left', offsetLeft - 1 + 'px')\n this.style.setProperty('--select-box-top', offsetTop - 1 + 'px')\n this.style.setProperty('--select-box-width', width + 'px')\n this.style.setProperty('--select-box-height', height + 'px')\n }\n }\n }\n\n buildAccumulatorRecord(): GristRecord {\n var columns = this.columns.filter(column => !column.hidden)\n\n return columns.reduce((record, column) => {\n if (column.accumulator) {\n record[column.name] = accumulate(this.data, column, column.accumulator)\n }\n return record\n }, {} as GristRecord)\n }\n}\n"]}
|
|
@@ -12,10 +12,10 @@ export declare class DataGridHeader extends LitElement {
|
|
|
12
12
|
private _lastAccVal?;
|
|
13
13
|
private _throttledNotifier?;
|
|
14
14
|
connectedCallback(): void;
|
|
15
|
-
render(): import("lit
|
|
16
|
-
_renderHeader(column: ColumnConfig): import("lit
|
|
17
|
-
_renderSortHeader(column: ColumnConfig): import("lit
|
|
18
|
-
_renderFilterHeader(column: ColumnConfig): import("lit
|
|
15
|
+
render(): import("lit").TemplateResult<1>;
|
|
16
|
+
_renderHeader(column: ColumnConfig): import("lit").TemplateResult<1>;
|
|
17
|
+
_renderSortHeader(column: ColumnConfig): import("lit").TemplateResult<1>;
|
|
18
|
+
_renderFilterHeader(column: ColumnConfig): import("lit").TemplateResult<1>;
|
|
19
19
|
_changeSort(column: ColumnConfig): void;
|
|
20
20
|
_accumalate(x: number): number;
|
|
21
21
|
_notifyWidthChange(idx: number, width: number): void;
|
|
@@ -30,7 +30,7 @@ export declare class DataGrid extends DataManipulator {
|
|
|
30
30
|
onRecordChanged(recordData: GristRecord, row: number, column: ColumnConfig | null): void;
|
|
31
31
|
updated(changes: PropertyValues<this>): void;
|
|
32
32
|
calculateWidths(columns: ColumnConfig[]): void;
|
|
33
|
-
render(): import("lit
|
|
33
|
+
render(): import("lit").TemplateResult<1>;
|
|
34
34
|
focus(): void;
|
|
35
35
|
get pullToRefreshTarget(): LitElement;
|
|
36
36
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"data-grid-body-keydown-handler.js","sourceRoot":"","sources":["../../../../src/data-grid/event-handlers/data-grid-body-keydown-handler.ts"],"names":[],"mappings":"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","sourcesContent":["import { DataGridBody } from '../data-grid-body'\n\n/**\n * ox-grid-body 의 keydown handler\n *\n * - handler의 this 는 ox-grid-body임.\n */\nexport async function dataGridBodyKeydownHandler(this: DataGridBody, e: KeyboardEvent): Promise<void> {\n // arrow-key\n const key = e.key\n var { row = 0, column = 0 } = this.focused || {}\n var { records = [] } = this.data || {}\n var maxrow = this.config.rows.appendable ? records.length : records.length - 1\n var maxcolumn = (this.columns || []).filter(column => !column.hidden).length - 1\n\n if (this.editTarget) {\n switch (key) {\n case 'Escape':\n case 'Esc':\n /* TODO 편집이 취소되어야 한다. */\n case 'Enter':\n this.editTarget = null\n\n this.focus()\n return\n\n case 'Tab':\n this.editTarget = null\n if (e.shiftKey) {\n column = Math.max(0, column - 1)\n } else {\n column = Math.min(maxcolumn, column + 1)\n }\n this.focus()\n break\n\n // case 'Down':\n // case 'ArrowDown':\n // this.editTarget = null\n // row = Math.min(maxrow, row + 1)\n // this.focus()\n // break\n\n case 'PageUp':\n case 'PageDown':\n case 'End':\n case 'Home':\n // e.preventDefault()\n // return\n break\n\n default:\n if (e.metaKey || e.ctrlKey) {\n /* Window System에 선택된 영역이 없다면, 셀을 복사/붙여넣기 한다. */\n switch (e.key) {\n case 'c':\n const selection = window.getSelection()\n if (!selection || !selection.anchorNode || selection.type != 'Range') {\n /* \n editor가 select 인 경우 자체 복사 기능이 없으므로 this.copy()를 사용하도록 하기 위해서, selection.type != 'Range' 조건을 추가했다.\n select인 경우에는 selection.type 이 'Caret' 이었다.\n */\n this.copy()\n e.preventDefault()\n }\n break\n case 'v':\n this.paste()\n break\n }\n }\n return\n }\n } else {\n switch (key) {\n case 'Up':\n case 'ArrowUp':\n if (e.shiftKey) {\n let { start } = this._selectBlock || {}\n let focused = this.focusedField\n if (focused && focused.rowIndex > 0) {\n this.setSelectBlock(start || focused, this.getFieldByIndex(focused.rowIndex - 1, focused.columnIndex))\n }\n } else {\n this.setSelectBlock()\n if (e.metaKey || e.ctrlKey) {\n row = 0\n } else {\n row = Math.max(0, row - 1)\n }\n }\n break\n\n case 'Down':\n case 'ArrowDown':\n if (e.shiftKey) {\n let { start } = this._selectBlock || {}\n let focused = this.focusedField\n if (focused) {\n let end = this.getFieldByIndex(focused.rowIndex + 1, focused.columnIndex)\n if (end) {\n this.setSelectBlock(start || focused, end)\n }\n }\n } else {\n this.setSelectBlock()\n if (e.metaKey || e.ctrlKey) {\n row = maxrow\n } else {\n row = Math.min(maxrow, row + 1)\n }\n }\n break\n\n case 'Enter':\n this.setSelectBlock()\n this.startEditTarget(row, column)\n return\n\n case 'Left':\n case 'ArrowLeft':\n case 'Backspace':\n if (e.shiftKey) {\n let { start } = this._selectBlock || {}\n let focused = this.focusedField\n if (focused && focused.columnIndex > 0) {\n this.setSelectBlock(start || focused, this.getFieldByIndex(focused.rowIndex, focused.columnIndex - 1))\n }\n } else {\n this.setSelectBlock()\n if (e.metaKey || e.ctrlKey) {\n column = 0\n } else {\n column = Math.max(0, column - 1)\n }\n }\n break\n\n case 'Right':\n case 'ArrowRight':\n if (e.shiftKey) {\n let { start } = this._selectBlock || {}\n let focused = this.focusedField\n if (focused) {\n let end = this.getFieldByIndex(focused.rowIndex, focused.columnIndex + 1, false)\n if (end) {\n this.setSelectBlock(start || focused, end)\n }\n }\n } else {\n this.setSelectBlock()\n if (e.metaKey || e.ctrlKey) {\n column = maxcolumn\n } else {\n column = Math.min(maxcolumn, column + 1)\n }\n }\n break\n\n case 'Tab':\n this.editTarget = null\n this.setSelectBlock()\n if (e.shiftKey) {\n column = Math.max(0, column - 1)\n } else {\n column = Math.min(maxcolumn, column + 1)\n }\n this.focus()\n break\n\n case 'PageUp':\n /* TODO 페이지당 레코드의 수를 계산해서 증감시켜야 한다. */\n this.setSelectBlock()\n row = Math.max(0, row - 10)\n break\n\n case 'PageDown':\n case ' ':\n this.setSelectBlock()\n row = Math.min(maxrow, row + 10)\n break\n\n case 'Esc':\n case 'Escape':\n this.setSelectBlock()\n return\n\n case 'End':\n this.setSelectBlock()\n row = maxrow\n break\n\n case 'Home':\n this.setSelectBlock()\n row = 0\n break\n\n default:\n if (e.metaKey || e.ctrlKey) {\n switch (e.key) {\n case 'c':\n const selection = window.getSelection()\n if (!selection || !selection.anchorNode || selection.type != 'Range') {\n /* \n 에디터 상태가 아닌 경우에도, selection.type != 'Range' 조건을 추가해서,\n 셀렉션이 된 상태에서는 기본 동작으로 텍스트 복사를 할 수 있도록 했다.\n 보통은, 싱글 필드가 셀렉션박스로 지정된 경우에 자체 텍스트의 일부를 복사하기 위해서 필요하다.\n */\n this.copy()\n e.preventDefault()\n }\n break\n case 'v':\n this.paste()\n break\n }\n } else if (key.length === 1) {\n this.setSelectBlock()\n this.startEditTarget(row, column)\n }\n return\n }\n }\n\n if (!this.focused || this.focused.row !== row || this.focused.column !== column) {\n this.dispatchEvent(new CustomEvent('focus-change', { bubbles: true, composed: true, detail: { row, column } }))\n }\n\n /* arrow key에 의한 scrollbar의 자동 움직임을 하지 못하도록 한다. */\n e.preventDefault()\n}\n"]}
|
|
1
|
+
{"version":3,"file":"data-grid-body-keydown-handler.js","sourceRoot":"","sources":["../../../../src/data-grid/event-handlers/data-grid-body-keydown-handler.ts"],"names":[],"mappings":"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","sourcesContent":["import { DataGridBody } from '../data-grid-body'\n\n/**\n * ox-grid-body 의 keydown handler\n *\n * - handler의 this 는 ox-grid-body임.\n */\nexport async function dataGridBodyKeydownHandler(this: DataGridBody, e: KeyboardEvent): Promise<void> {\n // 한글 Composing 이벤트는 무시\n if (e.isComposing) return\n\n // arrow-key\n const key = e.key\n var { row = 0, column = 0 } = this.focused || {}\n var { records = [] } = this.data || {}\n var maxrow = this.config.rows.appendable ? records.length : records.length - 1\n var maxcolumn = (this.columns || []).filter(column => !column.hidden).length - 1\n\n if (this.editTarget) {\n switch (key) {\n case 'Escape':\n case 'Esc':\n /* TODO 편집이 취소되어야 한다. */\n case 'Enter':\n this.editTarget = null\n\n this.focus()\n return\n\n case 'Tab':\n this.editTarget = null\n if (e.shiftKey) {\n column = Math.max(0, column - 1)\n } else {\n column = Math.min(maxcolumn, column + 1)\n }\n this.focus()\n break\n\n // case 'Down':\n // case 'ArrowDown':\n // this.editTarget = null\n // row = Math.min(maxrow, row + 1)\n // this.focus()\n // break\n\n case 'PageUp':\n case 'PageDown':\n case 'End':\n case 'Home':\n // e.preventDefault()\n // return\n break\n\n default:\n if (e.metaKey || e.ctrlKey) {\n /* Window System에 선택된 영역이 없다면, 셀을 복사/붙여넣기 한다. */\n switch (e.key) {\n case 'c':\n const selection = window.getSelection()\n if (!selection || !selection.anchorNode || selection.type != 'Range') {\n /* \n editor가 select 인 경우 자체 복사 기능이 없으므로 this.copy()를 사용하도록 하기 위해서, selection.type != 'Range' 조건을 추가했다.\n select인 경우에는 selection.type 이 'Caret' 이었다.\n */\n this.copy()\n e.preventDefault()\n }\n break\n case 'v':\n this.paste()\n break\n }\n }\n return\n }\n } else {\n switch (key) {\n case 'Up':\n case 'ArrowUp':\n if (e.shiftKey) {\n let { start } = this._selectBlock || {}\n let focused = this.focusedField\n if (focused && focused.rowIndex > 0) {\n this.setSelectBlock(start || focused, this.getFieldByIndex(focused.rowIndex - 1, focused.columnIndex))\n }\n } else {\n this.setSelectBlock()\n if (e.metaKey || e.ctrlKey) {\n row = 0\n } else {\n row = Math.max(0, row - 1)\n }\n }\n break\n\n case 'Down':\n case 'ArrowDown':\n if (e.shiftKey) {\n let { start } = this._selectBlock || {}\n let focused = this.focusedField\n if (focused) {\n let end = this.getFieldByIndex(focused.rowIndex + 1, focused.columnIndex)\n if (end) {\n this.setSelectBlock(start || focused, end)\n }\n }\n } else {\n this.setSelectBlock()\n if (e.metaKey || e.ctrlKey) {\n row = maxrow\n } else {\n row = Math.min(maxrow, row + 1)\n }\n }\n break\n\n case 'Enter':\n this.setSelectBlock()\n this.startEditTarget(row, column)\n return\n\n case 'Left':\n case 'ArrowLeft':\n case 'Backspace':\n if (e.shiftKey) {\n let { start } = this._selectBlock || {}\n let focused = this.focusedField\n if (focused && focused.columnIndex > 0) {\n this.setSelectBlock(start || focused, this.getFieldByIndex(focused.rowIndex, focused.columnIndex - 1))\n }\n } else {\n this.setSelectBlock()\n if (e.metaKey || e.ctrlKey) {\n column = 0\n } else {\n column = Math.max(0, column - 1)\n }\n }\n break\n\n case 'Right':\n case 'ArrowRight':\n if (e.shiftKey) {\n let { start } = this._selectBlock || {}\n let focused = this.focusedField\n if (focused) {\n let end = this.getFieldByIndex(focused.rowIndex, focused.columnIndex + 1, false)\n if (end) {\n this.setSelectBlock(start || focused, end)\n }\n }\n } else {\n this.setSelectBlock()\n if (e.metaKey || e.ctrlKey) {\n column = maxcolumn\n } else {\n column = Math.min(maxcolumn, column + 1)\n }\n }\n break\n\n case 'Tab':\n this.editTarget = null\n this.setSelectBlock()\n if (e.shiftKey) {\n column = Math.max(0, column - 1)\n } else {\n column = Math.min(maxcolumn, column + 1)\n }\n this.focus()\n break\n\n case 'PageUp':\n /* TODO 페이지당 레코드의 수를 계산해서 증감시켜야 한다. */\n this.setSelectBlock()\n row = Math.max(0, row - 10)\n break\n\n case 'PageDown':\n case ' ':\n this.setSelectBlock()\n row = Math.min(maxrow, row + 10)\n break\n\n case 'Esc':\n case 'Escape':\n this.setSelectBlock()\n return\n\n case 'End':\n this.setSelectBlock()\n row = maxrow\n break\n\n case 'Home':\n this.setSelectBlock()\n row = 0\n break\n\n default:\n if (e.metaKey || e.ctrlKey) {\n switch (e.key) {\n case 'c':\n const selection = window.getSelection()\n if (!selection || !selection.anchorNode || selection.type != 'Range') {\n /* \n 에디터 상태가 아닌 경우에도, selection.type != 'Range' 조건을 추가해서,\n 셀렉션이 된 상태에서는 기본 동작으로 텍스트 복사를 할 수 있도록 했다.\n 보통은, 싱글 필드가 셀렉션박스로 지정된 경우에 자체 텍스트의 일부를 복사하기 위해서 필요하다.\n */\n this.copy()\n e.preventDefault()\n }\n break\n case 'v':\n this.paste()\n break\n }\n } else if (key.length === 1) {\n this.setSelectBlock()\n this.startEditTarget(row, column)\n }\n return\n }\n }\n\n if (!this.focused || this.focused.row !== row || this.focused.column !== column) {\n this.dispatchEvent(new CustomEvent('focus-change', { bubbles: true, composed: true, detail: { row, column } }))\n }\n\n /* arrow key에 의한 scrollbar의 자동 움직임을 하지 못하도록 한다. */\n e.preventDefault()\n}\n"]}
|
package/dist/src/data-grist.d.ts
CHANGED
|
@@ -41,7 +41,7 @@ export declare class DataGrist extends LitElement implements DataConsumer {
|
|
|
41
41
|
private _resetPullToRefresh;
|
|
42
42
|
private _setPullToRefresh;
|
|
43
43
|
private _setHeadroom;
|
|
44
|
-
render(): import("lit
|
|
44
|
+
render(): import("lit").TemplateResult<1>;
|
|
45
45
|
onKeydown(e: KeyboardEvent): void;
|
|
46
46
|
get state(): string;
|
|
47
47
|
undo(): void;
|
|
@@ -12,7 +12,7 @@ export declare class DataList extends DataManipulator {
|
|
|
12
12
|
private _page;
|
|
13
13
|
firstUpdated(changes: PropertyValues<this>): void;
|
|
14
14
|
updated(changes: PropertyValues<this>): void;
|
|
15
|
-
render(): import("lit
|
|
15
|
+
render(): import("lit").TemplateResult<1>;
|
|
16
16
|
gotoTop(e: Event): void;
|
|
17
17
|
get pullToRefreshTarget(): this;
|
|
18
18
|
}
|
|
@@ -15,6 +15,6 @@ export declare class RecordPartial extends LitElement {
|
|
|
15
15
|
attributeChangedCallback(name: string, oldval: any, newval: any): void;
|
|
16
16
|
firstUpdated(): void;
|
|
17
17
|
updated(changes: PropertyValues<this>): void;
|
|
18
|
-
render(): import("lit
|
|
18
|
+
render(): import("lit").TemplateResult<1>;
|
|
19
19
|
popupRecordView(): void;
|
|
20
20
|
}
|
|
@@ -11,7 +11,7 @@ export declare class DataReportBody extends LitElement {
|
|
|
11
11
|
column: number;
|
|
12
12
|
};
|
|
13
13
|
private _focusedListener?;
|
|
14
|
-
render(): import("lit
|
|
14
|
+
render(): import("lit").TemplateResult<1>;
|
|
15
15
|
firstUpdated(): void;
|
|
16
16
|
updated(changes: PropertyValues<this>): void;
|
|
17
17
|
focus(): void;
|
|
@@ -15,7 +15,7 @@ export declare class DataReportComponent extends LitElement {
|
|
|
15
15
|
firstUpdated(): void;
|
|
16
16
|
updated(changes: PropertyValues<this>): void;
|
|
17
17
|
calculateWidths(columns: ColumnConfig[]): void;
|
|
18
|
-
render(): import("lit
|
|
18
|
+
render(): import("lit").TemplateResult<1>;
|
|
19
19
|
focus(): void;
|
|
20
20
|
get pullToRefreshTarget(): HTMLElement;
|
|
21
21
|
}
|
|
@@ -23,7 +23,7 @@ export declare class DataReport extends LitElement implements DataConsumer {
|
|
|
23
23
|
private resetPullToRefresh;
|
|
24
24
|
private setPullToRefresh;
|
|
25
25
|
firstUpdated(): Promise<void>;
|
|
26
|
-
render(): import("lit
|
|
26
|
+
render(): import("lit").TemplateResult<1>;
|
|
27
27
|
fetch(reset?: boolean): Promise<void>;
|
|
28
28
|
updated(changes: PropertyValues<this>): Promise<void>;
|
|
29
29
|
get dirtyData(): any;
|
|
@@ -2,5 +2,5 @@ import { OxGristEditor } from './ox-grist-editor.js';
|
|
|
2
2
|
export declare class OxGristEditorCheckbox extends OxGristEditor {
|
|
3
3
|
formatFromEditor(e: Event): boolean;
|
|
4
4
|
formatForEditor(value: any): any;
|
|
5
|
-
get editorTemplate(): import("lit
|
|
5
|
+
get editorTemplate(): import("lit").TemplateResult<1>;
|
|
6
6
|
}
|
|
@@ -2,5 +2,5 @@ import { OxGristEditor } from './ox-grist-editor.js';
|
|
|
2
2
|
export declare class OxGristEditorDateTime extends OxGristEditor {
|
|
3
3
|
formatForEditor(timestamp: any): string;
|
|
4
4
|
formatFromEditor(e: Event): number;
|
|
5
|
-
get editorTemplate(): import("lit
|
|
5
|
+
get editorTemplate(): import("lit").TemplateResult<1>;
|
|
6
6
|
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { OxGristEditor } from './ox-grist-editor.js';
|
|
2
2
|
export declare class OxGristEditorFile extends OxGristEditor {
|
|
3
3
|
formatFromEditor(e: Event): any;
|
|
4
|
-
get editorTemplate(): import("lit
|
|
4
|
+
get editorTemplate(): import("lit").TemplateResult<1>;
|
|
5
5
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import '@operato/input/ox-input-image.js';
|
|
2
2
|
import { OxGristEditor } from './ox-grist-editor.js';
|
|
3
3
|
export declare class OxGristEditorImage extends OxGristEditor {
|
|
4
|
-
get editorTemplate(): import("lit
|
|
4
|
+
get editorTemplate(): import("lit").TemplateResult<1>;
|
|
5
5
|
_onchange(e: Event): void;
|
|
6
6
|
formatFromEditor(e: Event): string | File;
|
|
7
7
|
}
|
|
@@ -3,5 +3,5 @@ import '@operato/input/ox-checkbox.js';
|
|
|
3
3
|
import '@operato/popup/ox-popup-list.js';
|
|
4
4
|
import { OxGristEditor } from './ox-grist-editor.js';
|
|
5
5
|
export declare class OxGristEditorMultipleSelect extends OxGristEditor {
|
|
6
|
-
get editorTemplate(): import("lit
|
|
6
|
+
get editorTemplate(): import("lit").TemplateResult<1>;
|
|
7
7
|
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { OxGristEditor } from './ox-grist-editor.js';
|
|
2
2
|
export declare class OxGristEditorNumber extends OxGristEditor {
|
|
3
3
|
formatFromEditor(e: Event): number;
|
|
4
|
-
get editorTemplate(): import("lit
|
|
4
|
+
get editorTemplate(): import("lit").TemplateResult<1>;
|
|
5
5
|
}
|